Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 31/01/2013, à 14:15

Linzdigr

[Résolu]Lancer script via php as root

Bonjour,
Je viens vers vous car je rencontre un problème que je n'arrive pas même après plusieurs manipulations à résoudre.
Je voudrais lancer un script de configuration réseau grâce à un script php.
Quasi toutes les commandes requièrent d'être root, voici les différents bouts de code concernés:

Script php:

public function __construct(){
	exec('./start_server.sh');
}

start_server.sh:

#! /bin/bash

#python -c 'import pty;pty.spawn("/bin/sh")' #fait plus ou moins planter le tout étant censé résoudre le "u: must be run from a terminal"
su root
/sbin/ifconfig wlan0 192.168.7.1 netmask 255.255.255.0 up
sleep 1
hostapd /etc/hostapd/hostapd.conf &
sleep 2
dhcpd3 -d -f -pf /var/run/dhcp3-server/dhcpd.pid -tf /var/log/dhcpd3/histo.log -cf /etc/dhcp3/dhcpd.conf wlan0 &

Dans les logs d'apache2 j'obtiens actuellement:

su: must be run from a terminal
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFNETMASK: Permission denied
./start_server.sh: line 7: hostapd: command not found
./start_server.sh: line 9: dhcpd3: command not found
Error: no display specified

Pour ce qui est des command not found je suppose qu'il faut mettre les chemins absolues des commandes mais le ifconfig ne marche déjà pas donc..
J'ai essayé pas mal d'astuces sur internet mais rien n'y fait. Je précise que j'ai rajouté "www-data ALL=NOPASSWD: /var/www/start_server.sh
" dans le sudoers afin de ne pas avoir de mot de passe à entrer pour ce script.

Si quelqu'un a une solution,

Merci d'avance!

Dernière modification par Linzdigr (Le 31/01/2013, à 15:09)

Hors ligne

#2 Le 31/01/2013, à 14:40

tiramiseb

Re : [Résolu]Lancer script via php as root

Deux erreurs dans ton script :

1/ "su root" demandera un mot de passe : si tu veux passer par le mécanisme de sudo, il faut utiliser sudo... smile
2/ même si ça passait bien en "root", ça ne "changerait" pas l'utilisateur du script courant, ça ouvrirait un nouveau shell en tant que "root" : ton script resterait en tant que "www-data".

Le "sudo" (qui doit être utilisé au lieu de "su") doit lui-même appeler le script, il ne doit pas être appelé par le script.

Donc dans ton script tu enlèves "su root" et dans le PHP tu remplaces par :

exec('sudo /var/www/start_server.sh');

Après, pour l'exactitude de ton script ce sera à voir en plus smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#3 Le 31/01/2013, à 15:08

Linzdigr

Re : [Résolu]Lancer script via php as root

Merci pour ta réponse rapide, j'y avais pensé et croyait avoir déjà testé mais manifestement non, j'étais déjà partie sur la modification des droits de www-data dans le sudoers ou voir le lancer à partir du C++.
Bref merci beaucoup ça marche impec, je commencais à m'y perdre dans les permissions.. wink

Hors ligne

#4 Le 31/01/2013, à 16:52

nesthib

Re : [Résolu]Lancer script via php as root

Petite question, pourquoi écrire ton script en PHP ? A-t-il pour vocation d'être lancé à distance ? Si oui, c'est AMHA une très mauvaise idée. Permettre un accès shell, qui plus est en root à www-data n'est pas sans risque. Tu as de multiples outils pour permettre de configurer de façon sécurisée des machines à distance. Si le script ne doit être utilisé qu'en local, un simple script bash devrait suffire.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

Haut de page ↑