Ubuntu Server sicheres SFTP für Uploads einrichten: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) |
BLinz (Diskussion | Beiträge) |
||
| Zeile 61: | Zeile 61: | ||
AuthorizedKeysFile /etc/ssh/authorized_keys/%u | AuthorizedKeysFile /etc/ssh/authorized_keys/%u | ||
Durch die Zeile {{code|ForceCommand internal-sftp -u 0027}} wird explizit nur SFTP erlaubt!<br> | Durch die Zeile {{code|ForceCommand internal-sftp -u 0027}} wird explizit nur SFTP erlaubt!<br> | ||
<br> | |||
---- | |||
==SSH Public Key hinterlegen== | |||
===SSH Key für den Benutzer erzeugen=== | |||
Die Anmeldung erfolgt per SSH Schlüssel. Zur Anmeldung braucht der der Benutzer {{code|mytestuser}} ein SSH-Schlüssel.<br> | |||
Eventuell ist aber auf der Quellseite der Benutzername ein anderer als {{code|mytestuser}}, deshalb geben wir den Schlüsselnamen explizit mit an:<br> | |||
{{Warnung|Der Befehl wird auf dem System ausgeführt von dem Ihr euch mit dem SFTP Server verbinden wollt! Natürlich würde das auch lokal klappen, dann muss Ihr diesen später aber auf das Quellsystem kopieren}} | |||
ssh-keygen -t ecdsa -f ~/.ssh/mytestuser | |||
Kennwort könnt Ihr vergeben (müsst ihr aber nicht). Vergebt Ihr ein Kennwort, so müsst Ihr es bei der Nutzung des Schlüssels eingeben.<br> | |||
Der Befehl erzeugt euch 2 Dateien unterhalb von {{code|.ssh}}:<br> | |||
mytestuser | |||
mytestuser.pub | |||
Der Inhalt von {{code|mytestuser.pub}} sieht dann z.B. so aus: | |||
cat ~/.ssh/mytestuser.pub | |||
Beispielinhalt:<br> | |||
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLKcmtEK4WmXLZG34Ae8HyTs7oA0nHzwsWxTPln+p0z/cXluJeq03IecDT6KT72DkyvCSYDLCutlInqLTmpWJVs= manfred@testsystem | |||
---- | |||
===SSH Key auf dem SFTP-Server hinterlegen=== | |||
sudo mkdir -p /etc/ssh/authorized_keys | |||
sudo touch /etc/ssh/authorized_keys/mytestuser | |||
sudo chown root:root /etc/ssh/authorized_keys/mytestuser | |||
sudo chmod 644 /etc/ssh/authorized_keys/mytestuser | |||
# Public Key eintragen | |||
sudo nano /etc/ssh/authorized_keys/mytestuser | |||
und in der Datei den Inhalt von | |||
mytestuser.pub | |||
einfügen.<br> | |||
Version vom 14. September 2026, 14:45 Uhr
Changelog:
- 14.09.2026 erste Version
Vorwort
Nachfolgend beschreibe ich wie ich einen SFTP-Server unter Ubuntu 24.04 aufgesetzt habe. Dieser sollte Ziel für automatisierte Uploads sein.
Ich habe versucht das System bestmöglich abzusichern. Unter anderem ist im Echtsystem der Zugriff auf bestimmte Gegenstellen beschränkt, ich nutze aber auch die Ubuntu-Firewall in diesem Beispiel.
Zudem verwende ich einen extra Port und nicht den Standard-Port 22, die Anmeldung erfolgt nicht per Passwort sondern per SSH-Public-Key
Voraussetzungen
Ein installiertes Ubuntu Server 24.04.
Meines ist nach meiner Anleitung / Vorlage https://znil.net/index.php?title=Vorlage:Installation-Ubuntu-2404 installiert worden.
Sollte auch mit der Nicht-Server Variante sowie neueren oder älteren Versionen.
Benutzer und Zielverzeichnisse anlegen
# Upload-Gruppe "sftp-uploaders" sudo groupadd sftp-uploaders # Benutzer "mytestuser" ohne Shell anlegen sudo useradd -m -g sftp-uploaders -s /bin/false mytestuser
Jetzt die Chroot-Ordnerstruktur
# Chroot-Basis (MUSS root gehören und 755 Rechte haben) sudo mkdir -p /var/sftp/mytestuser sudo chown root:root /var/sftp/mytestuser sudo chmod 755 /var/sftp/mytestuser
Und den eigentlichen Upload-Ordner des Benutzers
# Eigentlicher Upload-Ordner sudo mkdir -p /var/sftp/mytestuser/incoming sudo chown mytestuser:sftp-uploaders /var/sftp/mytestuser/incoming sudo chmod 750 /var/sftp/mytestuser/incoming
Die Uploads des Benutzers landen dann später also im Pfad
/var/sftp/mytestuser/incoming
OpenSSH konfigurieren
Nein, wir müssen SFTP nicht extra installieren, zu OpenSSH gehört ja auch der Befehl scp, und der nutzt unten drunter schon länger SFTP.
SFTP nutzt ja auch den gleichen Port wie SSH, also ab Werk Port 22 TCP.
Zusätzlichen Port aktivieren
Ich möchte später nicht Port 22 sondern Port 2222 verwenden:
sudo nano /etc/ssh/sshd_config
Da gibt es eine auskommentierte Zeile mit
#Port 22
die ändern wir wie folgt ab:
Port 22 Port 2222
Der Port muss noch in der Firewall aktiviert werden:
sudo ufw allow 2222/tcp
Konfigurationsdatei erstellen
Nun erstellen wir eine neue Konfigurationsdatei für OpenSSH per
sudo nano /etc/ssh/sshd_config.d/sftp-jail.conf
mit folgendem Inhalt:
# Regeln nur für Zugriffe über Port 2222 anwenden
Match LocalPort 2222 Group sftp-uploaders
ChrootDirectory /var/sftp/%u
ForceCommand internal-sftp -u 0027
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication no
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Durch die Zeile ForceCommand internal-sftp -u 0027 wird explizit nur SFTP erlaubt!
SSH Public Key hinterlegen
SSH Key für den Benutzer erzeugen
Die Anmeldung erfolgt per SSH Schlüssel. Zur Anmeldung braucht der der Benutzer mytestuser ein SSH-Schlüssel.
Eventuell ist aber auf der Quellseite der Benutzername ein anderer als mytestuser, deshalb geben wir den Schlüsselnamen explizit mit an:
ssh-keygen -t ecdsa -f ~/.ssh/mytestuser
Kennwort könnt Ihr vergeben (müsst ihr aber nicht). Vergebt Ihr ein Kennwort, so müsst Ihr es bei der Nutzung des Schlüssels eingeben.
Der Befehl erzeugt euch 2 Dateien unterhalb von .ssh:
mytestuser mytestuser.pub
Der Inhalt von mytestuser.pub sieht dann z.B. so aus:
cat ~/.ssh/mytestuser.pub
Beispielinhalt:
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLKcmtEK4WmXLZG34Ae8HyTs7oA0nHzwsWxTPln+p0z/cXluJeq03IecDT6KT72DkyvCSYDLCutlInqLTmpWJVs= manfred@testsystem
SSH Key auf dem SFTP-Server hinterlegen
sudo mkdir -p /etc/ssh/authorized_keys sudo touch /etc/ssh/authorized_keys/mytestuser sudo chown root:root /etc/ssh/authorized_keys/mytestuser sudo chmod 644 /etc/ssh/authorized_keys/mytestuser # Public Key eintragen sudo nano /etc/ssh/authorized_keys/mytestuser
und in der Datei den Inhalt von
mytestuser.pub
einfügen.
