Ist es möglich, den Quellbenutzer eines SSH-Logins zu protokollieren und / oder einzuschränken?
Zum Beispiel:
user1@server1
meldet sich an server2
als user2
.
Auch user3@server1
meldet sich an server2
als user2
.
Mit "Quellbenutzer" meine ich user1
oder user3
darüber.
Ich möchte nachverfolgen können, von welcher Sitzung user1@server1
welche Sitzung initiiert wurde user3@server1
.
Der Zweck hierfür ist, dass mehrere Benutzer das user2
Konto verwenden, um z. B. Prozesse auf Server2 zu verwalten. (Mir ist klar, dass dies Auswirkungen auf die Sicherheit hat, aber ein Teil dieser Frage besteht darin, das Ausmaß dieser Auswirkungen zu bewerten.)
Wie in der Manpage von erwähnt sshd_config(5)
, sshd
kann der Zugriff auf einen bestimmten Benutzer mit der AllowUsers
Option config in eingeschränkt werden sshd_config
.
AllowUsers
Diesem Schlüsselwort kann eine Liste von Benutzernamensmustern folgen, die durch Leerzeichen getrennt sind. Wenn angegeben, ist die Anmeldung nur für Benutzernamen zulässig, die mit einem der Muster übereinstimmen. Es sind nur Benutzernamen gültig. Eine numerische Benutzer-ID wird nicht erkannt. Standardmäßig ist die Anmeldung für alle Benutzer zulässig. Wenn das Muster die Form USER @ HOST hat, werden USER und HOST separat geprüft, um die Anmeldung auf bestimmte Benutzer von bestimmten Hosts zu beschränken. Die Anweisungen zum Zulassen / Verweigern werden in der folgenden Reihenfolge verarbeitet: DenyUsers, AllowUsers, DenyGroup und schließlich AllowGroups.
Die USER
in der obigen Manpage angegebene Beschreibung scheint jedoch den Benutzernamen auf dem TARGET-Computer zu beschreiben ( server2
im Beispiel).
Ich habe dies getestet, indem ich die Option AllowUsers auf gesetzt habe user2@server1
und festgestellt, dass ich mich immer noch von user1@server1
-> aus anmelden kann user2@server2
.
Außerdem scheint das Protokoll keinen Quellbenutzer anzuzeigen.
Dies ist die Anmeldung /var/log/secure
an RHEL6, nachdem Sie sich von user1@server1
-> angemeldet habenuser2@server2
17. November 16:14:59 server2 sshd [28349]: Setzen Sie / proc / self / oom_score_adj auf 0
17. November 16:14:59 server2 sshd [28349]: Verbindung von 10.1.2.3 Port 36508
17. November 16:14:59 server2 sshd [28349]: Passenden RSA-Schlüssel gefunden: aa: bb: cc: dd: ee: ff: gg: ..
17. November 16:14:59 server2 sshd [28350]: Publickey für Benutzer2 von 10.1.2.3 Port 36508 ssh2 verschoben
17. November 16:14:59 server2 sshd [28349]: Passenden RSA-Schlüssel gefunden: aa: bb: cc: dd: ee: ff: gg: ..
17. November 16:14:59 server2 sshd [28349]: Akzeptierte publickey für user2 von 10.1.2.3 Port 36508 ssh2
17. November 16:14:59 server2 sshd [28349]: pam_unix (sshd: session): Session für Benutzer user2 geöffnet von (uid = 0)
17. November 16:14:59 server2 sshd [28349]: Benutzer Kind ist auf PID 28351
Also, gibt es einen Weg zu
(a) Ändern Sie die Protokollierung oder das Verhalten von sshd
so, dass der Quellbenutzer, der die SSH-Verbindung herstellt, nachverfolgt wird.
(b) sshd einschränken, um Verbindungen basierend auf dem Quellbenutzer einzuschränken?
AUTHORIZED_KEYS FILE FORMAT
und sehen Sie, obcommand
oder obenvironment
es Ihnen helfen könnte.Antworten:
Die kurze Antwort lautet "Nein". Der Server akzeptiert aus serverseitiger Sicht alle gültigen Anmeldungen.
Es gibt jedoch einige mögliche Problemumgehungen, um das zu erreichen, was Sie möchten. Testen Sie, ob das Folgende Ihren Anforderungen entspricht.
Beachten Sie, dass dies für "durchschnittliche" Benutzer ausreichend sein kann und erfordert, dass Sie auch die Clients steuern. Erfahrene Benutzer finden eine Möglichkeit, die
CLIENTUSER
unten verwendete Variable zu fälschen .Wenn Sie die
AcceptEnv
Direktive in verwenden/etc/ssh/sshd_config
, können Sie beispielsweise eine Variable namens CLIENTUSER akzeptieren:Der nächste Schritt besteht darin, den Login-Befehl des Benutzers zu einer Login-Shell wie folgt zu zwingen:
Starten Sie Ihren sshd-Dienst neu und fügen Sie Folgendes zu / etc / profile hinzu
Mit dem obigen Befehl wird jeder Client abgemeldet, der die
CLIENTUSER
Variable nicht sendet oder dieCLIENTUSER
Variable mit einem anderen Wert als sendetuser3
.Sie können dies mit der folgenden Clientbefehlszeile testen:
Wie Sie sehen können,
CLIENTUSER
kann das einfach über die Kommandozeile gefälscht werden. Um dies zu verhindern, können Sie dem Client `/ etc / profile Folgendes hinzufügen :Wenn der Benutzer versucht, den Wert der
CLIENTUSER
Variablen zu ändern, wird der folgende Fehler angezeigt:quelle
ksh
eine neuebash
Instanz oder eine neue Instanz verwendet habeserver1
.