GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare Chroot SFTP in Linux (consenti solo SFTP, non SSH)

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.


Linux
  1. Come configurare le jail chroot di Linux

  2. Come consentire SFTP e non consentire SSH?

  3. Come configurare SSH senza password su Linux

  4. Come configurare Rsync con SSH su UNIX / Linux (rsync senza password)

  5. Come configurare il tunnel SSH inverso su Linux

Come configurare il server SFTP Chroot in Linux

Come configurare l'accesso SSH senza password in Linux con chiavi

Come creare alias SSH in Linux

Come consentire o negare l'accesso SSH a un particolare utente o gruppo in Linux

Come configurare SFTP in chroot in Linux

Come impostare l'autenticazione a più fattori per SSH in Linux