Wie deaktiviere ich sftp für einige Benutzer, aber lasse ssh aktiviert?

12

In meinem Projekt muss ich sftp für einige Benutzer deaktivieren, diese Benutzer müssen jedoch weiterhin eine Verbindung über ssh herstellen. Weiß jemand, wie man das umsetzt?

Ich habe Vorschläge zur Änderung der Datei unter gesehen /etc/ssh/sshd_config, bin mir aber nicht sicher, was ich ändern soll.

Shaobo Wang
quelle
Die einzige Möglichkeit, die ich mir vorstellen könnte, wäre, eine MLS-Richtlinie in SELinux zu verwenden und genau einzuschränken, auf welche Dateien, Verzeichnisse und Sockets eine Person zugreifen, sie ausführen usw. Ich würde dies in Kombination mit einer stark einschränkenden iptables-Richtlinie tun, die die verwendet Modul ownerfür den ausgehenden Zugriff. Dies setzt voraus, dass Sie von einem Red-Team einem Pen-Test unterzogen werden. Wenn jeder, der auf Ihr System zugreift, immer die Regeln befolgt und niemals Vorsatz hat, wäre mein Ansatz hartnäckig und übermäßig komplex.
Aaron

Antworten:

7

Im Allgemeinen ist dies aus Gründen, die andere aufgelistet haben, eine schlechte Sicherheitspraxis. Ich denke jedoch, der Sinn Ihrer Aufgabe ist es, Ihnen beizubringen, dass Sie bedingte Konfigurationsabschnitte haben können, die auf verschiedenen Kriterien basieren.

Die Möglichkeit dazu besteht in der Verwendung eines Matchbedingten Blocks *.

Match User bob
Subsystem   sftp  /bin/false

Siehe sshd_config(5)unter dem MatchAbschnitt für weitere Informationen und passende auf Group.

* Es gibt mehr als einen Weg, dies zu tun.

Bahamat
quelle
7
Es funktioniert nicht für mich. Fehler: Die
Anweisung
Falsche Antwort, da das Subsystem im Match-Block nicht zulässig ist
mikep
6

Das ergibt keinen Sinn, es ist Sicherheit durch nutzlose Dunkelheit. Jeder Benutzer, der SSH kann, kann alle Dateien, die er lesen kann, über die SSH-Sitzung übertragen. Sie können auch schreiben, wenn Sie dazu berechtigt sind.

Sie können beispielsweise / etc / passwd über ssh mit der folgenden Methode herunterladen (keine scp / sftp-Sitzung erforderlich): ssh [email protected] "cat / etc / passwd"> passwdcopy

Wenn Sie es über SSH auf Ihrem Bildschirm sehen können, können Sie es einfach als Datei kopieren.

Dies ist nur dann sinnvoll, wenn Sie eine benutzerdefinierte eingeschränkte Shell haben, die eine Sicherheitsrichtlinie erzwingt.

Das Gegenteil davon ist jedoch sinnvoll (Deaktivieren der ssh-Shell, aber Deaktivieren von scp / sftp), da Sie keine willkürlichen Befehle über sftp / scp ausführen können, die Sie über eine ssh-Shell ausführen können.

PS: Ich gehe davon aus, dass die SSH-Shell, die Sie gewähren, eine Standard-Shell ist, die eine beliebige Ausführung ermöglicht. Wenn dies nicht der Fall ist , lesen Sie Folgendes : So deaktivieren Sie das SFTP-Subsystem für einen bestimmten Benutzer oder eine bestimmte Gruppe? und werfen Sie einen Blick auf die Subsystem-Konfigurationsoption von sshd_config.

Nathan
quelle
4
Match Group nosft
Subsystem   sftp  /bin/false

Ich bevorzuge es, dafür eine Gruppe zu verwenden.

Dies ist in Kombination mit Benutzern mit eingeschränkten Shells nützlich. Manchmal erteile ich einem Client ssh-Zugriff, damit er auf einen SQL-Dump seiner Datenbank zugreifen kann, indem er seine Shell auf ein Skript setzt, das seine Daten speichert. Es scheint auch eine kluge Idee zu sein, sie von scp abzuschneiden. Sie haben keinen Zugriff auf die Ausführung cat, um eine Datei über ssh zu übertragen.

Singlow
quelle
3
Directive 'Subsystem' is not allowed within a Match block
Patryk
Falsche Antwort, da das Subsystem im Match-Block nicht zulässig ist
mikep
4

Es ist möglich, SFTP global zu aktivieren und SFTP nur für einige Benutzer zu deaktivieren.

Dies funktioniert nicht, wenn Ihr Benutzer eine reguläre Shell-Eingabeaufforderung erhalten soll. Es macht auch keinen Sinn, da Sie die meisten Dinge umgehen könnten, wenn Sie Shell-Zugriff haben. Dies funktioniert nur, wenn Sie nur Zugriff auf ein bestimmtes Programm gewähren möchten.

