Se desideri configurare un account sul tuo sistema che verrà utilizzato solo per trasferire file (e non per ssh al sistema), dovresti configurare SFTP Chroot Jail come spiegato in questo articolo.
In un tipico scenario sftp (quando chroot sftp non è configurato), se usi sftp, puoi vedere il file di root come mostrato di seguito.
Se vuoi concedere l'accesso sftp al tuo sistema a fornitori esterni per trasferire file, non dovresti usare sftp standard. Invece, dovresti configurare Chroot SFTP Jail come spiegato di seguito.
Ambiente SFTP non Chroot
Nell'esempio seguente (un tipico ambiente sftp), john può inviare sftp al sistema, visualizzare la cartella /etc e scaricare i file da lì.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls projects john.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Ambiente SFTP di Chroot
Nell'esempio seguente, john può inviare sftp al sistema e visualizzare solo la directory che hai designato affinché john esegua sftp (cioè /incoming).
Quando john prova a eseguire 'cd / etc', visualizzerà un messaggio di errore. Poiché SFTP è impostato in un ambiente chroot, john non può visualizzare nessun altro file nel sistema.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Ora che sai cos'è l'ambiente SFTP Chroot, vediamo come configurarlo.
1. Crea un nuovo gruppo
Crea un gruppo chiamato sftpusers. Solo gli utenti che appartengono a questo gruppo verranno automaticamente limitati all'ambiente chroot SFTP su questo sistema.
# groupadd sftpusers
2. Crea utenti (o Modifica utente esistente)
Supponiamo che tu voglia creare un utente guestuser a cui dovrebbe essere consentito solo di eseguire SFTP in un ambiente chroot e non dovrebbe essere autorizzato a eseguire SSH.
Il comando seguente crea guestuser, assegna questo utente al gruppo sftpusers, imposta /incoming come home directory, imposta /sbin/nologin come shell (che non consentirà all'utente di ssh e ottenere l'accesso alla shell).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Verifica che l'utente sia stato creato correttamente.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Se vuoi modificare un utente esistente e renderlo solo un utente sftp e metterlo nella jail chroot sftp, procedi come segue:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
In una nota correlata, se devi trasferire file da Windows a Linux, utilizza uno qualsiasi dei client sftp menzionati in questo elenco dei 7 principali client sftp.
3. Imposta il sottosistema sftp-server in sshd_config
Dovresti indicare a sshd di usare internal-sftp per sftp (invece del server sftp predefinito).
Modifica il file /etc/ssh/sshd_config e commenta la seguente riga:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Quindi, aggiungi la seguente riga al file /etc/ssh/sshd_config
Subsystem sftp internal-sftp
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
4. Specifica la directory Chroot per un gruppo
Vuoi inserire solo determinati utenti (cioè utenti che appartengono al gruppo sftpusers) nell'ambiente jail chroot. Aggiungi le seguenti righe alla fine di /etc/ssh/sshd_config
# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
In quanto sopra:
- Abbina sftpusers al gruppo:indica che le seguenti righe verranno abbinate solo per gli utenti che appartengono al gruppo sftpusers
- CrootDirectory /sftp/%u – Questo è il percorso che verrà utilizzato per chroot dopo l'autenticazione dell'utente. %u indica l'utente. Quindi, per john, questo sarà /sftp/john.
- ForceCommand internal-sftp – Forza l'esecuzione di internal-sftp e ignora qualsiasi comando menzionato nel file ~/.ssh/rc.
5. Crea directory principale sftp
Poiché abbiamo specificato /sftp come ChrootDirectory sopra, crea questa directory (che è equivalente alla tua tipica directory /home).
# mkdir /sftp
Ora, sotto /sftp, crea le singole directory per gli utenti che fanno parte del gruppo sftpusers. cioè gli utenti a cui sarà consentito solo di eseguire sftp e saranno in ambiente chroot.
# mkdir /sftp/guestuser
Quindi, /sftp/guestuser è equivalente a / per guestuser. Quando guestuser sftp al sistema ed esegue "cd /", vedranno solo il contenuto delle directory in "/sftp/guestuser" (e non il reale / del sistema). Questo è il potere del chroot.
Quindi, in questa directory /sftp/guestuser, crea qualsiasi sottodirectory che desideri venga visualizzata dall'utente. Ad esempio, crea una directory in entrata in cui gli utenti possono sftp i loro file.
# mkdir /sftp/guestuser/incoming
6. Imposta l'autorizzazione appropriata
Affinché chroot funzioni correttamente, devi assicurarti che le autorizzazioni appropriate siano impostate correttamente sulla directory che hai appena creato sopra.
Imposta la proprietà sull'utente e il gruppo sul gruppo sftpusers come mostrato di seguito.
# chown guestuser:sftpusers /sftp/guestuser/incoming
L'autorizzazione sarà simile alla seguente per la directory in entrata.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
L'autorizzazione sarà simile alla seguente per la directory /sftp/guestuser
# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Riavvia sshd e prova Chroot SFTP
Riavvia sshd:
# service sshd restart
Testare l'ambiente sftp di chroot. Come vedi sotto, quando gusetuser fa sftp e fa "cd /", vedranno solo la directory in entrata.
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Quando guestuser trasferisce qualsiasi file nella directory /incoming da sftp, si troverà effettivamente nella directory /sftp/guestuser/incoming sul sistema.