Come posso chroot gli utenti SSH sftp-only nelle loro case?

111

Voglio dare a un client l'accesso al mio server, ma voglio limitare quegli utenti alle loro directory home. Collegherò i file in qualsiasi file che voglio che siano in grado di vedere.

Ho creato un utente chiamato bob e l'ho aggiunto a un nuovo gruppo chiamato sftponly . Hanno una directory home a /home/bob . Ho cambiato la shell in /bin/false per interrompere gli accessi SSH. Ecco la loro /etc/passwd line:

bob:x:1001:1002::/home/bob:/bin/false

Ho anche modificato /etc/ssh/sshd_config per includere quanto segue:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Quando provo ad accedere come loro, ecco cosa vedo

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Se commento la riga ChrootDirectory , posso inserire SFTP ma poi hanno libero accesso al server. Ho trovato che ChrootDirectory /home funziona, ma dà comunque accesso a qualsiasi directory home. Ho provato in modo esplicito ChrootDirectory /home/bob ma non funziona neanche.

Che cosa sto sbagliando? Come posso limitare bob a /home/bob/ ?

---- EDIT -----

Okay, ho dato un'occhiata a /var/log/auth.log e ho visto questo:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

Non sono completamente sicuro di cosa sta succedendo lì, ma suggerisce che c'è qualcosa di sbagliato nella directory dell'utente. Ecco l'output ls -h /home :

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob
    
posta Oli 09.05.2012 - 15:43
fonte

3 risposte

111

Tutto questo dolore è dovuto a diversi problemi di sicurezza come descritto qui . Fondamentalmente la directory chroot deve essere di proprietà di root e non può essere un accesso di gruppo-scrittura. Bello. Quindi, in pratica, devi trasformare il tuo chroot in una cella di attesa e in che puoi avere il tuo contenuto modificabile.

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

E bam, puoi accedere e scrivere in /writable .

    
risposta data Oli 09.05.2012 - 16:21
fonte
52

Per eseguire il chroot di una directory SFTP, è necessario

  1. Crea un utente e impone a root di essere proprietario di esso

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. Cambia la posizione del sottosistema in / etc / ssh / sshd_config:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    e creare una sezione utente alla fine del file (ssh può morire di rinascita se posta dopo la riga Sottosistema):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
risposta data josircg 25.10.2012 - 19:54
fonte
4

Ho passato l'intera giornata a cercare di ottenere una condivisione di rete sul mio lampone. Volevo bloccare l'utente in modo che non fosse in grado di navigare nell'intero file system, nessun accesso all'accesso ssh e volevo avere accesso in scrittura alla condivisione di rete.

Ed ecco come ho funzionato:

Per prima cosa ho creato un utente:

sudo useradd netdrive

Poi modifica /etc/passwd e assicurati che abbia /bin/false per l'utente, quindi la riga era:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

Ho modificato /etc/ssh/sshd_config per includere:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Proprietario della directory home modificato e permessi:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

Ok, dopo tutto questo sono riuscito a connettermi usando sshfs ma in modalità di sola lettura. Cosa dovevo fare per ottenere una cartella scrivibile:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

È stato così, ha funzionato senza ulteriori modifiche. Nota che ho solo permessi scrivibili per utente , non per il gruppo come molte altre soluzioni online. Sono stato in grado di creare / eliminare / modificare / rinominare file / cartelle senza problemi.

Quando accedete usando sshfs con l'utente netdrive a causa della configurazione di chroot vedrei solo le cose memorizzate nella directory /home/netdrive/ del server, perfetta. La struttura della directory /home/netdrive/home/netdrive/ ripetuta è ciò che ha fatto sì che funzionasse con una soluzione di chroot ssh scrivibile pulita.

Ora ho intenzione di spiegare sotto i problemi che ho avuto:

Probabilmente non dovresti eseguire i seguenti paragrafi :

Dopo aver esaminato le soluzioni di cui sopra (e molti altri in rete che usavano anche acl (access control lists)) non ero ancora in grado di farlo funzionare perché quello che ho fatto dopo è stato:

Quanto segue NON funziona per me:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Poiché l'utente netdrive non era ancora in grado di scrivere in quella directory /home/netdrive/writable/ nonostante possedesse la cartella e disponesse delle autorizzazioni. Allora ho fatto:     sudo chmod 775 / home / netdrive / scrivibile / E ora potevo creare una directory ed eliminarla, ma non ero in grado di modificarla perché era stata creata senza permessi di scrittura di gruppo. Qui da quello che ho visto sulla rete la gente usa acl per risolverlo. Ma non ero contento di questo dato che dovevo installare acl , quindi configurare i mount point, ecc. Inoltre non ho idea del perché avrei bisogno del permesso group per scrivere in una cartella di proprietà del stesso utente.

Sembra che per qualche ragione creare /home/netdrive/home/netdrive e dare la proprietà all'ultima cartella netdrive sono riuscito a far funzionare tutto senza fare casino con i permessi group .

    
risposta data mihai.ile 18.07.2015 - 19:58
fonte

Leggi altre domande sui tag