Soluzione 1:
Ehi @emmdee Mi ci è voluta un'eternità per capire che c'è un trucco semplice e carino. Devi solo rendere root il proprietario di una cartella principale in cui desideri sFTP, quindi utilizzare il comando force per dire a un utente specifico di caricare una DIR specifica all'interno della directory CHROOT.
Nel tuo caso nel caso tu voglia /home/sftpuser
per essere la directory scrivibile, dovrai creare root il proprietario di /home
directory quindi vai avanti e forza comando su /sftpuser
come directory di destinazione per quell'utente o un gruppo.
Il tuo /etc/ssh/sshd_conf
avrà questo aspetto:
Match User sftpuser
ChrootDirectory /home
ForceCommand internal-sftp -d /sftpuser
AllowTCPForwarding no
X11Forwarding no
Una volta fatto ciò devi dare i giusti permessi come detto prima, il root dovrebbe possedere la directory genitore(chroot) /home
mentre l'utente dovrebbe possedere la directory final(-d) /sftpuser
. Presumo che tu abbia un gruppo di utenti sFTP chiamato sftpusers , altrimenti; basta omettere il gruppo dai comandi successivi o sostituirlo invece con gli utenti (root nel primo e sftpusers nel secondo). Dato che stiamo usando -R nella riga di comando per l'ereditarietà, dovrai iniziare con la proprietà root prima della proprietà utente come segue:
sudo chown -R root:sftpusers /home
quindi per l'utente puoi eseguire:
sudo chown -R sftpuser:sftpusers /home/sftpuser
Non sono sicuro che sia necessario, ma puoi sempre riavviare il servizio sshd per assicurarti che tutte le impostazioni vengano ricaricate di nuovo:
sudo systemctl restart sshd.service
Questo dovrebbe funzionare a meraviglia, si spera, ho avuto un problema simile e la soluzione era lì che mi guardava negli occhi per la maggior parte del tempo.
Saluti!
Soluzione 2:
So che sono passati un paio d'anni, ma questo post mi ha portato al 98% del percorso. dopo aver cercato a lungo.
Per fare in modo che gli utenti possano eseguire il chroot e inserirli automaticamente nella loro directory con i permessi di scrittura, ho utilizzato il metodo suggerito da African Idiot e ho anche reso la directory chroot originale di proprietà dell'utente root e del gruppo ftp.
Ma la chiave per tenerli in quella cartella e non essere in grado di .. e tentare di sfogliare le cartelle di altri utenti, era creare la cartella chmod 710 (rwx--x---)
in modo che il gruppo ftp abbia eseguito per eseguire internal-sftp -d /%u (ovvero cd nella sottodirectory degli utenti) e ora se provo a cd ..
nella directory superiore, perché non c'è lettura per nessuno tranne root, fallisce.
drwx--x--- 6 root sftpusers uarch 6 Feb 19 15:34 ./
drwxr-xr-x 5 root root uarch 5 Feb 4 09:13 ../
drwxrwx--- 3 anotheruser anotheruser uarch 3 Feb 24 15:34 anotheruser/
drwxrwx--- 3 ftpuser ftpuser uarch 12 Feb 25 10:55 ftpuser/
spero che questo aiuti anche qualcun altro.