Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...)

De Lea Linux
Aller à la navigation Aller à la recherche
Prae<prae@lea-linux.org>
  1. Préparation de l'utilisateur et son Home :
     
    1. Création de l'utilisateur :

      # adduser <login>
       
    2. Préparation de son home :

      # cd /home/<login>
      # mkdir bin dev lib


      Nous allons y copier le binaire "bash", qui se trouve dans /bin/bash

      # cp /bin/bash /home/&ltlogin>/bin/

      Ce programme est dynamique, donc nous allons déterminer ses dépendances de librairies

      # ldd /bin/bash
         libncurses.so.5 => /lib/libncurses.so.5 (0x40026000)
         libdl.so.2 => /lib/libdl.so.2 (0x40064000)
         libc.so.6 => /lib/libc.so.6 (0x40068000)
         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


      Nous constatons que /bin/bash est dépendant de /lib/libncurses.so.5, /lib/libdl.so.2, /lib/libc.so.6 et de /lib/ld-linux.so.2.

      Nous allons les copier tout simplement dans l'arborescence chrootée :
      1. Manuellement :

        # cd /home/<login>
        # cp /lib/libncurses.so.5 ./lib/
        # cp /lib/libdl.so.2 ./lib/
        # cp /lib/libc.so.6 ./lib/
        # cp /lib/ld-linux.so.2 ./lib/


         
      2. Automatiquement : # ldd /bin/bash | awk '{ print "cp "$3" /home/<login>/lib/" }' | bash

        ATTENTION : N'oubliez pas de remplacer <login> par le bon login...

          Le répertoire dev devrait notamment servir à stocker les devices.
        Notamment le plus important : /dev/null, mais celui ci n'est pas indispensable. Si vous souhaitez quand même créer ce device, faites comme ceci :

        # mknod /home/<login>/dev/null c 1 3 -m 666

        Voici l'arborescence après coup :
        /home/<login>;
                 |
                 |-- bin
                 |   |
                 |   `-- bash
                 |
                 |-- dev
                 |   |
                 |   `-- null
                 |
                 `-- lib
                     |
                     |-- ld-linux.so.2
                     |-- libc.so.6
                     |-- libdl.so.2
                     `-- libncurses.so.5
    1. Modification du /etc/passwd
      Editez le fichier /etc/passwd (ou bien votre serveur central, cf: LDAP) et modifiez les informations "shell" par :
      /bin/chrootuser
      Exemple :
      Avant : chroot:x:1003:1003:,,,:/home/chroot:/bin/bash
      Après : chroot:x:1003:1003:,,,:/home/chroot:/bin/chrootuser
      Mais qu'est ce programme chrootuser ?
      Tout simplement un script bash avec quelques commandes.
  1. Création du programme Wrapper
    Dans un fichier shell, mettez ceci :

    #!/bin/bash
    exec -c /usr/sbin/chroot_suid /home/$USER /bin/bash


    Pour ma part, je l'ai enregistré dans /bin/chrootuser
    Et mettez ses droits en exécution pour tous mais en écriture que pour le root :

    # chmod 755 /bin/chrootuser
    Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela : chmod 4755 /usr/sbin/chroot_suid.
    Sitôt terminé, vous pouvez vous connecter :)
  2. Premiers essais

    Notre première connection SSH :)

    # ssh <login>@localhost
    <login>@localhost's password: <password>
    Linux #1 ven jan 17 22:00:45 CET 2003 i686 unknown
    bash-2.05a$


    Si vous remarquez bien, aucune commande n'est disponible (hormis commande interne bash). Si vous souhaitez rajouter ces programmes, vous faites comme pour "bash", en copiant les programmes et les librairies dépendantes.
  3. Automatiser tout ceci :

    Voici un script qui automatise tout cela :
    #!/bin/bash

    if [ "$#" != 1 ];
    then
       echo "Usage : $0 <login>"
       exit 255;
    fi

    LOGIN=$1
    GROUP=chroot

    echo "-- Création du groupe \"${GROUP}\""
    groupadd "${GROUP}" > /dev/null 2>&1

    echo "-- Création de l'utilisateur \"${LOGIN}\""
    useradd \
       -c "User chrooted" \
       -d "/home/${LOGIN}/" \
       -g "${GROUP}" \
       -s "/bin/chrootuser" \
       "${LOGIN}"

    echo "-- Son mot de passe : "
    passwd "${LOGIN}" > /dev/null

    echo "-- Création de l'arborescence de son homedir"
    mkdir /home/${LOGIN}/ \
       /home/${LOGIN}/bin/ \
       /home/${LOGIN}/lib/ \
       /home/${LOGIN}/dev/
    chmod 700 \
       /home/${LOGIN}/ \
       /home/${LOGIN}/bin/ \
       /home/${LOGIN}/lib/ \
       /home/${LOGIN}/dev/

    cp /bin/bash /home/${LOGIN}/bin/bash
    ldd /bin/bash | awk -v "LOGIN=$LOGIN" '{ print "cp "$3" /home/"LOGIN"/lib/" }' | bash
    mknod /home/${LOGIN}/dev/null c 1 3 -m 666
    chown -R "${LOGIN}:${GROUP}" /home/${LOGIN}

    echo ">> Utilisateur \"${LOGIN}\" chrooté"

    echo "-- Création du programme /bin/chrootuser"
    cat < /bin/chrootuser
    #!/bin/bash
    exec -c /usr/sbin/chroot /home/\$USER /bin/bash
    EOF
    chmod 555 /bin/chrootuser

Idée originale : Anne