Beschränkung der SSH-Benutzer in LDAP auf nur einen Befehl in einer SSH-Bastion

Beschränkung der SSH-Benutzer in LDAP auf nur einen Befehl in einer SSH-Bastion

Ich habe ein privates Netzwerk aus Centos 7-Servern. Jeder der Server ist nur über eine SSH-Bastion erreichbar. Darüber hinaus verwenden alle diese Server SSSD, um die Schlüssel von SSH-Benutzern anhand eines LDAP-Verzeichnisses zu authentifizieren.

Da Schlüssel anhand eines LDAP-Verzeichnisses authentifiziert werden, gibt es keine Standarddatei authorized_keys. Statt einer Standarddatei leitet authorized_keysdie Binärdatei /usr/bin/sss_ssh_authorizedkeyseine Abfrage an LDAP weiter, um sie sshdals Datei zu formatieren – aber nicht tatsächlich als Datei. Daher ist es meines Wissens nicht möglich authorized_keys, Benutzer auf bestimmte Befehle zu beschränken, indem RSA-Schlüssel an Einträge gebunden werden .commands=" ... "

SSH-Benutzer können sich mit dem folgenden Befehl über die Bastion bei ihren Arbeitsstationen authentifizieren:

ssh -A -l [email protected] joes.workstation.ip -o ProxyCommand="ssh -l [email protected] -q bastion.ip nc joes.workstation.ip %p"

Leider können sie sich auch per SSH mit einer Sitzung auf dem Bastion-Server verbinden, was ich ihnen jedoch nicht zumuten möchte.

Gibt es eine Möglichkeit, meine aktuellen Tools (SSSD, SSHD, ein LDAP-Verzeichnis) zu verwenden, um SSH-Benutzer durch die Bastion zu lassen, aber nichthineindie Bastion?

Antwort1

Die Version, mit sssdder Sie Konfigurationen auf Gruppenbasis festlegen können, war noch in der Entwicklung, als ich auf dieses Problem stieß.

Ich habe schließlich einen ForceCommandEintrag zu meiner sshd_config„Unterrichtlinie“ Matchsowie eine AcceptEnvRichtlinie hinzugefügt:

Match Group [email protected]
  AcceptEnv SomeVariable
  AcceptEnv SomeOtherVariable
  ForceCommand /path/to/some/script/I/wrote

Dann verwende ich im Shell-Skript die vom SSH-Client übergebenen Variablen, um eine Aktion auszuführen.

Wenn der Client beispielsweise Folgendes aufruft:

$ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server

Das Skript hat Zugriff auf eine Umgebungsvariable SomeVariable. Greifen Sie mit einer beliebigen Sprache darauf zu und verwenden Sie sie, um eine Aktion auszuführen.

Stellen Sie sicher, dass Ihr Skript nicht in einer Shell-Sitzung auf der Bastion beendet wird.

verwandte Informationen