Pages : 1
#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 ?
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.
C'était presque rien du coup, merci !
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
Pages : 1