je voudrais faire une interface web (HTML) qui contient un bouton (JavaScript ?) qui lance un script Bash.
Je ne sais pas trop comment faire ni vers qui me tourner...
Ah j'allais oublier... il faut en plus que le script soit exécuté en tant que root (voir mon message précédent)
Si ton navigateur autorise Javascript à faire de telles atrocités, changes-en rapidement.
Par contre, côté serveur, si tu as un HTTPD qui tourne en root, un script CGI fait exactement ça.
-- Matthieu
Fabien LE LEZ
je voudrais faire une interface web (HTML) qui contient un bouton
OK jusque-là.
(JavaScript ?)
Non. Javascript ne sert qu'à faire de jolis zigouigouis sur la fenêtre d'affichage du navigateur. Il te faut un langage de script côté serveur -- Perl ou PHP conviennent très bien.
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en tant que root
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
La première piste à explorer : trouver le moyen d'éviter cette contrainte.
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
je voudrais faire une interface web (HTML) qui contient un bouton
OK jusque-là.
(JavaScript ?)
Non. Javascript ne sert qu'à faire de jolis zigouigouis sur la fenêtre
d'affichage du navigateur.
Il te faut un langage de script côté serveur -- Perl ou PHP
conviennent très bien.
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en
tant que root
Pas glop, pas glop.
J'espère bien que c'est totalement impossible !..
La première piste à explorer : trouver le moyen d'éviter cette
contrainte.
Deuxième piste : faire un script PHP (par exemple) qui se contente de
créer un fichier (éventuellement vide).
Et mettre un crontab qui, une fois par minute :
- vérifiera si le fichier en question existe ;
- si oui, le supprimera, et lancera le script bash.
je voudrais faire une interface web (HTML) qui contient un bouton
OK jusque-là.
(JavaScript ?)
Non. Javascript ne sert qu'à faire de jolis zigouigouis sur la fenêtre d'affichage du navigateur. Il te faut un langage de script côté serveur -- Perl ou PHP conviennent très bien.
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en tant que root
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
La première piste à explorer : trouver le moyen d'éviter cette contrainte.
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
Matthieu Moy
Fabien LE LEZ writes:
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
Totalement impossible, non. Des interfaces web comme webmin ont besoin des droits root, et ça marche.
Mais ça n'est pas forcément souhaitable.
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
Autre solution dans cette direction : utiliser sudo, en s'étant assuré que le script ne peut rien faire de mal (ce qu'il faut faire dans tous les cas, bien sûr !).
Éventuellement, faire un wrapper genre
#! /bin/sh /chemin/vers/mon/autre/script.sh
pour être sûr que la liste des arguments ne sera pas utilisée (mais il reste pleins de façons de faire merder le script, avec des variables d'environnements en particulier).
-- Matthieu
Fabien LE LEZ <gramster@gramster.com> writes:
Pas glop, pas glop.
J'espère bien que c'est totalement impossible !..
Totalement impossible, non. Des interfaces web comme webmin ont besoin
des droits root, et ça marche.
Mais ça n'est pas forcément souhaitable.
Deuxième piste : faire un script PHP (par exemple) qui se contente de
créer un fichier (éventuellement vide).
Et mettre un crontab qui, une fois par minute :
- vérifiera si le fichier en question existe ;
- si oui, le supprimera, et lancera le script bash.
Autre solution dans cette direction : utiliser sudo, en s'étant assuré
que le script ne peut rien faire de mal (ce qu'il faut faire dans tous
les cas, bien sûr !).
Éventuellement, faire un wrapper genre
#! /bin/sh
/chemin/vers/mon/autre/script.sh
pour être sûr que la liste des arguments ne sera pas utilisée (mais il
reste pleins de façons de faire merder le script, avec des variables
d'environnements en particulier).
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
Totalement impossible, non. Des interfaces web comme webmin ont besoin des droits root, et ça marche.
Mais ça n'est pas forcément souhaitable.
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
Autre solution dans cette direction : utiliser sudo, en s'étant assuré que le script ne peut rien faire de mal (ce qu'il faut faire dans tous les cas, bien sûr !).
Éventuellement, faire un wrapper genre
#! /bin/sh /chemin/vers/mon/autre/script.sh
pour être sûr que la liste des arguments ne sera pas utilisée (mais il reste pleins de façons de faire merder le script, avec des variables d'environnements en particulier).
-- Matthieu
noone
Il te faut un langage de script côté serveur -- Perl ou PHP conviennent très bien.
Ok donc je vais plutôt regarder du côté de PHP
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en tant que root
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
si c'est possible (voir webmin, swat et otutes les autres interfaces d'admin)
La première piste à explorer : trouver le moyen d'éviter cette contrainte.
Impossible je dois exécuter des commandes iptables dans le script
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
?
Il te faut un langage de script côté serveur -- Perl ou PHP
conviennent très bien.
Ok donc je vais plutôt regarder du côté de PHP
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en
tant que root
Pas glop, pas glop.
J'espère bien que c'est totalement impossible !..
si c'est possible (voir webmin, swat et otutes les autres interfaces
d'admin)
La première piste à explorer : trouver le moyen d'éviter cette
contrainte.
Impossible je dois exécuter des commandes iptables dans le script
Deuxième piste : faire un script PHP (par exemple) qui se contente de
créer un fichier (éventuellement vide).
Et mettre un crontab qui, une fois par minute :
- vérifiera si le fichier en question existe ;
- si oui, le supprimera, et lancera le script bash.
Il te faut un langage de script côté serveur -- Perl ou PHP conviennent très bien.
Ok donc je vais plutôt regarder du côté de PHP
qui lance un script Bash.
[...] il faut en plus que le script soit exécuté en tant que root
Pas glop, pas glop. J'espère bien que c'est totalement impossible !..
si c'est possible (voir webmin, swat et otutes les autres interfaces d'admin)
La première piste à explorer : trouver le moyen d'éviter cette contrainte.
Impossible je dois exécuter des commandes iptables dans le script
Deuxième piste : faire un script PHP (par exemple) qui se contente de créer un fichier (éventuellement vide). Et mettre un crontab qui, une fois par minute : - vérifiera si le fichier en question existe ; - si oui, le supprimera, et lancera le script bash.
?
Arol
a écrit dans le message de news:
Ok donc je vais plutôt regarder du côté de PHP
On va dire que ton script que tu lances en ligne de commande s'appelle mon_script.sh
Tu crées un fichier lancer_script.php qui contient <? exec("/path_ou_se_trouve_le_script/mon_script.sh"); ?>
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter. 2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
noone@nowhere.undef a écrit dans le message de news:
Ok donc je vais plutôt regarder du côté de PHP
On va dire que ton script que tu lances en ligne de commande s'appelle
mon_script.sh
Tu crées un fichier lancer_script.php qui contient
<?
exec("/path_ou_se_trouve_le_script/mon_script.sh");
?>
exec est une des fonctions php pour exécuter un script en shell
http://fr.php.net/manual/fr/function.exec.php
mais il y en a d'autres comme
http://fr.php.net/manual/fr/function.system.php
http://fr.php.net/manual/fr/function.passthru.php
A toi de voir laquelle correspond le mieux
1er point :
mon_script.sh sera lancé par php en tant que user apache, faudra donner les
droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter.
2nd point :
Peu importe la durée d'exécution de mon_script.sh, une fois que la page
lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu
pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce
qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera
un jour.
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter. 2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
noone
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter. 2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage via iptables)
1er point :
mon_script.sh sera lancé par php en tant que user apache, faudra donner les
droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter.
2nd point :
Peu importe la durée d'exécution de mon_script.sh, une fois que la page
lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu
pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce
qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera
un jour.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage
via iptables)
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter. 2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage via iptables)
Arol
a écrit dans le message de news:
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les
droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage via iptables)
Je pense pas qu'on puisse switcher de user avec php pour lancer un script en tant que root et pas apache. La seule possibilité qui te reste c'est de donner les droits à apache pour modifier le fichier iptable. Est ce une faille de sécurité ? Oui et non, ça dépend de ton script php.
noone@nowhere.undef a écrit dans le message de news:
1er point :
mon_script.sh sera lancé par php en tant que user apache, faudra donner
les
droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage
via iptables)
Je pense pas qu'on puisse switcher de user avec php pour lancer un script en
tant que root et pas apache.
La seule possibilité qui te reste c'est de donner les droits à apache pour
modifier le fichier iptable.
Est ce une faille de sécurité ?
Oui et non, ça dépend de ton script php.
1er point : mon_script.sh sera lancé par php en tant que user apache, faudra donner les
droits nécessaires à mon_script.sh pour qu'il puisse s'exécuter.
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage via iptables)
Je pense pas qu'on puisse switcher de user avec php pour lancer un script en tant que root et pas apache. La seule possibilité qui te reste c'est de donner les droits à apache pour modifier le fichier iptable. Est ce une faille de sécurité ? Oui et non, ça dépend de ton script php.
noone
2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
Donc je ne suis pas embetté par la limite d'exécution d'un script PHP...
Je peux mettre dans mon script Bash un sleep assez long (1 heure par exemple)
(en fait je n'ai même pas besoin de crontab pour mon appli... juste un sleep... d'ailleurs... l'heure d'y aller apprcohe ;-)
2nd point :
Peu importe la durée d'exécution de mon_script.sh, une fois que la page
lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu
pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce
qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera
un jour.
Donc je ne suis pas embetté par la limite d'exécution d'un script PHP...
Je peux mettre dans mon script Bash un sleep assez long (1 heure par
exemple)
(en fait je n'ai même pas besoin de crontab pour mon appli... juste un
sleep... d'ailleurs... l'heure d'y aller apprcohe ;-)
2nd point : Peu importe la durée d'exécution de mon_script.sh, une fois que la page lancer_script.php a été appelée par le browser, mon_script.sh se lance, tu pourras fermer ton browser, mon_script.sh continuera à tourner jusqu'à ce qu'il termine son boulot. Bien faire attention que mon_script.sh s'arrêtera un jour.
Donc je ne suis pas embetté par la limite d'exécution d'un script PHP...
Je peux mettre dans mon script Bash un sleep assez long (1 heure par exemple)
(en fait je n'ai même pas besoin de crontab pour mon appli... juste un sleep... d'ailleurs... l'heure d'y aller apprcohe ;-)
Matthieu Moy
"" writes:
et pour le problème de l'exécution de mon script en root ?
et pour le problème de l'exécution de mon script en root ?
sudo ou setuid (chmod +s ...).
-- Matthieu
octane
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage via iptables)
et ssh? depuis ta machine un: ssh /usr/local/bin/script.bash.sh parceque le coup d'utiliser un serveur web pour lancer un script, ca me parait curieux
et pour le problème de l'exécution de mon script en root ?
(car je suis **OBLIGE** de le faire... mon script modifiant le routage
via iptables)
et ssh?
depuis ta machine un:
ssh root@ta_machine /usr/local/bin/script.bash.sh
parceque le coup d'utiliser un serveur web pour lancer un script,
ca me parait curieux