Wie kann man alle außer einer bestimmten Gruppe in SSH einschränken?

8

Ich möchte alle Benutzer auf einem Server so einschränken, dass sie nur SFTP verwenden können, während die Mitglieder einer Administratorgruppe vollen SSH-Zugriff haben sollten.

Ich habe festgestellt, dass es möglich ist, die Mitglieder einer Gruppe mit Match Groupund einzuschränken ForceCommand. Aber ich fand keine logische Verneinung. Also habe ich versucht, es umgekehrt zu konstruieren:

# SFTP only, full access only for admin group
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Match Group admin
    X11Forwarding yes
    AllowTcpForwarding yes
    ForceCommand /usr/local/sbin/ssh-allowcmd.sh

und ein Skript erstellt ssh-allowcmd.sh, das entweder den angegebenen Befehl oder den /bin/bashinteraktiven Zugriff ausführt .

Gibt es eine bessere Lösung?

Robcast
quelle

Antworten:

18

Wenn Sie OpenSSH 5.1 oder höher verwenden, wird die Match Group-Negation unterstützt .

Angenommen, die Standardeinstellungen sind für die Administratorgruppe in Ordnung, ändern Sie einfach alle anderen:

Match Group *,!admin
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

Es gibt wirklich keinen Grund, sich auf Shells von Drittanbietern zu verlassen, um diese Art von Arbeit mit den neuesten OpenSSH-Versionen zu erledigen.

Dan Carley
quelle
Ja, genau das habe ich gesucht. Wenn es nur in der Dokumentation wäre.
Robcast
Dies wird durch den Verweis auf den Abschnitt PATTERNS von ssh_config (5) angedeutet. Es wäre noch ein bisschen einfacher, wenn es nicht den vorhergehenden Platzhalter erfordern würde. Obwohl sich diese Lösung als einfacher herausstellt, wünschte ich mir, es gäbe auch ein noneArgument dafür ForceCommand.
Dan Carley
3

Ich verwende MySecureShell, um Benutzer auf reine SFTP-Verbindungen zu beschränken. Ich mache dies für bestimmte Benutzer, aber ich bin sicher, dass Sie es so konfigurieren können, dass es standardmäßig begrenzt wird, sodass die Ausnahme darin besteht, dass Sie auch Shell-Zugriff gewähren.

http://mysecureshell.sourceforge.net/

J. Zimmerman
quelle
2

Was Sie wollen, ist scponly . Wenn Sie Debian / Ubuntu ausführen, befindet es sich in den Repos. Nach der Installation gehen Sie einfach wie folgt vor:

$ sudo chsh -s /usr/bin/scponly username

Sie können damit auch die Benutzer chrooten.

Alternativ können Sie Folgendes tun:

$ usermod -s /usr/lib/sftp-server username
$ echo '/usr/lib/sftp-server' >> /etc/shells

Die erste Zeile beschränkt die Shell des Benutzers auf sftp. Die zweite Zeile besteht darin, sftp-server zu einer gültigen Shell zu machen.

Da Sie das von Ihnen verwendete Betriebssystem nicht angegeben haben, kann ich die Befehle nicht an Ihre spezifischen Anforderungen anpassen.

Swoogan
quelle
Ich habe es nicht angegeben, aber ich kann die Shells der Benutzer nicht ändern, da diese Informationen von LDAP stammen und dort eine echte Shell benötigt wird.
Robcast
Seit OpenSSH 5.1 ist die integrierte Möglichkeit von ForceCommand sicherer als scponly.
Robcast
Dies löst auch nicht das Problem, standardmäßig einzuschränken und eine einzelne Gruppe zuzulassen.
Robcast
0

Wenn die Benutzer keinen Zugriff auf dieselben Dateien benötigen, sondern keinen zweiten Server nur für SFTP einrichten möchten, würde ich stattdessen die Virtualisierung empfehlen. Sie können OpenVZ installieren und sehr leichte VMs einrichten, um dies zu handhaben.

Wenn dies Ihrer Situation entspricht, werden Sie wahrscheinlich feststellen, dass die OpenVZ-Installation im Laufe der Zeit auch für andere Dinge wie diese nützlich sein wird.

Kyle Brandt
quelle