Utilisation de la fonction exec en PHP
Par Puyb, mercredi 10 janvier 2007 à 12:59 :: General :: #77 :: rss
Laurent vient de publier une page sur son wiki dédié à l'utilisation de la fonction PHP exec pour lancer des commandes systèmes...
Je voudrais juste apporter quelques petites astuces que j'utilise régulièrement...
Premièrement, bien souvent, on a besoin d'exécuter des commandes en root... Par exemple, pour modifier un fichier de configuration et redémarrer un service...
Pour cela, on peut utiliser la commande sudo.
Sudo permet de contrôler de manière fine l'exécution de programmes en mode root. En temps normal, sudo demande a l'utilisateur d'entrer son mot de passe pour pouvoir exécuter la commande en root. Mais l'on peut définir que certaines commandes n'aient pas besoin de mot de passe, via l'edition du fichier de conf de sudo :
Maintenant, quand on fait ça, il faut faire attention à la sécurité...
Il ne faut pas par exemple donner a apache l'accès direct à /bin/passwd, car si une application web est corrompu, l'attaquant pourra changer tous les mots de passe sans aucune restriction...
Pour éviter cela, je préfère encapsuler le programme dans un script shell qui se chargera de vérifier les paramètre fournit par le script php...
Avec changepasswd.sh :
Bon, ce n'est qu'un exemple torché en 5 minutes pour l'occasion, je n'ai pas testé ces scripts en particulier, mais j'ai déjà utiliser pas mal de fois cette technique... Mais Mais, bon, je pense que ça pourrait en aider certains...
Je voudrais juste apporter quelques petites astuces que j'utilise régulièrement...
Premièrement, bien souvent, on a besoin d'exécuter des commandes en root... Par exemple, pour modifier un fichier de configuration et redémarrer un service...
Pour cela, on peut utiliser la commande sudo.
Sudo permet de contrôler de manière fine l'exécution de programmes en mode root. En temps normal, sudo demande a l'utilisateur d'entrer son mot de passe pour pouvoir exécuter la commande en root. Mais l'on peut définir que certaines commandes n'aient pas besoin de mot de passe, via l'edition du fichier de conf de sudo :
# visudoOu l'ont ajoute :
httpd ALL=NOPASSWD: /usr/libexec/changepass.shCela permet à l'utilisateur httpd (apache) d'exécuter le script en tant que root sans avoir besoin de rentrer un mot de passe.
Maintenant, quand on fait ça, il faut faire attention à la sécurité...
Il ne faut pas par exemple donner a apache l'accès direct à /bin/passwd, car si une application web est corrompu, l'attaquant pourra changer tous les mots de passe sans aucune restriction...
Pour éviter cela, je préfère encapsuler le programme dans un script shell qui se chargera de vérifier les paramètre fournit par le script php...
<?php
exec("sudo /usr/libexec/changepass.sh ".$_GET['user']." ".$_GET['password']);
?>
Avec changepasswd.sh :
#!/bin/bash if [ -d /var/www/clients/$1 ]; then htpasswd -b /etc/httpd/clients.passwd $1 $2 fi
Bon, ce n'est qu'un exemple torché en 5 minutes pour l'occasion, je n'ai pas testé ces scripts en particulier, mais j'ai déjà utiliser pas mal de fois cette technique... Mais Mais, bon, je pense que ça pourrait en aider certains...
Commentaires
1. Le mardi 9 septembre 2008 à 14:24, par Lephp
2. Le mercredi 22 avril 2009 à 09:54, par hokutonoken76
3. Le mardi 9 juin 2009 à 16:42, par Puyb
Ajouter un commentaire