Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2914 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°691912
aspegic500​mg
Posté le 11-06-2005 à 10:55:40  profilanswer
 

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
mood
Publicité
Posté le 11-06-2005 à 10:55:40  profilanswer
 

n°692137
aspegic500​mg
Posté le 11-06-2005 à 20:48:50  profilanswer
 

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)

n°692140
Pillow
'cos the trees won't talk
Posté le 11-06-2005 à 21:01:06  profilanswer
 

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

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

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

n°692146
aspegic500​mg
Posté le 11-06-2005 à 21:44:44  profilanswer
 

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
n°692148
Pillow
'cos the trees won't talk
Posté le 11-06-2005 à 21:54:23  profilanswer
 

# 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
n°692153
aspegic500​mg
Posté le 11-06-2005 à 22:42:02  profilanswer
 

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

n°692155
aspegic500​mg
Posté le 11-06-2005 à 22:55:37  profilanswer
 

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

n°692156
Pillow
'cos the trees won't talk
Posté le 11-06-2005 à 23:05:44  profilanswer
 

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
n°692162
aspegic500​mg
Posté le 11-06-2005 à 23:14:06  profilanswer
 

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:

n°692173
aspegic500​mg
Posté le 11-06-2005 à 23:33:35  profilanswer
 

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
mood
Publicité
Posté le 11-06-2005 à 23:33:35  profilanswer
 

n°692175
Pillow
'cos the trees won't talk
Posté le 11-06-2005 à 23:47:56  profilanswer
 

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 :)  

n°692190
Pillow
'cos the trees won't talk
Posté le 12-06-2005 à 00:11:46  profilanswer
 

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
n°692228
aspegic500​mg
Posté le 12-06-2005 à 01:45:11  profilanswer
 

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
n°692330
mikala
Souviens toi du 5 Novembre...
Posté le 12-06-2005 à 15:57:51  profilanswer
 

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

n°692379
aspegic500​mg
Posté le 12-06-2005 à 19:40:22  profilanswer
 

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..)

n°692385
neostorm
Posté le 12-06-2005 à 20:19:57  profilanswer
 

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.

n°692399
aspegic500​mg
Posté le 12-06-2005 à 20:52:03  profilanswer
 

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 ..?)

n°692417
mikala
Souviens toi du 5 Novembre...
Posté le 12-06-2005 à 21:34:47  profilanswer
 

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à.

n°692418
mikala
Souviens toi du 5 Novembre...
Posté le 12-06-2005 à 21:35:35  profilanswer
 

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 .

n°692496
aspegic500​mg
Posté le 13-06-2005 à 03:51:41  profilanswer
 

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 :)

n°692709
neostorm
Posté le 13-06-2005 à 15:20:46  profilanswer
 

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.

n°692721
aspegic500​mg
Posté le 13-06-2005 à 15:52:45  profilanswer
 

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 )

n°692735
mikala
Souviens toi du 5 Novembre...
Posté le 13-06-2005 à 16:09:28  profilanswer
 

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
n°694422
neostorm
Posté le 16-06-2005 à 19:44:13  profilanswer
 

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)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
espace root du dd[bash] problème de droits
demonter periphérique en USER[Bash] Ouverture de session impossible ??
[MySQL] Problème avec /root/tmp !!interdire l'utilisateur de modifier ses droits dans son répertoire
Serveur samba (domaine NT) - problème de droitsdisque dur usb accessible que par root
bash+php 
Plus de sujets relatifs à : [bash] Retirer des droits d'un user chrooté root de sa prison ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR