Ich habe einen kleinen SSH-Server und möchte ein Skript schreiben, das jedes Mal ausgeführt wird, wenn sich jemand über SSH anmeldet.
Wie würde ich das machen?
Ich möchte, dass das Skript jedes Mal ausgeführt wird, wenn sich JEDER anmeldet, und ich muss Zugriff auf mindestens den Benutzernamen der Person haben, die sich angemeldet hat, und auf die IP-Adresse, von der aus sich die Person angemeldet hat.
Ich habe darüber nachgedacht /etc/bash.bashrc
, aber ist das eine gute Lösung? Gibt es zum Beispiel eine Möglichkeit, wie ein Benutzer seine Verwendung deaktivieren und damit mein Skript deaktivieren kann? Wenn ja, welche anderen Optionen habe ich?
Vielen Dank.
Antworten:
Der zu verwendende Mechanismus hängt von Ihren Zielen ab.
Wenn Sie Ihren Benutzern etwas Bequemes oder Freundliches bieten möchten,
/etc/profile
ist dies angemessen, wenn alle Benutzer dieselbe Shell verwenden. Wenn Sie möchten, dass die Befehle nur ausgeführt werden, wenn Sie sich über anmeldenssh
, platzieren Sie Befehle in/etc/ssh/sshrc
. (Wenn es Ihnen nichts ausmacht, dass Benutzer die Befehle mit ihrer eigenen~/.ssh/rc
Datei überschreiben .)Wenn Sie einen Benutzer zwingen möchten , ein Programm und nur ein Programm auszuführen , ist die
ForceCommand
von DigitalRoss beschriebene Option ein guter Ansatz. (Ich persönlich würde den Benutzer weiter auf ein obligatorisches Zugriffskontrollsystem wie AppArmor , SELinux , TOMOYO oder SMACK beschränken , um sicherzustellen, dass das Programm einem Benutzer nicht die Flucht ermöglicht. Ich habe zehn Jahre lang an AppArmor gearbeitet Werkzeug, das ich zuerst auswählen würde, aber die anderen sind gute Werkzeuge, die von exzellenten Programmierern geschrieben wurden.)Wenn Sie nur möchten, dass ein Programm ausgeführt wird und den Benutzer in keiner Weise stört , ist es am besten, das
pam_exec(8)
Modul zu verwenden, das nicht umgangen werden kann, unabhängig von der Shell funktioniert und eine einfache Möglichkeit bietet, als Benutzer oder als Benutzer ausgeführt zu werden Konto des Programms, das die Autorisierung durchführt. Die Manpage gibt folgendes Beispiel:Dies könnte laufen auf verlängert werden
auth
,account
,password
undsession
Aktionen; Dies ist wahrscheinlichsession
am besten für die Ausführung beim Anmelden geeignet. Fügen Sie einfach eine Zeile wie folgt hinzu:zu Ihrer
/etc/pam.d/sshd
Steuerdatei.quelle
pam_exec
Modul genau das ist, wonach ich suche. Vielen Dank!Neuere Versionen von OpenSSH verfügen über eine Serverfunktion namens ForceCommand , mit der ein Skript anstelle der vom Benutzer beabsichtigten Operation (scp, ssh, ...) gesteuert werden kann. Dem Skript wird der ursprüngliche Befehl übergeben, sodass Sie ihn wahrscheinlich verketten können, nachdem Sie alles getan haben, was Sie tun müssen.
Von sshd_config (5):
Ich habe dies einmal verwendet, um scp zu überschreiben und einen sicheren Edelstein-Upload bereitzustellen, ohne jedem Benutzer, der zum Hochladen von Edelsteinen berechtigt ist, einen interaktiven Zugriff zu gewähren, den er nicht benötigte oder wollte.
quelle
Eine Möglichkeit wäre, syslog-ng als Syslog-Daemon zu verwenden und es so zu konfigurieren, dass jedes Mal, wenn ein bestimmter Protokolleintrag (z. B. eine erfolgreiche SSH-Anmeldung) übereinstimmt, ein Skripthintergrund ausgeführt wird.
quelle
Überprüfen Sie dies heraus:
Ich glaube nicht, dass es eine Möglichkeit gibt, dies vom Laufen abzuhalten. Kann jemand anderes dies überprüfen?
quelle
/etc/profile
oder~/.profile
) hängt von der Shell des Benutzers ab, nur ein bisschen weniger alsbashrc
. Wenn Ihre Benutzer eine Bash oder ähnliches verwenden, ist dies in Ordnung.