Frage Wie kann ich sftp-only SSH Benutzer in ihre Häuser chroot?


Ich möchte einem Client Zugriff auf meinen Server gewähren, aber ich möchte diese Benutzer auf ihre Home-Verzeichnisse beschränken. Ich werde alle Dateien binden, die ich sehen möchte.

Ich habe einen Benutzer namens erstellt bob und fügte ihn zu einer neuen Gruppe namens sftponly. Sie haben ein Home-Verzeichnis bei /home/bob. Ich habe ihre Shell geändert auf /bin/false um SSH-Logins zu stoppen. Hier ist ihre /etc/passwd Linie:

bob:x:1001:1002::/home/bob:/bin/false

Ich habe auch die geändert /etc/ssh/sshd_config Folgendes einschließen:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Wenn ich versuche, mich als sie einzuloggen, sehe ich, was ich sehe

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Wenn ich das auskommentiere ChrootDirectory Linie ich kann SFTP in, aber dann haben sie freie Zügel über den Server. Ich habe das gefunden ChrootDirectory /home funktioniert, aber es gibt ihnen immer noch Zugriff auf jedes Home-Verzeichnis. Ich habe es ausdrücklich versucht ChrootDirectory /home/bob aber das funktioniert auch nicht.

Was mache ich falsch? Wie kann ich einschränken? bob zu /home/bob/?

----BEARBEITEN-----

Okay, also habe ich es mir mal angesehen /var/log/auth.log und sah dies:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

Ich bin mir nicht ganz sicher, was dort vor sich geht, aber es deutet darauf hin, dass etwas mit dem Benutzerverzeichnis nicht stimmt. Hier ist das ls -h /home Ausgabe:

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob

111
2018-05-09 13:43


Ursprung


Ich glaube ChrootDirectory /home/%u kann ersetzt werden ChrootDirectory %h. - Franck Dernoncourt


Antworten:


All dieser Schmerz ist dank mehrerer Sicherheitsfragen wie hier beschrieben. Grundsätzlich muss das Chroot-Verzeichnis im Besitz von sein root und kann kein Gruppenschreibzugriff sein. Schön. Also musst du deine Chroot im Wesentlichen in eine Haltezelle verwandeln Das Sie können Ihren bearbeitbaren Inhalt haben.

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

Und Bam, du kannst dich einloggen und schreiben /writable.


111
2018-05-09 14:21



Danke wirklich sehr nützlich. Zwei Probleme allerdings. 1.) Obwohl ich nicht schreiben kann, kann ich immer noch das ganze Dateisystem durchsuchen. 2.) Ändern der Shell in / bin / false verhindert SFTP vollständig. Mache ich etwas falsch? - kim3er
Vielen Dank! Viele andere Artikel zu diesem Thema vermissen dieses Detail, und einige machen es so, dass der Server keine SSH-Verbindungen akzeptieren kann (was für ein Ärgernis wenn man auf EC2 ist und ... das ist der einzige Weg). - Tom Harrison Jr
kim3er: Das liegt daran, dass Sie die Shell des Benutzers auf / sbin / nologin setzen müssen - / bin / false deaktiviert jede Art von Zugriff.
Ich möchte auch darauf hinweisen, dass alle Ordner, die zu Ihrem Chroot-Ordner führen, zu ihm gehören root. In diesem Beispiel /home sollte auch im Besitz von root sein. - Shiki
Am 14.04 musste ich auch das ändern Subsystem sftp /usr/lib/openssh/sftp-server Linie zu Subsystem sftp internal-sftp -f AUTH -l VERBOSE bevor das funktionierte. - partofthething


Um ein SFTP-Verzeichnis zu chrooten, müssen Sie

  1. Erstellen Sie einen Benutzer und erzwingen Sie root, um Besitzer zu sein

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. Ändern Sie den Speicherort des Subsystems in / etc / ssh / sshd_config:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    und erstelle einen Benutzerabschnitt am Ende der Datei (ssh kann erneut starten, wenn er nach der Subsystem-Zeile platziert wird):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    

52
2017-10-25 17:54



