2010-06-10 7 views
3

J'ai développé une petite application web.L'application Web échoue lorsqu'elle est déplacée vers l'environnement de production. De quelles autorisations de serveur ai-je besoin?

Cette application permet aux utilisateurs de télécharger des images. Il produit également des fichiers texte avec les noms de ces images (les noms sont stockés et récupérés vers/à partir d'une base de données MySQL.)

J'ai développé cette application en utilisant MAMP. Pour créer les fichiers image téléchargée utiliser la fonction PHP

imagejpeg('my/path/name.jpg') 

et de supprimer les fichiers utiliser la fonction PHP

unlink('folder1/folder2/name.jpg') 

pour écrire dans le document texte que je utilise la fonction

fopen('folder1/folder2/name.txt', 'w') 

ces trois fonctions génèrent des erreurs liées aux autorisations - maintenant, le site a été déplacé vers un environnement d'hébergement en direct.

Pourquoi est-ce? et de quelles autorisations ai-je besoin pour définir le dossier folder1 et folder2?

Je sais que l'autorisation 777 est généralement mauvaise car elle ouvre votre serveur au public. Cependant, ce que j'ai trouvé est que les fonctions ne fonctionnent pas sauf si J'utilise 777 sur les dossiers. Quelqu'un peut-il faire la lumière sur mon dilemme?

Répondre

1

Ne pas aveuglément Définissez les autorisations du dossier sur 777, qui active la lecture, l'écriture et l'exécution des bits sur chaque utilisateur du système.

Vous devez toujours accorder le least amount of privileges requis pour que votre application s'exécute comme mesure de sécurité générale. Je ne connais pas grand-chose aux exigences de votre application à partir de votre question ci-dessus, mais il semble que les répertoires de coupables aient seulement besoin d'autorisations de lecture/écriture/exécution pour vous et l'utilisateur sur lequel le serveur web s'exécute. Vous pouvez simplement les accorder à l'internaute, puis utiliser sudo pour y accéder vous-même. Read - vous pouvez ainsi obtenir une liste de répertoires. Write - crée de nouveaux fichiers ou supprime des fichiers existants dans le répertoire ou renomme les fichiers. (ex: utilisation de la fonction unlink())
execute - pour que vous puissiez accéder au répertoire et y accéder.

Dans votre cas, ce qui suit devrait fonctionner correctement:

chown -R www-data: folder1/
chmod 700 folder1/ folder1/folder2/

Cela suppose votre serveur Web est en cours d'exécution comme www-données utilisateur. Si vous voulez avoir accès aux répertoires et à leurs fichiers respectifs via FTP ou un shell bash sans l'utilisation de sudo, vous devez créer un groupe tel que wwwusers et ajouter tous ceux qui ont besoin d'accéder à ce répertoire dans ce groupe. Ensuite, faites quelque chose comme:

chown -R www-data:wwwusers folder1/
chmod 770 folder1/ folder1/folder2/

D'ailleurs, ma réponse est naïve que je suppose que vous avez racine sur le serveur et qu'il n'y a pas quelque chose comme ACLs Posix activé ou quelque chose comme la sécurité. Avec ACL, vous devez faire quelque chose comme setfacl -mu:www-data:rwx /path/to/dir. Dans ce cas, vous devrez probablement demander l'aide de votre fournisseur d'hébergement.

Vous devriez vraiment comprendre les principes fondamentaux du fonctionnement des permissions sur les répertoires et les fichiers sur un système de fichiers unix ou unix. Assurez-vous de lancer man chmod, man chown. Vous pouvez également en apprendre plus ici sur UNIX permissions et here.

+0

merci steve. Je ferai des recherches avec ce que vous m'avez donné. – Ash

+0

Comment trouvez-vous le nom d'utilisateur de votre serveur Web? – Ash

+0

Vous devez utiliser la commande ps pour obtenir des informations sur un processus. Essayez ps aux | grep -i apache | awk '{print $ 1}'. Tapez 'man ps' pour en savoir plus sur la commande ps et comment obtenir tous les types d'informations sur les processus en cours d'exécution sur votre système. – randombits

0

Plutôt que de simplement modifier les autorisations, avez-vous examiné la propriété des dossiers? Le serveur Web exécute en tant qu'utilisateur différent l'utilisateur développant et déployant les scripts et les dossiers. Une solution simple pourrait être de changer le propriétaire du dossier pour l'utilisateur du serveur Web.

+0

pouvez-vous développer votre réponse? – Ash

+0

comment puis-je changer le propriétaire du dossier? et que devrais-je changer? – Ash

+0

En supposant votre sur un système d'exploitation Linux/Unix, regardez dans chown. http://www.computerhope.com/unix/uchown.htm – gurun8

1

Il y a une solution que je trouve élégant, mais peut-être que je suis le seul :) Changer le propriétaire du groupe de répertoires à www-data et définir les droits à 775.

chown -R :www-data folder1 
chmod -R 775 folder1 
+0

Vous pouvez contraindre ces autorisations encore plus loin vraiment. Il n'y a aucune raison pour que quelqu'un d'autre que l'utilisateur Web ait les bits de lecture et d'exécution activés pour les utilisateurs qui ne sont pas le propriétaire du fichier ou une partie du groupe du fichier. – randombits

+0

qui est ce propriétaire? Comment accéder à cette information? Mon problème est que je suis assez nouveau au terminal et préférerais le faire via une interface graphique. – Ash