GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Configura una shell incarcerata con jailkit su Ubuntu

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/
Ubuntu
  1. Come creare un utente SSH in jail con Jailkit su Debian 9 (Stretch)

  2. Configura il contenitore Linux con LXC su Ubuntu 16.04

  3. Come configurare il failover IP con KeepAlived su Ubuntu e Debian

  4. Configura un ambiente chroot su Ubuntu con debootstrap

  5. Come configurare Django con Postgres, Nginx e Gunicorn su Ubuntu 20.04

Come creare un utente ssh in jail con Jailkit su Debian/Ubuntu

Uno script di shell per configurare l'ambiente di sviluppo in Ubuntu

Come configurare WordPress su Ubuntu Server con Apache

Monitora l'attività dell'utente con lo strumento acct su Ubuntu 20.04

Come installare e configurare Zsh in Ubuntu 20.04

Configurazione iniziale del server con Ubuntu 18.04