Contenu | Rechercher | Menus

Annonce

Les adresses laposte.net ne permettent pas de recevoir nos emails. Vous êtes invité à changer d'adresse dans vos paramètres de compte à votre prochaine connexion.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 31/01/2013, à 13: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, à 14:09)

Hors ligne

#2 Le 31/01/2013, à 13: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 XXe siècle
Domotego : boutique dédiée à la domotique DIY - https://www.domotego.com
Consultant informatique indépendant - Geek et tout plein d'autres choses

Hors ligne

#3 Le 31/01/2013, à 14: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, à 15: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ᴉsdn

Hors ligne