MonkeyBlog

Switch User - Recuperer le shell root.

Sudo

Suite a un soucis plus lie a mes mauvais reflexes psycho-moteur qu’a mon etourderie legendaire, je me suis trouve dans une situation fort rigolote qui consiste a ce que mon root n’ait plus de shell (apres une commande proche de chsh root : /bin/jecriskejepense). Et comme je suis un rigolo, aucun de mes autres utilisateurs ne fait partie de la liste des sudoers.
Apres m’etre bien marre (oui, c’etait des larmes de joie!), je me suis lance dans une nouvelle aventure “farfouillons le net et les manpages” (pour les windowsiens, nottez que les manpages ne sont malheureusement pas des page remplis de photos un peu ole-ole, uniquement des pages de documentations, qui soit dit en passant n’ont rien de tres sexy).

Et c’est ainsi que je tombe sur l’argument -c de su.

-c, –command COMMAND
Specify a command that will be invoked by the shell using its -c.

En voila une bonne nouvelle, puisque comme (a ce qu’il parrait) -c permet d’executer une et une seule commande, il suffirait d’y placer un script, ou un petit sed pour atteindre le /etc/passwd et voila.

Ouais ok, super, mais la commande passee a -c doit bien etre lance dans un environnement, celui la meme fourni par un shell! DAMN IT! Mais heureusement il reste l’argument -s de su:

-s, –shell SHELL
The shell that will be invoked.

The invoked shell is chosen from (highest priority first):
· The shell specified with –shell.
· If –preserve-environment is used, the shell specified by the
$SHELL environment variable.
· The shell indicated in the /etc/passwd entry for the target
user.
· /bin/sh if a shell could not be found by any above method.

If the target user has a restricted shell (i.e. the shell field
of this users entry in /etc/passwd is not listed in
/etc/shell), then the –shell option or the $SHELL environment
variable wont be taken into account, unless su is called by
root.

Donc si je lis ca, je suis legalement en droit de penser qu’une commande comme la suivante appellerait le script ‘mon_script’ avec les droit root au sein d’un bash.

$> su root -s /bin/bash -c /tmp/mon_script

Et bien pas du tout, car malgre le parametre -s il semblerait que le root ait besoin d’un shell valide meme lorsqu’on force le shell. Ce qui d’un cote parrait logique puisque dans le cas contraire l’utilite des /bin/false ou /bin/jail afin d’enlever l’acces au shell a certains utilisateurs n’aurait plus de sens. Alors la solution (normal) qu’il me restait, a ete de redemarrer avec un live-cd pour monter a la main ma partition / et modifier le fichier /etc/passwd afin d’y renseigner un shell valide (l’autre solution, en cas de non acces physique a la machine, aurait ete de recuperer la main sur un process tournant avec les droits root).

Voila un billet ou on croit des le debut qu’on peut recuperer assez facilement un shell root meme quand on est assez con pour chsh root… mais non! Je n’ai pas trouve LA solution. Au moins j’espere que vous aurez appris l’existence de parametres sympa a su.

This entry was posted on Monday, June 23rd, 2008 at 12:11 and is filed under Coding, Life. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

« Top Spin 3
Jack a Bercy »

4 Responses to “Switch User - Recuperer le shell root.”

  1. LXS Says:
    June 23rd, 2008 at 23:12

    Sinon tu démarres en mode single-user et tu modifies à la main ton /etc/passwd.

    Franck, qui a déjà pleuré devant un shell root qui pointe sur /bin/false :D

  2. L Says:
    June 23rd, 2008 at 23:17

    En effet, j’ai oublie de le mentionner.
    Mais comme de toute facon il fallait rebooter, ca revient foncierement au meme.

  3. Sasha Roar Says:
    June 24th, 2008 at 13:44

    Quoi?! C’est très sexy les manpages.

  4. haust Says:
    July 31st, 2008 at 02:31

    Trop bien le dessin, vraiment trop top !!

Leave a Reply

  • Archives

    • November 2008
    • October 2008
    • September 2008
    • August 2008
    • July 2008
    • June 2008
    • May 2008
    • April 2008
    • March 2008
    • February 2008
    • January 2008
    • December 2007
    • November 2007
    • October 2007
  • Categories

    • Blog (8)
    • Coding (11)
    • Gaming (23)
    • Life (33)
    • Other (3)

MonkeyBlog is proudly powered by WordPress | Bob