Limitazione di un utente SSH / SCP / SFTP a una directory


36

Esiste un modo semplice per limitare un utente SCP / SFTP a una directory? Tutti i metodi che ho incontrato mi richiedono di impostare un carcere chroot copiando i binari, ma non credo che dovrebbe essere necessario.

Risposte:


29

SSH Supporta il chrooting nativo di un utente SFTP. Hai solo bisogno di fornire

ChrootDirectory

Nel tuo file di configurazione sshd e riavvia sshd.

Se stai solo facendo sftp, non devi fare altro. Sfortunatamente, questo non funziona per SCP. Per la shell interattiva, dovrai copiare i binari e i nodi / dev nel chroot.

Un esempio di configurazione, per un solo utente, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Alcune cose da tenere presenti, dalla pagina man sshd_config:

    Tutti i componenti del percorso devono essere directory di proprietà root che non lo sono
    scrivibile da qualsiasi altro utente o gruppo. Dopo il chroot, sshd (8) cambia il
    directory di lavoro nella home directory dell'utente.

Cerca ChrootDirectory in man sshd_config per ulteriori informazioni.


2
Si noti che la parte che inizia con "Match user testuser" deve trovarsi alla fine del file, poiché includerà le righe di configurazione solo se l'utente è "testuser" da quel momento in poi.
Magnus,

1
È anche possibile Chroot solo per il protocollo SFTP, ma consentire comunque le normali connessioni SCP?
lanoxx,

1
Sulla mia macchina Ubuntu 14.04, era anche necessario cambiare la Subsystem sftp /usr/lib/openssh/sftp-serverlinea inSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthetething

@Magnus o fino a un'altra Matchsezione.
roaima,

12

Un chroot è un metodo ragionevolmente semplice. Poiché il sistema operativo dispone già di questa funzionalità di sicurezza, gli autori di demoni tendono a non tentare di reimplementarla.

Rssh viene fornito con una guida per l'impostazione di un carcere chroot. È nel CHROOTfile nella distribuzione di origine. In poche parole, devi avere:

  • Alcuni file binari, copiati dalla radice: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Le librerie ( {/usr,}/lib/lib*.so.[0-9]) che usano, allo stesso modo copiate
  • A /etc/passwd(molto probabilmente non una copia ma derivata dal master)
  • A pochi dispositivi: /dev/null, /dev/tty, e anche una /dev/logpresa per la registrazione (e avete bisogno di informare il demone di syslog per l'ascolto su quel socket)

Suggerimento extra che non è nella documentazione di rssh: se hai bisogno di alcuni file per essere accessibili in un jroot chroot, puoi usare bindfs o Linux mount --bindper creare gerarchie di directory esterne al di fuori del jail. bindfsconsente alla directory rimontata di disporre di autorizzazioni più restrittive, ad esempio di sola lettura. (A mount --bindmeno che non si applichi una patch del kernel; Debian ha incluso questa patch da East Lenny ma la maggior parte delle altre distribuzioni non lo hanno dal 2011.)


7

Potresti voler guardare scponly (o più recentemente, rssh ); è essenzialmente una shell di login che può essere usata solo per avviare scp o il sottosistema sftpd. Nella scponlycvariante esegue un chroot prima di attivare il sottosistema in questione.


scponly sembra deprecato, almeno in Ubuntu
tobixen il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.