Lea-Linux & Friends:   LinuxFR   GCU-Squad   Zarb.Org   StandBlog
Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...)
Benjamin Gigon
  1. Préparation de l'utilisateur et son Home :
    1. Création de l'utilisateur :


    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



      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 est dépendant de , , et de .

      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 :

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

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



        Voici l'arborescence après coup :
        ;
                 |
                 |-- bin
                 |   |
                 |   `-- bash
                 |
                 |-- dev
                 |   |
                 |   `-- null
                 |
                 `-- lib
                     |
                     |-- ld-linux.so.2
                     |-- libc.so.6
                     |-- libdl.so.2
                     `-- libncurses.so.5
    1. Modification du
      Editez le fichier (ou bien votre serveur central, cf: LDAP) et modifiez les informations "shell" par :

      Exemple :
      Avant :
      Après :
      Mais qu'est ce programme  ?
      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
    Et mettez ses droits en exécution pour tous mais en écriture que pour le root :


    Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela : .
    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


Important: Pensez à rajouter /bin/chrootuser dans /etc/shells.
Sinon vous ne pourrez pas vous logguer

Idée originale : Anne

Affichages

Serveur hébergé par Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA