Ich möchte einen Benutzer erstellen, der nur eines kann: Über ssh ein Skript (und Befehlszeilenargumente für das Skript) angeben, das sich in einem bestimmten Ordner befindet (für die Zwecke dieser Frage nennen wir es /local/remote_only_scripts/foo
) und dieses Skript ausführen lassen und es wird ausgegeben.
Um einige Beispiele zu verdeutlichen, möchte ich nicht, dass der Benutzer in der Lage ist, Folgendes zu tun:
- Melden Sie sich lokal beim Konto an. Die Login-Anwendung ist
/bin/login
. Es ist kein Skript im/local/remote_only_scripts/foo
Ordner und sollte vom Benutzer nicht aufgerufen werden. - Melden Sie sich remote beim Konto an. Auch hier ist login (heißt das ssh?) Kein Skript im entsprechenden Ordner.
- Listen Sie den Inhalt des Verzeichnisses auf. ls ist 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.
- Zeigen Sie den Inhalt einer Datei in diesem Verzeichnis an.
- Führen Sie eine Datei in diesem Verzeichnis aus, zu deren Ausführung er nicht berechtigt ist.
Beachten Sie, dass dies Beispiele für viele andere Aktionen sind, die der Benutzer nicht ausführen kann. Fragen Sie bei der Prüfung einer Aktion, ob dies von einem Skript in ausgeführt wird /local/remote_only_scripts/foo
. Wenn die Antwort nein ist, sollte der Benutzer nicht in der Lage sein, dies zu tun. Wenn die Antwort Ja lautet, sollte der Benutzer in der Lage sein, dies zu tun.
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. Eher meine ich das Hinzufügen eines Benutzers zum Computersystem. Zum Beispiel habe ich ein System, auf dem debian stable läuft. Nenne es unter der Adresse www.hg.bar.com. Ich möchte einen Benutzer hinzufügen (über kuser, users-admin oder useradd oder auf ähnliche Weise) und ihn hg_guest nennen. hg_guest kann sich nicht lokal anmelden oder eine der in der obigen Liste aufgeführten Aktionen ausführen. Alles was hg_guest tun kann, ist Skripte "remote" auszuführen. Ich sagte, er sollte dies über ssh tun können, aber wenn er jetzt darüber nachdenkt, kann er sich möglicherweise mit ssh lokal anmelden, sodass möglicherweise ein anderer Mechanismus erforderlich ist.
quelle
command=
werden die Optionenno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
benötigt, um das Konto wirklich einzuschränken.Versuchen Sie dies als Login-Shell für den Benutzer:
Sie werden dies wahrscheinlich auch
authorized_keys
explizit in der Datei haben wollen, wie in Corens Antwort; aber ersetze das '... / foo; mit dem programm hier. Das wird verhindern , dass Befehle von SSH wiesftp
,scp
undssh hostname command
.quelle
In der Off-Chance müssen sie nur auf ein Skript zugreifen, das funktioniert wirklich gut für mich. Fügen Sie den Benutzer hinzu und ändern Sie seine Standard-Shell in den Pfad des Skripts. Wenn sie sich über ssh verbinden, wird das Skript ausgeführt und die Sitzung geschlossen.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: x: 2002: 100 :: / home / hg_guest: /local/remote_only_scripts/foo/script.sh
quelle