#1 Le 31/10/2007, à 22:39
- gillouz
[Resolu] redemarrer un service avec un script php
salut à vous
J'ai écrit un portail web en PHP Mysql et apache. Sur la même machine j'ai configuré un proxy et je souhaite controler le proxy depuis le portail web.
Ceci pour éviter de devoir me loguer sur la machine en ssh et pouvoir déléguer cette tache à une personne sans connaissance informatique.
j'ai déjà écrit le code qui permet de charger les fichiers squidGuard.conf et domains dans une page web et de les modifier MAIS pour que cette configuration soit activée dans le proxy il faut le redemarrer.
Je le fait habituellement avec : $ sudo /etc/init.d/squid restart
mais le serveur web tourne avec l'utilsateur www-data qui ne peut pas faire de sudo.
je pense a ajouter le groupe proxy a l'utilisateur www-data. Que pensez vous de cette solution, en avez vous de meilleure?
Merci à vous
Dernière modification par gillouz (Le 06/11/2007, à 22:31)
Hors ligne
#2 Le 01/11/2007, à 02:02
- yurek
Re : [Resolu] redemarrer un service avec un script php
ta penser au cron?
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#3 Le 01/11/2007, à 02:50
- Zapan
Re : [Resolu] redemarrer un service avec un script php
Ou tout simplement faire un script ( en tant que root ) qui lance le redémarrage et activer le bit suid de ce dernier ?
Le bit suid permet à quelqu'un qui a les droits d' exécution sur un fichier de l'exécuter comme si il était le propriétaire du fichier.
Par exemple, pour redémarrer/éteindre le pc en mode graphique on fait appel au bit suid, pour que l'utilisateur lambda puisse faire une action que normalement seul le root peut faire.
Dernière modification par Zapan (Le 01/11/2007, à 02:54)
Hors ligne
#4 Le 01/11/2007, à 14:24
- gillouz
Re : [Resolu] redemarrer un service avec un script php
Cron c'est une très bonne idée je pourrais faire redémarrer squid tous les soirs mais les modifications ne seraient pas immédiates... à méditer
Pour ce qui est du script, le script /etc/init.d/squid exist déjà et il reste impossible de faire executer au serveur web un commande sudo. Je pourrais ajouter www-data au groupe des sudoers mais cela impliquerait que le script php lance une commande du type : $ sudo --password toto /etc/init.d/squid restart et donc d'avoir le mot de passe d'un sudoer en clair dans un script avec tout les risque de sécurité que cela comporte.
Autre chose??
Hors ligne
#5 Le 01/11/2007, à 19:17
- Zapan
Re : [Resolu] redemarrer un service avec un script php
Le bit suid ?
Hors ligne
#6 Le 01/11/2007, à 23:18
- gillouz
Re : [Resolu] redemarrer un service avec un script php
euh... j'aime bien avoir l'air de tout savoir mais c'est quoi exactement le bit suid c'est pour permettre à un sudoer de pouvoir executer un script non??
Hors ligne
#7 Le 01/11/2007, à 23:19
- Zapan
Re : [Resolu] redemarrer un service avec un script php
[Unix] Bit Set User ID. Bit faisant partie des droits d'un SGF unixien, indiquant qu'un exécutable doit être lancé avec les droits de son propriétaire, même s'il est lancé par quelqu'un d'autre (par conséquent, il faut faire très attention avec les fichiers détenus par l'utilisateur root).
Donc suffit que ton script appartienne au root et que l'utilisateur www-data ai les droits d'exécutions dessus pour qu'il soit lancé comme si c'était le root lui même qui le lançait.
Dernière modification par Zapan (Le 01/11/2007, à 23:23)
Hors ligne
#8 Le 03/11/2007, à 22:00
- gillouz
Re : [Resolu] redemarrer un service avec un script php
ok donc en activant le bit suid du scipt /etc/init.d/squid
"sudo /etc/inid.d/squid restart" devient égal à "/etc/init.d/squid restart"
c'est bien ca? par ce que j'ai essayé et il squid me fait toujours des messages d'erreur a cause des droits.... j'ai raté quelque chose?
Hors ligne
#9 Le 06/11/2007, à 22:31
- gillouz
Re : [Resolu] redemarrer un service avec un script php
j'ai resolu mon problème avec le bit suid
ATTENTION! ce bit ne marche que avec les programmes compilés
il faut donc écrire un programme en C qui lance la commande désirée ce programme doit appartenir à root et avoir le bit suid activé.
#include <stdio.h>
int main(void)
{
system("/etc/squid restart");
return 0;
}
ce programme doit être compilé avec
$ gcc -o squidrestart <nom_du_fichier>
il faut placer "squidrestart" là ou sont les pages web.
<?php
sytem("./squidrestart");
?>
voila voila! ca a marché pour moi.
Hors ligne