GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie Chroot SFTP unter Linux ein (nur SFTP zulassen, nicht SSH)

Wenn Sie ein Konto auf Ihrem System einrichten möchten, das nur zum Übertragen von Dateien verwendet wird (und nicht zum SSH auf das System), sollten Sie SFTP Chroot Jail einrichten, wie in diesem Artikel beschrieben.

In einem typischen sftp-Szenario (wenn chroot sftp nicht eingerichtet ist) können Sie, wenn Sie sftp verwenden, die Root-Datei wie unten gezeigt sehen.

Wenn Sie externen Anbietern sftp-Zugriff auf Ihr System gewähren möchten, um Dateien zu übertragen, sollten Sie kein Standard-sftp verwenden. Stattdessen sollten Sie Chroot SFTP Jail wie unten beschrieben einrichten.

Nicht-Chroot-SFTP-Umgebung

Im folgenden Beispiel (eine typische sftp-Umgebung) kann John per sftp auf das System zugreifen und den Ordner /etc anzeigen und die Dateien von dort herunterladen.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
projects  john.txt documents 

sftp> cd /etc
sftp> ls -l passwd
-rw-r--r--    0 0        0            3750 Dec 29 23:09 passwd

sftp> get passwd
Fetching /etc/passwd to passwd
/etc/passwd     100% 3750     3.7KB/s   00:00

Chroot SFTP-Umgebung

Im folgenden Beispiel kann John per sftp auf das System zugreifen und nur das Verzeichnis anzeigen, das Sie für die Ausführung von sftp für John bestimmt haben (z. B. /incoming).

Wenn John versucht, „cd /etc“ auszuführen, wird eine Fehlermeldung ausgegeben. Da SFTP in einer Chroot-Umgebung eingerichtet wird, kann John keine anderen Dateien im System anzeigen.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
sftp> cd /etc
Couldn't canonicalise: No such file or directory

Nachdem Sie nun wissen, was eine Chroot-SFTP-Umgebung ist, lassen Sie uns sehen, wie diese eingerichtet wird.

1. Erstellen Sie eine neue Gruppe

Erstellen Sie eine Gruppe namens sftpusers. Nur Benutzer, die dieser Gruppe angehören, werden automatisch auf die SFTP-Chroot-Umgebung auf diesem System beschränkt.

# groupadd sftpusers

2. Benutzer erstellen (oder bestehende Benutzer ändern)

Angenommen, Sie möchten einen Gastbenutzer erstellen, der nur SFTP in einer Chroot-Umgebung ausführen darf und nicht SSH ausführen darf.

Der folgende Befehl erstellt einen Gastbenutzer, weist diesen Benutzer der Gruppe sftpusers zu, macht /incoming zum Home-Verzeichnis, legt /sbin/nologin als Shell fest (was dem Benutzer nicht erlaubt, ssh zu verwenden und Shell-Zugriff zu erhalten).

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

Überprüfen Sie, ob der Benutzer ordnungsgemäß erstellt wurde.

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

Wenn Sie einen bestehenden Benutzer ändern und ihn nur zu einem sftp-Benutzer machen und ihn in das chroot-sftp-Gefängnis stecken möchten, tun Sie Folgendes:

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

Wenn Sie Dateien von Windows auf Linux übertragen müssen, verwenden Sie in diesem Zusammenhang einen der SFTP-Clients, die in dieser Top-7-SFTP-Clientliste aufgeführt sind.

3. Richten Sie das sftp-server-Subsystem in sshd_config

ein

Sie sollten sshd anweisen, den internen sftp für sftp zu verwenden (anstelle des standardmäßigen sftp-Servers).

Ändern Sie die Datei /etc/ssh/sshd_config und kommentieren Sie die folgende Zeile aus:

#Subsystem       sftp    /usr/libexec/openssh/sftp-server

Fügen Sie als Nächstes die folgende Zeile zur Datei /etc/ssh/sshd_config

hinzu
Subsystem       sftp    internal-sftp
# grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4. Geben Sie das Chroot-Verzeichnis für eine Gruppe an

