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

Applications et environnements graphiques Discussion :

sudo chown avec PHP exec ne fontionne pas


Sujet :

Applications et environnements graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut sudo chown avec PHP exec ne fontionne pas
    Bonjour à tous, débutant sous linux et php
    j'ai créer un système de création de comptes mails sur mon serveur debian.

    Lorsqu'un utilisateur rempli un formulaire, le script php doit executer un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    exec('maildirmake /home/vmail/'.$data.'@mondomaine.com/');
    exec('sudo chown -R 5000 www-data /var/spool/vmail/'.$mail.'/');
    exec('sudo chgrp -R 5000 www-data /var/spool/vmail/'.$mail.'/');
    ?>
    Cependant, l'utilisation de sudo posait apparement un problème pour l'utilisateur et cela ne marche pas.



    J'ai donc créer un fichier createaccount.sh dans /var/createaccount.sh qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    /usr/bin/maildirmake /var/spool/vmail/mondomaine.com/$data
    /usr/bin/maildirmake /var/spool/vmail/$data@mondomaine.com
    /bin/chown -R 5000 /var/spool/vmail/$data@mondomaine.com/
    /bin/chgrp -R 5000 /var/spool/vmail/$data@mondomaine.com/
    /bin/chown -R 5000 /var/spool/vmail/mondomaine.com/$data/
    /bin/chgrp -R 5000 /var/spool/vmail/mondomaine.com/$data/
    Puis dans mon code php j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    // PHP :
    exec('sudo www-data /var/createaccount.sh ' . $data . ' ' . $mail);
    Mon fichier sudoers contient bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    www-data ALL=(ALL) NOPASSWD: /var/createaccount.sh
    Depuis la page web de creation de compte, apres envoi du formulaire, rien ne marche.

    Par contre, lorsque j'execute sous ssh directement mon fichier createaccount.sh (en ayant modifié les $data par le vrai utilisateur) et bien cela crée bien les dossier pour les mails.

    Quelqu'un aurait-il une piste ?
    Ai-je fait "boulette" quelque part ?
    Ou alors ai-je loupé une étape ?

    Merci par avance.

  2. #2
    Membre éclairé Avatar de psikotik
    Homme Profil pro
    Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
    Inscrit en
    Septembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.

    Informations forums :
    Inscription : Septembre 2012
    Messages : 49
    Par défaut
    A tout hasard, t'as essayé de donner le chemin complet de sudo au lieu de juste "sudo" ? Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('/usr/bin/sudo www-data /var/createaccount.sh ' . $data . ' ' . $mail);
    ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    Bonjour psikotik,

    je viens d'essayer, mais cela ne fonctionne toujours pas.

    Merci quand même

  4. #4
    Membre éclairé Avatar de psikotik
    Homme Profil pro
    Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
    Inscrit en
    Septembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.

    Informations forums :
    Inscription : Septembre 2012
    Messages : 49
    Par défaut
    Ah, et puis, faut pas préciser l'option -u ? Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('/usr/bin/sudo -u www-data /var/createaccount.sh ' . $data . ' ' . $mail);

  5. #5
    Membre éclairé Avatar de psikotik
    Homme Profil pro
    Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
    Inscrit en
    Septembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.

    Informations forums :
    Inscription : Septembre 2012
    Messages : 49
    Par défaut
    Et puis, je me dis, c'est www-data qui exécute ton script en principe. Donc, tu devrais pouvoir mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('/var/createaccount.sh ' . $data . ' ' . $mail);

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    Merci psikotik,
    mais cela ne fonctionne quand meme pas :'(

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 608
    Par défaut
    Si tu fais ces commandes en ligne de commande avec l'utilisateur www-data, ça donne quoi ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Citation Envoyé par mqxxou Voir le message
    Mon fichier sudoers contient bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    www-data ALL=(ALL) NOPASSWD: /var/createaccount.sh
    Ce n'est pas suffisant. Ce n'est pas parce que www-data possède les droits d'exécutions sur un script (d'ailleurs un simple chmod +x aurait été préférable que de mettre cette ligne dans le sudoers) qu'il pourra exécuter les commandes qui sont dedans (chown, etc).

    Par ailleurs il faut aussi faire gaffe au shell utilisé par www-data qui est parfois un simple sh limité. Voir si avec www-data, on peux utiliser la commande chown, etc par exemple. Mettre à jour les variables d'environnements si nécessaire.

    Alors la solution la plus simple que je déconseille fortement (une énorme faille de sécurité si ton serveur web est ouvert à tout le monde sur le port HTTP) :

    1 - Mettre en NOPASSWD tout les droits pour www-data dans le sudoers (très dangereux)
    2 - appeler directement les chown via l'instructionexec() comme tu le faisait au début

    La meilleure solution selon moi :

    1 - ne mettre aucun droits dans le sudoers ;
    2 - demander une authentification du compte root via un formulaire en stockant le mot de passe dans une variable ;
    3 - exécuter les commande via su -c en complétant avec le mot de passe root saisie, à l'aide d'expect par exemple.

    Et puis franchement, je préfère faire ça avec un client lourd en étant logué avec mon propre compte que bidouiller avec l'user d'apache mais ça c'est un point de vue.

    Cordialement,
    Idriss

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Par défaut
    Salut,

    Pourquoi n'utilise tu pas la libssh2 ? Perso pour plus de sécurité plutôt que d'utiliser exec j'utilise cette lib et me connecte avec un compte sudoer pour créé des utilisateurs sur la machine. Ca évite d'ajouter des droits à www-data sans savoir ce que quelqu'un pourrait faire avec si une faille dans ton script venait à être découverte.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Bonjour,

    + 1 pour la libssh2 ! J'ai longtemps recherché (comme toi actuellement) une méthode permettant d’exécuter des commandes sur un serveur linux (ajout de client, changement de mot de passe, etc) sans forcément donner les droits à www-data ou ALL !!! dans le sudoers.

    J'ai pu lire qu'il est impossible d’exécuter un script (.sh) via sudoers pour raison de sécurité, il faut absolument un binaire. J'ai failli coder en C toutes mes commandes pour que cela fonctionne de manière sécurisée (suite aux recommandations d'un collègue, codeur fou).

    Finalement, j'utilise actuellement la bibliothèque Libssh2 associée à une authentification SSH par certificat sur un utilisateur CHROOTé dont les commandes dont maitrisées.

    En espérant que cela t'es orienté. Bonne continuation.

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.

    Ah bon ? Depuis quand il est impossible d'utiliser sudo pour lancer un .sh quand le compte a les bonnes permissions via sudoers ? Où as-tu lu pareille énormité ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [idriss@hp-dv6:~]$ ls -l test2.sh 
    -rwxr--r-- 1 root root 26 nov.  18 09:38 test2.sh
    [idriss@hp-dv6:~]$ cat test2.sh 
    #!/bin/bash
     
    echo "Salut"
    [idriss@hp-dv6:~]$ ./test2.sh
    bash: ./test2.sh: Permission non accordée
    [idriss@hp-dv6:~]$ sudo ./test2.sh
    [sudo] password for idriss: 
    Salut
    [idriss@hp-dv6:~]$
    De toute façon je ne recommande pas non plus de passer par sudo mais d'utiliser la commande su -c (où là on se logue momentanément en root donc même résultat qu'en passant par ssh sauf que la session est temporaire et ne dure que le temps d'exécution de la commande).

    Du coup faut savoir utiliser expect, c'est peut être moins simple que passer par ssh mais ça évite d'utiliser une connexion ssh. L'avantage que l'on pourrait voir avec ssh, c'est éventuellement l'utilisation des clefs, encore que si on fait les choses proprement avec su ...

    Idriss

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2007, 11h37
  2. Premier pas avec PHP
    Par ouahid32 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 14/02/2007, 11h34
  3. [PHP-JS] Probleme avec onchange qui ne redirige pas
    Par Greggggggg dans le forum Langage
    Réponses: 11
    Dernier message: 28/07/2006, 13h43
  4. Formulaire avec du PHP qui ne marche pas !
    Par Sandara dans le forum Langage
    Réponses: 19
    Dernier message: 02/06/2006, 19h26
  5. Ne pas rafraichir les images avec PHP
    Par tornaod dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 23h44

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