Pokud chcete ve svém systému nastavit účet, který bude používán pouze k přenosu souborů (a nikoli k ssh do systému), měli byste nastavit SFTP Chroot Jail, jak je vysvětleno v tomto článku.
V typickém scénáři sftp (když není nastaven chroot sftp), pokud používáte sftp, uvidíte soubor root, jak je uvedeno níže.
Pokud chcete udělit sftp přístup ve vašem systému externím dodavatelům pro přenos souborů, neměli byste používat standardní sftp. Místo toho byste měli nastavit Chroot SFTP Jail, jak je vysvětleno níže.
Prostředí SFTP bez chrootu
V následujícím příkladu (typické prostředí sftp) může john sftp do systému a zobrazit složku /etc a stáhnout si odtud soubory.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls projects john.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Prostředí Chroot SFTP
V následujícím příkladu může john sftp do systému a zobrazit pouze adresář, který jste určili, aby john prováděl sftp (tj. /incoming).
Když se John pokusí provést „cd /etc“, zobrazí chybovou zprávu. Vzhledem k tomu, že SFTP je nastaven v prostředí chroot, John nemůže zobrazit žádné další soubory v systému.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Nyní, když víte, co je prostředí Chroot SFTP, pojďme se podívat, jak to nastavit.
1. Vytvořit novou skupinu
Vytvořte skupinu nazvanou sftpusers. Pouze uživatelé, kteří patří do této skupiny, budou v tomto systému automaticky omezeni na SFTP chroot prostředí.
# groupadd sftpusers
2. Vytvořit uživatele (nebo upravit existujícího uživatele)
Řekněme, že chcete vytvořit uživatele guestuser, který by měl mít povoleno provádět pouze SFTP v prostředí chroot a neměl by mít povoleno provádět SSH.
Následující příkaz vytvoří guestuser, přiřadí tohoto uživatele do skupiny sftpusers, udělá /incoming jako domovský adresář, nastaví /sbin/nologin jako shell (což uživateli neumožní ssh a získat přístup k shellu).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Ověřte, že byl uživatel správně vytvořen.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Pokud chcete upravit stávajícího uživatele a udělat z něj pouze uživatele sftp a umístit ho do vězení chroot sftp, proveďte následující:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
Související poznámka, pokud musíte přenést soubory z Windows do Linuxu, použijte kteréhokoli z klientů sftp uvedených v tomto seznamu 7 nejlepších klientů sftp.
3. Nastavte subsystém sftp-server v sshd_config
Měli byste instruovat sshd, aby pro sftp použil interní-sftp (místo výchozího sftp-serveru).
Upravte soubor /etc/ssh/sshd_config a zakomentujte následující řádek:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Dále přidejte následující řádek do souboru /etc/ssh/sshd_config
Subsystem sftp internal-sftp
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
4. Zadejte Chroot Directory pro skupinu
Do prostředí chroot jail chcete umístit pouze určité uživatele (tj. uživatele, kteří patří do skupiny sftpusers). Přidejte následující řádky na konec /etc/ssh/sshd_config
# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
Ve výše uvedeném:
- Match Group sftpusers – To znamená, že následující řádky budou pouze pro uživatele, kteří patří do skupiny sftpusers
- ChrootDirectory /sftp/%u – Toto je cesta, která bude použita pro chroot po ověření uživatele. %u označuje uživatele. Takže pro Johna to bude /sftp/john.
- ForceCommand internal-sftp – Toto vynutí provedení internal-sftp a ignoruje všechny příkazy, které jsou zmíněny v souboru ~/.ssh/rc.
5. Vytvořte domovský adresář sftp
Protože jsme výše zadali /sftp jako ChrootDirectory, vytvořte tento adresář (což je ekvivalent vašeho typického adresáře /home).
# mkdir /sftp
Nyní pod /sftp vytvořte jednotlivé adresáře pro uživatele, kteří jsou součástí skupiny sftpusers. tj. uživatelé, kteří budou moci provádět pouze sftp a budou v prostředí chroot.
# mkdir /sftp/guestuser
Takže /sftp/guestuser je ekvivalentní / pro hostujícího uživatele. Když guestuser sftp do systému a provede „cd /“, uvidí pouze obsah adresářů pod „/sftp/guestuser“ (a ne skutečné / systému). Toto je síla chrootu.
V tomto adresáři /sftp/guestuser tedy vytvořte libovolný podadresář, který chcete, aby jej uživatel viděl. Například vytvořte příchozí adresář, kde mohou uživatelé sftp své soubory.
# mkdir /sftp/guestuser/incoming
6. Nastavte příslušné oprávnění
Aby chroot správně fungoval, musíte se ujistit, že jsou v adresáři, který jste právě vytvořili výše, správně nastavena příslušná oprávnění.
Nastavte vlastnictví na uživatele a skupinu na skupinu sftpusers, jak je uvedeno níže.
# chown guestuser:sftpusers /sftp/guestuser/incoming
Oprávnění pro příchozí adresář bude vypadat následovně.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
Oprávnění pro adresář /sftp/guestuser
bude vypadat následovně# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Restartujte sshd a otestujte Chroot SFTP
Restartujte sshd:
# service sshd restart
Otestujte prostředí chroot sftp. Jak vidíte níže, když gusetuser provede sftp a udělá „cd /“, uvidí pouze příchozí adresář.
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Když guestuser přenese nějaké soubory do adresáře /incoming ze sftp, budou skutečně umístěny v adresáři /sftp/guestuser/incoming v systému.