Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/01/2010, à 18:14

ju2cho7

Apache, sudoers et exec() PHP

Bonsoir,

Je tente désespérément de créer des utilisateurs via PHP et sa fonction exec(), en vain.
Mes fichiers:
useradd.php

<?php
exec("./useradd.sh", $result, $status);
foreach($result as $val) {
	echo $val."<br />";
}
echo "<br />".$status;
?>

useradd.sh

#!/bin/bash
/usr/sbin/useradd -m -d /home/toto/ toto

Ce n'est qu'un exemple, auquel je compte rajouter (une fois que le test marchera) le côté dynamique & formulaire HTML du problème.

Comme la commande useradd n'est accessible qu'à root, j'ai modifié mon /etc/sudoers en conséquence avec visudo:

www-data        ALL =(ALL) NOPASSWD: /var/www/test/useradd.sh, /usr/sbin/useradd, /usr/sbin/usermod

Seulement, quand j'exécute mon script PHP, l'user n'est pas créé, le répertoire encore moins, et j'ai un joli message dans mon /var/log/apache2/error.log:

useradd: cannot lock /etc/passwd; try again later.

Quelqu'un aurait une idée, une impression de déjà vu, ou autre ? hmm

Merci d'avance

Hors ligne

#2 Le 27/01/2010, à 19:18

wblitz

Re : Apache, sudoers et exec() PHP

ça devrait mieux fonctionner avec ça :

<?php
exec("sudo /var/www/test/useradd.sh", $result, $status);
...
?>

"Un optimiste, c'est un homme qui plante deux glands et qui s'achète un hamac" - Jean de Lattre de Tassigny
Pensez à mettre [RÉSOLU] dans le sujet de vos posts une fois qu'ils le sont...
quelques docs

Hors ligne

#3 Le 27/01/2010, à 20:19

ju2cho7

Re : Apache, sudoers et exec() PHP

Ah oui, en effet. big_smile
C'était presque rien du coup, merci ! smile

Hors ligne

#4 Le 28/01/2010, à 11:22

nabria

Re : Apache, sudoers et exec() PHP

Bonjour,

je tente aussi de créer des utilisateurs via PHP sous linux RedHat.

J'espère que vous pourrez aussi m'aider wblitz !

J'ai fait la même chose :

montest.sh

#!/bin/bash
echo "--- DEBUT FICHIER ---"
echo "Utilisateur toto"
/usr/sbin/useradd -m -d /home/toto toto
echo "---  FIN FICHIER ---"

index.php

<?php
exec("sh /var/www/html/ssftp/montest.sh", $result, $status) or die("Erreur ! Ca ne fonctionne pas !");
$chaine = implode("</td></tr><tr><td>", $result);
echo "<table><tr><td>".$chaine."</td></tr></table>;
?>

--> Si je met "sh", cela me retourne bien les ECHO de mon fichier sur ma page Web mais l'utilisateur n'est pas créé.
J'ai ce message dans les logs :
/var/www/html/ssftp/montest.sh: line 3: /usr/sbin/useradd: Permission denied

--> Si je met "sudo", cela me retourne "Erreur ! Ca ne fonctionne pas" sur ma page Web
J'ai ce message dans les logs :

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things :
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:

Dans le fichier /etc/sudoers, j'ai mis en commentaire "Defaults requiretty" pour que la commande "sudo" fonctionne et j'ai ajouté "www-data   ALL=(ALL)   NOPASSWD: /var/www/html/ssftp/montest.sh, /usr/sbin/useradd, /usr/sbin/usermod"
et j'ai aussi essayé en remplaçant "www-data" par "apache"

Avez-vous une idée de ce que je dois faire ou chercher pour que cela fonctionne enfin ?!
Merci.

Dernière modification par nabria (Le 28/01/2010, à 11:37)

#5 Le 28/01/2010, à 14:00

wblitz

Re : Apache, sudoers et exec() PHP

normalement, cette ligne suffira :

www-data   ALL=(ALL)   NOPASSWD: /var/www/html/ssftp/montest.sh

il faut bien entendu que le fichier en question soit exécutable par l'utilisateur www-data :

sudo chmod +x /var/www/html/ssftp/montest.sh

et dans le code php :

<?php
...
exec("sudo /var/www/html/ssftp/montest.sh", $result, $status) or die("Erreur ! Ca ne fonctionne pas !");
...
?>

"l'erreur" actuelle vient du fait que la commande qui est exécutée est "sh" et non le script shell en lui-même (qui est exécuté par "sh") comme "/bin/sh" n'est pas autorisé dans le sudoers sans mot de passe pour l'utilisateur www-data, il demande le mot de passe de l'utilisateur pour exécuter la commande.


"Un optimiste, c'est un homme qui plante deux glands et qui s'achète un hamac" - Jean de Lattre de Tassigny
Pensez à mettre [RÉSOLU] dans le sujet de vos posts une fois qu'ils le sont...
quelques docs

Hors ligne

#6 Le 13/10/2012, à 00:44

kangni

Re : Apache, sudoers et exec() PHP

slt j'ai aussi un pareil problème. voici mon script
[img=mon script]file:///home/kangni/Images/Capture%20du%202012-10-12%2023:38:38.png[/img]
quand je l'exécute en root avec php script.php il marche mais quand je l'appelle dans mon code html avec <form action=script.php></form>
je n'obtient rien. En fait dans le script j'utilise la commande d'envoi de sms de gammu-smsd.
Je ne sais pas comment exécuter l'envoi des sms à partir de apache.
Merci de m'éclairer si vous le pouvez c'est un projet urgent à rendre

Hors ligne