Autorizzazioni di scrittura utente SFTP con chroot


10

Ho una configurazione con solo utenti sftp:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Ricevo il seguente messaggio nel mio secure.log:

fatal: bad ownership or modes for chroot directory

Con la parola chiave match ci sono alcuni elementi di sicurezza ... le directory devono essere di proprietà di root e le directory devono essere chmod 755 (drwxr-xr-x). Pertanto, è impossibile per un utente disporre delle autorizzazioni di scrittura per le cartelle, se è scrivibile solo per l'utente root e impostato su ben non scrivibile per i gruppi a causa della sicurezza di ssh.

Qualcuno sa di un buon lavoro in giro?


Gli chrootutenti ed possiedono i loro ChrootDirectory? Possono accedervi?
John WH Smith,

Risposte:


2

Ho le stesse impostazioni sul nostro server. Usiamo la stessa configurazione di SSHD. Le home directory degli utenti sono di proprietà di root e al loro interno ci sono cartelle documentse di public_htmlproprietà dei rispettivi utenti. Gli utenti accedono quindi utilizzando SFTP e scrivono in quelle cartelle (non direttamente nella home). Poiché SSH non è consentito per loro, funziona perfettamente. Puoi regolare quali directory verranno create per i nuovi utenti in / etc / skel / (almeno in openSUSE, non ho molta familiarità con altre distro).

Un'altra possibilità sarebbe ACL ( documentazione di openSUSE ): può aggiungere l'autorizzazione di scrittura per il rispettivo utente per la sua directory home.


1
Per me, su Debian Jessie (8.10), l'impostazione di un ACL sulla casa dell'utente non funziona. Quando l'utente tenta di accedere con SFTP, ottienepacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin il

7

Recentemente abbiamo trovato una soluzione alternativa che va così:

/ Etc / ssh / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

permessi di directory:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Ora /homesoddisfa i requisiti per ChrootDirectorye non può essere elencato dagli utenti con restrizioni, ma gli sftponlyutenti non saranno in grado di accedere se le loro home directory sono configurate come al solito ( /home/$LOGNAME): nell'ambiente chroot le loro home directory non sono all'interno /homema direttamente sotto root ( /).

soluzione alternativa 1

Imposta le case degli utenti con restrizioni su come appaiono sotto chroot:

root@server:~ # usermod -d /username username

caveato 1

Se qualcuno degli utenti senza restrizioni o alcuni script di amministrazione usano l'espansione della tilde di bash come ~usernamesi espanderà /usernameora, il che non è ciò che si intende.

Anche l'amministratore che crea gli sftponlyutenti deve ricordare di utilizzare la home non predefinita. Risolvibile con una sceneggiatura. Che l'amministratore deve ricordare di usare.

soluzione alternativa 2

Questa è un'alternativa alla precedente che abbiamo finito per usare:

root@server:~ # ln -s . /home/home

Cioè creare un collegamento simbolico all'interno del /homeproprio dirname. Ora sotto chroot /home/usernamepunta alla stessa directory come senza chroot. Per gli utenti con accesso limitato con sftp sembrerebbe come /username. Questa directory è scrivibile al suo proprietario (utente con restrizioni). L'utente con restrizioni non può elencare il proprio genitore o la home directory di nessuno dei fratelli per nome.

L'unica cosa speciale di un sftponlyutente è la sua partecipazione al sftponlygruppo. Abbiamo trovato più facile gestire la soluzione alternativa 1.

avvertimenti 2

  1. Non puoi avere l'utente chiamato 'home' con una home directory /home/home
  2. Devi stare attento con gli script che attraversano la /homegerarchia e seguono i collegamenti simbolici.

Ciao artm o altri lettori, so che questo è un vecchio post ma potresti aiutarmi a capire la soluzione 2 per favore? Ho un utente (ftpuser) che deve essere imprigionato nella loro directory home (/ home / ftpuser /), questo posso farlo ma / home / ftpuser deve avere 755 ovviamente. Ho bisogno che ftpuser sia in grado di creare file e cartelle nella loro home directory. quale link simbolico devo creare e quale valore dovrebbe avere la mia ChrootDirectory per favore?
Sfacciato

4

È necessario creare una struttura all'interno della home directory dell'utente, come le directory dentro e fuori. Tali directory dovrebbero essere di proprietà dell'utente e lì sarà in grado di mettere e ottenere file.


0

È necessario creare la seguente struttura di directory:

/ Home / user

/ home / user / home / user <- la vera directory a cui l'utente avrà accesso

opzionalmente:

/home/user/.ssh/authorized_keys <- se vuoi autenticarti con una chiave pubblica


0

In riferimento alla sezione "permessi di directory" nella risposta di @artm (che ho appena testato) .. Ho trovato:

root@server:~ # chmod 111 /home <- Does not work

Non consente alla connessione sftp di funzionare su Ubuntu con l'esecuzione solo delle autorizzazioni su tutto ciò che è 111.

L'ho trovato:

root@server:~ # chmod 555 /home

Funziona con la connessione a sftp con i permessi di lettura ed esecuzione, ad es. 555. Non sono sicuro se debian vs altri sapori sono diversi, ma questo è ciò che funziona sulle mie installazioni di Ubuntu.


0

Quando si crea un utente, è necessario impostare la proprietà utilizzando chownsu ogni directory per ogni utente.

Per esempio:

sudo chown usertest:groupsftp /home/rootsftp/usertest
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.