GNU/Linux >> Znalost Linux >  >> Linux

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

V první části, Jak nastavit Linux chroot jails, jsem se zabýval chroot a naučili jste se používat chroot wrapper v sshd izolovat sftpusers skupina. Když upravíte sshd_config chcete-li vyvolat chroot wrapper a dát mu odpovídající vlastnosti, sshd provádí určité příkazy v rámci chroot jail nebo wrapperu. Viděli jste, jak by tato technika mohla být potenciálně užitečná pro implementaci uzavřeného, ​​nikoli zabezpečeného přístupu pro vzdálené uživatele.

Rozšířený příklad

Začnu tím, že rozšířím to, co jsem dělal předtím, částečně jako recenzi. Začněte nastavením vlastního adresáře pro vzdálené uživatele. Budu používat sftpusers znovu seskupit.

Začněte vytvořením vlastního adresáře, který chcete použít, a nastavením vlastnictví:

# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot

Tentokrát udělejte vlastníka root, nikoli sftpusers skupina. Tímto způsobem, když přidáte uživatele, nezačínají s oprávněním vidět celý adresář.

Dále vytvořte uživatele, kterého chcete omezit (v tomto případě to musíte udělat pro každého uživatele), přidejte nového uživatele do sftpusers group a odepřít přihlašovací shell, protože se jedná o sftp uživatelé:

# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay

Poté vytvořte adresář pro sanjay a nastavte vlastnictví a oprávnění:

# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay

Dále upravte sshd_config soubor. Nejprve zakomentujte existující vyvolání subsystému a přidejte interní:

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Poté přidejte náš záznam o případu shody:

Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no

Všimněte si, že jste zpět k určení adresáře, ale tentokrát jste již nastavili vlastnictví, abyste zabránili sanjay od vidění věcí někoho jiného. To koncové / je také důležité.

Poté restartujte sshd a test:

[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.

Tak. Sanjay vidí pouze svou vlastní složku a potřebuje cd dělat něco užitečného.

Izolace služby nebo konkrétního uživatele

Co když teď chcete poskytnout použitelné prostředí shellu pro vzdáleného uživatele nebo vytvořit prostředí chroot jail pro konkrétní službu? Chcete-li to provést, vytvořte uvězněný adresář a kořenový souborový systém a poté vytvořte odkazy na nástroje a knihovny, které potřebujete. Dělat to všechno je trochu komplikované, ale Red Hat poskytuje skript a základní pokyny, které celý proces usnadňují.

Poznámka: Testoval jsem následující v Red Hat Enterprise Linux 7 a 8, i když rozumím tomu, že tato schopnost byla dostupná v Red Hat Enterprise Linux 6. Nemám důvod si myslet, že by tento skript nefungoval ve Fedoře, CentOS nebo jiném Distro Red Hat, ale váš počet najetých kilometrů (jako vždy) se může lišit.

Nejprve vytvořte svůj chroot adresář:

# mkdir /chroot

Poté spusťte skript z yum který nainstaluje potřebné bity:

# yum --releasever=/ --installroot=/chroot install iputils vim python

--releasever=/ flag předá aktuální informace o lokálním vydání k inicializaci úložiště v novém --installroot , definuje, kde je nové umístění instalace. Teoreticky byste mohli vytvořit chroot jail, který byl založen na jakékoli verzi repozitáře yum nebo dnf (skript však bude stále začínat aktuálním repozitářem systému).

Pomocí tohoto nástroje nainstalujete základní síťové nástroje, jako je editor VIM a Python. Pokud chcete, můžete zpočátku přidat další věci, včetně jakékoli služby, kterou chcete provozovat v tomto vězení. To je také jedna ze skvělých věcí na yum a závislosti. V rámci řešení závislostí yum provede nezbytné doplňky do stromu souborového systému spolu s knihovnami. Vynechává však několik věcí, které je třeba přidat jako další. K tomu se za chvíli dostanu.

Nyní jsou balíčky a závislosti nainstalovány a pro toto nové úložiště byl vytvořen nový klíč GPG ve vztahu k tomuto novému kořenovému systému souborů. Dále připojte své pomíjivé souborové systémy:

# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/

A nastavte své vazby pro vývojáře:

# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts

Upozorňujeme, že tato připojení nebudou přežít restart tímto způsobem, ale toto nastavení vám umožní testovat a hrát si s prostředím chroot jail.

Nyní otestujte, zda vše funguje, jak očekáváte:

# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

Můžete vidět, že souborový systém a knihovny byly úspěšně přidány:

bash-4.2# pwd
/
bash-4.2# cd ..

Odtud vidíte správný kořenový adresář a nelze přejít nahoru:

bash-4.2# exit
exit
#

Nyní jste opustili obálku chroot, což se očekává, protože jste do něj vstoupili z místního přihlašovacího prostředí jako root. Normálně by to vzdálený uživatel neměl být schopen udělat, jak jste viděli v sftp příklad:

[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#

Všimněte si, že všechny tyto adresáře vytvořil root, takže kdo je vlastní. Nyní přidejte tento chroot do sshd_config , protože tentokrát budete odpovídat pouze tomuto uživateli:

Match User leo
ChrootDirectory /chroot

Poté restartujte sshd .

Musíte také zkopírovat /etc/passwd a /etc/group soubory z hostitelského systému do /chroot adresář:

[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/

Poznámka: Pokud výše uvedený krok přeskočíte, můžete se přihlásit, ale výsledek bude nespolehlivý a budete náchylní k chybám souvisejícím s konfliktními přihlášeními

Nyní k testu:

[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo

Vypadá to dobře. Můžete teď najít něco užitečného? Pojďme se pobavit:

[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd

Mohli byste pusťte releasever=/ , ale rád to nechávám, protože to ponechává méně šancí na neočekávané výsledky.

[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)

Takže httpd je tam, pokud ho chcete, ale jen pro demonstraci můžete použít rychlý jednořádkový program z Pythonu, který jste si také nainstalovali:

bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...

A nyní máte jednoduchý webový server běžící v chrootovém vězení. Teoreticky můžete spustit libovolný počet služeb z chroot jail a ponechat je „uzavřené“ a daleko od ostatních služeb, což vám umožní odhalit pouze část prostředí s většími zdroji, aniž byste ohrozili uživatelský dojem.

Nové kontejnery Linuxu? Stáhněte si Containers Primer a naučte se základy.


Linux
  1. Jak nastavit linuxové chroot vězení

  2. Jak přesunout Sledování požadavků do kontejneru Linux

  3. Jak přesunout MediaWiki do linuxového kontejneru

  1. Jak přesunout WordPress do linuxového kontejneru

  2. Jak provést Chroot s jmennými prostory Linuxu?

  3. Příklady příkazů sftp v Linuxu

  1. Termux mění Android na vývojové prostředí Linuxu

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

  3. Linux:proces do služby