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!

Hinweis

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
Hinweis

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.