OVH Cloud OVH Cloud

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
Fabien LE LEZ
On Thu, 20 Apr 2006 11:15:06 +0200, Matthieu Moy :

exec("sudo /pat/vers/mon_script.sh");

ça risque de merder car il attend le mot de passe root


Bien lire la doc de sudo, et le configurer pour ne pas demander de mot
de passe sur ce script.


Y a-t-il un moyen de s'assurer que seul ce script PHP peut exécuter le
script shell en question ?


Avatar
Pascal Hambourg
Salut,


man sudo
[...]


ça fait peur... non ?


Quoi donc ? Qu'un hurluberlu ose balancer dans un forum 15 ko de page de
manuel dont personne n'a rien à faire puisque tous les utilisateurs de
sudo l'ont déjà sur leur système ? Oui, ça fait peur.

Avatar
noone
Qu'un hurluberlu


Est-ce que je vous insulte ?

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:,
*Fabien LE LEZ* tapota sur f.c.o.l.configuration :

exec("sudo /pat/vers/mon_script.sh");

ça risque de merder car il attend le mot de passe root


Bien lire la doc de sudo, et le configurer pour ne pas demander de mot
de passe sur ce script.


Y a-t-il un moyen de s'assurer que seul ce script PHP peut exécuter le
script shell en question ?


Non, ça n'est guère possible depuis sudo.

Quand un script PHP exécute une commande, celle-ci est vu comme étant
exécutée par le process apache.
De plus, sudo ne vérifie que l'uid, le gid et le nom d'hôte de celui qui
l'appelle, pas le process parent.
Par contre, le script shell lui peut éventuellement vérifier la variable
d'environnement PWD qui sera positionnée sur le répertoire du script PHP qui
l'a appelé. Mais ça n'est pas suffisant pour s'assurer que c'est bien le
script en question qui l'a lancé.
Ou alors, il faut que le script PHP soit lancé comme un script CGI et
ensuite que le script shell vérifie que le process parent est bien le script
PHP en question. Il suffit, par exemple, de vérifier le contenu de l'entrée
/proc/$PPID/cmdline.

--
Sébastien Monbrun aka TiChou



Avatar
noone
Ou alors vous le faites exprès ?


non je voudrais éviter la lecture de 50 pages de man juste pour trouver
une pauvre ligne de commande...

Si ici certains l'ont déjà fait (lancer un script shell en tant que root
depuis une interface web sans demande de mot de passe) et bien qu'ils
le disent...

Les réponses du genre RTFM... je les laisse... parce que ça n'est pas en
répondant ainsi qu'on aide beaucoup...

Il m'arrive de poster régulièrement ici depuis un certain nombre
d'années et "RTFM"c'est bien le genre de réponse que j'évite de jeter à
la figure des gens

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:4447ae58$0$6643$,
** tapota sur f.c.o.l.configuration :

Qu'un hurluberlu


Est-ce que je vous insulte ?


Hurluberlu n'est pas une insulte ou alors vous êtes particulièrement
susceptible.

Par contre, le fait d'envoyer inutilement et maladroitement les 15ko du
manuel de sudo ici même peut être perçu comme une offense aux yeux de ceux
qui vous lisent et vous aident, ou être vu comme une insulte au bon sens. Le
fait aussi de ne pas lire ce qui vous a été recommandé peut être aussi perçu
comme insolent et offensant.

Comprenez-vous mieux maintenant ?

--
Sébastien Monbrun aka TiChou


Avatar
lhabert
Sébastien Monbrun aka TiChou :

Ou alors, il faut que le script PHP soit lancé comme un script CGI et
ensuite que le script shell vérifie que le process parent est bien le script
PHP en question. Il suffit, par exemple, de vérifier le contenu de l'entrée
/proc/$PPID/cmdline.


Euh, un process peut modifier son contenu, donc ça ne vaut rien.

Avatar
lhabert
Fabien LE LEZ :

Y a-t-il un moyen de s'assurer que seul ce script PHP peut exécuter le
script shell en question ?


Non, mais tu peux restreindre l'autorisation aux process tournant au nom
d'un certain utilisateur. De toutes manières, ça n'apporterait pratiquement
rien de plus en terme de sécurité.

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:4447b0ec$0$20157$,
** tapota sur f.c.o.l.configuration et f.m.engueulades :

Si ici certains l'ont déjà fait (lancer un script shell en tant que root
depuis une interface web sans demande de mot de passe) et bien qu'ils
le disent...


Je l'ai fait, je le fais toujours et je le referais prochainement.

Les réponses du genre RTFM... je les laisse... parce que ça n'est pas en
répondant ainsi qu'on aide beaucoup...


Pourtant, l'aide la plus efficace c'est celle qui vient de sois-même et pour
cela il suffit de lire cette p* de documentation.

Il m'arrive de poster régulièrement ici depuis un certain nombre
d'années et "RTFM"c'est bien le genre de réponse que j'évite de jeter à
la figure des gens


Pourtant dans la plupart des cas c'est la meilleure des réponses qu'on
puisse leur donner. Donner une réponse toute faite n'aide en rien. C'est
nul, naze, inefficace, idiot, ridicule, tout ce que vous voulez. Par contre,
guider la personne à trouver la bonne réponse est la meilleure des réponses
que l'on puisse faire.
Maintenant, si vous souhaitez avoir des réponses et des solutions toutes
faites, alors payez moi et je me ferais un plaisir à être « efficace » selon
vous.

--
Sébastien Monbrun aka TiChou

Avatar
noone
Bon... concrêtement

http://www.megacoder.com/sudo-tutorial/sudo-tutorial-en/at-last.html

dans /etc/sudoers je mets

apache ALL=(root) NOPASSWD: /path/to/my_script.sh


dans PHP

je fais

exec(sudo /path/to/my_script.sh);

et ça suffit ?


Je pensait qu'il fallait passer le mot de passe à sudo depuis le script
PHP ?
1 2 3 4 5