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

111

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 bob erstellt und ihn zu einer neuen Gruppe namens sftponly hinzugefügt. Sie haben ein Home-Verzeichnis bei /home/bob . Ich habe ihre Shell in /bin/false geändert, um SSH-Logins zu stoppen. Hier ist ihre /etc/passwd -Zeile:

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

Ich habe auch /etc/ssh/sshd_config so geändert, dass sie Folgendes enthält:

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

Wenn ich versuche, mich als sie einzuloggen, sehe ich Folgendes:

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

Wenn ich die ChrootDirectory -Zeile auskommentiere, kann ich SFTP einbinden, aber dann haben sie freie Kontrolle über den Server. Ich habe festgestellt, dass ChrootDirectory /home funktioniert, aber es gibt ihnen immer noch Zugriff auf jedes Home-Verzeichnis. Ich habe explizit ChrootDirectory /home/bob ausprobiert, aber das funktioniert auch nicht.

Was mache ich falsch? Wie kann ich bob auf /home/bob/ begrenzen?

---- BEARBEITEN -----

Okay, ich habe mir nur /var/log/auth.log angesehen und folgendes gesehen:

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 die 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
    
Oli 09.05.2012, 15:43
quelle

3 Antworten

110

All dieser Schmerz ist dank einiger Sicherheitsfragen als hier beschrieben . Grundsätzlich muss das Chroot-Verzeichnis im Besitz von root sein und darf kein Gruppenschreibzugriff sein. Schön. Also musst du deine Chroot im Wesentlichen in eine Haltezelle verwandeln und innerhalb von dem kannst du deinen editierbaren 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, Sie können sich einloggen und in /writable schreiben.

    
Oli 09.05.2012, 16:21
quelle
51

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

  1. Erzeuge einen Benutzer und erzwinge 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 erstellen Sie einen Benutzerabschnitt am Ende der Datei (ssh kann nach der Subsystemzeile erneut angezeigt werden):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
josircg 25.10.2012 19:54
quelle
4

Ich habe den ganzen Tag damit verbracht, einen Netzwerkanteil auf meiner Himbeere zu bekommen. Ich wollte den Benutzer sperren, damit er nicht durch das gesamte Dateisystem navigieren kann, keinen SSH-Login-Zugriff 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 /bin/false für den Benutzer hat, also war die Zeile:

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

Ich habe /etc/ssh/sshd_config bearbeitet, um Folgendes einzuschließen:

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

Eigentümer und Berechtigungen des Basisverzeichnisses geändert:

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

Ok, nach all dem konnte ich mich mit sshfs verbinden, aber im Read-Only-Modus. Was ich tun musste, um einen beschreibbaren 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 hat ohne weitere Änderungen funktioniert. Beachten Sie, dass ich für den Benutzer nur schreibbare Berechtigungen habe, nicht für die Gruppe , wie viele andere Online-Lösungen. Ich konnte Dateien / Ordner ohne Probleme erstellen / löschen / bearbeiten / umbenennen.

Beim Zugriff mit sshfs mit dem netdrive Benutzer wegen der Chroot-Konfiguration würde ich nur die Dinge sehen, die im Verzeichnis /home/netdrive/ des Servers gespeichert sind, perfekt. Die wiederholte /home/netdrive/home/netdrive/ Verzeichnisstruktur hat es mir ermöglicht, eine saubere chroot ssh beschreibbare Lösung zu haben.

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

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

Nachdem ich mir die obigen Lösungen (und viele andere im Netz, die sogar acl (Access Control Lists) benutzten) anschaute, konnte ich immer noch nicht funktionieren, denn was ich als nächstes gemacht habe, war:

Folgendes funktioniert NICHT für mich:

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

Weil der Benutzer netdrive trotz Besitz des Ordners und mit den Berechtigungen immer noch nicht in das Verzeichnis /home/netdrive/writable/ schreiben konnte. 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 sah, benutzen Leute acl , um es zu reparieren. Aber ich war nicht glücklich damit, da ich acl installieren musste, dann mount points, etc. konfigurieren musste. Auch habe ich keine Ahnung, warum ich group -Berechtigung brauchen würde, um in einen Ordner zu schreiben gleicher Benutzer.

Es scheint so, als hätte ich aus irgendeinem Grund /home/netdrive/home/netdrive erstellt und dem letzten netdrive -Ordner den Besitz zugewiesen, so dass alles funktioniert, ohne mit Gruppen Berechtigungen zu spielen.

    
mihai.ile 18.07.2015 19:58
quelle

Tags und Links