Tento článek je určen administrátorům nebo vývojářům.
Vázané připojení uživatele Secure File Transfer Protocol (SFTP), na kterém byla provedena operace chroot na vašich serverech Red Hat® Enterprise Linux® (RHEL®) a CentOS® 6 (OpenSSH je 4.9p1 nebo novější), vytváří následující podmínky:
- Uživatel může používat pouze SFTP a nemá plný přístup k prostředí přes Secure Shell (SSH).
- Uživatel je uvězněn ve svém domovském adresáři a nemá možnost se z něj dostat.
- Z pohledu uživatele je jeho domovský adresář na serveru.
- Toto připojení vazby je často potřeba pro vývojáře, kteří mohou potřebovat přístup k zápisu do jednoho (nebo více) kořenového adresáře nebo kořenových adresářů dokumentů Apache® nebo do jiného adresáře pro účely nahrávání nebo úpravy webového obsahu.
Tento článek popisuje, jak pomocí operace chroot nastavit domovský adresář pro uživatele a vytvořit v tomto domovském adresáři připojení k libovolnému externímu (kořenovému) adresáři, ke kterému potřebuje přístup. Připojení vazby je jediný způsob, jak poskytnout uživateli přístup k datům mimo jejich chroot adresář. Nemůžete do něj použít symbolický odkaz (symlink) na data mimo chrootdirectory (například ln -s /home/user/http /var/www/http
). Po operaci chroot nezná souborový systém žádná data mimo adresář chroot. Tento nedostatek znalostí porušuje symbolický odkaz. Alternativně můžete kořenový adresář dokumentu přesunout do domovského adresáře uživatele a poté jej symbolicky propojit do původního umístění (například ln -s /var/www/html /home/user1/html
).
Démon SSH (SSHD) nabízí některé dynamické proměnné v konfiguraci pro operaci chroot:
%u
:uživatelské jméno přihlášeného uživatele%h
:$HOME přihlášeného uživatele
SSHD je velmi striktní ohledně toho, jak musíte nastavit oprávnění. Jedním z těchto omezení je, že uživatel nemůže zapisovat do nejvyšší úrovně chroot adresáře. Musíte zvolit vhodnou nejvyšší úroveň pro chroot adresář, jako jsou následující nastavení:
- Nastavte ChrootDirectory na
%h
:Uživatel nemůže zapisovat do své domovské cesty. Potřebují buď podsložku, do které mohou zapisovat (například uploady), nebo připojení k jinému umístění, do kterého mohou zapisovat (například/var/www/html
). - Nastavte ChrootDirectory na
/home/chroot
:Uživatel může zapisovat do své domovské cesty, ale nejvyšší úroveň adresáře chroot je chráněna oprávněními systému souborů, nikoli vězením chroot.
První možnost používá chroot adresář k zaručení bezpečnosti namísto spoléhání se na oprávnění souborového systému. Druhá možnost umožňuje zápis do domovského adresáře, ale znamená, že chroot adresář je sdílen s ostatními uživateli a pouze oprávnění souborového systému brání zpřístupňování informací. Správná možnost závisí na vašich potřebách.
Navázat připojení uživatele SFTP po operaci chroot
Pomocí následujících kroků svázejte připojení uživatele:
-
Vytvořte skupinu, do které přiřadíte každého uživatele, který potřebuje být uvězněn, do jejich domovského adresáře:
# groupadd sftponly
-
Vytvořte uživatele. Nastavte shell na
/bin/false
a přiřaďte uživatele do skupiny, kterou jste vytvořili výše:# mkdir -p /home/chroot/$NEWUSER # useradd -d /$NEWUSER -s /bin/false -G sftponly $NEWUSER # Note: homedir is relative to the chroot # pass}wd $NEWUSER
-
Aktualizujte
/etc/ssh/sshd_config
soubor:-
Zakomentujte následující řádek:
Subsystem sftp /usr/libexec/openssh/sftp-server
-
Na konec souboru přidejte následující řádky:
Subsystem sftp internal-sftp Match Group sftponly ChrootDirectory /home/chroot # OR ChrootDirectory %h X11Forwarding no AllowTCPForwarding no ForceCommand internal-sftp
-
Otestujte konfiguraci a poté znovu načtěte SSHD:
# sshd -t # service sshd reload
-
Nastavte domovský adresář uživatele po operaci chroot
-
Pokud je ChrootDirectory
/home/chroot
, spusťte následující příkazy:# chmod 711 /home/chroot # This prevents chrooted users from seeing other chrooted users' homedirs # chmod 755 /home/chroot/$NEWUSER # chown $NEWUSER:sftponly /home/chroot/$NEWUSER
-
Pokud je ChrootDirectory
%h
, spusťte následující příkaz:# chown root:root /home/chroot/$NEWUSER
Vytvořte připojení k jakékoli cestě mimo chroot adresář, který uživatel potřebuje přístup
-
Přidejte následující řádek do
/etc/fstab
soubor:/var/www/html /home/chroot/$NEWUSER/www none bind 0 0`
-
Připojte adresář:
# mkdir /home/chroot/$NEWUSER/www # mount /home/chroot/$NEWUSER/www
Aktualizovat oprávnění
Aktualizujte oprávnění systému souborů u adresářů, ke kterým uživatel přistupuje. Vezměte v úvahu ostatní uživatele, kteří mají aktuálně přístup pro čtení/zápis, abyste se ujistili, že jejich oprávnění neúmyslně neodeberete. Tento krok můžete dokončit několika různými způsoby, například změnou vlastnictví uživatele, změnou vlastnictví nebo oprávnění skupiny nebo přidáním seznamů řízení přístupu k souborům (FACL).
Následující příklad ukazuje příkazy pro přidávání FACL:
# setfacl -Rm u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/
# setfacl -Rm d:u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/
Možné problémy
Mohou nastat následující problémy.
Oprávnění k adresáři
Oprávnění k adresáři mohou způsobit následující problémy:
-
Vestavěná funkce chroot protokolu SFTP je velmi přísná, pokud jde o oprávnění. Pokud oprávnění nejsou dostatečně zabezpečena, zobrazí se při pokusu o přihlášení následující chyba:
root@ftp01[ ~ ]# sftp $NEWUSER@localhost Connecting to localhost... chroottest@localhost's password: Write failed: Broken pipe Couldn't read packet: Connection reset by peer
-
Možná se budete moci přihlásit, ale nemůžete nahrávat soubory. V tomto případě se zobrazí následující chyba:
sftp> put test Uploading test to /$NEWUSER/test Couldn't get handle: Permission denied In both cases the problem is directory permissions. Here's what a known-good directory structure looks like: root@ftp01[ ~ ]# ls -ld / /home /home/chroot /home/chroot/$NEWUSERdrwxr-xr-x. 28 root root 4096 Aug 22 10:31 / drwxr-xr-x. 18 root root 4096 Oct 10 10:49 /home drwx--x--x 3 root root 4096 Oct 10 10:49 /home/chroot drwxr-xr-x 3 $NEWUSER $NEWUSER 4096 Oct 10 11:40 /home/chroot/$NEWUSER root@ftp01[ ~ ]#
SCP nefunguje
Tento typ uživatele pracuje pouze s SFTP a nepracuje s jinými protokoly (např. vzdálený shell (RSH), secure include protect (SCP) nebo File Transfer Protocol (FTP)).