So installierst du SFTPGo auf Ubuntu 22.04

SFTPGo ist ein kostenloser, quelloffener, voll ausgestatteter und hochgradig konfigurierbarer SFTP-Server mit optionaler HTTP/S-, FTP/S- und WebDAV-Unterstützung.
Es werden mehrere Speichersysteme unterstützt: lokales Dateisystem, verschlüsseltes lokales Dateisystem, S3 (kompatibel) Object Storage, Google Cloud Storage, Azure Blob Storage, andere SFTP-Server.

Alle unterstützten Funktionen werden auf der GitHub-Projektseite im Detail beschrieben.

SFTPGo ist für viele Betriebssysteme verfügbar, darunter Linux, Windows, macOS und FreeBSD.
In diesem Tutorial erfährst du, wie du SFTPGo auf einem Ubuntu 22.04 System installierst und wir werden die wichtigsten neuen Funktionen von v2.3.0 kennenlernen.

Voraussetzungen

  • Ein Ubuntu-Server 22.04.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.

UFW-Firewall einrichten

Aus Sicherheitsgründen empfiehlt es sich, die UFW-Firewall in deinem System zu installieren und zu konfigurieren. Installiere zunächst die UFW-Firewall mit dem folgenden Befehl:

sudo apt install ufw -y

SFTPGo verwendet in der Standardkonfiguration die folgenden TCP-Ports:

  • 2022 für den SFTP-Dienst.
  • 8080 für die Web-Admin-Benutzeroberflächen.

Wir müssen auch den OpenSSH-Port für die Serververwaltung zulassen.

Erlaube alle benötigten Ports mit den folgenden Befehlen:

sudo ufw allow OpenSSH
sudo ufw allow 2022/tcp
sudo ufw allow 8080/tcp

Aktiviere als Nächstes die UFW-Firewall, damit sie nach dem Neustart des Systems gestartet wird:

sudo ufw enable

Überprüfe den Status:

sudo ufw status

Du erhältst die folgende Ausgabe:

Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere 
2022/tcp ALLOW Anywhere 
8080/tcp ALLOW Anywhere 
OpenSSH (v6) ALLOW Anywhere (v6) 
2022/tcp (v6) ALLOW Anywhere (v6) 
8080/tcp (v6) ALLOW Anywhere (v6)

Installation von SFTPGo auf Ubuntu 22.04

Du kannst SFTPGo aus seinem PPA installieren.

Beginne damit, das PPA hinzuzufügen:

sudo add-apt-repository ppa:sftpgo/sftpgo
sudo apt update

Als nächstes installierst du SFTPGo:

sudo apt install sftpgo

Nach der Installation sollte SFTPGo bereits mit der Standardkonfiguration laufen und so konfiguriert sein, dass es beim Booten automatisch startet. Überprüfe seinen Status mit folgendem Befehl:

systemctl status sftpgo

SFTPGo-Installation abschließen

Öffne nun deinen Webbrowser und rufe den SFTPGo-Installationsassistenten über die URL auf:„http://<Ihr Server-IP/Hostname:8080>/“.
Du wirst auf die folgende Seite weitergeleitet:

Einrichtung

Gib deinen Admin-Benutzernamen und dein Passwort ein und klicke auf die Schaltfläche„Admin erstellen„.
Der neu erstellte Admin wird automatisch eingeloggt, sodass du deine SFTPGo-Benutzer erstellen kannst.

Weitere Informationen zum Anlegen von Benutzern findest du in der Anleitung „Erste Schritte“.

Neue Funktionen in v2.3.0

In den nächsten Abschnitten werden wir die wichtigsten neuen Funktionen von v2.3.0 kennenlernen.

Gruppen

Die Verwendung von Gruppen vereinfacht die Verwaltung von mehreren SFTPGo-Benutzern: Du kannst die Einstellungen einmal einer Gruppe zuweisen, anstatt sie mehrfach jedem einzelnen Benutzer zuzuweisen.

SFTPGo unterstützt zwei Arten von Gruppen:

  • primäre Gruppen
  • sekundäre Gruppen

Ein Benutzer kann Mitglied einer primären Gruppe und vieler sekundärer Gruppen sein. Je nach Gruppentyp werden die Einstellungen unterschiedlich vererbt.
Weitere Details findest du in der offiziellen Dokumentation.

Schauen wir uns ein Anwendungsbeispiel an.

Angenommen, du hast die folgenden Anforderungen:

  • jeder Benutzer muss auf ein lokales Heimatverzeichnis beschränkt sein, das den Benutzernamen als letztes Element des Pfades enthält, zum Beispiel /srv/sftpgo/data/<Benutzername>
  • für jeden Benutzer muss die maximale Upload-Größe für eine einzelne Datei auf 1 GB begrenzt sein
  • jeder Benutzer muss einen virtuellen S3-Ordner im Pfad /s3<Benutzername> zur Verfügung haben und jeder Benutzer kann nur auf einen bestimmten „Präfix“ des S3-Buckets zugreifen. Er darf nicht auf die Dateien anderer Benutzer zugreifen können
  • jeder Nutzer muss einen virtuellen S3-Ordner im Pfad /shared haben. Dies ist ein Ordner, der mit anderen Nutzern geteilt wird
  • eine Gruppe von Nutzern kann nur Inhalte im Pfad /shared herunterladen und auflisten, während eine andere Gruppe von Nutzern vollen Zugriff hat

Wir können diese Anforderungen leicht erfüllen, indem wir zwei Gruppen definieren.

Klicke in der SFTPGo WebAdmin-Benutzeroberfläche auf „Ordner“ und dann auf das „+“-Symbol.

Erstelle einen Ordner namens „S3private“.
Setze den Speicherplatz auf „AWS S3 (Compatible)“ und fülle die erforderlichen Parameter aus:

  • Bucket-Name
  • Region
  • Anmeldeinformationen: Zugangsschlüssel und Zugangsgeheimnis

S3-Ordner hinzufügen

Der wichtigste Teil ist der „Key Prefix“, den du auf users/%username%/ setzt.

S3-Präfix

Der „Key Prefix“ schränkt den Zugriff auf den angegebenen Bucket-Unterordner ein.
Der Platzhalter„%username%“ wird durch den zugehörigen Benutzernamen ersetzt.

Erstelle einen weiteren Ordner mit dem Namen „S3shared“ mit den gleichen Einstellungen wie „S3private“, aber setze diesmal den „Key Prefix“ auf shared/.
Der „Key Prefix“ hat keinen Platzhalter, so dass der Ordner mit einem statischen Pfad arbeitet, der sich nicht durch den zugehörigen Benutzer ändert.

Klicke auf „Gruppen“ und dann auf das „+“-Symbol und füge eine Gruppe namens „Primär“ hinzu.

Setze das „Home Dir“ auf /srv/sftpgo/data/%username%.

Gruppe hinzufügen

Wie zuvor wird der Platzhalter„%username%“ durch den zugehörigen Benutzernamen ersetzt.

Füge die beiden virtuellen Ordner zu dieser Gruppe hinzu und setze die „Maximale Datei-Upload-Größe“ auf 1073741824 Bytes (1 GB).

Virtuelle Ordner zur Gruppe hinzufügen

Füge eine neue Gruppe hinzu und nenne sie „SharedReadOnly“. Im Abschnitt ACL stellst du die Berechtigung für den Pfad /shared so ein, dass nur Lesezugriff gewährt wird.

Rechte für einzelne Verzeichnisse

Die Einrichtung der Gruppe ist nun abgeschlossen.

Jetzt können wir unsere Benutzer erstellen und die primäre Gruppe auf „Primary“ setzen.
Für die Benutzer, die nur Lesezugriff auf den /shared path benötigen, müssen wir auch „SharedReadOnly“ als sekundäre Gruppe festlegen.

Klicke auf „Benutzer“ und dann auf das „+“-Symbol und füge einen Benutzer namens „user1“ hinzu.

Benutzer hinzufügen

Dieser Benutzer erfüllt die oben genannten Einschränkungen und hat vollen Zugriff auf den /shared path.

Lege nun „user2“ an, der die oben genannten Beschränkungen einhält und nur Lesezugriff auf den /shared path hat.

Benutzer hinzufügen

Du kannst auch mehrere Benutzer gleichzeitig anlegen, indem du die Vorlagenfunktion nutzt.

Schablonen

Lege einfach Benutzernamen, Anmeldedaten und die Gruppenzugehörigkeit fest.

Benutzer aus Vorlagen hinzufügen

Jetzt kannst du dich mit einem beliebigen SFTP-Client wie FileZilla, WinSCP usw. anmelden und überprüfen, ob die Anforderungen erfüllt sind.

Externe Freigaben

Die gemeinsame Nutzung von Dateien mit externen Nutzern, ohne ein SFTPGo-Konto, ist eine häufige Anforderung. In v2.3.0 wurde diese Funktion verbessert.
Die folgenden Freigabemodi werden unterstützt:

  • nur lesen
  • nur schreiben
  • Lesen und Schreiben

Schauen wir uns an, wie sie funktionieren.
Melde dich in der WebClient-Benutzeroberfläche an und erstelle ein neues Verzeichnis namens „external_share“.

Verzeichnis erstellen

Füge einige Dateien zu dem neu erstellten Verzeichnis hinzu.

Wähle dann den Ordner „external_share“ aus und klicke auf das Symbol „Freigabe“.

Aktie

Der Bildschirm „Neue Freigabe hinzufügen“ erscheint, wähle den Bereich „Lesen“.
Optional kannst du die Anzahl der Nutzungen der Freigabe begrenzen, die Freigabe mit einem Passwort schützen, den Zugriff auf die Quell-IP-Adresse beschränken und ein automatisches Ablaufdatum festlegen.

Aktie hinzufügen

Dann wählst du in der Liste der Freigaben die gerade erstellte Freigabe aus und klickst auf das Symbol „Verknüpfen“. Es erscheint ein Pop-up-Fenster mit Anweisungen zur Nutzung der Freigabe.

Link teilen

Du kannst die freigegebenen Inhalte als eine einzige Zip-Datei herunterladen oder sie durchsuchen und Datei für Datei herunterladen.
Du kannst diese Links kopieren und sie an deine externen Kunden senden.

Der Link zur durchsuchbaren Freigabe erscheint, wie du auf dem folgenden Bildschirm sehen kannst.

Durchsuchbare Aktie

Jetzt bearbeitest du die Freigabe und änderst den Bereich auf „Schreiben“.
Der Link zur Freigabe wird auf dem folgenden Bildschirm angezeigt.

Nur schreiben teilen

Deine externen Nutzer können also Dateien hochladen, aber sie können die freigegebenen Inhalte nicht durchsuchen oder herunterladen.
Wenn du verhindern willst, dass bestehende Dateien überschrieben werden, kannst du die standardmäßigen SFTPGo-Berechtigungen für einzelne Verzeichnisse verwenden.

Bearbeite die Freigabe erneut und ändere den Bereich auf „Lesen/Schreiben“.
Der Link zur Freigabe zeigt den folgenden Bildschirm an.

Anteil lesen/schreiben

Jetzt können externe Nutzer das freigegebene Verzeichnis durchsuchen, herunterladen und neue Dateien hinzufügen.

Branding

Die Web-Oberflächen von SFTPGo können an dein Branding angepasst werden. Hier ist der entsprechende Konfigurationsabschnitt in /etc/sftpgo/sftogo.json:

"branding": {
   "web_admin": {
   "name": "",
   "short_name": "",
   "favicon_path": "",
   "logo_path": "",
   "login_image_path": "",
   "disclaimer_name": "",
   "disclaimer_path": "",
   "default_css": "",
   "extra_css": []
 },
 "web_client": {
   "name": "",
   "short_name": "",
   "favicon_path": "",
   "logo_path": "",
   "login_image_path": "",
   "disclaimer_name": "",
   "disclaimer_path": "",
   "default_css": "",
   "extra_css": []
 }
}

Wirf einen Blick auf den WebAdmin-Anmeldebildschirm.

WebAdmin Login

Der Standardname ist „SFTPGo WebAdmin“ und der Seitentitel lautet daher „SFTPGo WebAdmin – Login“.
Der standardmäßige „Kurzname“ ist „WebAdmin“ und die Anmeldeseite zeigt „WebAdmin – <SFTPGo Version>“.
Du kannst das Favicon anpassen, indem du einen „favicon_path“ einstellst und das Bild auf der linken Seite, indem du einen „login_image_path“ einstellst.
Wenn du „disclaimer_name“ und „disclaimer_path“ einstellst, wird unten auf der Anmeldeseite ein neuer Link angezeigt. Du kannst ihn für einen rechtlichen Disclaimer oder etwas anderes verwenden.

Du kannst das Logo und die Beschriftung oben links auf den Seiten für die eingeloggten Benutzer/innen anpassen, indem du „logo_path“ und „short_name“ einstellst.

Logo

SFTPGo verwendet das hervorragende SB Admin2-Theme. Wenn du kleinere Änderungen am Theme vornehmen möchtest, kannst du „extra_css“ so einstellen, dass es auf die Pfade deiner benutzerdefinierten CSS-Dateien zeigt.
Wenn du hingegen das SB Admin 2 CSS neu erstellst, kannst du „default_css“ auf den Pfad deines eigenen CSS setzen. Auf diese Weise vermeiden wir, dass wir das Standardthema laden und es dann mit deinen Änderungen überschreiben.

Alle konfigurierten Pfade (favicon_path, logo_path, etc.) müssen relativ zu „static_files_path“ sein.
Unter Linux ist der „static_files_path“ standardmäßig /usr/share/sftpgo/static. Du kannst zum Beispiel ein „Branding“-Verzeichnis erstellen und dort deine eigenen Ressourcen ablegen.
Zum Beispiel kannst du dein Favicon nach /usr/share/sftpgo/static/branding/favicon.ico kopieren und den „favicon_path“ auf /branding/favicon.ico setzen.

Du kannst alle Konfigurationsoptionen mit Hilfe von Umgebungsvariablen außer Kraft setzen, z.B. kann der Favicon-Pfad für den Web-Admin über die Umgebungsvariable SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH festgelegt werden.
Weitere Informationen zur Konfiguration von SFTPGo mithilfe von Umgebungsvariablen findest du hier.

Nachdem du die Konfigurationsdatei geändert hast, musst du den SFTPGo-Dienst neu starten, damit die Änderungen wirksam werden.

sudo systemctl restart sftpgo.service

OpenID Connect

Wenn du einen bestehenden Identitätsanbieter hast, unterstützt dieser wahrscheinlich den OpenID Connect Standard.

Du kannst nun die Benutzer deines Identitätsanbieters den SFTPGo-Administratoren/Benutzern zuordnen und dich mit deinem Identitätsanbieter am SFTPGo WebClient und an der WebAdmin-Benutzeroberfläche anmelden.

SFTPGo-Benutzer können auch automatisch nach einer erfolgreichen OpenID-Connect-Anmeldung erstellt werden, indem du einen Pre-Login-Hook definierst. Du kannst die Token-Claims-Felder so konfigurieren, dass sie dem Pre-Login-Hook zur Verfügung stehen, und dann deine eigene Logik beim Erstellen/Aktualisieren von SFTPGo-Benutzern innerhalb des Hooks implementieren.

In der offiziellen SFTPGo-Dokumentation werden die Schritte zur Integration von SFTPGo mit Keycloak erläutert. Andere Identitätsanbieter wie Google Identity, Azure Active Directory, Auth0 und OneLogin wurden von der SFTPGo-Community getestet und es wurde bestätigt, dass sie funktionieren.

Generell sollte jeder OpenID Connect Identitätsanbieter funktionieren, der die OpenID Connect Discovery Spezifikationen implementiert.

ACME

SFTPGo verfügt über ACME (Automatic Certificate Management Environment). So kannst du ganz einfach ein kostenloses Let’s Encrypt TLS-Zertifikat für die SFTPGo Web UI und REST API, den WebDAV-Dienst und den FTP-Dienst erhalten und erneuern.

Um ein Let’s Encrypt-Zertifikat zu erhalten, musst du eine Domain-Validierungsaufgabe lösen, die von einem ACME-Server (Automatic Certificate Management Environment) ausgestellt wird. Damit wird überprüft, ob du die Domain(s) besitzt, für die du ein Zertifikat beantragen willst. Es gibt verschiedene Typen von Herausforderungen, SFTPGo unterstützt die Typen „HTTP-01“ und „TLS-ALPN-01“.

Um das ACME-Protokoll verwenden zu können, brauchst du einen gültigen Domainnamen, der auf deine Server-IP zeigt.

Schauen wir uns eine Beispielkonfiguration an, bei der wir die folgenden Annahmen treffen:

  • wir brauchen ein TLS-Zertifikat für die Domain „sftpgo.com“.
  • wir haben bereits einen Webserver, der auf Port 80 für die Domain „sftpgo.com“ läuft, und der Web-Root-Pfad lautet /var/www/sftpgo.com

Öffne die SFTPGo-Konfigurationsdatei /etc/sftpgo/sftpgo.json, suche nach dem Abschnitt „acme“ und ändere ihn wie folgt:

"acme": {
  "domains": ["sftpgo.com"],
  "email": "<you email address here>",
  "key_type": "4096",
  "certs_path": "/var/lib/sftpgo/certs",
  "ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
  "renew_days": 30,
  "http01_challenge": {
    "port": 80,
    "proxy_header": "",
    "webroot": "/var/www/sftpgo.com"
  },
  "tls_alpn01_challenge": {
  "port": 0
 }
}

