Di recente abbiamo trovato una soluzione che funziona così:
/etc/ssh/sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
autorizzazioni directory:
[email protected]:~ # chown root:root /home
[email protected]:~ # chmod 111 /home
[email protected]:~ # chmod 700 /home/*
Ora /home
soddisfa i requisiti per ChrootDirectory
e non può essere elencato da utenti con restrizioni, ma sftponly
gli utenti non saranno in grado di accedere se le loro home directory sono configurate come al solito (/home/$LOGNAME
):sotto l'ambiente chroot le loro home directory non sono all'interno di /home
ma direttamente sotto root (/
).
soluzione alternativa 1
Imposta le case degli utenti con restrizioni su come appaiono sotto chroot:
[email protected]:~ # usermod -d /username username
cavete 1
Se qualcuno degli utenti senza restrizioni o qualche script di amministrazione usa l'espansione tilde di bash come ~username
si espanderà a /username
ora, che non è ciò che si intende.
Anche l'amministratore che crea sftponly
gli utenti devono ricordarsi di utilizzare home non predefinita. Risolvibile con uno script. Che l'amministratore deve ricordarsi di utilizzare.
soluzione 2
Questa è un'alternativa alla precedente che abbiamo finito per usare:
[email protected]:~ # ln -s . /home/home
Cioè creare un collegamento simbolico all'interno di /home
al proprio dirname. Ora sotto chroot /home/username
punta alla stessa directory senza chroot. Per gli utenti con restrizioni che hanno effettuato l'accesso con sftp, apparirà come /username
. Questa directory è scrivibile dal suo proprietario (utente con restrizioni). L'utente con restrizioni non può elencare per nome le sue directory padre o home di nessuno dei fratelli.
L'unica cosa speciale di un sftponly
utente è la sua partecipazione al sftponly
gruppo. Abbiamo trovato più facile da gestire rispetto alla soluzione alternativa 1.
cavete 2
- Non puoi avere un utente chiamato 'home' con una home directory
/home/home
- Devi stare attento con gli script che attraversano
/home
gerarchia e seguire i collegamenti simbolici.
Devi creare una struttura all'interno della home directory dell'utente, come in e out dirs. Quelle directory dovrebbero essere di proprietà dell'utente e lì sarà in grado di mettere e ottenere file.
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 sono presenti le cartelle documents
e public_html
di proprietà dei rispettivi utenti. Gli utenti quindi accedono utilizzando SFTP e scrivono in quelle cartelle (non direttamente in 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 distribuzioni).
Un'altra possibilità sarebbe ACL (documentazione openSUSE) - può aggiungere il permesso di scrittura per il rispettivo utente per la sua home directory.