Ich möchte einen Benutzer erstellen, der nur eines tun kann:Per ssh ein Skript angeben (und Befehlszeilenargumente für das Skript), das sich in einem bestimmten Ordner befindet
(für die Zwecke dieser Frage nennen wir es /local/remote_only_scripts/foo
) und lassen Sie dieses Skript ausführen und seine Ausgabe zurückgeben.
Zur Verdeutlichung einige Beispiele für Dinge, die der Benutzer nicht tun soll:
- Melden Sie sich lokal beim Konto an.
Die Anmeldeanwendung ist/bin/login
. Es ist kein Skript in/local/remote_only_scripts/foo
Ordner, sollte also nicht vom Benutzer aufgerufen werden. - Melden Sie sich aus der Ferne beim Konto an. Wieder Login ( heißt das per ssh? ) ist kein Skript im entsprechenden Ordner.
- Listen Sie den Inhalt des Verzeichnisses auf. ls befindet sich in
/bin/ls
. Es ist kein Skript im entsprechenden Verzeichnis. - Bearbeiten Sie eine Datei in diesem Verzeichnis. emacs, vi, gedit die meisten anderen Editoren sind keine Skripte in diesem Verzeichnis.
- Den Inhalt einer Datei in diesem Verzeichnis anzeigen.
- Eine Datei in diesem Verzeichnis ausführen, für die er keine Berechtigung zum Ausführen hat.
Beachten Sie, dass dies Beispiele sind Es gibt viele andere Aktionen, die der Benutzer nicht ausführen soll. Wenn Sie eine Aktion in Betracht ziehen, fragen Sie „wird dies von einem Skript in /local/remote_only_scripts/foo
ausgeführt ?” Wenn die Antwort nein ist, sollte der Benutzer dies nicht tun können. Wenn die Antwort Ja lautet, sollte der Benutzer dazu in der Lage sein.
PS:Lassen Sie mich klarstellen, was ich mit „Hinzufügen eines Benutzers“ meine. Ich meine nicht das Hinzufügen eines Benutzers zu einem SSH-Subsystem. Vielmehr meine ich das Hinzufügen eines Benutzers zum Computersystem. So habe ich zum Beispiel ein System, auf dem Debian Stable läuft, nenne es mit seiner Adresse www.hg.bar.com. Ich möchte einen Benutzer hinzufügen (über kuser, users-admin oder useradd oder auf ähnliche Weise), nenne ihn hg_guest. hg_guest kann sich nicht lokal anmelden oder irgendetwas in der obigen Liste tun. hg_guest kann lediglich Skripte „remote“ ausführen. Ich sagte, er sollte in der Lage sein, dies über ssh zu tun, aber wenn ich jetzt darüber nachdenke, könnte es ihm vielleicht erlauben, ssh zu verwenden, um sich lokal anzumelden, also könnte ein anderer Mechanismus erforderlich sein.
Akzeptierte Antwort:
Es gibt einen Befehl Option in der Datei "authorized_keys". Diese Option scheint genau das zu tun, was Sie wollen.
Verwandte:Linux – Datenwiederherstellung von einem versehentlichen Format auf einer ext4-Partition?Beachten Sie, dass es sich nicht um eine Chroot oder eine eingeschränkte Shell handelt. Es erlaubt, nur diese Befehle über ssh auszuführen. Bei Ihrem Beispiel wäre es :
ssh somehost /local/remote_only_scripts/foo
Für diese Datei "authorized_keys":
command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key...
Es gibt viele Möglichkeiten, wenn Sie nicht möchten, dass sich Ihr Benutzer lokal anmelden kann. Sie können entweder:
- setzen Sie einfach seine Shell auf /bin/false (Vielleicht brauchen Sie /bin/true da ssh eine gültige Anmeldung benötigt)
- sperrt sein Passwort, siehe
passwd -l
BEARBEITEN :weitere Einschränkungsoptionen hinzugefügt und verdeutlicht, wie Sie den lokalen Zugriff entfernen.