su dans un script bash

Clément Février clement at forumanalogue.fr
Ven 30 Sep 17:39:04 UTC 2011


On 30/09/2011 16:59, Ool wrote:
> Le 30/09/2011 12:32, Clément Février a écrit :
>> Trouvé !
>>
>> www-data ALL = (ALL) NOPASSWD: /usr/bin/maildirmake
>>
>> Ça fonctionne très bien. Merci !
>>
>> Clément
>>
>> On 30/09/2011 12:24, Clément Février wrote:
>>> Quelle réactivité !
>>>
>>> Vous aurez remarqué que le script, c'est pas mon truc, je préfère le c++
>>>
>>> On 30/09/2011 11:28, Avell Diroll wrote:
>>>> 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.
>>>
>>> www-data crée un utilisateur via le script, c'est pourquoi le mot de
>>> passe est présent dans le script, ensuite, le script doit créer un
>>> compte mail avec : /usr/bin/maildirmake Maildir
>>> Donc la commande doit être lancé par l'utilisateur qui vient d'être créé.
>>>
>>>> "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
>>>
>>> Ouai, je me suis rendu compte du problème assez rapidement, mais j'ai
>>> arrangé mon code en fonction.
>>>
>>>> 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.
>>>
>>> Grâce aux messages précédents, j'ai commencé à construire la ligne à
>>> mettre dans sudoers, mais je ne suis pas sûr de comprendre.
>>>
>>> www-data ALL = NOPASSWD: (le_nouvel_utilisateur)/usr/bin/maildirmake
>>>
>>> et donc dans mon script :
>>>
>>> cd /home/du/nouvel/utilisateur
>>> sudo -u $pseudo /usr/bin/maildirmake Maildir
>>>
>>> Si j'ai bien compris, le premier terme correspond à l'utilisateur qui
>>> lance le script, tout du moins le "sudo -u", ici www-data, pour toutes
>>> les machine (ALL), pas de mot de passe (NOPASSD) pour la commande
>>> /usr/bin/maildirmake (ou /usr/bin/maildirmake Maildir ?) exécutée par
>>> le_nouvel_utilisateur, donc le compte qui vient d'être créer par www-data.
>>> "le_nouvel_utilisateur" étant variable, comment faire ?
>>>
>>> Clément
>>>
>>
>>
> 
> 
>> www-data ALL = (ALL) NOPASSWD: /usr/bin/maildirmake
> ça me parait super super  dangereux en fait..
> 

Ben, au pire des cas, ça crée un dossier (ça pèse pas grand chose et en
terme de temps de calcul, c'est ridicule). J'ai changé la configuration
pour ne permettre que l'exécution en local (ALL) -> (localhost) et je
n'ai autorisé qu'un seul vhost à lancer des script.
Je pense que la prochaine étape sera la protection contre les DoS en
imposant une limite au nombre de processus que apache peut lancer.




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