Benutzerdefinierte OpenSsh-Shell

8

Die Umgebung ist Ubuntu Server 12.04

Ich möchte einen Benutzer auf einem Server erstellen, der nur in eine Shell ssh kann, die tail -f in einer Protokolldatei ausführt und die Sitzung schließt, sobald das Programm endet (Strg + c).

Gibt es einen Weg, dies zu erreichen?

Ein blaues
quelle

Antworten:

8

Um pedantisch zu sein, ist es nicht Strg + C, sondern SIGHUP(näher an Strg + D), das die App beendet.

Sie können im Wesentlichen alles, was Sie wollen, in die Shell des Benutzers einfügen /etc/passwd. Ersetzen Sie einfach die Standardeinstellung in der Passwd-Zeile des Benutzers (wahrscheinlich /bin/bash) durch ein anderes Programm. Dieses Programm kann ein Skript sein, z. B. /usr/bin/tail_log_filemit diesen Inhalten, das root: root gehört, mit umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

Sie können einen anderen Interpreter als rbash verwenden. In solchen Fällen ist es jedoch ratsam, eine eingeschränkte Shell zu verwenden.

Um extrem pedantisch zu sein, sollten Sie den Pfad des Skripts hinzufügen /etc/shells, aber ich finde normalerweise, dass es trotzdem funktioniert.

Beachten Sie auch, dass der Benutzer das Skript möglicherweise in den Hintergrund stellen oder einige Optionen ( ssh username@host bash) verwenden und dennoch eine Shell erwerben kann. Wenn Sie den Benutzer auf diese Weise einschränken möchten, sind gute Dateisystemberechtigungen die einzige echte Lösung.

Falcon Momot
quelle
funktioniert super, vielen Dank für Ihre schnelle und genaue Antwort.
Ablue
2
Der einzige Grund, warum Sie etwas hinzufügen möchten, /etc/shellsbesteht darin, Benutzern, die etwas anderes als Shell haben, zu ermöglichen, ihre Shell darauf einzustellen. Der Superuser ( root) kann jederzeit die Shell eines beliebigen Benutzers ändern.
Jonathan Callen
1
Um hinzuzufügen, was @JonathanCallen gesagt hat: Es ist tatsächlich ein Sicherheitsleck, dieses Skript hinzuzufügen, /etc/shellsda dies dem Benutzer ermöglichen würde, seine Shell zu ändern (da /usr/bin/tail_log_filedies dann als "uneingeschränkte Shell" betrachtet würde)!
Joachim Sauer
Ok, ich werde entfernen.
Ablue
1
Das ist viel zu kompliziert; erzwungene Befehle (siehe die Antwort von @tink) sind der Weg, dies zu tun.
Stellen Sie Monica wieder her - M. Schröder
10

ssh erzwungene Befehle fallen Ihnen ein, wenn Sie gerne eine schlüsselpaarbasierte Authentifizierung verwenden.

man authorized_keys
/command=
basteln
quelle
2

Sie können ssh so konfigurieren, dass ein Befehl Ihrer Wahl ausgeführt wird, wenn Sie sich mit der Authentifizierung mit öffentlichem Schlüssel anmelden. Generieren Sie dazu ein Schlüsselpaar:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubenthält eine Zeile, die zum Einfügen in die Benutzerdatei geeignet ist ~/.ssh/authorized_keys:

ssh-rsa AAAA...UDz47Nl djs@sardinia

Sie können diesem jedoch einen Befehl hinzufügen, und ssh führt diesen Befehl aus, wenn Sie sich mit dem Schlüssel anmelden:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Dann kann der Benutzer mit zur Maschine ssh ssh -i restricted-key.

Dan
quelle