Uvězněný Shell a Jailkit
Uvězněný shell je druh omezeného shellu, který uživateli poskytuje velmi reálně vypadající shell, ale neumožňuje mu manipulovat/prohlížet/upravovat jakékoli části skutečných souborových systémů. Souborový systém uvnitř shellu se liší od skutečného souborového systému základního systému. Taková funkce je dosažena prostřednictvím chrootu a nachází mnoho druhů aplikací. Například nastavit linuxový shell pro uživatele, aby si s ním mohli jen „hrát“. Nebo spusťte nějaký program s plnou funkčností, ale v omezeném prostředí a tak dále.
V tomto tutoriálu budeme hovořit o rychlém nastavení uvězněného shellu s jailkit na ubuntu. Jailkit je pomocný program, který umožňuje rychle nastavit uvězněný shell, uvěznit v něm uživatele a nakonfigurovat programy tak, aby se spouštěly z uvězněného prostředí.
Jailkit lze stáhnout z
http://olivier.sessink.nl/jailkit/
Již jsme diskutovali o instalaci jailkitu na ubuntu, takže se podívejte na tento příspěvek.
Nastavení uvězněného shellu
1. Nastavte prostředí věznice
Musí existovat adresář, kde bude nastaveno celé prostředí věznice. Udělejme to v /opt/jail. To může být cokoliv.
$ sudo mkdir /opt/jail
Root by měl tento adresář vlastnit. Tak to vykašlete.
$ sudo chown root:root /opt/jail
2. Nastavte programy, které budou dostupné ve vězení
Všechny programy, které musí být k dispozici ve vězení, je třeba do něj zkopírovat pomocí příkazu jk_init.
Příklad
$ sudo jk_init -v /jail basicshell $ sudo jk_init -v /jail editors $ sudo jk_init -v /jail extendedshell $ sudo jk_init -v /jail netutils $ sudo jk_init -v /jail ssh $ sudo jk_init -v /jail sftp $ sudo jk_init -v /jail jk_lsh
Nebo najednou
$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp
Názvy jako basicshell , editory , netutils jsou skupiny, které obsahují více programů. Každá skupina je sada spustitelných souborů, knihoven atd., které se mají zkopírovat do shellu. Například sekce základní prostředí poskytuje mnoho programů jako bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep atd. ve vězení.
Pro úplný seznam sekcí, které lze nastavit, se podívejte na /etc/jailkit/jk_init.ini
.
jk_lsh (Jailkit limited shell) - is an important section, and must be added.
3. Vytvořte uživatele, který bude uvězněn
Potřebuji uživatele, který se dostane do vězení. Pojďme si jeden vytvořit
$ sudo adduser robber Adding user `robber' ... Adding new group `robber' (1005) ... Adding new user `robber' (1006) with group `robber' ... Creating home directory `/home/robber' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for robber Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Všimněte si, že toto je normální uživatel, který je vytvořen ve skutečném souborovém systému a ne ve vězení.
V dalším kroku bude tento uživatel uvězněn ve vězení.
V tomto okamžiku, když se podíváte na /etc/passwd, uvidíte na konci záznam, který vypadá takto
robber:x:1006:1005:,,,:/home/robber:/bin/bash
Toto je náš nový uživatel a poslední část /bin/bash označuje, že uživatel má normální shellový přístup k systému, pokud se přihlásí.
4. Uvěznit uživatele
Nyní je čas dostat uživatele do vězení.
$ sudo jk_jailuser -m -j /opt/jail/ robber
Tímto způsobem byl uživatel lupič nyní uvězněn.
Když se nyní podíváte do /etc/passwd, poslední záznam bude vypadat takto
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh
Všimněte si, že poslední 2 části, které označují domácího uživatele a typ shellu, se změnily. Domovský adresář uživatele je nyní v prostředí vězení na /opt/jail. Shell uživatele je nyní speciální program nazvaný jk_chrootsh, který poskytne uvězněný shell.
Je to tento konkrétní shell s názvem jk_chrootsh, který zavede uživatele do vězení pokaždé, když se přihlásí do systému.
Nastavení věznice je nyní téměř hotové. Ale pokud se pokusíte připojit k id z ssh, selže to takto:
Heslo$ ssh [email protected] [email protected]'s password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/ 13 packages can be updated. 0 updates are security updates. *** /dev/sda7 will be checked for errors at next reboot *** *** /dev/sda8 will be checked for errors at next reboot *** Last login: Sat Jun 23 12:45:13 2012 from localhost Connection to localhost closed. $
Spojení se uzavře. To se děje, protože uživatel má ve skutečnosti omezený shell.
5. Dejte bash shell uživateli ve vězení
Další důležitá věc, kterou musíte udělat, je poskytnout uživateli řádný bash shell, ale uvnitř vězení.
Otevřete následující soubor
/opt/jail/etc/passwd
Je to soubor s hesly uvnitř vězení. Vypadalo by to nějak takto
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh
Změňte /usr/sbin/jk_lsh na /bin/bash
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/bin/bash
Uložte soubor a ukončete.
6. Přihlaste se do vězení
Nyní je tedy čas znovu se přihlásit do vězení
Heslo$ ssh [email protected] [email protected]'s password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/ 13 packages can be updated. 0 updates are security updates. *** /dev/sda7 will be checked for errors at next reboot *** *** /dev/sda8 will be checked for errors at next reboot *** Last login: Sat Jun 23 12:46:01 2012 from localhost bash: groups: command not found I have no [email protected]:~$
Vězení říká 'Nemám jméno!' , ha ha. Nyní máme plně funkční bash shell, ale uvnitř vězení.
Nyní zkontrolujte prostředí pohybem. Kořen / uvězněného prostředí je /opt/jail skutečného souborového systému. Ale to víme jen my, ne uvězněný uživatel.
I have no [email protected]:~$ cd / I have no [email protected]:/$ ls bin dev etc home lib lib64 run usr var I have no [email protected]:/$
V tomto vězení budou také dostupné pouze příkazy, které byly zkopírovány přes sekce jk_cp.
Pokud se přihlášení nezdaří, zkontrolujte /var/log/auth.log, zda neobsahuje chybové zprávy.
Nyní zkuste spustit nějaký síťový příkaz jako wget nebo něco podobného.
$ wget http://www.google.com/
Pokud se zobrazí tato chyba:
$ wget http://www.google.com/ --2012-06-23 12:56:43-- http://www.google.com/ Resolving www.google.com (www.google.com)... failed: Name or service not known. wget: unable to resolve host address `www.google.com'
Opravte to spuštěním následujících 2 příkazů:
$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_files.so.2 $ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_dns.so.2
Přesné umístění souborů libnss_files.so a libnss_dns.so se může lišit, proto zkontrolujte.
Spouštění programů nebo služeb ve vězení
Nyní je nastavení dokončeno. Vězení jsou užitečná pro spouštění programů nebo služeb v omezených/zabezpečených prostředích. Ke spuštění programu nebo démona uvnitř vězení použijte jk_chrootlaunch příkaz.
$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail
Obslužný program jk_chrootlaunch lze použít ke spuštění konkrétního procesu v prostředí věznice s oprávněními určeného uživatele. Pokud se nepodaří spustit démona, zkontrolujte /var/log/syslog, zda neobsahuje chybové zprávy.
Chcete-li spustit program ve vězení, program musí být nejprve plně zkopírován uvnitř vězení pomocí příkazu jk_cp.
jk_cp - a utility to copy files including permissions and libraries into a jail
Další informace o různých příkazech jailkit naleznete v dokumentaci na adrese
http://olivier.sessink.nl/jailkit/