Ich persönlich benötige dies, weil ich über SSH Zugriff auf einige Git-Repositorys gewähren möchte und ich nicht benötigte Systeme gerne deaktiviere. In diesem Fall wird SFTP nicht benötigt.

Passend

Um eine Gruppe von Benutzern abzugleichen, können Sie SSH mit dem MatchSchlüsselwort konfigurieren . Aus dem sshd_config(5)Handbuch:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

Einige Beispiele:

  • Match User eva Entspricht dem Benutzer "eva"
  • Match User stephen,maria Entspricht den Benutzern "stephen" und "maria"
  • Match Group wheel,adams,simpsons Entspricht den Gruppen "Wheel", "Adams", "Simpsons"

Wenn Sie weitere Informationen wünschen, enthält das sshd_config(5)Handbuch zahlreiche Informationen .

Befehl erzwungen

Normalerweise erhalten Sie die Anmeldeshell des Benutzers, wenn Sie eine Verbindung über SSH herstellen. SSH kann jedoch so konfiguriert werden, dass ein bestimmter Befehl erzwungen wird. Der Befehl wird für jede SSH-Verbindung, einschließlich SFTP, erzwungen, sodass Sie möglicherweise die Option haben, den gewünschten Befehl zu erzwingen.

Der zu erzwingende Befehl kann mit dem ForceCommandSchlüsselwort konfiguriert werden . Aus dem sshd_config(5)Handbuch:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

So können Sie den eingeschränkten Befehl erzwingen, den Sie verwenden möchten ForceCommand <your command>. Beispielsweise:

Match User kim
        ForceCommand echo 'successful login man, congrats'

Beispiel

In meinem Fall, in dem ich Git-Zugriff gewähren möchte, muss der Benutzer nur Zugriff darauf haben git-shell. In diesem Abschnitt wird SFTP für meine Git-Benutzer zusammen mit einigen Sicherheitsoptionen deaktiviert:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no
aude
quelle
1
Dies beantwortet nicht die Frage des OP, aber es war sehr hilfreich für mich, das zu erreichen, was ich in meinem eigenen Anwendungsfall erreichen möchte
Kidburla,
Ich stimme nicht zu. Die Frage von OP lautet: "Wie deaktiviere ich SFTP für einige Benutzer, aber lasse SSH aktiviert?". In dieser Antwort wird eine Möglichkeit erläutert, dies zu tun. Schön, dass Sie es trotzdem hilfreich fanden!
aude
Nach Ihren eigenen Angaben funktioniert es "nicht, wenn Sie möchten, dass Ihr Benutzer eine reguläre Shell-Eingabeaufforderung erhält". Dies entspricht also nicht der Anforderung des OP, "ssh aktiviert zu halten"
Kidburla,
Das ist ein guter Punkt. Ich glaube, ich habe mich mit dieser Lösung abgefunden, weil "es keinen Sinn macht, da Sie die meisten Dinge umgehen könnten, wenn Sie Shell-Zugriff haben." Aber ich habe keinen Weg gefunden, um genau das zu erreichen, was OP verlangt, dem stimme ich jetzt zu.
aude
Hier ist eine vollständigere Version dieser Antwort: serverfault.com/a/817482
aude
1
Match User bob
MaxSessions 0

Getestet und lauffähig unter CentOS 6.6. Beachten Sie, dass Subsystem mit Match mindestens auf neueren CentOS-Versionen nicht zulässig ist. Die Manpage für sshd_config listet die eingeschränkten Schlüsselwörter auf, die mit der Übereinstimmungsbedingung zulässig sind.

Jeff
quelle
0

Sie können scponly anschauen , um das Gegenteil zu tun. Erlauben Sie nur scp / sftp, aber keinen Shell-Zugriff.

Ich stimme @ Nathan oben zu, das macht nicht viel Sinn. Wenn Sie fertig sind, versuchen Sie, Ihre / etc / ssh / sshd_config-Datei zu bearbeiten und die folgende Zeile zu entfernen / auskommentieren:

Subsystem sftp / usr / libexec / openssh / sftp-server

dmourati
quelle
0

Gib kein Home-Verzeichnis für den Benutzer an

usermod username -d /bin/false

Ändern Sie das Subsystem sftp / usr / libexec / openssh / sftp-server in der Datei / etc / ssh / sshd_config in das Subsystem sftp / dev / null / usr / libexec / openssh / sftp-server

Starten Sie dann das ssh neu

service ssh restart

es funktioniert bei mir, debian.

Yusufmm
quelle
-2

In der ~/authorized_keyKonfiguration den Benutzerschlüssel wie folgt:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
Kazek
quelle