Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interface web pour lancer un script en tant que root

47 réponses
Avatar
noone
Bonjour,

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)

Une idée ?

Merci d'avance

10 réponses

1 2 3 4 5
Avatar
Matthieu Moy
"" writes:

Bonjour,

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

Avatar
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.

Avatar
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

Avatar
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.


?


Avatar
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");
?>

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.

Avatar
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)

Avatar
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.


Avatar
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 ;-)

Avatar
Matthieu Moy
"" writes:

et pour le problème de l'exécution de mon script en root ?


sudo ou setuid (chmod +s ...).

--
Matthieu

Avatar
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

1 2 3 4 5