Publié le 11/01/2013
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Executer une commande linux via une page php

A partir d'un script PHP, une commande système Linux peut être lancée pour supprimer un dossier ou redémarrer un service. La difficulté se trouve au niveau des droits Linux, comment autoriser Apache a accéder aux fonctions système ?Prenons le cas concret de la mise en place de Nmap sur les serveurs de localisation d'IP.

Traceroute dans le terminal Ubuntu

Plusieurs machines tournent avec LAMP et répètent à l'infini des opérations de base, par exemple l'extraction de données d'un Traceroute. Ces analyses d'adresses IP sont pilotées par des scripts PHP.En d'autres termes, on cherche à reproduire les commandes suivantes à partir du localhost Apache.
dolphin@poste02:~$ sudo nmap -sP -n -PN --traceroute google.fr
[sudo] password for dolphin:
Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-11 11:17 CETNmap scan report for google.fr (74.125.132.94)Host is up (0.040s latency)....

En mode terminal, les droits sont acquis avec la saisie du mot de passe root.

Lancer la commande en PHP

Avec un script PHP, on peut automatiser les commandes saisies dans le Terminal. La fonction exec() lance la commande Nmap y compris les paramètres nécessaires. Le résultat est retourné sous forme d'un Array dans la variable $list.
<?php
exec("sudo nmap -sP -n -PN --traceroute " . $ip, $list);
?>
En l'état, la fonction n'est pas exécutée par le systeme Linux, faute de droits suffisants de l'utilisateur 'www-data'.

Donner les droits root au script PHP

Comment autoriser Apache a lancer les commandes Linux réservées à l'utilisateur 'root' ?Rappel, les actions systèmes sont celles qui sont appelées avec 'sudo' en mode Terminal. L'authentification de l'utilisateur est réalisée avec la saisie du mot de passe.Ce que l'on cherche à faire est de supprimer l'authentification par mot de passe pour l'utilisateur 'www-data'. En effet lorsque le script PHP est exécute, il est en général identifié comme l'utilisateur 'www-data'.

1. Editer le fichier /etc/sudoers
dolphin@poste02:~$sudo visudo

2. Ajouter l'utilisateur 'www-data'
Voyons comment donner les droits à l'utilisateur 'www-data'. Il est possible de définir plusieurs niveaux de sécurité:- autoriser une fonction système,
- autoriser un script shell,
- autoriser toutes les actions.
A la fin du fichier, ajouter une des lignes suivantes
root    ALL=(ALL) ALL
...
# autoriser la fonction iptable
www-data ALL=NOPASSWD: /sbin/iptables
# autoriser le redemarrage d'Apache
www-data ALL=NOPASSWD: /sbin/service apache2 restart
# autoriser un script shell
www-data ALL=NOPASSWD: /path/script.sh
#autoriser toutes les actions
www-data ALL=NOPASSWD:ALL

Dans le cas des serveurs de localisation, j'ai opté pour www-data ALL=NOPASSWD:ALL. Les scripts PHP ont les droits 'root' pour l'ensemble des commandes. Les fonctions Linux sont accessibles depuis l'espace '/var/www' y compris la commande Nmap.
Attention à la sécurité du serveur Apache !
Il est conseillé de bien choisir les commandes Linux à autoriser. La manipulation ouvre des failles importantes puisque à partir d'un script PHP, l'internaute a accès au coeur de la machine d'hebergement.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
tuto - linux
Mise a jour
11/01/2013
Visualisation
vu 10948 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Diégo DELPY dans CMS

IL FAUT IMPERATIVEMENT DONNER DES CHEMINS COMPLETS à pFrom et à pTo, sinon ça marche
bizzarrement.
Exemple :

// Chemin relatif : PAS BON !
pFrom := \'Bureau\\Télécharg...

Publié par Annuaire francophone dans tuto

Bonjour, savez-vous s'il existe un logiciel de capture d'écran (ascreen) pour window. Merci

Publié par Arthur dans java

Salut!
J'ai repris ton code pour un projet mais en testant le programme rien ne s'affiche. Pourquoi ?
Dois-je mettre a jour quelque chose ? Importer ?
La seule modification que j'...

Publié par habib dans CMS

je veu cree des applications base de donnee comme gestion park reforme du materielle les unites materielle entree sortie inventaire aidez moi email bettaharhabib1966@yahoo.fr <br>tel 0557187557...

Publié par Fobec dans java

As-tu essaye sans le parametre de la cle ?
(supprimer la ligne url += "&key=" + this.ApiKey;)
A priori, cela fonctionne sans aucune authentification sur l'api ;)