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

Linux Discussion :

Exécuter un script shell depuis php


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Exécuter un script shell depuis php
    salut j'ai un script shell pour créer des utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #! /bin/bash
    useradd $1 -g $2
    je fais ./shell.sh user1 group1 et il est créé

    mais depuis mon script php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    exec ('./shell.sh user2 group1');
    ?>

    je lance la page mais la création de user2 ne passe pas

    alors je voudrais savoir s'il me faut un rpm sur mon redhat pour que php exécute les commande shell ?
    Et ce qu'il faut donner comme autorisations à l'utilisateur pour que le script soit exécuté ? Et comment ?
    Et ce que c'est possible d'écrire le script shell au milieu de la page php sachant que j'ai déjà essayé mais en vain ?
    merci à vous.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 673
    Points : 30 962
    Points
    30 962
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par allyass Voir le message
    salut j'ai un script shell pour créer des utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #! /bin/bash
    useradd $1 -g $2
    je fais ./shell.sh user1 group1 et il est créé

    mais depuis mon script php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    exec ('./shell.sh user2 group1');
    ?>

    je lance la page mais la création de user2 ne passe pas
    Pour que la commande "useradd" fonctionne, il faut qu'elle soit lancée par root. Or un script php est exécuté par le serveur Apache qui est un utilisateur comme un autre (ses droits sont définis dans "/etc/httpd/conf/httpd.conf").

    Donc pour que ça marche, t'as deux solutions
    - tu modifies le propriétaire du process httpd et tu le mets à root => hyper unsecure => si un hackeur arrive à rentrer sur httpd il aura les droits de root
    - tu crées un exécutable issu d'un source C qui va lancer le useradd. Ca peut-être un source de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
         char cmd[1024];
         sprintf(cmd, "useradd %s -g %s", argv[1], argv[2]);
         system(cmd);
    }
    Et tu places cet exécutable dans ta machine en lui mettant le setuid root. Puis tu modifies ton script pour qu'il vienne appeler cet exécutable au lieu de ton shell.

    Citation Envoyé par allyass Voir le message
    Et ce que c'est possible d'écrire le script shell au milieu de la page php sachant que j'ai déjà essayé mais en vain ?
    merci à vous.
    Aucun problème. Mais si ton script ne peut pas travailler par manque de droits php n'y pourra rien.

    Citation Envoyé par allyass Voir le message
    Et ce qu'il faut donner comme autorisations à l'utilisateur pour que le script soit exécuté ?
    Faut bien comprendre le fonctionnement Unix. Un script shell n'est jamais exécuté. Il n'est qu'interprété par l'exécutable inscrit derrière le "#!". La preuve: tu lui enlèves le droit "x" => tu peux quand-même le lancer en tapant "sh nom_script_shell".
    Or seul un exécutable peut avoir des droits modifiés par le setuid et comme un script n'est pas un exécutable...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut shell
    bonjour;
    sve@r est-ce que tu pourrais me dire comment faire pour que le process httpd tourne sous root ?
    merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 673
    Points : 30 962
    Points
    30 962
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par allyass Voir le message
    bonjour;
    sve@r est-ce que tu pourrais me dire comment faire pour que le process httpd tourne sous root ?
    merci d'avance
    C'est totalement déconseillé. Mais effectivement je peux t'indiquer comment
    - tu ouvres le fichier "/etc/httpd/conf/httpd.conf"
    - tu cherches la ligne commençant par "User" (elle est en couple avec une ligne commençant par "Group")
    - tu remplaces le nom situé derrière "User" (souvent c'est "User apache" ou "User nobody") par root => Ca deviendra "User root"
    - tu fermes et enregistres et tu relances httpd par la commande
    => /etc/rc.d/init.d/httpd restart (ou alors tu redémarres ta machine)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut SHELL
    merci pour ta reponse
    jai fait
    user root
    group root
    apres jai arreter le service ,mais lorske je veut le demarrer ca donne ce message.
    [root@sambaserver ~]# /etc/rc.d/init.d/httpd start
    Démarrage de httpd :Syntax error on line 227 of /etc/httpd/conf/httpd.conf:
    Error:\tApache has not been designed to serve pages while\n\trunning as root. T here are known race conditions that\n\twill allow any local user to read any fil e on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG _SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your http d.conf file to list a non-root\n\tuser.\n
    [éCHOUé]

    tu peux me dire d ou vient le probléme?

    merci

  6. #6
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut EXECUTION SHELL à partir de PHP (Apache)
    Bonjour,

    Je me permets un petit up car je n'y arrive pas :

    J'ai écrit un shell (Linux) "creation_compte.sh" qui fonctionne très bien quand je le lance en ligne de commande (en root).

    Je voudrais maintenant exécuter ce shell, appelons-le "creation_compte.sh" depuis le panneau de contrôle admin de mon site PHP sous Apache.

    Sauf que le serveur me renvoie autant de "operation not permitted" qu'il y a de commandes non autorisées (adduser, chmod et chown) pour le "guest" que constitue le client d'Apache. Donc a priori, c'est normal.


    D'après ma compréhension des différents posts, il y aurait 3 options :

    1) SOLUTION "EXECUTABLE" :
    - Retranscrire le shell "creation_compte.sh" en version exécutable, par exemple en C, appelons la version compilée "creation_compte.exe",
    - attribuer les droits 4777 à cet exécutable,
    - lancer ce programme depuis php comme spécifié dans l'un des posts de ce thread.

    => J'ai essayé mais sans succès, même avec un simple "hello world".
    (essais avec 2 modes de compilation : "GNU GCC" en mode "Release"avec CodeBlocks sous Windows, et compilation -sans erreur retournée- avec la librairie gcc installée sur mon serveur Linux)

    2) SOLUTION "SUDO" :
    - autoriser le client "guest" d'Apache à exécuter le shell creation_compte.sh" (par "visudo")
    => J'essaye en ce moment même.

    3) SOLUTION "WELCOME HACKERS" :
    Lancer Apache comme user "root" au lieu de "guest" (par configuration de "httpd.conf" et des vhost éventuels)
    => Je ne le ferai JAMAIS.


    De là j'aurai 2 questions de noob, notamment en C/C++ :

    - Est-ce que ma description des 3 solutions est correcte ?

    - Pour la solution 1 (qui me parait séduisante pour d'autres applis), est-ce qu'il y a des préconisations particulières de compilation du code source C par rapport à la machine qui accueille ensuite l'exécutable [en clair, faiut il compiler impérativement le source sur la machine d'accueil sous Linux via gcc par exemple] - ou peut-être faut il revoir la config Apache ?

Discussions similaires

  1. Exécuter un script PowerShell depuis PHP
    Par user007 dans le forum Langage
    Réponses: 7
    Dernier message: 07/04/2014, 16h05
  2. Exécution de script shell via PHP
    Par Sayko dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2013, 23h17
  3. Exécuter un script VB depuis PHP
    Par rolintoucour dans le forum VBScript
    Réponses: 0
    Dernier message: 26/03/2012, 08h44
  4. Exécuter un script python depuis PHP
    Par Fawn_noOb_wxPython dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2008, 13h27
  5. Réponses: 8
    Dernier message: 27/07/2006, 09h40

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