IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Modification de fichiers de configuration [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut Modification de fichiers de configuration
    Bonjour à tous.

    Je fais appel à vous car j'ai une petite question qui me taraude depuis un certain temps, n'ayant pas trouvé ma réponse, je décide donc de poster .

    J'ai pour projet de développer une application Web qui aurait pour but de configurer un serveur LAMP (Linux Apache MySQL PHP) un peu dans le même genre que webmin, plesk ou DTC mais en beaucoup moins poussé ^^, je me focalise seulement sur la configuration d'un serveur Web.

    Mon serveur de test est basé sur un système Debian avec Apache2, MySQL et PHP5.2.6

    En fait j'aurais aimé avoir votre avis sur un point dont, il faut le dire, je ne sais comment je vais m'y prendre. C'est le fait de modifier les fichiers de configuration d'apache, mysql et PHP via mon application Web. J'ai bien pensé à passer l'utilisateur apache en root mais niveau sécurité ça craint .. de même de passer le propriétaire des fichiers de configuration en www-data.

    Je sais que Webmin est un serveur Web lui même qui utilise plusieurs CGI pour mettre à jour les fichiers de configuration. Il n'utilise donc pas le serveur Web apache lui même, mais il me semble que DTC lui n'utilise que des scripts PHP (je me trompe peut être..).

    C'est donc là que j'ai besoin de votre aide, vos conseil. Est t'il possible de modifier les fichiers de configuration autrement que de développer un serveur Web à part ?

    En gros, j'aimerais lire des fichiers, les modifier avec mon application alors que ces fichiers ont pour propriétaire root.

    Je précise que je compte développer cette application (le développement n'est pas encore commencé, je ne suis qu'au cahier des charges ^^) grâce au Zend Framework et PHP5 (cela va de soit ). Mais je me demande si cela fera l'affaire pour venir à bout de mes besoins (peut être qu'une applet java pourrait m'aider ??).

    Donc voilà, n'hésitez pas à m'éclaircir les idées en ce qui concerne l'édition des fichiers via mon interface Web, car j'avoue ne pas savoir comment m'y prendre .

    Et si vous avez des questions sur certains points que je n'aurais pas abordé, n'hésitez pas non plus .

    Merci d'avance.

    Sliim

  2. #2
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Regarde ce post:
    http://www.developpez.net/forums/d77...ommande-linux/
    Y a des pistes.. de recherches

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    pour faire ça tu peux utiliser la commande "sudo"
    http://linux.developpez.com/faq/?page=root#sudo

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Merci je vais regarder ça,

    en ce qui concerne sudo je ne pensais pas qu'on pouvais l'utiliser dans un script PHP (mot de passe root requis..). Je tourne sous ubuntu donc j'ai l'habitude du sudo mais seulement dans le shell .

    Je vous retiens au courant .

    ++
    Sliim

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Salut,

    merci à vous deux pour m'avoir mis sur la voie, sujet résolu .

    Donc explications, je pense que cela servira à plus d'un .


    Tout d'abord il faut modifier le fichier /etc/sudoers grâce à visudo afin de permettre à l'utilisateur www-data de se connecter en sudo sans avoir à taper le mot de passe root.
    Lien : http://linux.developpez.com/faq/?page=root#sudo (merci mathieu )
    Ajouter cette ligne dans la partie "User privilege specification" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    www-data ALL=NOPASSWD: ALL
    Ensuite on va utiliser la fonction proc_open (merci metagoto ).
    Pour pouvoir, dans notre cas, utiliser cette fonction il nous faudra vérifier que l'on puisse exécuter des scripts php via la commande php. Pour réaliser cela il faut que le paquet php5-cli soit installé sur la machine.


    Voilà en bref ce qu'il faut configurer sur la machine .

    Prenons par exemple une arborescence de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -rw-r--r-- 1 faast faast 2027 2009-07-10 22:52 commandeRoot.php
    -rw-r--r-- 1 faast faast  379 2009-07-10 22:52 ecritureFichierRoot.php
    -rw------- 1 root  root   211 2009-07-10 22:52 fichierRoot
    -rw-r--r-- 1 faast faast  177 2009-07-10 14:55 lectureFichierRoot.php
    (Ne faites pas attention au nom d'utilisateur faast, c'est une petite touche humouristique).
    Donc en bref,
    -fichierRoot est le fichier à lire et écrire par mon application Web (fichier de config, lecture et écriture seulement par le propriétaire (root)).

    -ecritureFichierRoot.php et lectureFichierRoot.php parlent d'eux même , ceux sont eux qui vont s'occuper d'ouvrir le fichierRoot pour lire et écrire dedans.

    -commandeRoot.php est le fichier qui sera exécuté par apache, lancé dans l'application Web, celui ci utilise la fonction proc_open() pour lancer les fichiers ecritureFichierRoot.php et lectureFichierRoot.php grâce à la commande php (précédé de sudo afin d'exécuter le script en tant que root) afin d'écrire ou lire dans le fichier de config.

    Voici les code des ces fichiers :


    lectureFichierRoot.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $fp = fopen("fichierRoot","r");
    if($fp != false){
    	while($ligne = fgets($fp))
    		echo nl2br($ligne);
    	fclose($fp);
    }
    else
    	echo "Le fichier n'a pas pu être ouvert !!";
    ?>


    ecritureFichierRoot.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    //Récupération du paramètre optionnel, ce paramètre correspond à la chaine de caractères à écrire dans le fichier.
    $param = getopt("p::");
     
    $fp = fopen("fichierRoot","a");
    if($fp != false){
    	if(isset($param["p"]))
    		fwrite($fp,$param["p"]);
    	else
    		fwrite($fp,"Pas de paramètre passé..\n");
     
    	fclose($fp);
    }
    else
    	echo "Le fichier n'a pas pu être ouvert !!";
    ?>


    commandeRoot.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php	 
    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin est un pipe où le processus va lire
       1 => array("pipe", "w"),  // stdout est un pipe où le processus va écrire
       2 => array("pipe", "w"), // stderr est un fichier
    );
     
     
    //Ecriture dans le fichier
    $param = 'Hello root :)\n';
    $process = proc_open("sudo php ecritureFichierRoot.php -p'$param'", $descriptorspec, $pipes);//Avec Paramètre
    //$process = proc_open("sudo php ecritureFichierRoot.php", $descriptorspec, $pipes);//Sans Paramètre
    if (is_resource($process)) {
        // $pipes ressemble à :
        // 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
        // 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
        // Toute erreur sera ajoutée au fichier /tmp/error-output.txt
     
       // fwrite($pipes[0], "lectureFichierRoot.php");
        fclose($pipes[0]);
     
        while(!feof($pipes[1])) {
            echo fgets($pipes[1], 1024);
        }
        fclose($pipes[1]);
        // Il est important que vous fermiez les pipes avant d'appeler
        // proc_close() afin d'éviter un verrouillage.
        $return_value = proc_close($process);
     
        echo "La commande a retourné $return_value\n";
    }
     
     
    //Lecture dans le fichier
    $process = proc_open("sudo php lectureFichierRoot.php", $descriptorspec, $pipes);
    if (is_resource($process)) {
        // $pipes ressemble à :
        // 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
        // 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
        // Toute erreur sera ajoutée au fichier /tmp/error-output.txt
     
       // fwrite($pipes[0], "lectureFichierRoot.php");
        fclose($pipes[0]);
     
        while(!feof($pipes[1])) {
            echo fgets($pipes[1], 1024);
        }
        fclose($pipes[1]);
        // Il est important que vous fermiez les pipes avant d'appeler
        // proc_close() afin d'éviter un verrouillage.
        $return_value = proc_close($process);
        echo "La commande a retourné $return_value\n";
    }
    ?>
    A noter que le code est un copier/coller du manuel PHP retouché en fonction de mes besoins, je laisse les commentaires afin que le code reste "lisible".

    Voilà, les scripts lectureFichierRoot.php et ecritureFichierRoot.php ne pourront pas être exécuté directement par apache car il faut qu'ils soient exécuté en root. Il faut impérativement passer par le fichier commandeRoot.php, c'est à dire par la fonction proc_open().

    Si je ne suis pas assez clair dans mes explications dites le moi, j'avoue que je suis crevé ce soir pfffffiiiooouu .

    ++ et merci encore
    Sliim

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modification du fichier configure
    Par dede92 dans le forum Unix
    Réponses: 0
    Dernier message: 11/06/2011, 11h52
  2. Réponses: 2
    Dernier message: 08/08/2007, 19h58
  3. Réponses: 6
    Dernier message: 03/02/2006, 16h08
  4. modification de fichier EOF
    Par scorbo dans le forum C
    Réponses: 9
    Dernier message: 28/11/2003, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo