Comment 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 exécuter une commande “su” (changer d’utilisateur) sous UNIX. Cependant, je ne sais pas comment passer la variable de mot de passe à la commande UNIX su. Le langage que je dois utiliser pour cela est assez limité (UniBasic).

Des idées?

Eh bien, la meilleure façon de faire serait un binary setuid-root qui demande le mot de passe, puis exécute la commande requirejse, mais cela nécessite des connaissances que vous ne possédez pas. Je conseille de regarder sudo (1) à la place.

Vous pouvez ssh à localhost en tant qu’autre utilisateur pour exécuter la commande de votre choix. Ou, utilisez sudo et éditez / etc / sudoers pour que sudo ne demande pas de mot de passe. Cependant, il pourrait y avoir des implications en matière de sécurité.

EDIT: S’il vous plaît laissez-moi savoir pourquoi quand vous le vote. Ma réponse n’est peut-être pas parfaite mais au moins, ça marche. Je le fais moi-même pour certains logiciels sous licence qui ne peuvent être exécutés que sous un nom d’utilisateur étrange.

Vous ne voulez pas spécifier le mot de passe en tant qu’argument de ligne de commande. Pas tellement à cause de la réponse de @ dérouler (les scripts peuvent être rendus privés) mais parce que si quelqu’un exécute une liste de processus, vous pouvez voir l’argument de commande et donc le mot de passe en question.

La version de su que j’ai sur mon serveur Linux ne supporte pas une telle option. J’ai vérifié sudo, mais ce n’est pas le cas non plus. Ils veulent eux-mêmes faire leur demande, s’assurer que tout est fait en toute sécurité et (je suppose) décourager les gens de mettre des mots de passe tels quels dans les scripts, etc.

Vous pouvez également consulter l’utilitaire ‘expect’ qui a été conçu pour écrire des entrées utilisateur complexes dans des programmes qui ne sont pas suffisamment flexibles pour recevoir cette entrée d’autres endroits que stdin.