GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit linuxové chroot vězení

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ího sftp 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ů.


Linux
  1. Ponořte se hlouběji do linuxových chrootových vězení

  2. Jak nastavit nebo změnit časové pásmo v Linuxu

  3. Jak nastavit proměnnou $Path v Linuxu

  1. Jak nastavit nebo změnit název hostitele systému v systému Linux

  2. Jak nastavit SFTP server na Arch Linuxu

  3. CentOS / RHEL :Jak nastavit chroot jail SFTP

  1. Jak nastavit tiskárnu v systému Linux

  2. Jak nastavit Cron Job v Linuxu

  3. Jak nastavit Chroot SFTP v Linuxu (povolit pouze SFTP, ne SSH)