Shell e Jailkit incarcerati
Una shell in jail è un tipo di shell limitata che fornisce all'utente una shell dall'aspetto molto reale ma non gli permette di pasticciare/visualizzare/modificare nessuna parte dei file system reali. Il file system all'interno della shell è diverso dal file system effettivo del sistema sottostante. Tale funzionalità viene raggiunta tramite chroot e trova molti tipi di applicazioni. Ad esempio, per configurare una shell Linux con cui gli utenti possono semplicemente "giocare". Oppure esegui qualche programma con funzionalità complete ma in un ambiente limitato e così via.
In questo tutorial parleremo della configurazione rapida di una shell incarcerata con jailkit su Ubuntu. Jailkit è un programma di supporto che consente di configurare rapidamente una shell incarcerata, incarcerare gli utenti al suo interno e configurare programmi per l'esecuzione dall'ambiente incarcerato.
Jailkit può essere scaricato da
http://olivier.sessink.nl/jailkit/
Abbiamo già discusso dell'installazione di jailkit su Ubuntu, quindi dai un'occhiata a quel post.
Imposta la shell incarcerata
1. Configura l'ambiente della prigione
È necessario che ci sia una directory in cui verrà impostato l'intero ambiente jail. Facciamolo in /opt/jail. Questo può essere qualunque cosa.
$ sudo mkdir /opt/jail
Il root dovrebbe possedere questa directory. Quindi eliminalo.
$ sudo chown root:root /opt/jail
2. Configura i programmi da rendere disponibili all'interno della jail
Tutti i programmi che devono essere disponibili nella jail devono essere copiati al suo interno usando il comando jk_init.
Esempio
$ 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
O in un colpo solo
$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp
I nomi come basicshell , editors , netutils sono gruppi che contengono più programmi. Ogni gruppo è un insieme di file eseguibili, librerie ecc. da copiare nella shell. Ad esempio, la sezione baseshell fornisce molti programmi come bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep ecc. nella jail.
Per un elenco completo delle sezioni che possono essere configurate, dai un'occhiata a /etc/jailkit/jk_init.ini
.
jk_lsh (Jailkit limited shell) - is an important section, and must be added.
3. Crea l'utente che verrà incarcerato
Hai bisogno di un utente da mettere all'interno della prigione. Creiamone uno
$ 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
Nota che questo è un utente normale che viene creato nel filesystem effettivo e non all'interno della prigione.
Nel passaggio successivo questo utente sarà imprigionato all'interno della prigione.
A questo punto se dai un'occhiata a /etc/passwd vedrai una voce alla fine che assomiglia a questa
robber:x:1006:1005:,,,:/home/robber:/bin/bash
Questo è il nostro nuovo utente e l'ultima parte /bin/bash indica che l'utente ha un normale accesso alla shell del sistema, se effettua il login.
4. Incarcerare l'utente
Ora è il momento di mettere l'utente all'interno della prigione.
$ sudo jk_jailuser -m -j /opt/jail/ robber
In questo modo l'utente rapinatore è stato incarcerato.
Ora se dai un'occhiata a /etc/passwd l'ultima voce sarebbe simile a questa
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh
Nota che le ultime 2 parti che indicano l'utente domestico e il tipo di shell sono cambiate. La directory home dell'utente è ora all'interno dell'ambiente jail in /opt/jail. La shell dell'utente è ora un programma speciale chiamato jk_chrootsh che fornirà la shell incarcerata.
È questa particolare shell chiamata jk_chrootsh che porta l'utente all'interno della prigione, ogni volta che accede al sistema.
La configurazione della prigione ormai è quasi completata. Ma se provi a connetterti a id da ssh, fallirà in questo modo:
$ 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. $
La connessione verrà chiusa. Ciò accade perché l'utente ha effettivamente una shell limitata.
5. Dai la shell bash all'utente all'interno della prigione
La prossima cosa importante da fare è fornire all'utente una shell bash adeguata, ma all'interno della jail.
Apri il seguente file
/opt/jail/etc/passwd
È il file della password all'interno della prigione. Sembrerebbe un po' così
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh
Cambia /usr/sbin/jk_lsh in /bin/bash
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/bin/bash
Salva il file ed esci.
6. Accedi alla prigione
Quindi ora è il momento di accedere di nuovo alla prigione
$ 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]:~$
La prigione dice "Non ho nome!" , ah ah. Ora abbiamo una shell bash completamente funzionante ma all'interno della prigione.
Ora controlla l'ambiente spostandoti. La radice / dell'ambiente in jail è /opt/jail del file system reale. Ma siamo solo noi a saperlo, non l'utente incarcerato.
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]:/$
Inoltre solo i comandi che sono stati copiati tramite le sezioni jk_cp saranno disponibili in questa jail.
Se l'accesso non riesce, controlla /var/log/auth.log per i messaggi di errore.
Ora prova a eseguire qualche comando di rete come wget o qualcosa di simile.
$ wget http://www.google.com/
Se ricevi un errore come questo :
$ 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'
Risolvilo eseguendo i seguenti 2 comandi:
$ 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
La posizione esatta di libnss_files.so e libnss_dns.so può variare, quindi controlla.
Eseguire programmi o servizi nella prigione
Ora la configurazione è completa. Le jail sono utili per eseguire programmi o servizi in ambienti ristretti/sicuri. Per avviare un programma o un demone all'interno della jail, usa jk_chrootlaunch comando.
$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail
L'utilità jk_chrootlaunch può essere utilizzata per avviare un processo particolare all'interno dell'ambiente jail con i privilegi dell'utente specificato. Se il demone non si avvia, controlla /var/log/syslog per i messaggi di errore.
Per eseguire il programma all'interno della jail, è necessario prima copiare completamente il programma all'interno della jail utilizzando il comando jk_cp.
jk_cp - a utility to copy files including permissions and libraries into a jail
Per ulteriori informazioni sui vari comandi di jailkit, controlla la documentazione su
http://olivier.sessink.nl/jailkit/