Le rbash & chrooté un shell

Nous aborderons ici les notions de chroot, de shell restreint

on va voir :

    * les notions d' un shell restreint
    * l' enchrootage du shell 

objectifs :

    * Avoir un ensemble cohérent permettant de séparer tout codes et fichiers temporaires du /home courant 

[modifier] Création d' un nouvel utilisateur du système

Lancer yast, créer l'utilisateur

on l'appellera "s_guest" (secure guest) et on lui donnera un mot de passe (comme il est destiné à être public, peu importe). Il est posssible de limiter la durée de vie du mot de passe, c'est utile dans le cadre d'une formation.

[modifier] Notion : Le shell restreint

Bash vient par défaut dans un gros rpm, bash veut dire Bourne Again SHell, je ne vais pas faire l' historique du bash ici, mais intéressons plus particulièrement à l' option -r lors de l' invocation de bash. Cette option permet d' obtenir out-of-the-box un bash restreint dont voici la liste des fonctions qui, pour un utilisateur placé sous ce bash, seront impossible à effectuer :

   * Changer la valeur des variables d'environnement : $SHELL, $PATH, $ENV et $BASH_ENV.
   * Executer une commande contenant au moins un slash (/).
   * Passer en argument un fichier contenant au moins un slash (/) aux commandes "." et "source".
   * Passer en argument un fichier contenant au moins un slash (/) à la commande "hash ?p".
   * Lecture et traitement des valeurs de SHELLOPTS au démarrage du shell.
   * Importer des définitions de fonctions au démarrage du shell.
   * Utiliser les opérateurs de redirection de flux ('>', , '>&', '&>' et '>>').
   * Utiliser la commande "exec".
   * Ajouter ou supprimer des commandes avec les options "?f" et "?d" de "enable".
   * Utiliser la commande "command" avec l'option ?p.
   * Annuler le mode restrictif avec les commandes 'set +r' or 'set +o restricted'. 

On le voit, c' est rempli de choses intéressantes. Ce n'est pas le but de cet article de traiter du restricted-bash et je ne vais pas détailler toutes les finesses, qui ne sont pas utiles à connaitre ici. Ce bash amputé d' outils à des fins de restrictions est assez usité dans le cadre de connections ssh, un admi n'est jamais assez parano avec ces users… Ce bash peut être invoqué par la commande rbash ou encore bash restricted ou plus simplement r [modifier] Notion : Le chroot

Le chroot est un mot valise pour désigner change-root. "On change le root". C' est à dire que l' on va créer un environnement fonctionnel, taillé à la serpe juste pour nos besoins spécifiques. celui ci sera inclus dans l' environnement courant. Cet environnement sera fonctionnel dans les strictes limites qu' on lui donne et ne pourra pas interagir avec le système réel. Une commande chroot est disponible dans /usr/sbin/. Cette commande est également usitée pour créer une distribution chrootée et se déplacer dedans en y executant des commandes de cette distribution. (personnellement je fais tourner 3 linux en même sur le même ordinateur sans émulation aucune, en en chrootant 2 dans le "réel") Ce n' est pas sujet ici et je ne m' étendrais pas plus sur les fonctionnalités et les limites du chrootage. Nous ne ferons pas ici un chroot complet, nous nous contenterons du strict nécessaire. L' utilisation usuelle de cette commande est :

chroot /PATH_DU_NOUVEAU_ROOT /COMMANDE_A_CHROOTER [modifier] Chrooter bash pour s_guest, et lui donner rbash

Revenons à notre bash classique et occupons de la chrooter, d'en enfermer une copie dans le /home de mozillasuite, nous restreindrons ainsi grandement les interactions avec le système lui même. Là nous allons attaquer de la ligne de commande et un peu de code :

   * créer les répertoires nécessaires
   * copier le binaire nécessaire, bash
   * vérifier les librairies dépendantes à bash
   * préparer un shell bidon qui en fait enchrootera bash
   * indiquer ce shell bidon qui lancera rbash chrooté à mozillasuite
   * modifier le lancement du bash pour cet utilisateur 

comme s_guest:

pwd /home/s_guest mkdir ./lib ./bin ./sbin ./etc ./usr ./dev exit

Je ne vois pas trop l'intérêt des opérations ci-dessous, ca devrait déjà être comme ça

comme root:

rm -rf /home/s_guest/.bash* chown s_guest:s_guest /home/mozillasuite/bin/ chown s_guest:s_guest /home/mozillasuite/lib/

… faites de même pour chacun des répertoires crées ci-dessus

Créons maintenant le device null

[root@athing ~]# mknod /home/mozillasuite/dev/null c 1 3 -m 666

Copions le binaire bash, le shell initial, dans 'l'arborescence système secondaire' du /home de s_guest.

[root@athing ~]# cp /bin/bash /home/mozillasuite/bin/

Mais bash est dépendant de nombreuses librairies, il nous faut donc les dénicher et les copier à l' identique dans son /lib : Pour les dénicher, on utilise la commande ldd :

[root@athing ~]# ldd /bin/bash

       linux-gate.so.1 =>  (0xbfffe000)
       libtermcap.so.2 => /lib/libtermcap.so.2 (0xb7ef2000)
       libdl.so.2 => /lib/libdl.so.2 (0xb7eef000)
       libc.so.6 => /lib/i686/libc.so.6 (0xb7dc1000)
       /lib/ld-linux.so.2 (0xb7f12000)

[root@athing ~]#

ATTENTION vérifiez bien les librairies sur VOTRE système avec la commande ldd puis recopier les librairies désignées par le résultat uniquement chez VOUS.

Nous voilà renseigner, il faut donc copier ces librairies dans le futur chroot, 'l' arborescence système secondaire'. sans se préoccuper de la première, la linux-gate.so.1

[root@athing ~]# cp /lib/libncurses.so.5 /home/mozillasuite/lib/ [root@athing ~]# cp /lib/libtermcap.so.2 /home/mozillasuite/lib/ [root@athing ~]# cp /lib/libdl.so.2 /home/mozillasuite/lib/ [root@athing ~]# cp /lib/ld-linux.so.2 /home/mozillasuite/lib/ [root@athing ~]# cp /lib/libc.so.6 /home/mozillasuite/lib

Voilà, le chroot est prêt à être utiliser, il nous reste à créer le shell bidon qui indiquera quoi faire lors de la connection. allons y :

[root@athing ~]# touch /usr/local/bin/logtoi

   1. !/bin/bash 

exec -c /usr/sbin/chroot /home/$USER /bin/bash -r

remarquez l' option r pour restricted (ou Rbash) qui invoque bash dans un mode restreint. Remarquez également l' option -c à exec, qui permet d' attacher le processus directement à init (le père de tout les process) sans que bien sûr mozillasuite ai un quelconque droit dessus, cela permet donc de détacher ce process de tout autre et de l' attacher à init.

Maintenant, on va modifier le path du shell de démarrage pour ce user, mozillasuite. Ceci se fait dans yast [modifier] Sécurisons un peu tout cela

En premier lieu, on doit ajuster les droits de l' ensemble des fichiers dans le /home de mozillasuite. Également de donner le droit de lecture et d' entrée à tous sur son /home :

[root@athing ~]# chown -R mozillasuite:mozillasuite /home/mozillasuite/ [root@athing ~]# chmod -R 600 /home/mozillasuite/ [root@athing ~]# chmod +rx /home/mozillasuite/

En second lieu, il convient de créer les fichiers passwd et shadow et d' y ajuster les droits pour root exclusif dessus, afin d' éviter que mozillasuite ne puisse sortir de son chroot facilement.

[root@athing ~]# touch /home/mozillasuite/etc/shadow [root@athing ~]# touch /home/mozillasuite/etc/passwd [root@athing ~]# chown root:root /home/mozillasuite/etc/passwd [root@athing ~]# chown root:root /home/mozillasuite/etc/shadow [root@athing ~]# chmod 600 /home/mozillasuite/etc/passwd [root@athing ~]# chmod 600 /home/mozillasuite/etc/shadow

remarquez qu' on les laisse vide : peu importe ;) l' essentiel est que mozillasuite ne puisse pas les effacer, ni les créer ni les éditer...

Ca y est, le SHELL pour l' utilisateur mozillasuite est prêt, le système chrooté également. si maintenant on se loggue sous cette identité, nous serons chrooté dans /home/mozillafirefox avec un shell restreint.

Cette image nous montre que l' on passe sous l' identité mozillasuite -> cela fonctionne :) Et nous montre à quel point le shell est restrictif : tout d' abord par l' option -r on a appelé le rbash … et de plus, /bin de cet environnement étant quasiment vide, il ne sait quasiment rien faire pour le moment. La commande pwd nous confirme qu'il se croit bien à la racine.

Notez que lorsque nous remplirons ce shell, pour le rendre un tout petit plus étendu, nous serons à l' abri de bêtises par le fait d' avoir invoqué bash en restricted… On pourrait par exemple copier exec, il ne saurait pas s' en servir… ;) [modifier] Téléchargement des logiciels & préparation

zou, téléchargeons les dernières versions des logiciels firefox & thunderbird sur le site officiel de la Fondation Mozilla. Pour cela le plus facilement possible, pourquoi ne pas nous servir directement de ce nouvel utilisateur ? Nous allons ainsi nous habituer à l' utilisation de ce chroot. Il nous fait ajouter wget à l' environnement de chroot, pour se faire nous procédons tout simplement comme prédécement :

[root@athing ~]# cp /usr/bin/wget /home/mozillasuite/bin [root@athing ~]# ldd /usr/bin/wget

on copie les librairies sorties en résultat de cette commande dans /home/mozillasuite/lib puis on oublie pas de ré-ajuster les droits :

[root@athing ~]# chown -R mozillasuite:mozillasuite /home/mozillasuite/lib