Diese Anleitung erklärt, wie man Chrooted SFTP unter Linux einrichtet, um den SSH-Benutzerzugriff auf das Home-Verzeichnis oder ein bestimmtes Verzeichnis zu beschränken. Mit anderen Worten, wir werden die Benutzer in ein bestimmtes Verzeichnis zwingen und ihre Shell auf /bin/nologin
oder eine andere Shell, die den Zugriff auf eine SSH-Anmeldung verweigert. Sobald das chrooted SFTP konfiguriert ist, können die Benutzer nur auf ihr zugewiesenes Home-Verzeichnis zugreifen, aber nicht auf das gesamte Dateisystem
Das Aktivieren des chrooted SFTP-Zugriffs bietet die folgenden Vorteile:
- Gestatten Sie den Benutzern, sich nur über SFTP zu verbinden, aber erlauben Sie ihnen nicht, sich über SSH zu verbinden.
- Beschränken Sie eine SSH-Benutzersitzung auf ihr Home-Verzeichnis oder ein bestimmtes Verzeichnis Ihrer Wahl.
- Beschränken Sie den SSH-Zugriff auf bestimmte Benutzer und erlauben Sie ihnen trotzdem, Dateien zwischen lokalen und entfernten Systemen zu übertragen.
- Benutzerzugriff auf das gesamte Dateisystem verweigern.
Lassen Sie uns nun fortfahren und Chrooted SFTP einrichten, um die SSH-Benutzer auf das Home-Verzeichnis und/oder ein beliebiges anderes Verzeichnis mit Chrooted-Gefängnis in Linux zu beschränken.
Dieser Leitfaden wurde offiziell auf den Distributionen Debian 11 Bullseye, Ubuntu 20.04 LTS und Ubuntu 18.04 LTS getestet. Die unten aufgeführten Schritte sollten jedoch auf allen Linux-Distributionen funktionieren, die openSSH unterstützen .
Chrooted SFTP unter Linux einrichten
Ab Version 4.9 hat openSSH eine Funktion, die als internal-sftp subsystem bekannt ist die nur SFTP-Zugriff erlaubt, aber keinen SSH-Zugriff. So können die Benutzer nur auf die Daten vom Server zugreifen, aber sie können nicht über SSH darauf zugreifen.
Chroot-Verzeichnis erstellen
Erstellen Sie zuerst ein Chroot-Verzeichnis mit dem Befehl:
$ sudo mkdir /sftp
Machen Sie dieses Verzeichnis vollständig zu root
Benutzer mit Befehl:
$ sudo chown root:root /sftp/
Erstellen Sie in diesem Verzeichnis separate Verzeichnisse für jeden Benutzer, z. B. /sftp/user1
, /sftp/user2
, und /sftp/user3
und so weiter.
Für die Zwecke dieser Anleitung werde ich ein Verzeichnis mit dem Namen ostechnix
erstellen unter /sftp
Verzeichnis.
$ sudo mkdir /sftp/ostechnix
Dies ist das Verzeichnis, in dem die Benutzer die Daten speichern können. Außerdem können die Benutzer nicht über dieses Verzeichnis hinausgehen. Es ist genau wie ihr $HOME Verzeichnis.
Erstellen Sie eine SFTP-Gruppe und weisen Sie dieser Gruppe Benutzer zu
Jetzt müssen wir die Benutzer erstellen, um auf das SFTP-Chroot-Verzeichnis zugreifen zu können.
Erstellen Sie eine Gruppe namens sftponly
wie im folgenden Befehl gezeigt:
$ sudo groupadd sftponly
Erstellen Sie dann neue SFTP-Benutzer oder weisen Sie vorhandene Benutzer dem "sftponly"
zu Gruppe wie unten gezeigt.
Lassen Sie mich einen neuen Nutzer erstellen, zum Beispiel senthil , und weisen Sie ihn dem "sftponly"
zu Gruppe. Richten Sie dann sein Home-Verzeichnis als /sftp/ostechnix
ein und die Standard-Shell als /sbin/nologin
.
Wir können dies mit dem folgenden Online-Befehl tun:
$ sudo useradd -g sftponly -d /ostechnix -s /sbin/nologin senthil
Legen Sie das Passwort für den neu erstellten Benutzer mit dem Befehl fest:
$ sudo passwd senthil
Um den vorhandenen Benutzer zu ändern, verwenden Sie "usermod"
statt "useradd"
Befehl wie unten:
$ sudo usermod -g sftponly -d /ostechnix -s /sbin/nologin senthil
Weisen Sie dem Chroot-Verzeichnis die richtigen Berechtigungen zu
Sie müssen den SFTP-Benutzern die richtigen Berechtigungen zuweisen, um auf ihr HOME-Verzeichnis zuzugreifen, wie unten beschrieben.
$ sudo chown senthil:sftponly /sftp/ostechnix
$ sudo chmod 700 /sftp/ostechnix/
Die anderen SFTP-Benutzer können nicht auf dieses Verzeichnis zugreifen.
Weisen Sie auch allen anderen SFTP-Benutzern entsprechende Berechtigungen zu.
Empfohlener Download - Kostenloses eBook:"Lernen Sie Linux in 5 Tagen"
Chrooted SFTP konfigurieren
Bearbeiten Sie /etc/ssh/sshd_config
Datei:
$ sudo vi /etc/ssh/sshd_config
Suchen Sie die folgenden Zeilen und kommentieren Sie sie aus (d. h. fügen Sie ein Sternchen # davor ein, um sie auszukommentieren).
#Subsystem sftp /usr/libexec/openssh/sftp-server
In einigen Distributionen, zum Beispiel Ubuntu 18.04 LTS , suchen und kommentieren Sie die folgende Zeile:
#Subsystem sftp /usr/lib/openssh/sftp-server
Fügen Sie als Nächstes die folgenden Zeilen am Ende der Datei hinzu:
Subsystem sftp internal-sftp Match group sftponly ChrootDirectory /sftp/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
Chroot-SFTP konfigurieren
Wenn Sie Benutzer auf $HOME
beschränken möchten Verzeichnis, ersetzen Sie einfach /sftp
mit /home
im obigen Code. Stellen Sie sicher, dass Sie den richtigen Pfad des sftp-Verzeichnisses angegeben haben. Drücken Sie ESC und geben Sie :wq
ein um die Datei zu speichern und zu beenden.
Starten Sie ssh
neu Dienst, um die Änderungen zu aktualisieren.
$ sudo systemctl restart sshd
Versuchen Sie nun, von jedem anderen System im Netzwerk mit SSH auf dieses System zuzugreifen, indem Sie den sftp-Benutzer verwenden (d. h. in unserem Fall senthil).
$ ssh [email protected]1
Sie erhalten die folgende Fehlermeldung.
[email protected]'s password: This service allows sftp connections only. Connection to 192.168.122.181 closed.
Hier, 192.168.122.181 ist die IP-Adresse meines entfernten Debian-Systems, wo ich SFTP konfiguriert habe.
Sie können nur über sftp auf das Remote-System zugreifen wie unten gezeigt.
$ sftp [email protected] [email protected]'s password: Connected to 192.168.43.2. sftp>
Sehen? Der Benutzer "senthil" kann sich über sftp verbinden, aber nicht über ssh.
Um das aktuelle Arbeitsverzeichnis zu erfahren, verwenden Sie 'pwd'
Befehl:
sftp> pwd Remote working directory: /ostechnix sftp>
Chroot-SFTP unter Linux einrichten
Grundlegende SFTP-Befehle
Wir können uns mit -p
über einen alternativen Port verbinden Flagge.
$ sftp -P <port_number> [email protected]_host
Um eine entfernte Datei auf das lokale System zu übertragen, gehen Sie wie folgt vor:
sftp> get /path/remote_file
Wir können lokale Dateien mit folgendem Befehl auf das entfernte System übertragen:
sftp> put /path/local_file
So übertragen Sie den Remote-Ordner rekursiv auf das lokale System:
sftp> get -R /path/remote_folder
So zeigen Sie die Liste der Dateien auf dem lokalen Computer an:
sftp> lls
So zeigen Sie die Liste der Dateien auf dem Remote-Computer an:
sftp> ls
Weitere Einzelheiten zur sftp-Nutzung finden Sie in den Manpages.
$ man sftp
Schlussfolgerung
In diesem Handbuch haben wir besprochen, wie man chrooted SFTP in Linux-Betriebssystemen wie Debian und Ubuntu konfiguriert und einrichtet.
Empfohlene Lektüre:
- So ändern Sie den FTP-Standardport in einen benutzerdefinierten Port
- VSFTPD-Server in Ubuntu installieren
- Sicherer VSFTPD-Server mit TLS/SSL-Verschlüsselung in Ubuntu
- FTP-Server Schritt für Schritt in CentOS einrichten
- FTP_Manager :Ein einfaches Skript zum Installieren und Verwalten von FTP-Servern in CentOS