Accorder permission root a www-data [Résolu/Fermé]

Signaler
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013
-
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
-
bonjour tt le monde!j ai un script perl dhcpmanip.pl dans lequel j'ai la ligne: system "hostapd /etc/hostapd-1.0/hostapd/hostapd.conf " qui sert a lancer le hostapd!et j ai l erreur suivant :
Insecure $ENV{PATH} while running setuid at /var/www/cgi-bin/dhcpmanip.pl line 46

après une recherche sur net j ai constaté qu il fallait accorder la permission root à l'utilisateur www-data d' Apache donc j ai essayer de modifier le fichier /etc/sudoers en ajoutant la ligne : www-data ALL=NOPASSWD: /var/www/cgi-bin/dhcpmanip.pl mais en vain...quelqu'un as t-il une idée comment résoudre ce problème??mercii
A voir également:

7 réponses

Messages postés
50
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
16 décembre 2015
11
Bonjour,

Il n'est pas nécessaire de donner un accès root à www-data, il suffit que www-data puisse écrire dans les bons fichiers uniquement.

Deux manières :
- Indiquer www-data comme propriétaire du fichier avec la commande chown
- Indiquer les fichiers et/ou dossier comme appartenant au groupe www-data (chown) et donner la permission d'écriture au groupe (chmod g+w)
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013

merci pour ta reponse :)
je vois que ce n 'est pas necessaire de donner un accès root a www-data d'après ce que t as dit mais c'est faisable je pense nn?ce que je comprend pas c'est ou est la faute dans mon code :/
Messages postés
50
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
16 décembre 2015
11
Désolé, j'ai juste rectifié ton titre sans même porter attention à ton problème réel :)

D'ailleurs, ce que j'ai dit plus haut est faux. Avec l'erreur Insecure $ENV{PATH}, Perl indique soit que ton PATH n'est pas initialisé, soit qu'un des dossiers du PATH n'est pas protégé en écriture (d'où l'idée qu'il ne faut pas suivre ce que je décrits plus haut).

Tu peux essayer :
$ENV{PATH} = "/dossier/ou/se/trouve/hostapd/"
exec 'hostapd', '/etc/hostapd-1.0/hostapd/hostapd.conf';

Je ne suis pas expert PERL, j'ai juste suivi la doc : http://www.washington.edu/perl5man/pod/perlsec.html
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013

je vais l essayer maintenant :) merci bcp
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013

salut :)) merci beacoup pour ton aide sa a marché!!je voulais savoir est t-il de meme pour executer la commande:

sudo ifdown wlan1

si oui quel est le chemin du program ifdown j ai cherché mais en vain!!!merci pour l'aide :))
Messages postés
50
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
16 décembre 2015
11
Salut,

Tu peux te servir de la commande whereis pour trouver un exécutable

$ whereis ifdown
ifdown: /sbin/ifdown /usr/share/man/man8/ifdown.8.gz
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013

pour la commande de hostapd j ai saisi les lignes suivantes :
$ENV{PATH} = "/etc/hostapd-1.0/hostapd/";
exec 'hostapd', '/etc/hostapd-1.0/hostapd/hostapd.conf';
et sa marche très bien.
Pour la commande ifdown j ai saisi:
$ENV{PATH} = "/sbin/";
exec 'ifdown', 'wlan1';

Mais sa ne marche pas :/
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933
Salut helmii,

En faisant :

$ENV{PATH} = "/etc/hostapd-1.0/hostapd/";

Tu écrases la valeur de la variable d'environnement "PATH", dont tu perds le contenu, alors que les emplacements énumérés dans cette variable sont nécessaires au bon fonctionnement du système (ce qui explique sans doutes que ifdown ne fonctionne pas).

Dans la variable PATH, les répertoires sont séparés par des ":". Si tu dois ajouter temporairement un répertoire à la variable PATH, tu peux le faire en ajoutant une nouvelle entrée séparée par ":", précédant le contenu déjà existant, ou ajoutée à la suite. Par exemple, pour l'ajouter à la suite, tu fais comme cela :

$ENV{PATH} .= ":/etc/hostapd-1.0/hostapd/";

Ton PATH devrait déjà contenir /sbin/, sous Linux, et il ne devrait pas être nécessaire de l'ajouter au PATH.

Pour le vérifier, fais cela dans ton terminal:

me@mymachine:~$ echo $PATH

Dal
Messages postés
28
Date d'inscription
mercredi 19 juin 2013
Statut
Membre
Dernière intervention
8 juillet 2013

salut Dal,
t'as raison a propos sbin il existe deja dans $PATH.
quand j ai mis $ENV{PATH} .= ":/etc/hostapd-1.0/hostapd/";
comme tu me l'as dit meme le hostapd ne veut plus fonctionner!! :/ je remet
$ENV{PATH} = "/etc/hostapd-1.0/hostapd/"; il fonctionne très bien et reste le problème de :
exec 'ifdown' , 'wlan1';
exec 'ifup' , 'wlan1';
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933
Je ne comprend pas bien pourquoi veux changer la variable d'environnement juste pour exécuter "hostapd". ne peux-tu pas simplement le lancer en indiquant le chemin de l'exécutable dans l'appel à exec lui-même.

exec '/etc/hostapd-1.0/hostapd/hostapd', '/etc/hostapd-1.0/hostapd/hostapd.conf'; 

Par ailleurs, dans ton message d'origine tu dis que tu utilises "system", puis subitement, tu parles après de "exec". Tu dois avoir tes raisons pour utiliser "exec", qui n'est absolument pas équivalent de "system" :

https://perldoc.perl.org/functions/exec

The exec function executes a system command and never returns; use system instead of exec if you want it to return.

Enfin, si tu dois vraiment modifier le PATH pour une raison qui m'échappe, et que tu as des problèmes d'exécution en postfixant ta modification, essaye en la préfixant :

$ENV{PATH} = "/etc/hostapd-1.0/hostapd/:" . $ENV{PATH};

Dal