MIS À JOUR POUR PLUS DE CLARTÉ:
Selon http://expressionengine.com/user_guide/installation/installation.html , il est dit:
Pour la plupart des hôtes Unix, ce qui suit est typique, mais vous pouvez vérifier auprès de votre hôte si des autorisations plus restrictives peuvent être utilisées pour permettre à PHP d'écrire dans des fichiers (666) et des dossiers (777) . Sur les serveurs Windows, les éléments suivants ne s'appliqueront pas, mais vous devrez vous assurer que les fichiers et dossiers sont accessibles en écriture par ExpressionEngine. Vous devrez peut-être contacter votre hôte pour cela.
Je ne sais pas ce que cela signifie. Je peux changer les fichiers et dossiers spécifiques en 666 et 777 respectivement où je suis le chown'er, mais ce qui précède semble que je dois également autoriser PHP à le faire?
QUESTION ORIGINALE:
Je dois m'assurer que PHP peut écrire dans des fichiers spécifiques (666) et des dossiers (777).
Comment puis-je faire cela?
la source
Réponses:
Je vais compléter les réponses de rahmu et MV avec une solution technique. Tout ce qui suit n'est valable que pour les systèmes de type UNIX.
Faites défiler la section chmod / chown pour voir un exemple utilisant les ACL - un outil plus puissant que les modes de fichiers UNIX.
Trouver le nom d'utilisateur de votre serveur Web
Tout d'abord, vous devrez connaître le nom d'utilisateur sous lequel votre serveur Web s'exécute. Si vous utilisez Apache, il peut être
apache
ouhttpd
,www-data
etc. Sur la plupart des systèmes Debian comme, Apache estwww-data
. Pour nginx, généralement, c'est aussi le caswww-data
.Pour le vérifier, essayez:
Assurez-vous que le nom d'utilisateur renvoyé par cette commande est cohérent (par exemple, j'utilise nginx 99% du temps, mais cette commande renvoie
tomcat7
, un serveur Web Java que j'ai installé une fois) .Octroi d'autorisations au serveur Web: utilisation de
chmod
etchown
Faire un
chmod
de 666 ou 777 (la solution incontournable pour ce genre de problèmes dans de mauvaises documentations / tutoriels) peut magiquement faire fonctionner les choses, mais n'est pas sûr. Accorder des autorisations 666 ou 777 donnera accès aux "autres". Donc pas seulement Apache, mais aussigrandmother
etnsa
(à condition que ces comptes d'utilisateurs existent sur votre machine - mais non vraiment, veuillez éviter de le faire à moins que ce ne soit que pour le test / dépannage).Il vaut mieux être plus précis et accorder des autorisations uniquement à vous et à Apache. Modifiez le groupe de vos fichiers pour donner le contrôle total sur vos fichiers au serveur Web. Pour ce faire, modifiez le propriétaire de manière récursive:
Mais il est fort probable que vous souhaitiez conserver un accès complet à vos fichiers en modifiant uniquement le groupe:
Ensuite, faites le nécessaire
chmod
pour accorder au groupewww-data
les mêmes autorisations que vous. Par exemple, si le mode actuel est 640 (6 pour vous, 4 pour www-data, 0 pour les autres, traduisant en -rw-r -----) , définissez-le sur 660 (6 pour vous, 6 pour www- données, 0 pour les autres, se traduisant par -rw-rw ----) . Voir la réponse de rahmu pour en savoir plus sur les modes de fichiers, c'est un mécanisme ancien mais élégant.Pour éviter de manipuler des nombres obscurs avec
chmod
, vous pouvez également utiliser cette syntaxe:Cela signifie "au groupe (
g
), ajouter+
(rw
) les autorisations de lecture et d'écriture ( ) sur le dossieryour/folder/
, récursivement (-R
)".Dans 90% des cas, cela devrait suffire.
Ma méthode préférée: utiliser les ACL (Access Control List)
Parfois, la première solution n'est pas suffisante. Je prendrai l'exemple de Symfony Framework qui enregistre et met en cache un grand nombre de données. Il a donc besoin d'un accès en écriture au dossier approprié.
Et la méthode
chmod
/chown
peut ne pas être suffisante, lorsque vous utilisez en parallèle la console Symfony en CLI (sous mon compte utilisateur) et le Web (utilisateur du serveur Web). Cela pose beaucoup de problèmes car Symfony modifie constamment les autorisations.Dans ce cas, nous utiliserons l'ACL (Access Control List), qui est un moyen plus avancé de gérer les autorisations sur de nombreux systèmes UNIX.
Voici les commandes données par la documentation officielle de Symfony ( veuillez changer
app/cache
etapp/logs
selon vos besoins ):Sur un système qui prend en charge
chmod +a
(c'est-à-dire pas Debian / Ubuntu)Sur un système qui ne prend pas en charge
chmod +a
(le plus courant)Vous aurez besoin de l'
setfacl
outil; il est peut-être installé sur votre système par défaut, alors essayezsetfacl -v
de voir si la commande est disponible.Si la commande n'est pas disponible et que vous utilisez Ubuntu 14.04+, vous n'aurez qu'à installer l'outil:
Sinon, suivez la documentation de votre système d'exploitation, car vous devrez peut-être modifier la façon dont votre partition est montée ( documentation Ubuntu ici ).
Et nous y voilà:
Je n'ai jamais eu de problème avec cette méthode, satisfait ou remboursé.
la source
Peu importe qui est le propriétaire des fichiers, 666 autorisations et 777 suffiraient: le dernier chiffre garantit que chaque utilisateur du système a accès. Bien que ce soit la façon la plus simple de le faire, ce n'est certainement pas la plus sûre pour cette raison exacte.
Une meilleure façon de le faire
La première chose que vous devez comprendre est le fonctionnement des autorisations Unix . Afin de comprendre la réponse que j'ai donnée à ce lien, veuillez noter que les autorisations peuvent être traduites en chiffres:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
A
chmod 666
équivaut alors à modifier les autorisations enrw-rw-rw
.Ensuite, vous devez déterminer quel est l'utilisateur qui exécute le script PHP. Normalement, ce serait l'utilisateur exécutant votre serveur Web. Voici un exemple de la façon de procéder (vous pouvez remplacer Apache par le nom de votre serveur Web).
Une fois que vous savez quel est l'utilisateur qui exécute les scripts et qui est le propriétaire des fichiers que vous mentionnez, c'est à vous de définir les autorisations appropriées. Gardez à l'esprit que donner un accès en écriture (même en lecture) à chaque utilisateur de votre système peut être potentiellement désastreux.
la source
Le moteur d'expression est comme de nombreuses autres applications Web PHP qui nécessitent un accès en lecture / écriture à certains fichiers et répertoires. Par exemple, EE requiert un accès en écriture à ses fichiers config.php et database.php et un accès en écriture à ses répertoires de téléchargement de fichiers.
La documentation indique que, comme la plupart des serveurs exécutent PHP en tant que mod_php (et donc exécutent avec les autorisations du serveur Web), et comme vous téléchargerez probablement vos fichiers avec FTP (ou similaire) en utilisant votre propre utilisateur, ces fichiers et les répertoires devront recevoir les autorisations 666 (tout le monde peut lire et écrire) et 777 (tout le monde peut lire, écrire et parcourir).
Ce n'est pas le moyen le plus sûr, mais c'est certainement le plus simple, surtout si vous utilisez un service d'hébergement.
Cependant, comme l'indiquent les instructions EE, demandez à votre hébergeur, car certains n'utilisent pas mod_php mais une version fastcgi, suphp ou différente. Ces serveurs exécutent PHP en tant que votre propre utilisateur, donc tous les fichiers que vous téléchargez sont déjà lisibles et inscriptibles par PHP et par tout fichier créé par les scripts EE. Dans ce cas, les fichiers et répertoires auxquels PHP accède devraient avoir un accès de 600 et 700. Les autres fichiers accessibles directement par le serveur Web (pas le runtime PHP) auraient toujours besoin d'un accès 666 et 777).
la source