[Réglé] Un killall en PHP

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

[Réglé] Un killall en PHP

Message le Mar Avr 01, 2008 13:01

Bonjour,

Pour un client avec son serveur dédié, nous avons besoin de relancer un service sur le serveur, manuellement, nous le faisons avec un killall (shell) et de cette manière, cela fonctionne bien.

Maintenant nous souhaitons ajouter un bouton dans l'admin du client pour faire le même travail. Nous ne parvenons pas à lancer cette commande depuis le PHP avec passthru, exec_shell .... aucune commande ne fait le travail ni ne donne un message d'erreur ...

Identique avec la méthode sudo qui permet de lancer la commande en mode 'root', cela ne marche pas non plus

Il doit y avoir une protection quelque part, bien logique d'ailleurs, mais quelqu'un a une idée de quoi faire pour autoriser apache à lancer cette commande ?

Très cordialement
Patrick
Dernière édition par objectifweb le Mar Avr 01, 2008 18:14, édité 1 fois.

Vap
WRInaute accro
WRInaute accro
 
Messages: 1090
Inscription: Dim Juin 17, 2007 20:12

Message le Mar Avr 01, 2008 13:37

Votre PHP est probablement en safe mode, ce qui empeche l'execution de commandes shell.

Vous pouvez débrancher le safe mode, mais alors là, attention à la sécurité...

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

Message le Mar Avr 01, 2008 13:59

merci de votre réponse mais non, le safemode n'est pas activé d'après le technicien....

Patrick

Vap
WRInaute accro
WRInaute accro
 
Messages: 1090
Inscription: Dim Juin 17, 2007 20:12

Message le Mar Avr 01, 2008 14:04

Alors exec_shell devrait marcher...

Avez vous testé avec d'autres commandes shell?

Pour faire kill alll il faut etre root non? Le sript PHP n'a probablement pas les privilèges de root.

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

Message le Mar Avr 01, 2008 14:14

Merci Vap,

Oui, j'ai testé d'autres commandes, comme par exemple 'ls' et ma variable contient alors le listing de mon répertoire, donc cette commande marche mais pas pour le killall

j'ai aussi testé la commande 'ps...' qui permet de voir les process en cours, et le process qui m'intéresse n'est pas dans la liste, ce qui confirme qu'apache n'a pas les droits de voir le process et ne faire une commande dessus

Il faut être root, c'est d'ailleurs le but de la commande 'sudo' qui permet à apache de se présenter comme root

C'est clair à 99% que c'est un problème de droits, qu'il faut dire au moteur qu'apache a ce droit mais comment.....

La sécurité n'est pas un souci, le serveur appartient au client et il n'héberge que son application

Patrick

Vap
WRInaute accro
WRInaute accro
 
Messages: 1090
Inscription: Dim Juin 17, 2007 20:12

Message le Mar Avr 01, 2008 14:29

J'essaierai la chose suivante:

Je ferais une page PHP qui n'a pour but que de faire le kill all. Et cette page devrait avoir root comme propriétaire. Je ne sais pas si ce serait suffisant.

Mais d'une manière générale, c'est rassurant qu'on ne puisse pas facilement détruire tous les process depuis PHP...

Avez vous essaye exec au lieu de shell_exec ?

Vap


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Mar Avr 01, 2008 15:05

Hello,

ne pouvez vous pas directement relancer l'application proprement, plutôt que de tenter directement la méthode "barbare" ?

Sinon le fait de mettre root en propriétaire d'une page web ne change (heureusement) rien quand à l'utilisateur faisant tourner tout cela. Et suexec a tendance à interdire le compte root également.

En shell essayez de basculer sous le même compte que PHP et d'essayer d'exécuter les commandes en question ; vous verrez bien ce que ça donne.
Et si cela coince toujours, depuis PHP ajoutez ' 2>&' à la fin de la commande exécutée (afin de récupérer le canal d'erreur) ; ou bien utilisez proc_open() qui permet de gérer correctement le canal d'erreur.

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

Message le Mar Avr 01, 2008 15:12

Merci Vap, tout a été testé, toutes les commandes php le permettant ...

Bool, merci de ta réponse
Lorsqu'on identifie le user comme apache et qu'on demande les process en cours, ils n'apparaissent pas, donc apache n'a pas le droit de les voir

Pour le moment, on est arrivé à lancer la commande, le process est bien stoppé, mais la page php boucle sans fin ...
On va essayer ta méthode '2>&' et proc_open pour voir si ce bouclage correspond en fait à une erreur

Patrick


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Mar Avr 01, 2008 15:15

Un killall peut être long à répondre, il n'y a rien d'anormal à cela.

Avec proc_open il devrait par contre y avoir moyen de lancer le processus via un nohup, et ainsi de ne pas avoir à attendre la fin du traitement.
Dans tous les cas il y a très certainement un moyen plus "propre" de relancer ou recharger la configuration de l'application en question.

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

Message le Mar Avr 01, 2008 15:27

Pour le moment, on arrive à lancer un batch qui semble faire le boulot, une fois qu'on a lancé le script en php et qu'on vérifie l'id du process, il a bien changé ... donc c'est rapide et ça marche, mais la page en php qui a lancé la commande attend..... on va essayer avec proc_open en disant au script de ne rien attendre en retour

Je ne doute pas qu'il y a une méthode plus propre mais je ne connais pas tous les paramètres, j'essaie d'aider un technicien qui travaille pour le client...


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Mar Avr 01, 2008 17:24

Pour le coup je suis content de ne pas être le client en question :P

objectifweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 130
Inscription: Mer Oct 06, 2004 9:58

Message le Mar Avr 01, 2008 18:14

héhéhé moi non plus si je devais héberger un site dessus mais ici c'est un serveur qui appartient au client, pas sur internet donc en local et il héberge uniquement sa propre application, donc aucun risque ...

Finalement on a trouvé la finale, on utilise popen qui n'attend pas la fin et tout fonctionne bien

Merci de vos conseils

Patrick


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités