« Discussion:Chroot » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
m (La connexion avec sftp user@server ne marche pas)
m (Lea a déplacé la page Discussion:Admin-admin env-chroot vers Discussion:Chroot)
 
(Une version intermédiaire par un autre utilisateur non affichée)
Ligne 86 : Ligne 86 :


Quels sont les binaires à mettre dans bin/ pour que sftp fonctionne correctement ? (sftp y est déjà).
Quels sont les binaires à mettre dans bin/ pour que sftp fonctionne correctement ? (sftp y est déjà).
== Correction pour Etch (Debian stable) ==
Sous une debian Etch, la commande ldd /bin/bash retourne :
<code># ldd /bin/bash
linux-gate.so.1 =>  (0xffffe000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f99000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f95000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e64000)
/lib/ld-linux.so.2 (0xb7fe5000)</code>
Seules les librairies des quatre dernières lignes retournées sont à copier dans le répertoire lib de la prison (/home/chroot/toto).
<code># cp /lib/libncurses.so.5 lib
# cp /lib/tls/i686/cmov/libdl.so.2 lib
# cp /lib/tls/i686/cmov/libc.so.6 lib
# cp /lib/ld-linux.so.2 lib</code>
Ce qui va poser problème avec la commande:
<code>ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }' | bash
</code>
du script
et ce pour plusieurs raisons :
#awk doit prendre la troisième colonne de la sortie ldd pour la passer comme argument source à cp.
- La troisième colonne de la première ligne est (0xffffe000), cela ne risque pas de fonctionner!!!
- Il n'y a pas de troisième colonne dans la dernière ligne retournée par ldd, là aussi cela ne risque pas de fonctionner!!!
#il y a une erreur dans la syntaxe : pourquoi utiliser l'option -v de awk pour $LOGIN et pas pour $REP ???
Testons :
(j'ai retirer la redirection vers bash pour obtenir une sortie à l'écran)
<code>#I=/bin/bash
#LOGIN=toto
#REP=/home/chroot
#ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }'
cp (0xffffe000) linux-gate.so.1 =>  (0xffffe000)/toto/lib/
cp /lib/libncurses.so.5 libncurses.so.5 => /lib/libncurses.so.5 (0xb7ed8000)/toto/lib/
cp /lib/tls/i686/cmov/libdl.so.2 libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7ed4000)/toto/lib/
cp /lib/tls/i686/cmov/libc.so.6 libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7da3000)/toto/lib/
cp /lib/ld-linux.so.2 (0xb7f24000)/toto/lib/
</code>
Houla! C'est pas vraiment ce que l'on cherchait à obtenir...
Commençons par corriger la syntaxe.
<code># ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '{ print "cp "$3" "REP"/"LOGIN"/lib/" }'
cp (0xffffe000) /home/chroot/toto/lib/
cp /lib/libncurses.so.5 /home/chroot/toto/lib/
cp /lib/tls/i686/cmov/libdl.so.2 /home/chroot/toto/lib/
cp /lib/tls/i686/cmov/libc.so.6 /home/chroot/toto/lib/
cp  /home/chroot/toto/lib/
</code>
Haa! Ca va déjà un peu mieux...
Poursuivons en nous occupant de la première et dernière ligne. Pour cela il suffit d'indiquer à awk de ne traiter les ligne que si la troisième colonne commence par /lib  ;)
<code>#ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '$3 ~ "^/" { print "cp "$3" "REP"/"LOGIN"/lib/" }'
cp /lib/libncurses.so.5 /home/chroot/toto/lib/
cp /lib/tls/i686/cmov/libdl.so.2 /home/chroot/toto/lib/
cp /lib/tls/i686/cmov/libc.so.6 /home/chroot/toto/lib/
</code>
Et voila...
Remplacez dans le script
<code>ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }'
</code>
par
<code>ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '$3 ~ "^/" { print "cp "$3" "REP"/"LOGIN"/lib/" }' | bash
</code>
Tester sous Debian Etch
Un très grand NON REMERCIEMENT à Franck Huet pour son livre Debian GNU/Linux qui se targue de traiter de la sécurité sur Etch et qui à repris littéralement ce script. J'ai réellement perdu 39euros.

Dernière version du 3 décembre 2023 à 21:28

marche pas

j'ai testé la procédure en manuel et le script lors du logging j'ai le message d'erreur /usr/sbin/chroot: cannot run command `/bin/bash': No such file or directory méthode incompléte ?, erreur ? qui as une solution ? merci par avance nota : ai testé sur mandriva 2006, suse 10.1, kubuntu breezy, fedora core 4


pb avec la commande LDD et AWK

le code suivant ne fonctionne pas correctement (mandriva 2006) :

ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }' | bash



$REP renvoit (dans le print) un des trois type d'affichage

       linux-gate.so.1 =>  (0xffffe000)
       libc.so.6 => /lib/tls/libc.so.6 (0xb7e56000)
       /lib/ld-linux.so.2 (0xb7f9b000)




$3 renvoit en réponse :

(0xffffe000)

/lib/tls/libc.so.6

<vide>

Création du script /bin/chroot par un 'document en ligne' (here document)

Est-ce que ces lignes du script final :


cat < /bin/chroot

   #!/bin/bash
   exec -c /usr/sbin/chroot /home/chroot\$USER /bin/bash
   EOF


ne devraient pas être remplacées par ceci :

{

cat<<'EOF'

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

}>/bin/chroot

quotas, réseau?

Hello! J'ai suivi en grande partie ton tuto. Mais j'ai 2-3 soucis maintenant: 1- comment faire pour les quotas? 2- je n'ai pas de réseau dans mon espace chrooté :/ plutôt génant...

Merci d'avance!

@@++


Copie conforme ?

Merci pour ce très bon tutorial, qui m'a bien éclairé sur le sujet. Par contre je tenais à vous dire que j'ai trouvé sa copie conforme dans le livre "Linux spécial Sécurité" dans la collection Ressources Informatique de Frank HUET, page 175 Ne sachant pas qui a copié qui, je tenais juste à vous en informer.

Cordialement.

La connexion avec sftp user@server ne marche pas

Après avoir suivit la procédure de chroot, j'ai testé la commande sftp user@server (en ligne de commande et avec Filezilla). La connexion reste bloquée après avoir entré le mot de passe (le mot de passe est correct). Par contre la commande ssh user@server fonctionne correctement.

Quels sont les binaires à mettre dans bin/ pour que sftp fonctionne correctement ? (sftp y est déjà).

Correction pour Etch (Debian stable)

Sous une debian Etch, la commande ldd /bin/bash retourne : # ldd /bin/bash linux-gate.so.1 => (0xffffe000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7f99000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f95000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e64000) /lib/ld-linux.so.2 (0xb7fe5000)

Seules les librairies des quatre dernières lignes retournées sont à copier dans le répertoire lib de la prison (/home/chroot/toto). # cp /lib/libncurses.so.5 lib

  1. cp /lib/tls/i686/cmov/libdl.so.2 lib
  2. cp /lib/tls/i686/cmov/libc.so.6 lib
  3. cp /lib/ld-linux.so.2 lib

Ce qui va poser problème avec la commande: ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }' | bash du script et ce pour plusieurs raisons :

  1. awk doit prendre la troisième colonne de la sortie ldd pour la passer comme argument source à cp.

- La troisième colonne de la première ligne est (0xffffe000), cela ne risque pas de fonctionner!!! - Il n'y a pas de troisième colonne dans la dernière ligne retournée par ldd, là aussi cela ne risque pas de fonctionner!!!

  1. il y a une erreur dans la syntaxe : pourquoi utiliser l'option -v de awk pour $LOGIN et pas pour $REP ???

Testons : (j'ai retirer la redirection vers bash pour obtenir une sortie à l'écran) #I=/bin/bash

  1. LOGIN=toto
  2. REP=/home/chroot
  3. ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }'

cp (0xffffe000) linux-gate.so.1 => (0xffffe000)/toto/lib/ cp /lib/libncurses.so.5 libncurses.so.5 => /lib/libncurses.so.5 (0xb7ed8000)/toto/lib/ cp /lib/tls/i686/cmov/libdl.so.2 libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7ed4000)/toto/lib/ cp /lib/tls/i686/cmov/libc.so.6 libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7da3000)/toto/lib/ cp /lib/ld-linux.so.2 (0xb7f24000)/toto/lib/ Houla! C'est pas vraiment ce que l'on cherchait à obtenir...

Commençons par corriger la syntaxe. # ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '{ print "cp "$3" "REP"/"LOGIN"/lib/" }' cp (0xffffe000) /home/chroot/toto/lib/ cp /lib/libncurses.so.5 /home/chroot/toto/lib/ cp /lib/tls/i686/cmov/libdl.so.2 /home/chroot/toto/lib/ cp /lib/tls/i686/cmov/libc.so.6 /home/chroot/toto/lib/ cp /home/chroot/toto/lib/

Haa! Ca va déjà un peu mieux...

Poursuivons en nous occupant de la première et dernière ligne. Pour cela il suffit d'indiquer à awk de ne traiter les ligne que si la troisième colonne commence par /lib  ;) #ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '$3 ~ "^/" { print "cp "$3" "REP"/"LOGIN"/lib/" }' cp /lib/libncurses.so.5 /home/chroot/toto/lib/ cp /lib/tls/i686/cmov/libdl.so.2 /home/chroot/toto/lib/ cp /lib/tls/i686/cmov/libc.so.6 /home/chroot/toto/lib/

Et voila...

Remplacez dans le script ldd /bin/$I | awk -v "LOGIN=$LOGIN" '{ print "cp "$3 $REP"/"LOGIN"/lib/" }' par ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '$3 ~ "^/" { print "cp "$3" "REP"/"LOGIN"/lib/" }' | bash

Tester sous Debian Etch

Un très grand NON REMERCIEMENT à Franck Huet pour son livre Debian GNU/Linux qui se targue de traiter de la sécurité sur Etch et qui à repris littéralement ce script. J'ai réellement perdu 39euros.