2 votes

Comment puis-je passer un mot de passe à la commande "su" ?

J'ai un programme qui va prendre un mot de passe en entrée, puis exécuter un shell pour effectuer une commande "su" (switch user) sous UNIX. Cependant, je ne sais pas comment transmettre la variable du mot de passe à la commande su d'UNIX. Le langage que je dois utiliser pour cela est assez limité (UniBasic).

Des idées ?

11voto

Keltia Points 8104

Eh bien, la meilleure façon de le faire serait un binaire setuid-Root qui demanderait le mot de passe puis exécuterait toute commande nécessaire, mais cela nécessite des connaissances que vous dites ne pas posséder. Je vous conseille de regarder sudo(1) à la place.

5voto

PolyThinker Points 3473

Vous pouvez vous connecter à localhost en tant qu'autre utilisateur pour exécuter la commande de votre choix. Ou bien, utilisez sudo et modifiez /etc/sudoers de manière à ce que sudo ne demande pas de mot de passe. Cependant, cela pourrait avoir des conséquences sur la sécurité.

EDIT : S'il vous plaît, faites-moi savoir pourquoi lorsque vous votez contre. Ma réponse n'est peut-être pas parfaite mais au moins elle fonctionne. Je le fais moi-même pour certains logiciels sous licence qui ne peuvent être exécutés que sous un nom d'utilisateur bizarre.

3voto

Jason S Points 58434

Tu le fais. pas vous voulez spécifier le mot de passe comme un argument de ligne de commande. Pas tant à cause de la réponse de @unwind (scripts pourraient être rendus privés) mais parce que si quelqu'un exécute une liste de processus, vous pourriez voir l'argument de commande et donc le mot de passe en question.

1voto

unwind Points 181987

La version de su que j'ai sur mon serveur Linux ne supporte pas une telle option. J'ai vérifié sudo, mais il ne le fait pas non plus. Ils veulent faire l'invite eux-mêmes, pour s'assurer que cela est fait d'une manière sûre et (je suppose) pour décourager les gens de mettre des mots de passe verbatim dans scripts et ainsi de suite.

0voto

Vous pourriez aussi regarder l'utilitaire 'expect' qui a été conçu pour script les entrées complexes de l'utilisateur dans un programme qui n'était pas assez flexible pour recevoir cette entrée d'autres endroits que stdin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X