Ricerca nel sito web

Come installare SFTPGo su Ubuntu 22.04


Su questa pagina

  1. Prerequisiti
  2. Imposta firewall UFW
  3. Installazione di SFTPGo su Ubuntu 22.04
  4. Completa l'installazione di SFTPGo
  5. Nuove funzionalità nella v2.3.0
    1. Gruppi
    2. Condivisioni esterne
    3. Marchio
    4. Connetti OpenID
    5. ACME
    6. Filtro Geo-IP
    7. Limita file e directory in base a modelli di shell

    SFTPGo è un server SFTP gratuito, open source, completo e altamente configurabile con supporto HTTP/S, FTP/S e WebDAV opzionale.
    Sono supportati diversi backend di archiviazione: file system locale, file system locale crittografato, archiviazione oggetti S3 (compatibile) , Google Cloud Storage, Azure Blob Storage, altri server SFTP.

    Tutte le funzionalità supportate sono descritte in dettaglio nella pagina del progetto GitHub.

    SFTPGo è disponibile per molti sistemi operativi tra cui Linux, Windows, macOS, FreeBSD.
    In questo tutorial imparerai come installare SFTPGo su un sistema Ubuntu Ubuntu 22.04 ed esplorerai bene le principali nuove funzionalità introdotte nella v2.3.0.

    Prerequisiti

    • Un server Ubuntu 22.04.
    • Un utente non root con privilegi sudo.

    Configura il firewall UFW

    Per motivi di sicurezza, si consiglia di installare e configurare il firewall UFW nel proprio sistema. Innanzitutto, installa il firewall UFW con il seguente comando:

    sudo apt install ufw -y

    SFTPGo utilizza le seguenti porte TCP con la configurazione predefinita:

    • 2022 per il servizio SFTP.
    • 8080 per le interfacce utente di amministrazione web.

    Dobbiamo anche consentire la porta OpenSSH per l'amministrazione del server.

    Consenti tutte le porte richieste utilizzando i seguenti comandi:

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

    Successivamente, abilita l'avvio del firewall UFW dopo il riavvio del sistema:

    sudo ufw enable

    Controlla lo stato:

    sudo ufw status

    Otterrai il seguente output:

    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)

    Installazione di SFTPGo su Ubuntu 22.04

    Puoi installare SFTPGo dal suo PPA.

    Inizia aggiungendo il PPA:

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

    Prossima installazione SFTPGo:

    sudo apt install sftpgo

    Dopo l'installazione SFTPGo dovrebbe essere già in esecuzione con la configurazione predefinita e configurato per l'avvio automatico all'avvio, verificarne lo stato utilizzando il seguente comando:

    systemctl status sftpgo

    Completa l'installazione di SFTPGo

    Ora, apri il tuo browser web e accedi all'installazione guidata di SFTPGo utilizzando l'URL: \http:///\.
    Verrai reindirizzato alla seguente pagina:

    Fornisci il nome utente e la password dell'amministratore e fai clic sul pulsante \Crea amministratore\.
    L'amministratore appena creato effettuerà automaticamente l'accesso, così potrai creare i tuoi utenti SFTPGo.

    Per maggiori dettagli sulla creazione di utenti puoi dare un'occhiata alla Guida introduttiva.

    Nuove funzionalità nella v2.3.0

    Esploriamo le principali nuove funzionalità introdotte nella v2.3.0 nelle prossime sezioni.

    Gruppi

    L'utilizzo dei gruppi semplifica l'amministrazione di più utenti SFTPGo: puoi assegnare le impostazioni una volta a un gruppo, anziché più volte a ogni singolo utente.

    SFTPGo supporta due tipi di gruppi:

    • gruppi primari
    • gruppi secondari

    Un utente può essere membro di un gruppo principale e di molti gruppi secondari. A seconda del tipo di gruppo, le impostazioni vengono ereditate in modo diverso.
    Puoi trovare maggiori dettagli consultando la documentazione ufficiale.

    Vediamo alcuni esempi di utilizzo qui.

    Supponiamo di avere i seguenti requisiti:

    • ogni utente deve essere limitato a una home directory locale contenente il nome utente come ultimo elemento del percorso, ad esempio /srv/sftpgo/data/
    • per ogni utente, la dimensione massima di caricamento per un singolo file deve essere limitata a 1 GB
    • ogni utente deve disporre di una cartella virtuale S3 disponibile nel percorso /s3 e ogni utente può accedere solo a un \prefisso\ specificato del bucket S3. Non deve essere in grado di accedere ai file di altri utenti
    • ogni utente deve disporre di una cartella virtuale S3 disponibile nel percorso /shared. Questa è una cartella condivisa con altri utenti
    • un gruppo di utenti può solo scaricare ed elencare i contenuti nel percorso /shared mentre un altro gruppo di utenti ha accesso completo

    Possiamo facilmente soddisfare questi requisiti definendo due gruppi.

    Dall'interfaccia utente di SFTPGo WebAdmin, fare clic su \Cartelle\ e quindi sull'icona \+\.

    Crea una cartella denominata \S3private\.
    Imposta lo spazio di archiviazione su \AWS S3 (Compatibile)\ e inserisci i parametri richiesti:

    • nome del secchio
    • regione
    • credenziali: chiave di accesso e segreto di accesso

    La parte importante è il \Key Prefix\, impostalo su users/%username%/.

    Il \Key Prefix\ limita l'accesso alla sottocartella del bucket specificata.
    Il segnaposto \%username%\ verrà sostituito con il nome utente associato.

    Crea un'altra cartella denominata \S3shared\ con le stesse impostazioni di \S3private\, ma questa volta imposta \Key Prefix\ su shared/.
    \Key Prefix\ non ha segnaposto, quindi il folder funzionerà su un percorso statico che non cambierà in base all'utente associato.

    Ora fai clic su \Gruppi\ e poi sull'icona \+\ e aggiungi un gruppo chiamato \Primario\.

    Imposta \Home Dir\ su /srv/sftpgo/data/%username%.

    Come prima, il segnaposto \%username%\ verrà sostituito con il nome utente associato.

    Aggiungi le due cartelle virtuali a questo gruppo e imposta la \Dimensione massima caricamento file\ su 1073741824 byte (1 GB).

    Aggiungere un nuovo gruppo e denominarlo \SharedReadOnly\, nella sezione ACL impostare l'autorizzazione sul percorso /shared in modo che venga concesso l'accesso in sola lettura.

    La configurazione del gruppo è ora completa.

    Ora possiamo creare i nostri utenti e impostare il gruppo principale su \Primario\.
    Per gli utenti che necessitano dell'accesso in sola lettura al percorso /shared, dobbiamo anche impostare \SharedReadOnly\ come gruppo secondario.

    Fare clic su \Utenti\ e poi sull'icona \+\ e aggiungere un utente chiamato \user1\.

    Questo utente rispetta le restrizioni di cui sopra e ha pieno accesso al percorso /shared.

    Ora crea \user2\ che rispetti le restrizioni di cui sopra e abbia accesso in sola lettura al percorso /shared.

    Puoi anche creare più utenti contemporaneamente utilizzando la funzione modello.

    Basta impostare nomi utente, credenziali e l'appartenenza al gruppo.

    Ora puoi accedere con qualsiasi client SFTP come FileZilla, WinSCP ecc. e verificare che i requisiti siano soddisfatti.

    Condivisioni esterne

    La condivisione di file con utenti esterni, senza un account SFTPGo, è un requisito comune. Nella versione 2.3.0 questa funzione è stata migliorata.
    Sono supportate le seguenti modalità di condivisione:

    • sola lettura
    • solo scrittura
    • leggere e scrivere

    Vediamo come funzionano.
    Accedi all'interfaccia utente WebClient e crea una nuova directory denominata \external_share\.

    Aggiungi alcuni file alla directory appena creata.

    Quindi selezionare la cartella \condivisione_esterna\ e fare clic sull'icona \Condividi\.

    Apparirà la schermata \Aggiungi una nuova condivisione\, selezionare l'ambito \Lettura\.
    Facoltativamente, puoi limitare il numero di volte in cui la condivisione può essere utilizzata, proteggere la condivisione con una password, limitare l'accesso in base all'indirizzo IP di origine, impostare una data di scadenza automatica.

    Quindi, dall'elenco delle condivisioni, seleziona la condivisione appena creata e fai clic sull'icona \Link\. Apparirà una finestra pop-up con le istruzioni su come utilizzare la condivisione.

    Puoi scaricare i contenuti condivisi come un singolo file zip oppure puoi sfogliarli e scaricarli file per file.
    Puoi copiare questi link e inviarli ai tuoi clienti esterni.

    Il collegamento alla condivisione navigabile apparirà come puoi vedere nella schermata seguente.

    Ora modifica la condivisione e cambia l'ambito in \Scrivi\.
    Il link alla condivisione mostrerà la seguente schermata.

    In questo modo i tuoi utenti esterni possono caricare file, ma non possono sfogliare o scaricare i contenuti condivisi.
    Se desideri impedire la sovrascrittura di file esistenti, puoi utilizzare le autorizzazioni SFTPGo standard per directory.

    Modifica nuovamente la condivisione e cambia l'ambito in \Lettura/Scrittura\.
    Il collegamento alla condivisione mostrerà la seguente schermata.

    Così ora gli utenti esterni possono sfogliare, scaricare e aggiungere nuovi file alla directory condivisa.

    Marchio

    Le interfacce utente web di SFTPGo possono essere personalizzate in base al tuo brand. Ecco la sezione di configurazione pertinente 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": []
    }
    }

    Dai un'occhiata alla schermata di accesso di WebAdmin.

    Il \nome\ predefinito è \SFTPGo WebAdmin\ e quindi il titolo della pagina è \SFTPGo WebAdmin - Login\.
    Il \nome breve\ predefinito è \WebAdmin\ e quindi il login pagina mostra \WebAdmin - \.
    Puoi personalizzare la favicon impostando un \favicon_path\ e l'immagine a sinistra impostando un \login_image_path\.
    Se imposti \disclaimer_name\ e \disclaimer_path\, un nuovo link apparirà in fondo alla pagina di login. Puoi usarlo per un disclaimer legale o qualsiasi altra cosa.

    Puoi personalizzare il logo e l'etichetta in alto a sinistra delle pagine per gli utenti registrati impostando \logo_path\ e \short_name\.

    SFTPGo utilizza l'eccellente tema SB Admin2. Se desideri apportare alcune modifiche minori al tema, puoi impostare \extra_css\ in modo che punti ai percorsi dei tuoi file CSS personalizzati.
    Se, invece, ricostruisci il CSS di SB Admin 2, puoi imposta \default_css\ sul percorso del tuo CSS personalizzato. In questo modo evitiamo di caricare il tema predefinito e quindi di sovrascriverlo con le tue modifiche.

    Tutti i percorsi configurati (favicon_path, logo_path, ecc..), devono essere relativi a \static_files_path\.
    Su Linux il \static_files_path\ predefinito è /usr/share/sftpgo/static, puoi creare, ad esempio, una directory \branding\ e posizionare lì le tue risorse personalizzate.
    Ad esempio, puoi copiare la tua favicon in /usr/share/sftpgo/static/branding/favicon.ico e impostare \favicon_path\ in /branding/favicon.ico.

    Puoi sovrascrivere qualsiasi opzione di configurazione utilizzando le variabili di ambiente, ad esempio il percorso della favicon dell'amministratore web può essere impostato utilizzando la variabile di ambiente SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH.
    Ulteriori dettagli sulla configurazione di SFTPGo utilizzando le variabili di ambiente sono disponibili qui.

    Dopo aver modificato il file di configurazione, è necessario riavviare il servizio SFTPGo per applicare le modifiche.

    sudo systemctl restart sftpgo.service

    Connetti ID aperto

    Se disponi di un provider di identità esistente, è probabile che supporti lo standard OpenID Connect.

    Ora puoi mappare gli utenti del tuo provider di identità agli amministratori/utenti SFTPGo e quindi puoi accedere a SFTPGo WebClient e WebAdmin UI utilizzando il tuo provider di identità.

    Gli utenti SFTPGo possono anche essere creati automaticamente dopo un accesso OpenID Connect riuscito definendo un hook di pre-accesso. È possibile configurare i campi delle attestazioni del token in modo che siano resi disponibili per l'hook di pre-accesso e quindi implementare la propria logica personalizzata durante la creazione/l'aggiornamento degli utenti SFTPGo all'interno dell'hook.

    La documentazione ufficiale di SFTPGo spiega i passaggi per integrare SFTPGo con Keycloak. Altri provider di identità come Google Identity, Azure Active Directory, Auth0, OneLogin sono stati testati dalla community SFTPGo e ne è stato confermato il funzionamento.

    In generale, qualsiasi provider di identità OpenID Connect che implementa le specifiche OpenID Connect Discovery dovrebbe funzionare.

    ACME

    SFTPGo ha ACME (Automatic Certificate Management Environment) integrato e quindi puoi facilmente ottenere e rinnovare un certificato Lets encrypt TLS gratuito per l'interfaccia utente Web SFTPGo e l'API REST, il servizio WebDAV e il servizio FTP.

    L'ottenimento di un certificato Lets Encrypt comporta la risoluzione di un problema di convalida del dominio emesso da un server ACME (Automatic Certificate Management Environment). Questa sfida verifica la tua proprietà dei domini per i quali stai cercando di ottenere un certificato. Esistono diversi tipi di sfida, SFTPGo supporta i tipi di sfida \HTTP-01\ e \TLS-ALPN-01\.

    Per poter utilizzare il protocollo ACME è necessario un nome di dominio valido puntato con l'IP del tuo server.

    Vediamo un esempio di configurazione, facciamo le seguenti ipotesi:

    • abbiamo bisogno di un certificato TLS per il dominio \sftpgo.com\.
    • abbiamo un server web esistente già in esecuzione sulla porta \80\ per il dominio \sftpgo.com\ e il percorso root web è /var/www/sftpgo.com

    Apri il file di configurazione di SFTPGo /etc/sftpgo/sftpgo.json, cerca la sezione \acme\ e modificala come segue:

    "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
    }
    }

    Assicurati che l'utente \sftpgo\ possa scrivere nella directory /var/www/sftpgo.com o pre-creare la directory /var/www/sftpgo.com/.well-known/acme-challenge con le autorizzazioni appropriate .

    Registra il tuo account e ottieni i certificati eseguendo il seguente comando:

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

    Fatto! D'ora in poi, il servizio SFTPGo si occuperà del rinnovo automatico dei certificati per i domini configurati.
    I certificati vengono archiviati nella directory /var/lib/sftpgo/certs per impostazione predefinita. Ora puoi configurare i servizi SFTPGo per utilizzare questi certificati.
    Ad esempio, per l'interfaccia utente Web, modifica il file di configurazione SFTPGo /etc/sftpgo/sftpgo.json come segue:

    "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",
    .....

    Riavvia il servizio SFTPGo per applicare le modifiche:

    sudo systemctl restart sftpgo.service

    Puoi abilitare TLS per altri servizi in modo simile.

    Filtraggio IP geografico

    Il plug-in di filtraggio SFTPGO Geo-IP consente di accettare/rifiutare le connessioni in base alla posizione geografica degli indirizzi IP dei client.

    Il plug-in può leggere i database MaxMind GeoIP2. È necessario scaricare un database dei paesi in formato MMDB.

    Vediamo un esempio di configurazione.
    Facciamo le seguenti ipotesi:

    • il plug-in di filtraggio Geo-IP si trova nel percorso /usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64
    • il database dei paesi si trova nel percorso /var/lib/sftpgo/GeoLite2-Country.mmdb
    • vogliamo consentire solo collegamenti dall'Italia

    Apri il file di configurazione SFTPGo /etc/sftpgo/sftpgo.json, cerca la sezione \plugins\ e modificala come segue:

    "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
    }
    ]

    Riavvia il servizio SFTPGo per applicare le modifiche:

    sudo systemctl restart sftpgo.service

    Fatto!

    Nei registri SFTPGo vedrai qualcosa di simile quando una connessione da un paese negato viene rifiutata:

    {"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"}

    Altri plugin SFTPGo sono disponibili qui.

    Limita file e directory in base a modelli di shell

    SFTPGo supporta i filtri di modelli simili a shell per utente e per directory: i file possono essere consentiti, negati e facoltativamente nascosti in base a modelli simili a shell.

    Vediamo alcuni esempi.
    Supponiamo che tu voglia rifiutare tutti i file con estensione jpg e png in una particolare directory.
    Seleziona l'utente da modificare, espandi la sezione \ACLs\ e aggiungi una shell restrizione del modello.

    In questo modo i file con estensione png e jpg non possono essere scaricati o caricati ma sono comunque visibili nell'elenco delle directory se già presenti.
    Puoi nasconderli impostando il criterio su \Nascosto\.

    Il criterio \Nascosto\ è stato introdotto nella v2.3.0.