Autoriser PHP à modifier la propriété et l’autorisation des fichiers et des répertoires

Je voudrais construire une application web simple, qui gère certains répertoires sur un serveur. Je veux donner aux gens la possibilité d’utiliser chown et chmod.

Quel est le moyen le plus sûr de donner cette autorisation à PHP? La chose la plus rapide consiste simplement à exécuter Apache et PHP en tant que root, mais cela ne semble pas être une idée intelligente.

Une autre chose à laquelle je pensais, était de créer un script séparé qui a un setuid root ..

Merci!

Eh bien, cela semble certainement être une idée dangereuse pour commencer et je préférerais m’asseoir et réfléchir à toute la stratégie de ce que l’on essaie de réaliser.

Le danger est l’escalade de privilèges d’un script exécutable qu’un utilisateur distant peut modifier ou télécharger, bien sûr. Un chown / chmod complet dans une application Web équivaut à coller simplement votre mot de passe root sur la page.

Qu’est-ce qui doit se passer exactement?

Si la situation doit se produire pour une raison quelconque, mais pas pour la racine (nous l’espérons), alors la fonctionnalité doit être intégrée. Je prendrais les demandes des utilisateurs et les mettrais en queue, puis j’exécuterais un processus séparé (pouvant être shell, php, perl, n’importe quoi) exécuté en tant que root par cron, vérifier si la requête correspond aux parameters autorisés et apporter les modifications .

Une façon serait de configurer sudo sur votre machine (en supposant que ce soit une boîte Linux). Sudo vous permet d’exécuter des commandes élevées, régies par les ressortingctions définies dans le fichier sudoers.conf. Utilisez des règles ssortingctes pour limiter son utilisation aux commandes requirejses dans un répertoire spécifique pour l’utilisateur sous lequel votre service Web s’exécute (comme www-data), puis appelez le shell de commande à partir de votre script PHP, par exemple:

shell_exec("sudo chmod 777 dirname"); 

Assurez-vous que votre configuration sudo est serrée, afin de vous assurer que l’éclatement sera presque impossible.

Peut-être devriez-vous regarder les commandes php: chmod, chown, chgrp et filesperms

chmod

 chmod("/somedir/somefile", 0600);