Ich möchte einem Client Zugriff auf meinen Server gewähren, möchte diese Benutzer jedoch auf ihre Home-Verzeichnisse beschränken. Ich werde alle Dateien binden, die sie sehen sollen.
Ich habe einen Benutzer mit dem Namen erstellt bob
und ihn zu einer neuen Gruppe mit dem Namen hinzugefügt sftponly
. Sie haben ein Home-Verzeichnis bei /home/bob
. Ich habe ihre Shell geändert /bin/false
, um SSH-Anmeldungen zu stoppen. Hier ist ihre /etc/passwd
Linie:
bob:x:1001:1002::/home/bob:/bin/false
Ich habe auch das geändert /etc/ssh/sshd_config
, um das folgende mit einzuschließen:
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 einschalten, aber dann haben sie freien Lauf über den Server. Ich habe festgestellt, dass das ChrootDirectory /home
funktioniert, aber es gibt ihnen immer noch Zugriff auf jedes Basisverzeichnis. Ich habe es explizit versucht, ChrootDirectory /home/bob
aber das funktioniert auch nicht.
Was mache ich falsch? Wie kann ich mich beschränken bob
auf /home/bob/
?
----BEARBEITEN-----
Okay, also habe ich mir das mal angesehen /var/log/auth.log
und 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 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
ChrootDirectory /home/%u
kann ersetzt werdenChrootDirectory %h
.Antworten:
All diese Schmerzen sind auf verschiedene Sicherheitsprobleme zurückzuführen, die hier beschrieben werden . Grundsätzlich muss das chroot-Verzeichnis im Besitz von sein
root
und darf keinen Schreibzugriff für Gruppen enthalten. Schön. Sie müssen Ihre Chroot also im Wesentlichen in eine Haltezelle verwandeln , in der Sie Ihren bearbeitbaren Inhalt haben können.Und bam, du kannst dich einloggen und schreiben
/writable
.quelle
root
. In diesem Beispiel/home
sollte auch root Eigentümer sein.Subsystem sftp /usr/lib/openssh/sftp-server
Leitung umstellen,Subsystem sftp internal-sftp -f AUTH -l VERBOSE
bevor dies funktionierte.Um ein SFTP-Verzeichnis zu chrooten, müssen Sie
Erstellen Sie einen Benutzer und erzwingen Sie, dass root Eigentümer des Benutzers ist
Ändern Sie den Speicherort des Subsystems in / etc / ssh / sshd_config:
und erstelle einen User-Bereich am Ende der Datei
quelle
john
an das/home/john
Verzeichnis gebunden . Sie haben755
Berechtigungen für das Verzeichnis erteilt . Der Eigentümer hat also gelesen (4), geschrieben (2) und ausgeführt (1), und die Gruppe hat gelesen (4) und ausgeführt (1). Sie haben auch den Eigentümer und die Gruppe als festgelegtroot
,john
gehört also zu anderen. er hat dann auch gelesen und ausgeführt (4 + 1 = 5). Sie haben John also in ein Verzeichnis gesperrt, in dem er keine Schreibrechte hat. Wie kann man das beheben? Ändern von Berechtigungen757
oder sogar777
das Login zu unterbrechen. Wenn Sie die Gruppe oder den Besitzer in John ändern, wird auch die Anmeldung unterbrochen./home/userx/sftproot/uploads
und sftpuser bei / home / sftpuse. Ich habe chroot auf/home/usex/sftproot
den Besitz von root: root und chmod/home/usex/sftproot/uploads
755 gesetzt. Das wird von sftpuser: sftpuser chown-ed. Ich erhalte den gleichen Fehler wie bei der ersten Frage oben. Müssen sich die chroot und alle übergeordneten Ordner im Besitz von root: root befinden, damit sftp funktioniert?Ich habe den ganzen Tag versucht, eine Netzwerkfreigabe für meine Himbeere zu erhalten. Ich wollte den Benutzer sperren, damit er nicht durch das gesamte Dateisystem navigieren kann, keinen SSH-Login-Zugriff und Schreibzugriff auf die Netzwerkfreigabe haben möchte.
Und so habe ich es geschafft:
Zuerst habe ich einen Benutzer angelegt:
Dann bearbeitete
/etc/passwd
und stellte sicher, dass es/bin/false
für den Benutzer so war die Zeile:Ich habe bearbeitet
/etc/ssh/sshd_config
, um Folgendes einzuschließen:Eigentümer und Berechtigungen des Basisverzeichnisses geändert:
Ok, nach all dem konnte ich eine Verbindung herstellen,
sshfs
aber im schreibgeschützten Modus. Was ich tun musste, um einen beschreibbaren Ordner zu erhalten:Das wars, es hat ohne weitere Änderungen geklappt. Beachten Sie, dass ich nur schreibbare Berechtigungen für den Benutzer und nicht für die Gruppe habe, wie bei vielen anderen Online-Lösungen. Ich konnte ohne Probleme Dateien / Ordner erstellen / löschen / bearbeiten / umbenennen.
Beim Zugriff
sshfs
mit dem Netdrive- Benutzer aufgrund der Chroot-Konfiguration würde ich nur Dinge sehen, die im Serververzeichnis gespeichert sind/home/netdrive/
, perfekt. Die wiederholte/home/netdrive/home/netdrive/
Verzeichnisstruktur hat es mir ermöglicht, eine saubere, mit chroot ssh beschreibbare Lösung zu haben.Jetzt erkläre ich die Probleme, die ich hatte:
Sie sollten die folgenden Absätze wahrscheinlich nicht ausführen :
Nachdem ich mir die obigen Lösungen angeschaut hatte (und viele andere im Internet, die sogar acl (Access Control Lists) verwendeten), war ich immer noch nicht in der Lage, es zum Laufen zu bringen, weil das, was ich als nächstes tat, war:
Folgendes hat bei mir NICHT funktioniert:
Weil der Netdrive- Benutzer
/home/netdrive/writable/
trotz Besitz des Ordners und der Berechtigungen immer noch nicht in dieses Verzeichnis schreiben konnte . Dann tat ich: sudo chmod 775 / home / netdrive / writable / Und jetzt konnte ich ein Verzeichnis erstellen und es löschen, aber ich war nicht in der Lage, es zu bearbeiten, weil es ohne Gruppen-Schreibrechte erstellt wurde. Hier von dem, was ich im Netz gesehen habe, verwenden die Leuteacl
, um es zu reparieren. Aber ich war damit nicht zufrieden, da ich es installierenacl
, dann Mount-Punkte konfigurieren usw. musste. Außerdem habe ich keine Ahnung, warum ich eine Gruppenberechtigung benötigen würde , um in einen Ordner zu schreiben, der demselben Benutzer gehört.Es scheint, dass ich aus irgendeinem Grund,
/home/netdrive/home/netdrive
indemnetdrive
ich den letzten Ordner erstellte und ihm den Besitzer gab, in der Lage war, alles zum Laufen zu bringen, ohne die Gruppenberechtigungen zu beeinträchtigen.quelle
Ich bin diesem Artikel gefolgt, aber es hat nicht funktioniert. Es begann zu funktionieren, nachdem ich diese Änderung vorgenommen hatte (empfohlen in den obigen Antworten):
Außerdem habe ich das Root-Home-Verzeichnis erstellt, unter dem ich ein vom Benutzer beschreibbares Unterverzeichnis hatte (wie oben beschrieben).
Das Neue und Nützliche, das ich mit dieser Antwort hinzufügen möchte, ist, dass Sie die Konfiguration einfach vereinfachen können, indem Sie% h als Benutzer-Ausgangsverzeichnis angeben:
Ich habe es dank dieses Links entdeckt.
quelle