Termín chroot vězení byl poprvé použit v roce 1992 v článku významného bezpečnostního výzkumníka Billa Cheswicka (což je zajímavé, pokud se o něco takového zajímáte, článek najdete zde). Chroot věznice se začaly objevovat v roce 2003 s aplikacemi jako IRC a FTP. V roce 2005 Sun představil svou technologii „Kontejnery“ nazvanou Zones, která byla zase předchůdcem konceptu jmenných prostorů , což je základní technologie používaná u kontejnerů.
Základy Chrootu
Chroot umožňuje správci řídit přístup ke službě nebo souborovému systému a zároveň kontrolovat vystavení základnímu prostředí serveru. Dva běžné příklady, se kterými se můžete setkat, jsou během zaváděcí sekvence a „nouzového prostředí“ na systémech Red Hat/CentOS/Fedora a v zabezpečeném FTP (SFTP).
Příkaz vypadá takto:
chroot <newroot> [[command][arguments]]
Podobné jako sudo
příkaz chroot
příkaz změní prostředí následujícího příkazu. Jinými slovy, změní vás na newroot
a také z tohoto adresáře udělá „pracovní“ adresář. command
pak se spustí v tomto umístění, což je užitečné pro věci, jako je záchrana systému, který nelze spustit.
Na rozdíl od sudo
, budete „v“ adresáři. Tento postup je opět užitečný, pokud spouštíte systém z externího média, ale potřebujete přístup k „místnímu“ souborovému systému nebo příkazu, abyste mohli pracovat.
Další běžné použití chroot
je omezit službu nebo uživatele pomocí obalu skrýt zbytek souborového systému, a tím omezit pohled vzdáleného uživatele na data ostatních uživatelů. Oblíbená implementace využívající tento přístup SFTP.
Příklad
Než začnete pracovat na tomto příkladu, měli byste se ujistit, že máte zálohy. V tomto případě si zazálohujte /etc/ssh/sshd_config
soubor, protože v něm budete konkrétně provádět změny:
[root@showme1 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Prozatím omezíte uživatele SFTP pouze na jejich domovské adresáře na serveru. Tento požadavek znamená, že budete muset přidat uživatele a umístit je do skupiny:
[root@showme1 ~]# useradd -g sftpusers -s /sbin/nologin -p nick nick
Všimněte si, že tím přiřadíte nick
účet bez přihlašovacího prostředí. Tato technika je praktická i dobrá bezpečnostní praxe:Pokud pouze používá SFTP, neměl by mít přihlašovací práva. O poskytování shellu vzdáleným uživatelům pojednám v příštím článku.
Nyní musíte sdělit ssh
co dělat, když se uživatelé SFTP přihlásí. Otevřete /etc/ssh/sshd_config
soubor a na konec přidejte následující:
Subsystem sftp internal-sftp
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
Je důležité, abyste tato nastavení přidali jako samostatnou sadu záznamů a abyste použili Match
syntaxe označující, že tato sekce pouze platí pro uživatele v této skupině. Pokud jste provedli změny ve stávajících záznamech, budou platit pro všechny uživatelé SSH, což by mohlo přerušit vzdálený přístup.
Konfigurační řádky jsou rozděleny následovně:
- Příkaz
ForceCommand
vytváříssh
zvolte jeho vestavěné zařízení pro poskytování služby SFTP (které můžete ovládat nezávisle). ChrootDirectory
říkásshd
kam uživatele omezit.Subsystem sftp internal-sftp
říkásshd
k načtení interníhosftp
službu a zpřístupnit ji.
Možná se budete muset ujistit, že tento Subsystem
není již definováno zakomentováním tohoto řádku dříve v konfiguračním souboru:
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
Jakmile provedete změny a zkontrolujete pravopis, pokračujte a uložte změny. Poté restartujte sshd
:
[root@showme1 ~]# systemctl restart sshd
Otestujte nového uživatele:
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> ls
accounting ansible fred jason kenny lisa
nick
sftp> pwd
Remote working directory: /
sftp> exit
Jejda, vydržte jen minutu:Zdá se, že vidíte i adresáře všech ostatních uživatelů. Do těchto adresářů však nelze přejít:
sftp> cd fred
sftp> ls
remote readdir("/fred"): Permission denied
Chrootovaného uživatele můžete nasměrovat do jeho vlastního domovského adresáře změnou ChrootDirectory
řádku v sshd_config
soubor takto:
ChrootDirectory /
Díky této rychlé změně to Nickovi připadá, jako by byl ve svém vlastním domovském adresáři a nebude moci vidět soubory žádného jiného uživatele:
sftp> pwd
Remote working directory: /home/nick
sftp>
sftp> exit
[skipworthy@milo ~]$ touch test.txt
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> put test.txt
Uploading test.txt to /home/nick/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls
test.txt
sftp>
kam se to podělo? Podívejte se na toto:
[root@showme1 ~]# ls /home/nick
test.txt
Všimněte si, že chroot jail
není samo o sobě považuje za dostatečné bezpečnostní omezení. I když to zabraňuje uživateli přejít z omezeného adresáře, existují způsoby, jak to obejít (obecná myšlenka je uvedena v chroot(2)
manuálová stránka, na kterou byste se měli podívat, pokud uvažujete o použití tohoto triku v kritickém kontextu výroby nebo obchodu.)
Konec (prozatím)
Takže můžete vidět ten chroot
může být docela užitečným nástrojem. V části 2 se více podívám na přiřazování konkrétních adresářů uživatelům a poskytování prostředí shellu vzdálenému uživateli bez odhalení zbytku serveru.
Nové kontejnery? Stáhněte si Containers Primer a naučte se základy linuxových kontejnerů.