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:
example@unixlinux.onlinerver:~ # chown root:root /home
example@unixlinux.online:~ # chmod 111 /home
example@unixlinux.online:~ # 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:
example@unixlinux.online:~ # 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:
example@unixlinux.online:~ # 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
/homegerarchia 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.