Forum Programmation.shell Changer d'utilisateur en cours de route

Posté par  .
Étiquettes : aucune
0
21
oct.
2008
Bonjour,

Je voudrais changer d'utilisateur pendant l'exécution d'un script shell. Mon script commence par faire des choses nécessitant d'être root mais ensuite je préfère être l'utilisateur toto et je ne trouve pas.

Si je fais un sudo à chaque ligne c'est vite moche et question lisibilité c'est moins bon. En plus il suffit d'oublier une seule fois et l'objectif est raté.

Pas la peine de me dire man sudo et man su car j'ai déjà fait :) Si la réponse est dans ces manuels, merci de me dire où car je n'ai pas vu.
Sur google je ne trouve pas non plus alors que j'ai l'impression que c'est un truc basique.
  • # su

    Posté par  (site Web personnel) . Évalué à 2.

    Bah si t'es root t'as le droit de faire su. Exemple :

    su utilisateur << EOF
    echo Je suis ...
    id
    EOF

    Attention par contre car le contenu sera interpreté avant le passage à su (comme s'il était entre "")
  • # seteuid

    Posté par  (site Web personnel) . Évalué à 2.

    Je suppose que tu souhaites la même chose que seteuid() en C par exemple ?

    Si c'est ça, je ne sais pas :-)
    Et la réponse m'interesse également.

    J'ai autrefois pensé à un 'wrapper' en C mais ce n'est pas possible car le wrapper serait appelé au milieu du script shell, donc en tant que processus fils. Cela n'aurait donc pas d'incidence sur le processus parent.

    On peux peut-être appeler une fonction du noyau directement à partir du shell ? Ou appeler une bibliothèque ? Je ne me suis jamais penché sur la question mais c'est la seule solution que j'entrevois.
  • # su -c

    Posté par  . Évalué à 3.

    Tu peux découper ton script en deux. Tout ce que tu fais en tant que root reste dans ton_script.sh. Tout ce que tu veux faire en tant que toto, tu le mets dans chemin/vers/toto.sh

    yapuka (c) appeler toto.sh dans ton_script.sh :
    su - toto -c chemin/vers/toto.sh

    en tout cas, c'est comme ça qu'on fait chez nous :)
    • [^] # Re: su -c

      Posté par  . Évalué à 3.

      Voilà, ou directement dans une fonction dans le script, je crois que ça marche :

      fonction_admin() {
      bla bla bla
      }

      sudo admin
      • [^] # Re: su -c

        Posté par  . Évalué à 2.

        Ca reste des p... d'usines à gas mais je vais faire avec. Je crois que je vais couper le script en deux car dans mon cas ce sera plus propre.

        Le seteuid() dont parle Kerro serait bien mais je n'ai pas trouvé non plus.

        Merci :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.