2010-03-10 7 views
0

Quelqu'un a-t-il déjà utilisé PHP (prouvé et réussi) pour CHMOD un répertoire via un navigateur Web?CHMOD un répertoire Linux utilisant PHP sur un serveur Apache

Mes barrages routiers sont: (a) script PHP fonctionne comme « personne » à partir du répertoire navigateur (b) ci-dessus celui que je veux chmod appartient à l'utilisateur ftp et « personne » ne dispose pas des autorisations d'écriture à il

Alors, quand je tente de chmod 0666/usr/www/dirOwnedbyFTPuser/dirIamTryingToCHMOD/ j'obtenir la permission refusée

Si vous avez déjà écrit et exécuté avec succès un script pour ce faire, pouvez-vous partager la snipit de code avec moi? Merci ... été à cela pendant des mois.

+0

il existe des solutions, mais c'est mauvais de laisser php gérer les permissions système. De quoi avez-vous besoin pour faire une telle chose? – Benoit

+0

Je dois dymaniquement créer un répertoire en utilisant PHP. –

Répondre

1

Oui, il est possible de le faire via PHP. Les règles usuelles de permissions linux s'appliquent cependant pour que les scripts chmod n'appartiennent pas à l'utilisateur apache (personne) et l'utilisateur apache n'a pas les droits d'écriture alors une méthode consiste à donner à apache la permission d'utiliser sudo

Soyez averti - C'est potentiellement un trou de sécurité massif !!!

Vous pouvez autoriser apache à utiliser sudo en éditant le fichier sudoers. Il est recommandé de ne pas modifier ce fichier directement comme une erreur peut vous laisser complètement foiré donc sur mon (Ubuntu) système type I

sudo visudo 

Ensuite, vous devez ajouter une ligne pour l'utilisateur « nobody ». Vous pouvez restreindre les autorisations sudo à un script ou à un dossier particulier. Je vous recommande donc d'écrire un script shell pour modifier les autorisations, puis de les placer dans un dossier à l'écart des autres scripts. De cette façon, Apache n'a pas de privilèges root complets sur votre système (ce qui est une idée assez effrayante). Vous pouvez également mettre du code dans le script shell pour restreindre les fichiers qui peuvent être modifiés.

Vous devez également autoriser apache à sudo sans mot de passe car vous n'avez aucun moyen de saisir le mot de passe via php. Ainsi, la ligne que vous ajoutez quelque chose comme

nobody ALL=(ALL)NOPASSWD:/path/to/my/script 

Puis en php préfixer simplement la commande avec sudo

passthru ("sudo /path/to/my/script ..."); 

(il y a quelques autres fonctions que vous pouvez utiliser au lieu de passthru(), était Comme je l'ai déjà dit, ceci est potentiellement très dangereux et bien que ce qui précède fonctionne, je l'ai seulement utilisé sur mon propre système privé auparavant, jamais sur un serveur de production public. Je suis sûr que beaucoup de gens auront des commentaires sur la sécurité de cette question, donc je serais intéressé d'entendre ce que d'autres pièges potentiels et les failles de sécurité pourraient être avec cette méthode. Je sais qu'une chose similaire peut être faite en utilisant SuExec, mais je ne suis pas si familier avec ça, donc si quelqu'un a des avantages ou des inconvénients de SuExec sur cette méthode, je serais intéressé de les entendre.Note finale: Je changerais l'utilisateur apache de personne en quelque chose comme 'apache' ou 'www' - probablement juste idiot mais je n'aime pas l'idée de donner des permissions root à un utilisateur appelé personne !!!

Espérons que cela aide!

+0

Merci Addsy. Je ne veux pas avoir à faire des réglages côté serveur, donc la mise à jour du fichier sudoers n'est pas un chemin que je veux prendre (http://stackoverflow.com/questions/2230391/php-shell-exec-and-sudo-must -be-setuid-root). –

1

Oui, vous pouvez chmod à partir de php via un navigateur Web. (oui, nous savons tous que ce peut être une mauvaise idée)

Mais - vous pouvez seulement chmod fichiers que le script PHP a l'autorisation d'utiliser! Si votre serveur web exécute PHP comme personne, alors vous pouvez chmod tous les fichiers appartenant à "personne" ...

0

http://www.php.net/ftp Vous pourriez avoir php se connecter en tant qu'utilisateur ftp et le faire.

+0

Oui Chris ... merci! Je suis déjà allé dans cette voie et l'ai scripté avec succès au travail. Maintenant, mon dilemme change le nom de groupe d'un répertoire. J'ai essayé ftp_site ($ ftpStream, 'chgrp nobody'. $ Directory) mais je n'arrive pas à le faire fonctionner. Est-ce que quelqu'un a réussi à changer un groupe de répertoires via ftp_connect()? Merci. –

Questions connexes