Nedávno jsme našli řešení, které vypadá takto:
/etc/ssh/sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
oprávnění k adresáři:
[email protected]:~ # chown root:root /home
[email protected]:~ # chmod 111 /home
[email protected]:~ # chmod 700 /home/*
Nyní /home
splňuje požadavky pro ChrootDirectory
a nemohou být uvedeny uživateli s omezeným přístupem, ale sftponly
uživatelé se nebudou moci přihlásit, pokud jsou jejich domovské adresáře nastaveny jako obvykle (/home/$LOGNAME
):v chrootovaném prostředí jejich domovské adresáře nejsou uvnitř /home
ale přímo pod rootem (/
).
řešení 1
Nastavte domovy omezených uživatelů tak, jak se zobrazí pod chroot:
[email protected]:~ # usermod -d /username username
varovat 1
Pokud některý z neomezených uživatelů nebo nějaký administrační skript používá bashovu vlnovkovou expanzi jako ~username
rozbalí se na /username
teď, což není to, co je myšleno.
Také správce, který vytváří sftponly
uživatelé si musí pamatovat, že mají používat jinou než výchozí domovskou stránku. Řešitelné pomocí skriptu. Který musí správce nezapomenout použít.
řešení 2
Toto je alternativa k předchozí, kterou jsme nakonec použili:
[email protected]:~ # ln -s . /home/home
To znamená vytvořit symbolický odkaz uvnitř /home
na své vlastní dirname. Nyní pod chroot /home/username
ukazuje na stejný adresář jako bez chroot. Pro uživatele s omezeným přístupem přihlášeným pomocí sftp se zobrazí jako /username
. Do tohoto adresáře lze zapisovat jeho vlastníkovi (uživateli s omezeným přístupem). Uživatel s omezeným přístupem nemůže uvést své nadřazené nebo domovské adresáře žádného ze sourozenců podle jména.
Jediná zvláštní věc na sftponly
uživatel je jeho účast v sftponly
skupina. Zjistili jsme, že je jednodušší se s tím vypořádat než s řešením 1.
odmítne 2
- Nemůžete mít uživatele s názvem 'home' s domovským adresářem
/home/home
- Se skripty, které procházejí
/home
, musíte být opatrní hierarchii a následujte symbolické odkazy.
Musíte vytvořit strukturu uvnitř domovského adresáře uživatele, jako je in a out dirs. Tyto adresáře by měl vlastnit uživatel a tam bude moci vkládat a získávat soubory.
Na našem serveru mám stejné nastavení. Používáme stejnou konfiguraci SSHD. Domovské adresáře uživatelů vlastní root a v nich jsou složky documents
a public_html
ve vlastnictví příslušných uživatelů. Uživatelé se pak přihlásí pomocí SFTP a zapisují do těchto složek (ne přímo do domovské). Protože pro ně není povoleno SSH, funguje to perfektně. V /etc/skel/ si můžete upravit, které adresáře se budou novým uživatelům vytvářet (alespoň v openSUSE, v jiných distribucích se tolik nevyznám).
Další možností by byl ACL (dokumentace openSUSE) - může přidat oprávnění k zápisu pro příslušného uživatele do jeho domovského adresáře.