[RESOLU] Problème droit unix exécution commande system() exec()...

Invité
Invité n'ayant pas de compte PHPfrance

15 févr. 2006, 16:36

Bonjour à tous.

J'ai lu pendant toute la matinée diférent post sur le sujet avec la fonction recherche... et je n'ai pas trouvé de réelle solution, alors je remet un nouveau post on ne sais jamais :wink:

Je n’arrive pas à exécuter certaines commandes UNIX system qui requière des droits admin.
Ex :
ls > test.txt
mkdir toto
cp /var/www toto/titi


Tandis que les commandes d’affichage ou autre fonctionnent sans problèmes. (tree, ls…)

Apache n'a pas les droits root et je n'ai pas envie de les lui donner de facon permanente. J'ai lu qu'il y a également moyen de passer par des script bash CGI ou autre mais ce n'est pas mon désir non plus.

Donc j’ai installé sudo, je pense qu’il est configuré correctement…

# User privilege specification
root ALL=(ALL) ALL

Les commandes sont donc devenues :

System (« sudo –u root ls > test.txt »);
System (« sudo –u root mkdir toto »);
...

Mais ça ne marche pas… il ne me met aucune erreur à l’exécution mais aucun fichier ou dossier ne se créé… donc je suppose qu’il y a toujours un problème de droits.

J'ai donné tout les droit à sudo :

[root@Fichiers /]# ls -l usr/bin/sudo
-rwxrwxrwx 2 root root 105236 aoû 30 14:09 usr/bin/sudo*

Mais toujours rien.

J'ai lu que beaucoup de personne ont eu ce problème...

J’ai également essayé d’autre commande : exec(), passthru()…. Idem.

Quelqu’un a une idée ?
Merci :-)

Eléphanteau du PHP | 27 Messages

15 févr. 2006, 23:53

Ta question est un peu vague, qu'essaies-tu de faire en fait?
tu veux utiliser le shell via le php?

Pour les exemples de commande que tu donnes, une alternative est proposee par des fonctions php specifiques(chmod(), copy(), etc...)
et utiliser des fonctions telles que system() et autres du meme style est une mauvaise idee si tu peux faire autrement.

Si malgre tout il te faut les utiliser, alors verifie dans le php.ini la variable
disable_functions; il se peut effectivement qu'elles soient desactivees.
Si ce n'est pas le cas, et que certaines commandes shell fonctionnent via cette methode, alors c'est certainement une histoire de droits sur les fichiers et/ou le repertoire et pas sur la commande elle-meme(par exemple pour mkdir, la commande fonctionne mais le processus sous lequel tourne ton script n'a pas les droits de creer un repertoire a l'endroit où tu veux le creer.)

Enfin il te faut remettre les droits corrects sur le fichier sudo qui sont:

-rwsr-xr-x et surtout pas -rwxrwxrwx, sudo ne se configure que via le fichier sudoers qui lui ne se retouche que via la commande visudo, et surtout pas, malheureux :( en faisant un chmod 777 sur l'exe!)
C'est tres important!

Qu'essaies-tu de faire exactement?

Thibaut
Invité n'ayant pas de compte PHPfrance

16 févr. 2006, 10:40

Bon d'abord désolé pour les admin mais je n'arrive pas à me logger avec le compte que j'ai créé hier...

Joalan merci pour ta réponse!
Je vais essayer de me réexpliquer...
En fait je désire créer un interface web en php, hébergé sur mon serveur de fichier linux. Et cet interface me permettrait de gérer les ACLs de mes dossiers et fichiers.

Donc via l'interface, j'aurai besoin que php puisse exécuter des fonctions system qui ont besoin des droits root.

Dans php.ini ma variable disable_functions ne contient rien.
Mais je pense que c'est effectivement une question de droits...

Quand je me met en mode utilisateur sur linux (donc comme apache) pour tester mes commandes voila ce que ca donne.

sudo -u root mkdir /var/www/html/toto
il me demande un password, dois-je mettre le password utilisateur ou root? Avec celui utilisateur, il me met "Relais brisé (pipe)" et il ne me propose plus de rentrer de mot de passe après.

J'ai remis les droits corrects sur le fichier sudo. :-)
Je vais me documenter un peu plus sur la config de sudo.
Si je peux annuler la demande de password ce serait parfait.

Dis autrement je voudrai simplement pouvoir exécuter, sous linux, en session utilisateur, des commandes néssessitant les droits root sans qu'il me demande d'entrer de password et sans passer en mode root évidement.

Eléphanteau du PHP | 27 Messages

16 févr. 2006, 21:09

Ok, je te donne quelques pistes, mais je te conseille de perdre un peu de temps avec la syntaxe du sudoers pour eviter de faire des conneries.

Pour ton probleme, je pense qu'il te faut ajouter une directive NOPASSWD
dans le sudoers (encore une fois, il faut absolument utiliser visudo pour retoucher au fichier de conf)

Si apache tourne en temps que user httpd par exemple, essaie d'ajouter une ligne dans le sudoers du genre:
httpd ALL=(ALL) NOPASSWD:ALL
ou bien encore mieux:
Cmnd_Alias APACHEOK=/bin/mkdir, /bin/rmdir, [...autrecommandes]
httpd ALL=(ALL) NOPASSWD:APACHEOK
(Seules les commandes listees seront autorisees, qui plus est sans password)

Crees toi un user nono, et fais les tests avec. Par exemple si t'as tape les lignes ci-dessus avec nono,
passe en user nono, et la commande suivante doit fonctionner:
nono>sudo mkdir petitrobot

Si vraiment apres ca ca marche pas(c'est a dire qu'il te demande quand meme un password et en partant du principe que t'as bien configure le sudoers!), alors je crois me souvenir que j'avais eu un probleme similaire
apres avoir compile un sudo sur un serveur qu'en avait pas par defaut, et ca venait justement de la compilation du sudo par defaut qui obligeait le password.
genre un ./configure classique, pas bon. Fallait activer quelques options
genre ./configure --disable-authentication ou un truc dans le genre.

Donc dans ce cas je te conseille de recuperer les sources de sudo, puis de lire tranquillement le fichier INSTALL jusqu'a touver la ou les bonne(s)
option(s)

Voila, je sais pas si j'ai ete clair, mais quoiqu'il en soit cherche pas ailleurs, la cause vient d'une bad config du sudoers ou du fait que le tag NOPASSWD du sudoers n'est pas activee.

En esperant t'avoir aiguille.
Bon courage. :o