su dans un script bash

Avell Diroll avelldiroll at gmail.com
Ven 30 Sep 09:28:19 UTC 2011


On 30/09/2011 11:08, Clément Février wrote:
> Je cherche à utiliser su dans un script bash pour exécuter une commande.
> Le mot de passe de l'utilisateur ne sera pas saisi durant l'exécution du
> script. J'ai donc mis cette ligne dans mon script :
>
> echo -e "${mdp}" | su $pseudo -c "echo plop"

hardcoder les mots de passe des users dans un script est une très 
mauvaise idée, je ne pense que ce soit nécessaire de détailler pourquoi ici.

> Mais cette commande me retourne :
> su : doit être lancé à partir d'un terminal

Ce qui est rassurant, su ne se laisse pas faire.

> Puis, le script continue sa vie sans exécuter la commande.
> Je peux éventuellement ajouter /bin/su à /etc/sudoers puis lancer :
> sudo su
> su $pseudo -c "echo plop"
> exit

"sudo su" is evil … soit tu utilises l'un, soit l'autre, mais le mélange 
des deux donne des environnements hybrides qui peuvent résulter sur de 
grosses bêtises:

http://doc.ubuntu-fr.org/sudo-annexe#differences_entre_sudo_-i_et_sudo_-s_et_pourquoi_il_est_preferable_de_ne_jamais_lancer_sudo_su

Enfin tu ne sembles pas connaître l'option "-u" de sudo qui te 
permettrait ce genre de choses:

sudo -u $pseudo $command

et c'est pour $command qu'il faut ajuster les droits dans /etc/sudoers, 
et si possible uniquement pour les utilisateurs concernés.

> Est-ce possible d'éviter cette étape et de passer directement le mot de
> passe en argument à su ?

Un mot de passe hardcodé est toujours une mauvaise idée.

Bonne journée

Ju
-- 
I never let my schooling interfere with my education.
     - Mark Twain




Plus d'informations sur la liste de diffusion ubuntu-fr