Coquille emprisonnée et Jailkit
Un shell emprisonné est une sorte de shell limité qui fournit à l'utilisateur un shell d'aspect très réel mais ne lui permet pas de jouer avec/voir/modifier des parties des systèmes de fichiers réels. Le système de fichiers à l'intérieur du shell est différent du système de fichiers réel du système sous-jacent. Une telle fonctionnalité est obtenue via chroot et trouve de nombreux types d'applications. Par exemple, pour configurer un shell Linux pour que les utilisateurs puissent simplement "jouer avec". Ou exécutez un programme avec toutes les fonctionnalités mais dans un environnement limité, etc.
Dans ce tutoriel, nous allons parler de la configuration rapide d'un shell emprisonné avec jailkit sur Ubuntu. Jailkit est un programme d'assistance qui permet de configurer rapidement un shell emprisonné, d'emprisonner les utilisateurs à l'intérieur et de configurer des programmes à exécuter à partir de l'environnement emprisonné.
Jailkit peut être téléchargé depuis
http://olivier.sessink.nl/jailkit/
Nous avons déjà discuté de l'installation de jailkit sur Ubuntu, alors consultez cet article.
Configurer le shell emprisonné
1. Configurer l'environnement de la prison
Il doit y avoir un répertoire où l'ensemble de l'environnement jail sera configuré. Faisons-le dans /opt/jail. Cela peut être n'importe quoi.
$ sudo mkdir /opt/jail
La racine devrait posséder ce répertoire. Alors chope-le.
$ sudo chown root:root /opt/jail
2. Configurez les programmes à rendre disponibles à l'intérieur de la prison
Tous les programmes qui doivent être disponibles dans la prison doivent être copiés à l'intérieur à l'aide de la commande jk_init.
Exemple
$ 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
Ou d'un coup
$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp
Les noms comme basicshell , editors , netutils sont des groupes qui contiennent plusieurs programmes. Chaque groupe est un ensemble de fichiers exécutables, de bibliothèques, etc. à copier dans le shell. Par exemple, la section basicshell fournit de nombreux programmes comme bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep etc dans la prison.
Pour une liste complète des sections pouvant être configurées, consultez /etc/jailkit/jk_init.ini
.
jk_lsh (Jailkit limited shell) - is an important section, and must be added.
3. Créez l'utilisateur qui sera emprisonné
Besoin d'un utilisateur à mettre à l'intérieur de la prison. Créons-en un
$ 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
Notez qu'il s'agit d'un utilisateur normal qui est créé dans le système de fichiers réel et non à l'intérieur de la prison.
À l'étape suivante, cet utilisateur sera emprisonné à l'intérieur de la prison.
À ce stade, si vous jetez un œil à /etc/passwd, vous verrez une entrée à la fin qui ressemble à ceci
robber:x:1006:1005:,,,:/home/robber:/bin/bash
C'est notre nouvel utilisateur et la dernière partie /bin/bash indique que l'utilisateur a un accès shell normal sur le système, s'il se connecte.
4. Mettre l'utilisateur en prison
Il est maintenant temps de mettre l'utilisateur à l'intérieur de la prison.
$ sudo jk_jailuser -m -j /opt/jail/ robber
En faisant cela, l'utilisateur voleur a maintenant été emprisonné.
Maintenant, si vous jetez un œil à /etc/passwd, la dernière entrée ressemblera à ceci
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh
Notez que les 2 dernières parties qui indiquent l'utilisateur principal et le type de shell ont changé. Le répertoire personnel de l'utilisateur se trouve maintenant dans l'environnement jail à /opt/jail. Le shell de l'utilisateur est maintenant un programme spécial appelé jk_chrootsh qui fournira le shell emprisonné.
C'est ce shell particulier appelé jk_chrootsh qui emmène l'utilisateur à l'intérieur de la prison, chaque fois qu'il se connecte au système.
La configuration de la prison est maintenant presque terminée. Mais si vous essayez de vous connecter à id depuis ssh, cela échouera comme ceci :
$ 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 connexion doit se fermer. Cela se produit parce que l'utilisateur a en fait un shell limité.
5. Donnez le shell bash à l'utilisateur à l'intérieur de la prison
La prochaine chose importante à faire est de donner à l'utilisateur un shell bash approprié, mais à l'intérieur de la prison.
Ouvrez le fichier suivant
/opt/jail/etc/passwd
C'est le fichier de mot de passe à l'intérieur de la prison. Cela ressemblerait un peu à ça
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh
Remplacez /usr/sbin/jk_lsh par /bin/bash
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/bin/bash
Enregistrez le fichier et quittez.
6. Connectez-vous à la prison
Alors maintenant, il est temps de se reconnecter à la prison
$ 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 prison dit 'Je n'ai pas de nom !' , ha ha. Nous avons maintenant un shell bash entièrement fonctionnel mais à l'intérieur de la prison.
Vérifiez maintenant l'environnement en vous déplaçant. La racine / de l'environnement emprisonné est /opt/jail du système de fichiers réel. Mais c'est nous seuls qui le savons, pas l'utilisateur emprisonné.
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]:/$
De plus, seules les commandes qui ont été copiées via les sections jk_cp seront disponibles dans cette prison.
Si la connexion échoue, vérifiez /var/log/auth.log pour les messages d'erreur.
Maintenant, essayez d'exécuter une commande réseau comme wget ou quelque chose de similaire.
$ wget http://www.google.com/
Si vous obtenez une erreur comme celle-ci :
$ 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'
Corrigez-le en exécutant les 2 commandes suivantes :
$ 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
L'emplacement exact de libnss_files.so et libnss_dns.so peut varier, alors vérifiez.
Gérer des programmes ou des services dans la prison
La configuration est maintenant terminée. Les prisons sont utiles pour exécuter des programmes ou des services dans un environnement restreint/sécurisé. Pour lancer un programme ou un démon à l'intérieur de la prison, utilisez le jk_chrootlaunch commande.
$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail
L'utilitaire jk_chrootlaunch peut être utilisé pour lancer un processus particulier dans l'environnement jail avec les privilèges de l'utilisateur spécifié. Si le démon ne démarre pas, consultez /var/log/syslog pour les messages d'erreur.
Pour exécuter le programme à l'intérieur de la prison, le programme doit d'abord être entièrement copié à l'intérieur de la prison à l'aide de la commande jk_cp.
jk_cp - a utility to copy files including permissions and libraries into a jail
Pour en savoir plus sur les différentes commandes de jailkit, consultez la documentation sur
http://olivier.sessink.nl/jailkit/