« Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...) » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
m (Trucs:Chrooter un utilisateur 'ssh, terminal, console, etc...) déplacé vers Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...))
mAucun résumé des modifications
Ligne 1 : Ligne 1 :
<div class="leapar">Benjamin Gigon<benjamin@gigon.org></div>
<div class="leapar">Benjamin Gigon<benjamin@gigon.org></div>


# Préparation de l'utilisateur et son Home :<br /> 
# Préparation de l'utilisateur et son Home :<br />
## Création de l'utilisateur :<br /><br /><code><nowiki># adduser <login></nowiki></code><br /> 
## Création de l'utilisateur :<br /><br /><code><nowiki># adduser <login></nowiki></code><br />
## Préparation de son home :<br /><br /><div class="code"><nowiki># cd /home/<login></nowiki><br /> # mkdir bin dev lib</div><br /><br /> Nous allons y copier le binaire "bash", qui se trouve dans /bin/bash<br /><br /><code><nowiki># cp /bin/bash /home/&ltlogin>/bin/</nowiki></code><br /><br /> Ce programme est dynamique, donc nous allons déterminer ses dépendances de librairies<br /><br /><div class="code"><nowiki># ldd /bin/bash</nowiki><br />    libncurses.so.5 => /lib/libncurses.so.5 (0x40026000)<br />    libdl.so.2 => /lib/libdl.so.2 (0x40064000)<br />    libc.so.6 => /lib/libc.so.6 (0x40068000)<br />    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)</div><br /><br /> Nous constatons que <code>/bin/bash</code> est dépendant de <code>/lib/libncurses.so.5</code>, <code>/lib/libdl.so.2</code>, <code>/lib/libc.so.6</code> et de <code>/lib/ld-linux.so.2</code>.<br /><br /> Nous allons les copier tout simplement dans l'arborescence chrootée :<br />
## Préparation de son home :<br /><br /><div class="code"><nowiki># cd /home/<login></nowiki><br /> # mkdir bin dev lib</div><br /><br /> Nous allons y copier le binaire "bash", qui se trouve dans /bin/bash<br /><br /><code><nowiki># cp /bin/bash /home/&ltlogin>/bin/</nowiki></code><br /><br /> Ce programme est dynamique, donc nous allons déterminer ses dépendances de librairies<br /><br /><div class="code"><nowiki># ldd /bin/bash</nowiki><br />   libncurses.so.5 => /lib/libncurses.so.5 (0x40026000)<br />   libdl.so.2 => /lib/libdl.so.2 (0x40064000)<br />   libc.so.6 => /lib/libc.so.6 (0x40068000)<br />   /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)</div><br /><br /> Nous constatons que <code>/bin/bash</code> est dépendant de <code>/lib/libncurses.so.5</code>, <code>/lib/libdl.so.2</code>, <code>/lib/libc.so.6</code> et de <code>/lib/ld-linux.so.2</code>.<br /><br /> Nous allons les copier tout simplement dans l'arborescence chrootée :<br />
### Manuellement :<br /><br /><div class="code"><nowiki># cd /home/<login></nowiki><br /> # cp /lib/libncurses.so.5 ./lib/<br /> # cp /lib/libdl.so.2 ./lib/<br /> # cp /lib/libc.so.6 ./lib/<br /> # cp /lib/ld-linux.so.2 ./lib/</div><br /><br /> 
### Manuellement :<br /><br /><div class="code"><nowiki># cd /home/<login></nowiki><br /> # cp /lib/libncurses.so.5 ./lib/<br /> # cp /lib/libdl.so.2 ./lib/<br /> # cp /lib/libc.so.6 ./lib/<br /> # cp /lib/ld-linux.so.2 ./lib/</div><br /><br />
### Automatiquement : <code><nowiki># ldd /bin/bash | awk '{ print "cp "$3" /home/<login>/lib/" }' | bash</nowiki></code><br /><br /><div class="note">ATTENTION : N'oubliez pas de remplacer <login> par le bon login...</div><br />   Le répertoire <code>dev</code> devrait notamment servir à stocker les devices.<br /> Notamment le plus important : <code>/dev/null</code>, mais celui ci n'est pas indispensable. Si vous souhaitez quand même créer ce device, faites comme ceci :<br /><br /><code><nowiki># mknod /home/<login>/dev/null c 1 3 -m 666</nowiki></code><br /><br /> Voici l'arborescence après coup :<br />
### Automatiquement : <code><nowiki># ldd /bin/bash | awk '{ print "cp "$3" /home/<login>/lib/" }' | bash</nowiki></code><br /><br /><div class="note">ATTENTION : N'oubliez pas de remplacer <login> par le bon login...</div><br />   Le répertoire <code>dev</code> devrait notamment servir à stocker les devices.<br /> Notamment le plus important : <code>/dev/null</code>, mais celui ci n'est pas indispensable. Si vous souhaitez quand même créer ce device, faites comme ceci :<br /><br /><code><nowiki># mknod /home/<login>/dev/null c 1 3 -m 666</nowiki></code><br /><br /> Voici l'arborescence après coup :<br />
         <code>/home/<login></code><nowiki>;
         <code>/home/<login></code><nowiki>;
                 |
                 |
Ligne 25 : Ligne 25 :
# Création du programme Wrapper<br /> Dans un fichier shell, mettez ceci :<br /><br /><div class="code"><nowiki>#!/bin/bash</nowiki><br /> exec -c /usr/sbin/chroot_suid /home/$USER /bin/bash</div><br /><br /> Pour ma part, je l'ai enregistré dans <code>/bin/chrootuser</code><br /> Et mettez ses droits en exécution pour tous mais en écriture que pour le root :<br /><br /><code><nowiki># chmod 755 /bin/chrootuser</nowiki></code><br /> Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela : <code>chmod 4755 /usr/sbin/chroot_suid</code>. <br /> Sitôt terminé, vous pouvez vous connecter :)  
# Création du programme Wrapper<br /> Dans un fichier shell, mettez ceci :<br /><br /><div class="code"><nowiki>#!/bin/bash</nowiki><br /> exec -c /usr/sbin/chroot_suid /home/$USER /bin/bash</div><br /><br /> Pour ma part, je l'ai enregistré dans <code>/bin/chrootuser</code><br /> Et mettez ses droits en exécution pour tous mais en écriture que pour le root :<br /><br /><code><nowiki># chmod 755 /bin/chrootuser</nowiki></code><br /> Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela : <code>chmod 4755 /usr/sbin/chroot_suid</code>. <br /> Sitôt terminé, vous pouvez vous connecter :)  
# Premiers essais<br /><br /> Notre première connection SSH :)<br /><br /><div class="code"><nowiki># ssh <login>@localhost</nowiki><br /> <login>@localhost's password: <password><br /> Linux #1 ven jan 17 22:00:45 CET 2003 i686 unknown<br /> bash-2.05a$</div><br /><br /> 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.  
# Premiers essais<br /><br /> Notre première connection SSH :)<br /><br /><div class="code"><nowiki># ssh <login>@localhost</nowiki><br /> <login>@localhost's password: <password><br /> Linux #1 ven jan 17 22:00:45 CET 2003 i686 unknown<br /> bash-2.05a$</div><br /><br /> 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.  
# Automatiser tout ceci :<br /><br /> Voici un script qui automatise tout cela :<br /><div class="code"> #!/bin/bash<br /><br /> if [ "$#" != 1 ];<br /> then<br />    echo "Usage : $0 <login>"<br />    exit 255;<br /> fi<br /><br /> LOGIN=$1<br /> GROUP=chroot<br /><br /> echo "-- Création du groupe \"${GROUP}\""<br /> groupadd "${GROUP}" > /dev/null 2>&1<br /><br /> echo "-- Création de l'utilisateur \"${LOGIN}\""<br /> useradd \<br />    -c "User chrooted" \<br />    -d "/home/${LOGIN}/" \<br />    -g "${GROUP}" \<br />    -s "/bin/chrootuser" \<br />    "${LOGIN}"<br /><br /> echo "-- Son mot de passe : "<br /> passwd "${LOGIN}" > /dev/null<br /><br /> echo "-- Création de l'arborescence de son homedir"<br /> mkdir /home/${LOGIN}/ \<br />    /home/${LOGIN}/bin/ \<br />    /home/${LOGIN}/lib/ \<br />    /home/${LOGIN}/dev/<br /> chmod 700 \<br />    /home/${LOGIN}/ \<br />    /home/${LOGIN}/bin/ \<br />    /home/${LOGIN}/lib/ \<br />    /home/${LOGIN}/dev/<br /><br /> cp /bin/bash /home/${LOGIN}/bin/bash<br /> ldd /bin/bash | awk -v "LOGIN=$LOGIN" '{ print "cp "$3" /home/"LOGIN"/lib/" }' | bash<br /> mknod /home/${LOGIN}/dev/null c 1 3 -m 666<br /> chown -R "${LOGIN}:${GROUP}" /home/${LOGIN}<br /><br /> echo ">> Utilisateur \"${LOGIN}\" chrooté"<br /><br /> echo "-- Création du programme /bin/chrootuser"<br /> cat < /bin/chrootuser<br /> #!/bin/bash<br /> exec -c /usr/sbin/chroot /home/\$USER /bin/bash<br /> EOF<br /> chmod 555 /bin/chrootuser </div>  
# Automatiser tout ceci :<br /><br /> Voici un script qui automatise tout cela :<br /><div class="code"> #!/bin/bash<br /><br /> if [ "$#" != 1 ];<br /> then<br />   echo "Usage : $0 <login>"<br />   exit 255;<br /> fi<br /><br /> LOGIN=$1<br /> GROUP=chroot<br /><br /> echo "-- Création du groupe \"${GROUP}\""<br /> groupadd "${GROUP}" > /dev/null 2>&1<br /><br /> echo "-- Création de l'utilisateur \"${LOGIN}\""<br /> useradd \<br />   -c "User chrooted" \<br />   -d "/home/${LOGIN}/" \<br />   -g "${GROUP}" \<br />   -s "/bin/chrootuser" \<br />   "${LOGIN}"<br /><br /> echo "-- Son mot de passe : "<br /> passwd "${LOGIN}" > /dev/null<br /><br /> echo "-- Création de l'arborescence de son homedir"<br /> mkdir /home/${LOGIN}/ \<br />   /home/${LOGIN}/bin/ \<br />   /home/${LOGIN}/lib/ \<br />   /home/${LOGIN}/dev/<br /> chmod 700 \<br />   /home/${LOGIN}/ \<br />   /home/${LOGIN}/bin/ \<br />   /home/${LOGIN}/lib/ \<br />   /home/${LOGIN}/dev/<br /><br /> cp /bin/bash /home/${LOGIN}/bin/bash<br /> ldd /bin/bash | awk -v "LOGIN=$LOGIN" '{ print "cp "$3" /home/"LOGIN"/lib/" }' | bash<br /> mknod /home/${LOGIN}/dev/null c 1 3 -m 666<br /> chown -R "${LOGIN}:${GROUP}" /home/${LOGIN}<br /><br /> echo ">> Utilisateur \"${LOGIN}\" chrooté"<br /><br /> echo "-- Création du programme /bin/chrootuser"<br /> cat < /bin/chrootuser<br /> #!/bin/bash<br /> exec -c /usr/sbin/chroot /home/\$USER /bin/bash<br /> EOF<br /> chmod 555 /bin/chrootuser </div>  
 
 
Important: Pensez à rajouter /bin/chrootuser dans /etc/shells.<br/>
Sinon vous ne pourrez pas vous logguer


Idée originale : Anne
Idée originale : Anne
[[Catégorie:Trucs_Administration]]
[[Catégorie:Trucs_Administration]]

Version du 24 mars 2006 à 18:45

Benjamin Gigon<benjamin@gigon.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


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

Idée originale : Anne