Die Version 2.5.0 des SFTPGo-Servers wurde veröffentlicht, die den Fernzugriff auf Dateien über die Protokolle SFTP, SCP/SSH, Rsync, HTTP und WebDav ermöglicht sowie den Zugang zu Git-Repositories über das SSH-Protokoll bereitstellt. Daten können sowohl von lokalen Dateisystemen als auch aus externen Speichern bereitgestellt werden, die mit Amazon S3, Google Cloud Storage und Azure Blob Storage kompatibel sind. Es besteht die Möglichkeit, Daten verschlüsselt zu speichern. Für die Speicherung von Benutzerdaten und Metadaten werden Datenbanken mit SQL-Unterstützung oder Schlüssel-Wert-Format verwendet, wie PostgreSQL, MySQL, SQLite, CockroachDB oder bbolt. Es gibt auch die Möglichkeit, Metadaten im Arbeitsspeicher zu speichern, ohne eine externe Datenbank anschließen zu müssen. Der Code des Projekts ist in Go geschrieben und wird unter der GPLv3-Lizenz verteilt.
In der neuen Version:
- Im Web-Interface wurde die Möglichkeit hinzugefügt, Fehlermeldungen auszublenden. Für den Administrator wurde im Web-Interface die Unterstützung für die Suche im Audit-Protokoll und den Export von Daten daraus integriert, sowie die Verwaltung von Listen ermöglicht. IP-Adressen und Netzwerken, die Möglichkeit zur Konfiguration von SMTP sowie von typischen ACME- und SFTP-Parametern wurde bereitgestellt. Im Web-Interface für Kunden wurde ein eigenes Login-Formular implementiert (statt Basic Auth), die Funktion zum Kopieren wurde hinzugefügt und die Begrenzung für Upload-Größen entfernt.

- Unterstützung für Passwortnutzungsrichtlinien wurde hinzugefügt, z. B. können Anforderungen an die Passwortsicherheit definiert und die Lebensdauer von Passwörtern festgelegt werden.
- Im EventManager wurde die Möglichkeit hinzugefügt, Benachrichtigungen über abgelaufene Passwörter anzuzeigen, eine Kopierfunktion wurde implementiert, Unterstützung für vorher aufgerufene Aktionen (Pre-*) sowie Trigger, die bei bestimmten Handlungen ausgelöst werden (z. B. ein Trigger, der beim Login des Benutzers aktiviert wird), wurde hinzugefügt.
- Die Möglichkeit zur Vergabe von Administratorrechten an Benutzer wurde implementiert.
- Im Kommandozeileninterface wurden Befehle zum Zurücksetzen des Administratorkennworts und zur Überprüfung der Dienstverfügbarkeit hinzugefügt.
- Unterstützung für bedingte Operatoren während der massenhaften Umbenennung von Dateien auf Seiten der Cloud-Anbieter wurde hinzugefügt.
- Unterstützung für das Tracking und automatisiertes Neustarten wurde hinzugefügt. TLS-Zertifikaten.
- Die Möglichkeit zur Definition eigener MIME-Typen für WebDAV wurde hinzugefügt.
- Interaktive Authentifizierung über die Tastatur ist standardmäßig für SSH aktiviert.
- Im tragbaren Modus besteht die Möglichkeit, Passwörter aus einer Datei zu laden.
- Experimentelle Unterstützung für den Terraform-Dienst wurde hinzugefügt.
Hauptfunktionen von SFTPGo:
- Für jedes Konto wird eine chroot-Isolierung angewendet, die den Zugriff auf das Home-Verzeichnis des Nutzers einschränkt. Es ist möglich, virtuelle Verzeichnisse zu erstellen, die auf Daten außerhalb des Benutzer-HOME-Verzeichnisses verweisen.
- Die Konten werden in einer virtuellen Benutzerdatenbank gespeichert, die nicht mit der systeminternen Benutzerdatenbank überlappt. Für die Speicherung der Benutzerdatenbank können SQLite, MySQL, PostgreSQL, bbolt und der Speicher im Arbeitsspeicher verwendet werden. Es stehen Werkzeuge zur Verfügung, um virtuelle und systeminterne Konten abzugleichen — eine direkte oder willkürliche Zuordnung ist möglich (ein systeminterner Benutzer kann einem anderen virtuellen Benutzer zugeordnet werden).
- Die Authentifizierung unterstützt öffentliche Schlüssel, SSH-Schlüssel und Passwörter (einschließlich interaktiver Authentifizierung mit passwortbasierter Eingabe über die Tastatur). Es können mehrere Schlüssel für jeden Benutzer zugewiesen werden, sowie die Konfiguration von Multi-Faktor- und Mehrstufen-Authentifizierung (zum Beispiel kann nach erfolgreicher Schlüssel-Authentifizierung zusätzlich ein Passwort angefordert werden).
- Für jeden Benutzer können unterschiedliche Authentifizierungsmethoden eingestellt werden, einschließlich der Definition eigener Methoden, die über externe Authenticator-Programme (zum Beispiel für LDAP-Authentifizierung) oder durch HTTP-API-Anfragen bereitgestellt werden.
- Es ist möglich, externe Handler oder HTTP-API-Aufrufe zu integrieren, um Benutzereinstellungen dynamisch zu ändern, bevor der Benutzer sich anmeldet. Die dynamische Erstellung von Benutzern während der Verbindung wird unterstützt.
- Unterstützung individueller Quoten für Datenvolumen und Anzahl der Dateien.
- Unterstützung für die Begrenzung der Bandbreite mit separaten Einstellungen für eingehenden und ausgehenden Datenverkehr sowie Beschränkungen für die Anzahl gleichzeitiger Verbindungen.
- Zugriffssteuerungsmechanismen, die benutzerspezifisch oder katalogbasiert arbeiten (z. B. kann die Anzeige der Dateiliste eingeschränkt, das Hochladen, Herunterladen, Überschreiben, Löschen, Umbenennen oder Ändern von Berechtigungen verboten sowie das Erstellen von Verzeichnissen oder symbolischen Links untersagt werden).
- Für jeden Benutzer können individuelle Netzwerkeinschränkungen festgelegt werden, zum Beispiel kann der Zugang nur von bestimmten IP-Adressen oder Subnetzen gestattet werden.
- Es wird unterstützt, Inhalte mit spezifischen Filteroptionen zu verbinden, die benutzerspezifisch oder katalogbasiert sind (z. B. können Uploads von Dateien mit bestimmten Dateierweiterungen blockiert werden).
- Es ist möglich, Handler zu binden, die bei verschiedenen Dateioperationen (Hochladen, Löschen, Umbenennen usw.) ausgeführt werden. Neben dem Aufruf von Handlern wird auch die Versendung von Benachrichtigungen in Form von HTTP-Anfragen unterstützt.
- Automatische Beendigung von inaktiven Verbindungen.
- Atomare Aktualisierung der Konfiguration ohne Unterbrechung der Verbindungen.
- Bereitstellung von Metriken für die Überwachung in Prometheus.
- Das HAProxy PROXY-Protokoll wird unterstützt, um Lastenausgleich oder Proxy-Verbindungen zu SFTP/SCP-Diensten ohne Verlust der ursprünglichen IP-Adresse des Nutzers zu ermöglichen.
- REST API zur Verwaltung von Benutzern und Verzeichnissen, zur Erstellung von Backups und zur Erstellung von Berichten über aktive Verbindungen.
- Webschnittstelle (http://127.0.0.1:8080/web) zur Konfiguration und Überwachung (auch die Konfiguration über reguläre Konfigurationsdateien wird unterstützt).

- Möglichkeit, Einstellungen in den Formaten JSON, TOML, YAML, HCL und envfile zu definieren.
- Unterstützung für SSH-Zugriff mit eingeschränktem Zugriff auf Systembefehle. Zum Beispiel ist das Ausführen von Befehlen, die für die Verwendung von Git erforderlich sind (git-receive-pack, git-upload-pack, git-upload-archive), und rsync sowie mehrerer integrierter Befehle (scp, md5sum, sha*sum, cd, pwd, sftpgo-copy und sftpgo-remove) erlaubt.
- Portable Modus zur gemeinsamen Nutzung eines gemeinsamen Verzeichnisses mit automatischer Erstellung von Anmeldedaten für die Verbindung, die über multicast DNS angekündigt werden.
- Integriertes Profilsystem zur Leistungsanalyse.
- Vereinfachter Prozess zur Migration von Linux-Systemkonten.
- Speicherung von Protokollen im JSON-Format.
- Unterstützung von virtuellen Verzeichnissen (z. B. kann der Inhalt eines bestimmten Verzeichnisses nicht aus dem lokalen Dateisystem, sondern aus einem externen Cloud-Speicher bereitgestellt werden).
- Unterstützung von cryptfs für die transparente Verschlüsselung von Daten während der Speicherung im Dateisystem und deren Entschlüsselung bei der Bereitstellung.
- Unterstützung für die Weiterleitung von Verbindungen zu anderen SFTP-Servern.
- Die Möglichkeit, SFTPGo als SFTP-Subsystem für OpenSSH zu verwenden.
- Die Möglichkeit, Konten- und vertrauliche Daten verschlüsselt unter Verwendung von KMS-Servern (Key Management Services) wie Vault, GCP KMS, AWS KMS zu speichern.
- Unterstützung für die Zwei-Faktor-Authentifizierung mit zeitlich begrenzten Einmal-Passwörtern (TOTP, RFC 6238). Authentifikatoren wie Authy und Google Authenticator können verwendet werden.
- Erweiterung der Funktionalität über Plugins. Beispielsweise sind Plugins verfügbar, die Unterstützung für zusätzliche Schlüsselmanagement-Services, Integration von Publish/Subscribe-Schemata sowie Speicherung und Suche von Ereignisinformationen in Datenbanken ermöglichen.
Quelle: opennet.ru


