Schreibgeschützte Berechtigung für SFTP-Benutzer in einem bestimmten Verzeichnis

10

Ich möchte einen bestimmten SFTP-Benutzer erstellen, der die Berechtigung hat, nur alle Ordner und Unterordner einzulesen /var/www/vhosts. Hilfe dazu?

Delirium
quelle

Antworten:

11

Unix-Systeme bieten den chrootBefehl, mit dem Sie /den Benutzer auf ein Verzeichnis in der Dateisystemhierarchie zurücksetzen können, in dem er nicht auf "übergeordnete" Dateien und Verzeichnisse zugreifen kann.

In Ihrem Fall ist es jedoch angebracht, eine virtuelle Chroot bereitzustellen, die vom Remote-Shell-Dienst implementiert wird. sftp kann einfach konfiguriert werden, um einen lokalen Benutzer auf eine bestimmte Teilmenge des Dateisystems zu beschränken.

Daher möchten Sie in Ihrem Fall chrootsagen, Benutzer fooBenutzer in das /var/www/vhosts/Verzeichnis.

Sie können ein Chroot-Verzeichnis für Ihren Benutzer festlegen, um sie /var/www/vhosts/wie folgt auf das Unterverzeichnis zu beschränken /etc/ssh/sshd_config.

Benutzer foomit Passwort erstellen

sudo useradd foo
sudo passwd foo

Nur für SFTP-Gruppe erstellen

$ sudo groupadd sftp_users 

Zu einem Benutzer nur foofür SFTP-Gruppe hinzufügen

$ sudo usermod -G sftp_users foo 

Eigentümer wechseln, da Lese- / Schreibberechtigung

sudo chown root.root /var/www/vhosts/

Berechtigung hinzufügen

sudo chmod 755 /var/www/vhosts/

Bearbeiten /etc/ssh/sshd_config

sudo vi /etc/ssh/sshd_config

Kommentieren Sie aus und fügen Sie eine Zeile wie unten hinzu

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

Zuletzt hinzufügen

Match Group sftp_users
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www/vhosts/
  ForceCommand internal-sftp

(HINWEIS: MatchBlöcke müssen sich am ENDE der sshd_configDatei befinden.)

Starten Sie den sshDienst neu

sudo service ssh restart

Mit dieser Konfiguration können Sie in Ordner ssh ubuntuund Dateien abrufen . Kann nicht putoderdelete

Um im rechten Ordner sftp zu bearbeiten /etc/passwd. Ändern Sie die Zeile, damit der Benutzer fooso aussieht

$ sudo vi /etc/passwd

..
foo:x:1001:1001::/var/www/vhosts/:
..

Dadurch wird der Basisordner des Benutzers fooin Ihren SFTP-Serverordner geändert .

Rahul
quelle
Also habe ich Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no In sshd_config hinzugefügt und Benutzer und Gruppe wie Sie erstellt, aber der Benutzer foohat Rechte für alle Ordner :(
Delirium
@ Delirium siehe meine aktualisierte Antwort
Rahul
Vielen Dank für Ihre Antwort. Aber es muss ein Fehler sein. Ich fügte hinzu, Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no ForceCommand internal-sftpaber es gibt einen Fehler, wenn ich ssh neu starten möchte/etc/ssh/sshd_config line 92: Directive 'UsePAM' is not allowed within a Match block
Delirium
2
@ Delirium Ich habe klar erwähnt, Match.....Abschnitt am Ende der Datei zu setzen. Fügen Sie diesen Code am Ende der Datei ein und starten Sie ihn neu.
Rahul
1
Entschuldigung für meine blinden Augen, aber es funktioniert, also wirklich danke.
Delirium