ohne den letzten Teil zu tun (Erstellen eines Benutzerbereichs) hat nichts funktioniert! Danke - Sinan Erdem
das scheint nicht zu funktionieren. in Ihrem Beispiel der Benutzer john ist an der verschlossen /home/john Verzeichnis. du hast es gewährt 755 Berechtigungen für das Verzeichnis. Also hat der Besitzer gelesen (4), geschrieben (2) und ausgeführt (1), und die Gruppe hat gelesen (4) und ausgeführt (1). Sie haben auch den Besitzer und die Gruppe als festgelegt root, damit john gehört zu anderen. Er hat auch gelesen und ausgeführt (4 + 1 = 5). also hast du John in ein Verzeichnis gesperrt, in dem er keine Schreibrechte hat. Wie behebt man das? Berechtigungen ändern zu 757 oder auch 777 bricht die Anmeldung ab. Ändern der Gruppe oder des Besitzers zu John bricht auch Login. - Daniel
Beachten Sie auch: In / etc / ssh / sshd_config werden die Konfigurationen in der Reihenfolge gelesen. Wenn Sie also eine Regel für Benutzer in Allgemein haben und Sie eine davon überschreiben möchten, legen Sie einfach die benutzerspezifische Regel oben auf. - rwenz3l
Ich möchte ein SFTP-Verzeichnis im Home-Ordner eines anderen Benutzers chroot. Ich habe userx bei /home/userx/sftproot/uploadsund sftpuser bei / home / sftpuse. Ich habe Chroot eingestellt /home/usex/sftproot im Besitz von root: root und chmod 755 sein /home/usex/sftproot/uploads wird von sftpuser: sftpuser Ich bekomme den gleichen Fehler wie die erste Frage oben. Müssen chroot und alle übergeordneten Ordner im Besitz von root: root sein, damit sftp funktioniert? - Primoz Rome


Ich verbrachte den ganzen Tag damit, einen Netzwerkanteil auf meiner Himbeere zu bekommen. Ich wollte den Benutzer sperren, damit er nicht durch das gesamte Dateisystem navigieren kann, keinen SSH-Login-Zugang und ich wollte Schreibzugriff auf die Netzwerkfreigabe haben.

Und hier ist, wie ich es funktionierte:

Zuerst habe ich einen Benutzer erstellt:

sudo useradd netdrive

Dann bearbeitet /etc/passwd und stellte sicher, dass es ist /bin/false für den Benutzer war die Zeile also:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

Ich habe bearbeitet /etc/ssh/sshd_config einschließen:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Besitzer und Berechtigungen des Basisverzeichnisses geändert:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

Ok, nach all dem konnte ich mich verbinden sshfs aber im Nur-Lese-Modus. Was ich tun musste, um einen schreibbaren Ordner zu bekommen:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

Das war es, es funktionierte ohne weitere Änderungen. Beachten Sie, dass ich nur schreibberechtigte Berechtigungen für die Benutzernicht zu den Gruppe so viele andere Lösungen online. Ich konnte Dateien / Ordner ohne Probleme erstellen / löschen / bearbeiten / umbenennen.

Beim Zugriff mit sshfs mit dem Netzlaufwerk Benutzer wegen der Chrootkonfiguration würde ich nur Sachen sehen, die innerhalb des Servers gespeichert werden /home/netdrive/ Verzeichnis, perfekt. Das wiederholte sich /home/netdrive/home/netdrive/ Verzeichnisstruktur ist es, was es für mich funktionierte, sauber zu haben chroot ssh beschreibbar Lösung.

Jetzt werde ich unten die Probleme erklären, die ich hatte:

Sie sollten die folgenden Absätze wahrscheinlich nicht ausführen:

Nach dem Betrachten der oben genannten Lösungen (und viele andere im Netz, die sogar acl (Access Control Lists) verwendet) Ich war immer noch nicht in der Lage, es zum Laufen zu bringen, denn was ich als nächstes tat, war:

Folgendes hat getan NICHT arbeite für mich:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Weil das Netzlaufwerk Benutzer konnte immer noch nicht schreiben /home/netdrive/writable/ Verzeichnis trotz Besitz des Ordners und mit den Berechtigungen. Dann habe ich:     sudo chmod 775 / home / netdrive / beschreibbar / Und jetzt konnte ich ein Verzeichnis erstellen und es löschen, aber ich konnte es nicht bearbeiten, weil es ohne schreibbare Gruppenberechtigungen erstellt wurde. Hier von dem, was ich im Netz gesehen habe, benutzen Leute acl etwas reparieren. Aber ich war nicht glücklich damit, da ich es installieren musste acl, dann mount points, etc. Auch ich habe keine Ahnung, warum ich das brauchen würde Gruppe Berechtigung, in einen Ordner zu schreiben, der demselben Benutzer gehört.

Es scheint, dass aus irgendeinem Grund zu schaffen /home/netdrive/home/netdrive und dem letzten Besitz zu geben netdrive Ordner konnte ich alles machen ohne zu stören Gruppe Berechtigungen.


4
2017-07-18 17:58