Précédent   Forum du club des développeurs et IT Pro > Systèmes > Linux > Applications et environnements graphiques
Applications et environnements graphiques Questions sur l'utilisation d'applications et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/09/2012, 18h07   #1
mqxxou
 
Homme
Inscription : septembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2012
Messages : 5
Points : -2
Points : -2
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 :
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 :
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 :
1
2
3
<?php
// PHP :
exec('sudo www-data /var/createaccount.sh ' . $data . ' ' . $mail);
Mon fichier sudoers contient bien :
Code :
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.
mqxxou est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2012, 19h00   #2
psikotik
Membre du Club
 
Avatar de psikotik
 
Homme
Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
Inscription : 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
Points : 62
Points : 62
A tout hasard, t'as essayé de donner le chemin complet de sudo au lieu de juste "sudo" ? Genre :

Code :
exec('/usr/bin/sudo www-data /var/createaccount.sh ' . $data . ' ' . $mail);
?
__________________
- "Make me a sandwich."
- "No I won't."
- "sudo Make me a sandwich."
- "Ok."
psikotik est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2012, 19h26   #3
mqxxou
 
Homme
Inscription : septembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2012
Messages : 5
Points : -2
Points : -2
Bonjour psikotik,

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

Merci quand même
mqxxou est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2012, 19h43   #4
psikotik
Membre du Club
 
Avatar de psikotik
 
Homme
Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
Inscription : 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
Points : 62
Points : 62
Ah, et puis, faut pas préciser l'option -u ? Essaye :

Code :
exec('/usr/bin/sudo -u www-data /var/createaccount.sh ' . $data . ' ' . $mail);
__________________
- "Make me a sandwich."
- "No I won't."
- "sudo Make me a sandwich."
- "Ok."
psikotik est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2012, 19h44   #5
psikotik
Membre du Club
 
Avatar de psikotik
 
Homme
Obsessionnellement relire des RFC et des pages de man comme ça pour le plaisir.
Inscription : 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
Points : 62
Points : 62
Et puis, je me dis, c'est www-data qui exécute ton script en principe. Donc, tu devrais pouvoir mettre :

Code :
exec('/var/createaccount.sh ' . $data . ' ' . $mail);
__________________
- "Make me a sandwich."
- "No I won't."
- "sudo Make me a sandwich."
- "Ok."
psikotik est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2012, 19h57   #6
mqxxou
 
Homme
Inscription : septembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2012
Messages : 5
Points : -2
Points : -2
Merci psikotik,
mais cela ne fonctionne quand meme pas :'(
mqxxou est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/09/2012, 09h38   #7
troumad
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 659
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 45
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 659
Points : 6 584
Points : 6 584
Si tu fais ces commandes en ligne de commande avec l'utilisateur www-data, ça donne quoi ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/09/2012, 11h12   #8
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 777
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 777
Points : 12 113
Points : 12 113
Bonjour.

Citation:
Envoyé par mqxxou Voir le message
Mon fichier sudoers contient bien :
Code :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 14/11/2012, 16h57   #9
Jejeleponey
Invité régulier
 
Inscription : avril 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 8
Points : 6
Points : 6
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.
Jejeleponey est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/11/2012, 18h11   #10
secuip
Invité de passage
 
Homme
Étudiant
Inscription : 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
Points : 3
Points : 3
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.
secuip est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 17/11/2012, 19h26   #11
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 777
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 777
Points : 12 113
Points : 12 113
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 :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h09.


 
 
 
 
Partenaires

Hébergement Web