SFTP-Server

FTP ist historisch bedingt ein sehr fragiles Protokoll, welches grosse Mühe hat mit heute gängigen Techniken wie NAT und Firewalls klar zukommen.
Es sollte eigentlich nicht mehr verwendet- und stattdessen auf SFTP (FTP über SSH) umgestellt werden.

Das hat u.a. auch den Vorteil, dass man keinen extra Server mehr laufen lassen muss.

In diesem Tutorial wird erklärt wie man einem SFTP-Server aufsetzt.

Da es für SFTP jeweils einen Systembenutzer braucht ist zunächst die Frage nach der Sicherheit da, denn schliesslich will man nicht jedem SFTP-Benutzer Zugriff auf die Shell geben.
Dies lässt sich jedoch ganz einfach in der SFTP-Konfiguration unterbinden, indem man eine neue Gruppe erzeugt und diese auf Nur-SFTP einschränkt

Das zweite Hindernis dürfte sein, dass man den SSH-Port 22 in der Firewall nur auf besteimmte IPs einschränken will, um die „SSH Login Scans“ zu unterbinden. Doch auch dies ist keine Problem, da SSH auf mehreren Ports hören kann. Der Shell Zugriff lässt sich sogar per Port einschränken.

Fürs erste wird eine Benutzergruppe für sftp erzeugt:

groupadd sftpusers

Nun müssen noch die Verzeichnisberechtigungen angepasst werden.
Denn das SFTP chroot funktioniert nur, wenn das chroot Verzeichnis

  • root gehört
  • kein anderer Benutzer oder Gruppe es beschrieben kann

Aus diesem Grund muss immer jeweils noch ein für den Benutzer beschreibbares Verzeichnis unterhalb erstellt werden.

In diesem Fall wollen wir, dass ein Benutzer sich entweder mit dem SSH-Port (22) verbinden kann und dann in sein HOME Verzeichnis (/home/myuser) kommt, oder er sich mit dem FTP Port (21) verbindet und in ein generisches SFTP Verzeichnis (/srv/sftp) kommt

useradd myuser
mkdir -pv /home/myuser/upload
chown -v root:myuser /home/myuser
chmod -v 750 /home/myuser
chown -v myuser:myuser /home/myuser/upload
chmod -v 750 /home/myuser/upload

mkdir -pv /srv/sftp/myuser/upload
chown -v root:myuser /srv/sftp/myuser
chmod -v 750 /srv/sftp/myuser
chown -v myuser:myuser /srv/sftp/myuser/upload
chmod -v 750 /srv/sftp/myuser/upload

Als nächstes wird in /etc/ssh/sshd_config Ein neuer Listen Port für SFTP hinzugefügt:

Port 21
Port 22

Nun wird in derselben Datei die Option: Subsystem sftp /usr/lib/openssh/sftp-server auskommentiert und dafür die Option:
Subsystem sftp internal-sftp hinzugefügt:

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

Zuunterst kommen dann noch die Blöcke für die Einschränkung auf Port und/oder Gruppe
Das umask kann mittels dem Parameter -u zum ForceCommand gesetzt werden (bachrc/profile/etc. wird bei SFTP ignoriert):

Match LocalPort 21
  PasswordAuthentication yes
  ChrootDirectory /srv/sftp/%u
  X11Forwarding no
  AllowTCPForwarding no
  ForceCommand internal-sftp -u 0027

Match Group sftpusers
  ChrootDirectory %h
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp -u 0027

Nach einem systemctl restart sshd ist der SFTP-Server Betriebsbereit.

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert