[bash] Retirer des droits d'un user chrooté root de sa prison ?

Retirer des droits d'un user chrooté root de sa prison ? [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 11-06-2005 à 10:55:40    

edit: mon premier problème étant résolu, je passe à la suite:
 
J'ai un utilisateur qui est chrooté dans son repertoire /home/chroot/$USER, il a accés à ses commandes, il a ses repértoires /bin /dev et /lib, mais cela me gène qu'il est accés total à ceux là (normal il est root dans sa prison), comment lui retirer ses droits sur ces reps? :??:  
 
 
 
------------------------------
 
J'arrive à faire un shell chrooté avec la petite arborescence de base, à copier à la main les librairies des commandes (ls, dir, cp, mv...), mais dans un soucis d'automatisation, je teste un script que j'ai trouvé sur lea-linux: http://lea-linux.org/admin/admin_env/chroot.html, malheureusement il pose problème au niveau de la commande "ldd":

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


 
En effet lorsque je fais:

Code :
  1. testlinux:~# ldd /bin/bash
  2.         libncurses.so.5 => /lib/libncurses.so.5 (0xb7fa4000)
  3.         libdl.so.2 => /lib/tls/libdl.so.2 (0xb7fa0000)
  4.         libc.so.6 => /lib/tls/libc.so.6 (0xb7e6b000)
  5.         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000)


 
Ce que j'aimerai c'est juste le chemin complet de la librairie, et non le nom de la lib et la flèche indiquant le lien, voyez vous une solution ? :)


Message édité par aspegic500mg le 12-06-2005 à 01:48:08
Reply

Marsh Posté le 11-06-2005 à 10:55:40   

Reply

Marsh Posté le 11-06-2005 à 20:48:50    

une idée pour récupérer juste le chemin et pas l'indication du lien ? y'a pas une commande ou une option pour ça ? :) (j'ai regardé l'aide de ldd mais y'a rien pour faire ca)

Reply

Marsh Posté le 11-06-2005 à 21:01:06    

Ben c'est fait dans le script visiblement :??:  

ldd /bin/bash | awk '{print $3}'

PS: library (anglais) = bibliothèque (français) :o

Reply

Marsh Posté le 11-06-2005 à 21:44:44    

Oui je vois ça, et pourtant j'obtiens des:
 

Code :
  1. bash: line 1: syntax error near unexpected token `('
  2. bash: line 1: `cp /lib/libncurses.so.5  libncurses.so.5 => /lib/libncurses.so.5 (0xb7fa4000)/plop/lib/'
  3. bash: line 1: syntax error near unexpected token `('
  4. bash: line 1: `cp /lib/tls/libc.so.6    libc.so.6 => /lib/tls/libc.so.6 (0xb7eae000)/plop/lib/'
  5. bash: line 1: syntax error near unexpected token `('
  6. bash: line 1: `cp /lib/tls/libc.so.6    libc.so.6 => /lib/tls/libc.so.6 (0xb7eae000)/plop/lib/'
  7. bash: line 1: syntax error near unexpected token `('
  8. bash: line 1: `cp /lib/tls/libc.so.6    libc.so.6 => /lib/tls/libc.so.6 (0xb7eae000)/plop/lib/'


 
En gros il a l'air de pas me prendre le $3 mais bien toute la chaine :sleep:
 
edit: et pourtant à la main:

Code :
  1. testlinux:~# ldd /bin/bash | awk -v "LOGIN=plop" '{ print "cp "$3" rep/"LOGIN"/lib/" }'
  2. cp /lib/libncurses.so.5 rep/plop/lib/
  3. cp /lib/tls/libdl.so.2 rep/plop/lib/
  4. cp /lib/tls/libc.so.6 rep/plop/lib/
  5. cp /lib/ld-linux.so.2 rep/plop/lib/


Message édité par aspegic500mg le 11-06-2005 à 21:48:14
Reply

Marsh Posté le 11-06-2005 à 21:54:23    

# bash: line 1: `cp /lib/libncurses.so.5  libncurses.so.5 => /lib/libncurses.so.5 (0xb7fa4000)/plop/lib/'
 
le premier /lib/libncurses.so.5 est bien le troisième mot de la chaine. C'est $REP qui n'a pas la bonne valeur, ce qui est parfaitement normal en fait.
 
Essaye :

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


Message édité par Pillow le 11-06-2005 à 21:59:25
Reply

Marsh Posté le 11-06-2005 à 22:42:02    

ca marche :love:  
 
 
Maintenant deuxieme problème, en bas du script j'ai une partie qui crée le fichier chrootant l'utilisateur quand il se connecte:

Code :
  1. if [ ! -e /bin/chroot ]; then
  2.     echo "-- Création du programme /bin/chroot"
  3.     cat < /bin/chroot
  4.     #!/bin/bash
  5.     exec -c /usr/sbin/chroot /home/chroot\$USER /bin/bash
  6.     EOF
  7.     chmod 555 /bin/chroot
  8. fi


 
Mais apparement le "cat" ne fonctionne pas et le script execute les commandes:

Code :
  1. ...
  2. -- Création du programme /bin/chroot
  3. chroot-creation.sh: line 60: /bin/chroot: No such file or directory
  4. /usr/sbin/chroot: cannot change root directory to /home/chroot/$USER: No such file or directory

Reply

Marsh Posté le 11-06-2005 à 22:55:37    

arf les boulets, ils ont inversé le symbole > en < alors évidemment ca fonctionne pas ... :o

Reply

Marsh Posté le 11-06-2005 à 23:05:44    

Il ne faudrait pas préciser comment cat se termine?

cat > /bin/chroot << EOF


Message édité par Pillow le 11-06-2005 à 23:06:00
Reply

Marsh Posté le 11-06-2005 à 23:14:06    

Pillow a écrit :

Il ne faudrait pas préciser comment cat se termine?

cat > /bin/chroot << EOF



 
C'est ce que j'étais en train de chercher, mon programme arretait pas le cat et je me demandais pourquoi EOF faisait rien :D
 
merci bien :jap:

Reply

Marsh Posté le 11-06-2005 à 23:33:35    

Par contre mon programme ben il se termine par "fi" (fin de la condition avec le cat dedans) et j'ai droit à un:

Code :
  1. chroot-creation.sh: line 67: syntax error: unexpected end of file


 
edit: apparement l'erreur est avant le fi car avec ceci:
 

Code :
  1. if [ ! -e /bin/chroot ]; then
  2.     echo "-- Création du programme /bin/chroot"
  3.     cat > /bin/chroot << EOF
  4.     #!/bin/bash
  5.     exec -c /usr/sbin/chroot /home/chroot\$USER /bin/bash
  6.     EOF
  7.     echo "ok"
  8.     chmod 555 /bin/chroot
  9. fi


 
Je n'ai pas mon "ok" et j'ai toujours l'erreur !


Message édité par aspegic500mg le 11-06-2005 à 23:36:40
Reply

Marsh Posté le 11-06-2005 à 23:33:35   

Reply

Marsh Posté le 11-06-2005 à 23:47:56    

aspegic500mg a écrit :


edit: apparement l'erreur est avant le fi car avec ceci:
 
[snip]
 
Je n'ai pas mon "ok" et j'ai toujours l'erreur !

Ça veut juste dire que ton if...fi est dans le bloc non terminé...
Tu as problement un fi, un done, ou un guillemet qui manque plus haut. Tu peux essayer de supprimer des bouts de codes jusqu'à localiser le problème. Poste le script en entier si tu ne trouves pas :)  

Reply

Marsh Posté le 12-06-2005 à 00:11:46    

Ah, c'est le EOF qui doit être en début de ligne. Ou alors il faut mettre le même nombre d'espaces (ou une tabulation) devant les deux EOF. Sinon le shell ne le reconnait pas, évidemment :o  
 
Exemples:

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

Ou:

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

Ou encore :

     echo '#!/bin/bash
     exec -c /usr/sbin/chroot /home/chroot\$USER /bin/bash' > /bin/chroot

C'était tout con en fait :D


Message édité par Pillow le 12-06-2005 à 00:50:21
Reply

Marsh Posté le 12-06-2005 à 01:45:11    

J'ai viré les espaces devant EOF et ca fonctionne, j'aurai jamais trouvé tout seul :jap:  
 
 
Mais bon, le script veut décidément pas me créer mon /bin/chroot, donc je l'ai crée à la main:

Code :
  1. #!/bin/bash
  2. exec -c /usr/sbin/chroot /home/chroot/$USER /bin/bash


chmod 755 dessus
 
 
Puis:

Code :
  1. # chmod u+s /usr/sbin/chroot
  2. # ls -l /usr/sbin/chroot
  3. -rwsr-xr-x    1 root     root        10136 2003-07-12 15:54 /usr/sbin/chroot


 
 
Ensuite j'ai le gros script de création "automatisée" d'un shell chrooté:

Code :
  1. #!/bin/bash
  2. # On vérifie que le nom de l'utilisateur souhaité est bien passé en paramêtre
  3. if [ "$#" != 1 ];
  4. then
  5.    echo "Usage : $0 <login>"
  6.    exit 255;
  7. fi
  8. # Nom d'utilisateur
  9. LOGIN=$1
  10. # Groupe attribué à l'utilisateur
  11. GROUP=chroot
  12. # Répertoire par défaut des shell chrootés
  13. REP=/home/chroot
  14. # Utilitaires présents dans /bin
  15. OUTILB="bash cat chmod chown cp grep gunzip gzip ls mkdir more mv rm tar"
  16. echo "-- Création du groupe \"${GROUP}\""
  17. groupadd "${GROUP}" > /dev/null 2>&1
  18. echo "-- Création de l'utilisateur \"${LOGIN}\""
  19. useradd \
  20.    -c "Utilisateur en espace restreint" \
  21.    -d "${REP}/${LOGIN}/" \
  22.    -g "${GROUP}" \
  23.    -s "/bin/chroot" \
  24.    "${LOGIN}"
  25. echo "-- Son mot de passe : "
  26. passwd "${LOGIN}" > /dev/null
  27. echo "-- Création de l'arborescence de son Répertoire personnel --"
  28. mkdir -p $REP/${LOGIN}/bin/ $REP/${LOGIN}/lib/ $REP/${LOGIN}/dev/
  29. # Mise en place des droits sur les répertoires
  30. cd $REP
  31. chmod -R 700 ${LOGIN}
  32. # Copie des programmes et de leurs librairies
  33. for I in $OUTILB;
  34. do
  35.     cp /bin/$I $REP/${LOGIN}/bin/
  36.     # Pour chaque programme, on recherche les librairies correspondantes.
  37.     # On termine en demandant l'exécution par bash des lignes renvoyées par awk
  38.     ldd /bin/$I | awk -v "LOGIN=$LOGIN" -v "REP=$REP" '{ print "cp "$3 " "REP"/"LOGIN"/lib/" }' | bash
  39. done
  40. # Création de l'espace /dev
  41. mknod $REP/${LOGIN}/dev/null c 1 3 -m 666
  42. chown -R "${LOGIN}:${GROUP}" $REP/${LOGIN}
  43. # Fin de la création du compte utilisateur.
  44. echo ">> Utilisateur \"${LOGIN}\" créée et emprisonné"
  45. #if [ ! -e /bin/chroot ]; then
  46. #    echo "-- Création du programme /bin/chroot"
  47. #    cat > /bin/chroot << EOF
  48. #    #!/bin/bash
  49. #    exec -c /usr/sbin/chroot /home/chroot/$USER /bin/bash
  50. #EOF
  51. #    chmod 555 /bin/chroot
  52. #fi


 
 
Tout cela fonctionne très bien, j'ai testé et l'utilisateur est bien chrooté, il a accés à ses commandes ... MAIS une chose qui me gène, il a accés total à ses repertoires dev bin et lib, normal puisqu'il est root de sa prison !
Comment pourrais-je fais pour lui enlever les droits d'écritures sur ces repertoires dans sa propre prison ? :??:
 
Tout cela dans un soucis de sécurité car j'ai lu un peu partout que quelqu'un root dans sa prison peut éventuellement s'en évader ? :??:


Message édité par aspegic500mg le 12-06-2005 à 01:50:18
Reply

Marsh Posté le 12-06-2005 à 15:57:51    

tu rajoutes un peu de grsec par derriere et cela sera un peu plus difficile.

Reply

Marsh Posté le 12-06-2005 à 19:40:22    

mikala a écrit :

tu rajoutes un peu de grsec par derriere et cela sera un peu plus difficile.


 
J'y ai pensé, mais en ce moment y'a le dévellopeur de grsec qui pète un peu son caca nerveux non ? :/ (pas assez de sponsor, il veut arreter, etc..)

Reply

Marsh Posté le 12-06-2005 à 20:19:57    

C'est malsain.
 
Root est celui qui a accès à tout. Ce n'est pas un compte utilisateur, seulement un pseudo-utilisateur à utiliser le moins souvent possible. Il n'a rien à faire dans une prison, et pourra toujours en sortir de toute façon (il a accès à tout).
 
Utiliser un autre utilisateur, et éventuellement lui donner des droits supplémentaires si nécessaire (en utilisant correctement les groupes et/ou sudo) est la seule solution.

Reply

Marsh Posté le 12-06-2005 à 20:52:03    

Ce que je ne comprends pas, c'est que par le script auto c'est un simple "user" qui est crée, il est chrooté dans son repertoire /home/chroot/$USER. Mon script, executé en root, crée les repertoire /bin /dev /lib dans le rep du user, et les chmod 711 ou 755 par exemple.
Mais chose bizzare, une fois que l'utilisateur se connecte et est chrooté dans son répertoire, il a tout de même accés en écriture aux repertoires donc j'avais interdit l'écriture étant root, pouvez-vous m'expliquer ca :??: (ca serait l'histoire du suid ..?)

Reply

Marsh Posté le 12-06-2005 à 21:34:47    

aspegic500mg a écrit :

J'y ai pensé, mais en ce moment y'a le dévellopeur de grsec qui pète un peu son caca nerveux non ? :/ (pas assez de sponsor, il veut arreter, etc..)


ca date un peu comme information là.

Reply

Marsh Posté le 12-06-2005 à 21:35:35    

neostorm a écrit :

C'est malsain.
 
Root est celui qui a accès à tout. Ce n'est pas un compte utilisateur, seulement un pseudo-utilisateur à utiliser le moins souvent possible. Il n'a rien à faire dans une prison, et pourra toujours en sortir de toute façon (il a accès à tout).


je ne suis pas sur du tout que root puisse sortir du chroot quand tu utilises grsec .

Reply

Marsh Posté le 13-06-2005 à 03:51:41    

mikala a écrit :

je ne suis pas sur du tout que root puisse sortir du chroot quand tu utilises grsec .


 
Avec grsec les failles "connues" sont corrigées, reste les inconnues, mais là c'est la même chose pour tout le reste :)

Reply

Marsh Posté le 13-06-2005 à 15:20:46    

Le chroot est très pratique pour installer un système ou ce genre de chose, mais n'apporte rien en sécurité.  
 
Pour rappel, root à un accès complet sur le périphérique du disque dur (/dev/hda) et sur chaque partition  (/dev/hdaX). Même si aucun fichier /dev/hdXY n'existe, rien ne l'empèche de les créer lui même.
Je ne connais pas "grsec", mais à moins que ce soit un fork du kernel linux, je ne pense pas que ce soit infaillible.
 
Je répète encore pour bien insister :  
- root ne doit pas être utilisé comme un utilisateur normal, et  
- Tout droit spécial que root possède peut être donné à n'importe quel autre utilisateur. Il n'est donc JAMAIS nécessaire d'utiliser root comme un utilisateur.

Reply

Marsh Posté le 13-06-2005 à 15:52:45    

neostorm a écrit :

Le chroot est très pratique pour installer un système ou ce genre de chose, mais n'apporte rien en sécurité.  
 
Pour rappel, root à un accès complet sur le périphérique du disque dur (/dev/hda) et sur chaque partition  (/dev/hdaX). Même si aucun fichier /dev/hdXY n'existe, rien ne l'empèche de les créer lui même.
Je ne connais pas "grsec", mais à moins que ce soit un fork du kernel linux, je ne pense pas que ce soit infaillible.
 
Je répète encore pour bien insister :  
- root ne doit pas être utilisé comme un utilisateur normal, et  
- Tout droit spécial que root possède peut être donné à n'importe quel autre utilisateur. Il n'est donc JAMAIS nécessaire d'utiliser root comme un utilisateur.


 
Donc il faut que ca soit un utilisateur qui chroot via sudo ? (ou je comprends rien :D )

Reply

Marsh Posté le 13-06-2005 à 16:09:28    

neostorm a écrit :

Le chroot est très pratique pour installer un système ou ce genre de chose, mais n'apporte rien en sécurité.  
 
Pour rappel, root à un accès complet sur le périphérique du disque dur (/dev/hda) et sur chaque partition  (/dev/hdaX). Même si aucun fichier /dev/hdXY n'existe, rien ne l'empèche de les créer lui même.
Je ne connais pas "grsec", mais à moins que ce soit un fork du kernel linux, je ne pense pas que ce soit infaillible.
 
Je répète encore pour bien insister :  
- root ne doit pas être utilisé comme un utilisateur normal, et  
- Tout droit spécial que root possède peut être donné à n'importe quel autre utilisateur. Il n'est donc JAMAIS nécessaire d'utiliser root comme un utilisateur.


grsec est un patch du kernel
cf notamment http://www.grsecurity.net/features.php


---------------
Intermittent du GNU
Reply

Marsh Posté le 16-06-2005 à 19:44:13    

Non, si tu chroot via sudo, le résultat est le même : un shell root :-D
 
Il faut le laisser simple utilisateur, éventuellement faire un chroot (si c'est nécéssaire mais je vois pas pourquoi...) et si l'utilisateur a besoin de pouvoir faire quelquechose de précis en tant que root, il le fait via sudo (ca peut être transparent avec un alias ou un script)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed