Beschränken eines SSH / SCP / SFTP-Benutzers auf ein Verzeichnis

36

Gibt es eine einfache Möglichkeit, einen SCP / SFTP-Benutzer auf ein Verzeichnis zu beschränken? Alle Methoden, auf die ich gestoßen bin, erfordern, dass ich ein Chroot-Gefängnis durch Kopieren von Binärdateien einrichte, aber ich denke nicht, dass dies notwendig sein sollte.

phunehehe
quelle

Antworten:

29

SSH Unterstützt das native Chrooten eines SFTP-Benutzers. Sie müssen nur versorgen

ChrootDirectory

Starten Sie sshd in Ihrer sshd-Konfigurationsdatei neu.

Wenn Sie nur SFTP verwenden, müssen Sie nichts weiter tun. Leider funktioniert das bei scp nicht. Für die interaktive Shell müssen Sie Binärdateien und / dev-Knoten in die Chroot kopieren.

Eine Beispielkonfiguration für nur einen Benutzer, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Ein paar Dinge, die Sie in der Manpage sshd_config beachten sollten:

    Alle Komponenten des Pfadnamens müssen Root-Verzeichnisse sein, bei denen es sich nicht um solche handelt
    von jedem anderen Benutzer oder jeder anderen Gruppe beschreibbar. Nach der Chroot ändert sshd (8) das
    Arbeitsverzeichnis zum Ausgangsverzeichnis des Benutzers.

Suchen Sie in man sshd_config nach ChrootDirectory, um weitere Informationen zu erhalten.

gabe.
quelle
2
Beachten Sie, dass sich der Teil, der mit "Match User testuser" beginnt, am Ende der Datei befinden muss, da er nur dann Konfigurationszeilen enthält, wenn der Benutzer ab diesem Zeitpunkt "testuser" ist.
Magnus
1
Ist es auch möglich, nur für das SFTP-Protokoll zu chrooten, aber normale SCP-Verbindungen zuzulassen?
Lanoxx
1
Auf meinem Ubuntu 14.04-Rechner war es auch notwendig, die Subsystem sftp /usr/lib/openssh/sftp-serverZeile zu ändernSubsystem sftp internal-sftp -f AUTH -l VERBOSE
23.09.15
@Magnus oder bis zu einem anderen MatchAbschnitt.
Roaima
12

Eine Chroot ist eine relativ einfache Methode. Da das Betriebssystem bereits über diese Sicherheitsfunktion verfügt, versuchen Daemon-Writer in der Regel nicht, sie erneut zu implementieren.

Rssh enthält eine Anleitung zum Einrichten eines Chroot-Gefängnisses. Es ist in der CHROOTDatei in der Quelldistribution. Kurz gesagt, müssen Sie Folgendes haben:

  • Ein paar Binärdateien, von der Wurzel kopiert: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Die Bibliotheken ( {/usr,}/lib/lib*.so.[0-9]), die sie verwenden, werden ebenfalls kopiert
  • A /etc/passwd(möglicherweise keine Kopie, sondern vom Master abgeleitet)
  • Einige Geräte: /dev/null, /dev/ttysowie eine /dev/logBuchse für die Protokollierung (und Sie müssen Ihrem Syslog - Daemon sagen , auf diesem Sockel zu hören)

Zusätzlicher Tipp, der nicht in der rssh-Dokumentation enthalten ist: Wenn Sie möchten, dass auf einige Dateien in einem chroot- Jail zugegriffen werden kann, können Sie mithilfe von bindfs oder Linux mount --bindzusätzliche Verzeichnishierarchien von außerhalb des Jails erstellen . bindfsErmöglicht es dem erneut bereitgestellten Verzeichnis, restriktivere Berechtigungen zu haben, z. B. schreibgeschützt. (Es mount --bindsei denn, Sie wenden einen Kernel-Patch an. Debian hat diesen Patch seit East Lenny hinzugefügt, aber die meisten anderen Distributionen haben ihn seit 2011 nicht mehr installiert.)

Gilles 'SO - hör auf böse zu sein'
quelle
7

Möglicherweise möchten Sie scponly (oder in jüngerer Zeit rssh ) betrachten. Es handelt sich im Wesentlichen um eine Anmeldeshell, die nur zum Starten von scp oder des sftpd-Subsystems verwendet werden kann. In der scponlycVariante führt es eine Chroot durch, bevor das betreffende Subsystem aktiviert wird.

Shadur
quelle
scponly scheint veraltet zu sein, zumindest in Ubuntu
tobixen