Chrooted SFTP Server konfigurieren
Vorwort
Um Dateien auf und von einen Linux-Server zu laden stehen unzählbar viele Möglichkeiten zur Verfügung. In diesem Beispiel wird ein SFTP-Server konfiguriert, der:
- nur bestimmten Benutzern, oder Gruppen den Zugang erlaubt
- die Authentifizierung via Passwort, oder SSH-Schlüssel zulässt
- das Startverzeichnis (Wurzelverzeichnis) fest vorschreibt
Sollte noch kein Openssh-Server installiert sein, kann dies einfach nachgeholt werden:
sudo pacman -Syu openssh
sudo apt update && sudo apt install openssh-server
Allgemein Hinweise zur Konfiguration
Alle Einstellungen werden in der typischen Konfigurationsdatei /etc/ssh/sshd_config vorgenommen. Nach Änderungen muss der SSH-Dienst neugestartet werden um diese zu laden. Bereits hergestellt Verbindungen werden von den Anpassungen nicht beeinträchtigt, sodass man bei Fehlkonfigurationen diese wieder rückgängig machen kann!
Es ist daher immer ratsam eine neue Verbindung aufzubauen um die neuen Einstellungen zu testen. Die existierende Verbindung sollte dann für die Korrektur und nötige Neustarts verwendet werden.
Konfiguriert man SSHd falsch und schließt alle Verbindungen, hat man sich wohlmöglich ausgesperrt!
Konfiguration
Die unten stehenden Einstellungen sollen hier etwas genauer beleuchtet werden:
Parameter | Verwendung |
---|---|
ForceCommand | Hierdurch ist eine SSH-Konsolen-Verbindung (Shell) nicht mehr möglich, denn es wird eine SFTP-Verbindung erzwungen. Somit kann der Benutzer keine Konsolen-Verbindung mehr aufbauen. |
PasswordAuthentication | erlaubt die Anmeldung mittels Passwort |
ChrootDirectory | Einstiegspunkt für die SFTP-Verbindung. Dies entspricht dem höchsten Verzeichnis in welches man zurückgehen kann. Der Inhalt von z.B. /srv/sftp_group_dir entspricht bei der Verbindung dem root (/). |
# File: /etc/ssh/sshd_config
# Alle Einstellungen können bequem an das Ende der Datei gepackt werden!
# gilt nur für Benutzer der Linux-Gruppe sftpusers
# alle Benutzer teilen sich einen gemeinsamen Ordner
Match Group sftpusers
PasswordAuthentication yes
ChrootDirectory /srv/sftp_group_dir
ForceCommand internal-sftp
# gilt nur für Benutzer der Linux-Gruppe individuals
# jeder Benutzer hat einen eigenen Ordner (%u wird durch Usernamen ersetzt)
Match Group individuals
PasswordAuthentication yes
ChrootDirectory /srv/individuals/%u
ForceCommand internal-sftp
# gilt nur für den Benutzer myuser
Match User myuser
PasswordAuthentication no
ChrootDirectory /srv/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
Die Reihenfolge der Konfiguration ist relevant! Ist ein Benutzer in z.B. beiden Gruppen (sftpusers und individuals), so gilt der erste Treffer und die weiteren Konfigurationen sind irrelevant!
Sollte die gruppen-basierte Konfiguration genutzt werden, achte darauf den Konsolen-Benutzer mit dem du Einstellungen tätigst nicht zur Gruppe hinzuzufügen. Andernfalls kannst du zukünftig keine Kommandozeile mehr via SSH öffnen, denn es wird SFTP erzwungen ;)! In diesem Fall wäre ein neuer Benutzer für SFTP Verbindungen ratsam.
Damit die Verbindung generell möglich ist, darf das gewählte Chroot-Directory für den verbindenen Benutzer nicht beschreibbar sein! Damit der Benutzer aber einen Ordner zum schreiben hat, sollte ein neuer Ordner angelegt werden. Hier ein Beispiel:
# Ordner rekursiv anlegen
mkdir -p /srv/sftp_group_dir/subdir
# Besitz auf root Benutzer und Gruppe anpassen
chown root:root /srv/sftp_group_dir
# nur Benutzer und Gruppe dürfen "alles"
chmod 755 /srv/sftp_group_dir
# der Besitz des Unterordner subdir wird auf den Benutzer myuser und die Gruppe sftpusers gesetzt
chown myuser:sftpusers /srv/sftp_group_dir/subdir
# Benutzer und Gruppe dürfen "alles"
chmod 770 /srv/sftp_group_dir/subdir
Um Problemen mit Dateiberechtigungen entgegen zu wirken, können Linux-Benutzer sich die gleiche ID teilen.
Dies ist bei SFTP besonders hilfreich, denn alle Benutzer können dann unterschiedliche Namen (und Passwörter), aber identische Schreibberechtigungen haben.
Bei Zugriffen auf Dateien teilen sie sich nämlich die selbe ID.
Hat jeder Benutzer eine individuelle ID, muss darauf geachtet werden, dass die Datei- und Ordnerberechtigung korrekt konfiguriert werden.
Geschieht dies nicht, können Benutzer Dateien eventuell nicht lesen und bearbeiten.
Deshalb ist es hilfreich die identische User-ID zu verwenden.