Stelle sicher, dass der Benutzer „sftpgo“ in das Verzeichnis /var/www/sftpgo.com schreiben kann, oder erstelle das Verzeichnis /var/www/sftpgo.com/.well-known/acme-challenge mit den entsprechenden Berechtigungen.

Registriere dein Konto und erhalte Zertifikate, indem du den folgenden Befehl ausführst:

sudo -E su - sftpgo -m -s /bin/bash -c 'sftpgo acme run -c /etc/sftpgo'

Done! Von nun an kümmert sich der SFTPGo-Dienst um die automatische Erneuerung der Zertifikate für die konfigurierten Domains.
Die Zertifikate werden standardmäßig im Verzeichnis /var/lib/sftpgo/certs gespeichert. Du kannst nun die SFTPGo-Dienste so konfigurieren, dass sie diese Zertifikate verwenden.
Ändere zum Beispiel für die Web-UI die SFTPGo-Konfigurationsdatei /etc/sftpgo/sftpgo.json wie folgt:

"httpd": {
  "bindings": [
   {
     "port": 9443,
     "address": "",
     "enable_web_admin": true,
     "enable_web_client": true,
     "enable_https": true,
     "certificate_file": "/var/lib/sftpgo/certs/sftpgo.com.crt",
     "certificate_key_file": "/var/lib/sftpgo/certs/sftpgo.com.key",
     .....

Starte den SFTPGo-Dienst neu, um die Änderungen zu übernehmen:

sudo systemctl restart sftpgo.service

Du kannst TLS für andere Geräte auf ähnliche Weise aktivieren.

Geo-IP-Filterung

Das SFTPGO Geo-IP-Filter-Plugin ermöglicht es, Verbindungen auf der Grundlage des geografischen Standorts der IP-Adressen der Clients anzunehmen oder abzulehnen.

Das Plugin kann MaxMind GeoLite2 und GeoIP2 Datenbanken lesen. Du musst eine Länderdatenbank im MMDB-Format herunterladen.

Schauen wir uns eine Beispielkonfiguration an.
Wir gehen von den folgenden Annahmen aus:

  • Das Geo-IP-Filter-Plugin befindet sich im Pfad /usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64
  • die Länderdatenbank befindet sich im Pfad /var/lib/sftpgo/GeoLite2-Country.mmdb
  • wir wollen nur Verbindungen aus Italien zulassen

Öffne die Konfigurationsdatei von SFTPGo/etc/sftpgo/sftpgo.json, suche nach dem Abschnitt „plugins“ und ändere ihn wie folgt:

"plugins": [
   {
     "type": "ipfilter",
     "cmd": "/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64",
     "args": ["serve", "--db-file", "/var/lib/sftpgo/GeoLite2-Country.mmdb", "--allowed-countries", "IT"],
     "sha256sum": "",
     "auto_mtls": true
   }
]

Starte den SFTPGo-Dienst neu, um die Änderungen zu übernehmen:

sudo systemctl restart sftpgo.service

Fertig!

In den SFTPGo-Protokollen wirst du so etwas sehen, wenn eine Verbindung aus einem verweigerten Land abgewiesen wird:

{"level":"debug","time":"2022-06-02T14:05:48.616","sender":"plugins.ipfilter.sftpgo-plugin-geoipfilter-linux-amd64","message":"[DEBUG] country not allowed: ip=XXX.XX.XXX.XXX country=NL"}

Andere SFTPGo-Plugins sind hier verfügbar.

Dateien und Verzeichnisse anhand von Shell-Mustern einschränken

SFTPGo unterstützt Shell-ähnliche Filter pro Benutzer und pro Verzeichnis: Dateien können anhand von Shell-ähnlichen Mustern zugelassen, verweigert und optional versteckt werden.

Hier ein paar Beispiele.
Angenommen, du möchtest alle Dateien mit den Erweiterungen jpg und png in einem bestimmten Verzeichnis verbieten.
Wähle den zu ändernden Benutzer aus, erweitere den Abschnitt „ACLs“ und füge eine Shell-ähnliche Mustereinschränkung hinzu.

Einschränkungen für einzelne Verzeichnisse

Auf diese Weise können Dateien mit png- und jpg-Erweiterungen nicht herunter- oder hochgeladen werden, sind aber weiterhin in der Verzeichnisliste sichtbar, wenn sie bereits vorhanden sind.
Du kannst sie ausblenden, indem du die Richtlinie auf „Versteckt“ setzt.

Mustereinschränkungen versteckte Richtlinie

Die Richtlinie „Versteckt“ wurde in v2.3.0 eingeführt.

Das könnte dich auch interessieren …