Sie möchten nur bestimmte Benutzer (d. h. Benutzer, die zur Gruppe sftpusers gehören) in die Chroot-Gefängnisumgebung stellen. Fügen Sie die folgenden Zeilen am Ende von /etc/ssh/sshd_config

hinzu
# tail /etc/ssh/sshd_config
Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

Oben:

  • Match Group sftpusers – Dies zeigt an, dass die folgenden Zeilen nur für Benutzer abgeglichen werden, die zu Gruppen-sftpusers gehören
  • ChrootDirectory /sftp/%u – Dies ist der Pfad, der für Chroot verwendet wird, nachdem der Benutzer authentifiziert wurde. %u gibt den Benutzer an. Für John ist dies also /sftp/john.
  • ForceCommand internal-sftp – Dies erzwingt die Ausführung von internal-sftp und ignoriert alle Befehle, die in der Datei ~/.ssh/rc erwähnt werden.

5. Erstellen Sie ein sftp-Home-Verzeichnis

Da wir oben /sftp als ChrootDirectory angegeben haben, erstellen Sie dieses Verzeichnis (das Ihrem typischen /home-Verzeichnis entspricht).

# mkdir /sftp

Erstellen Sie nun unter /sftp die individuellen Verzeichnisse für die Benutzer, die Teil der Gruppe sftpusers sind. d.h. die Benutzer, die nur sftp ausführen dürfen und sich in einer Chroot-Umgebung befinden.

# mkdir /sftp/guestuser

/sftp/guestuser entspricht also / für den Gastbenutzer. Wenn der Gastbenutzer sftp zum System sendet und „cd /“ ausführt, sieht er nur den Inhalt der Verzeichnisse unter „/sftp/guestuser“ (und nicht das echte / des Systems). Das ist die Macht der Chroot.

Erstellen Sie also unter diesem Verzeichnis /sftp/guestuser ein beliebiges Unterverzeichnis, das der Benutzer sehen soll. Erstellen Sie beispielsweise ein Eingangsverzeichnis, in dem Benutzer ihre Dateien per sftp übertragen können.

# mkdir /sftp/guestuser/incoming

6. Richten Sie die entsprechende Berechtigung ein

Damit Chroot richtig funktioniert, müssen Sie sicherstellen, dass die entsprechenden Berechtigungen für das Verzeichnis, das Sie gerade oben erstellt haben, richtig eingerichtet sind.

Legen Sie die Eigentümerschaft auf den Benutzer fest und gruppieren Sie ihn wie unten gezeigt zur Gruppe sftpusers.

# chown guestuser:sftpusers /sftp/guestuser/incoming

Die Berechtigung sieht für das Eingangsverzeichnis wie folgt aus.

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

Die Berechtigung sieht für das Verzeichnis /sftp/guestuser

wie folgt aus
# ls -ld /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser

# ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. Starten Sie sshd neu und testen Sie Chroot SFTP

sshd neu starten:

# service sshd restart

Testen Sie die chroot sftp-Umgebung. Wie Sie unten sehen, sehen gusetuser, wenn sie sftp ausführen und „cd /“ ausführen, nur das eingehende Verzeichnis.

# sftp [email protected]
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

Wenn der Gastbenutzer Dateien vom sftp in das Verzeichnis /incoming überträgt, befinden sie sich wirklich im Verzeichnis /sftp/guestuser/incoming auf dem System.


Linux
  1. So richten Sie Linux-Chroot-Jails ein

  2. Wie lässt man SFTP zu und verbietet SSH?

  3. So richten Sie passwortloses SSH unter Linux ein

  4. So richten Sie Rsync mit SSH unter UNIX / Linux ein (rsync ohne Passwort)

  5. So richten Sie einen Reverse-SSH-Tunnel unter Linux ein

So konfigurieren Sie den Chroot SFTP-Server unter Linux

So richten Sie die passwortlose SSH-Anmeldung unter Linux mit Schlüsseln ein

So erstellen Sie einen SSH-Alias ​​unter Linux

So gewähren oder verweigern Sie einem bestimmten Benutzer oder einer bestimmten Gruppe in Linux den SSH-Zugriff

So richten Sie Chrooted SFTP unter Linux ein

So richten Sie die Multi-Faktor-Authentifizierung für SSH unter Linux ein