Autorisations
Selon votre environnement d'hébergement, les autorisations peuvent ou non être un problème dont vous devez vous préoccuper. La chose importante à comprendre est qu'il y a un problème potentiel si l'utilisateur que vous utilisez pour éditer vos fichiers sur le système de fichiers est différent de l'utilisateur sous lequel PHP s'exécute (généralement le serveur Web), ou à tout le moins, les deux utilisateurs n'ont pas accès en lecture/écriture à ces fichiers.
Tout d'abord, découvrez avec quel utilisateur Apache ou Nginx s'exécute en exécutant la commande suivante pour Apache :
ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq
Pour Nginx :
ps aux | grep -v root | grep nginx | cut -d\ -f1 | sort | uniq
Et découvrez quel utilisateur possède le fichier dans votre répertoire grav en exécutant
ls -l
En tant que CMS basé sur des fichiers, Grav doit écrire dans le système de fichiers afin de créer des fichiers de cache et de journalisation. Il existe trois scénarios principaux :
-
PHP/Webserver s'exécute avec le même utilisateur qui édite les fichiers. (Préféré)
C'est l'approche utilisée par la plupart des configurations d'hébergement partagé et fonctionne également bien pour le développement local. Le billet de blog que nous avons écrit concernant MacOS Yosemite, Apache et PHP explique comment configurer Apache pour qu'il s'exécute en tant que compte d'utilisateur personnel. Cette approche n'est pas considérée comme suffisamment sécurisée pour être utilisée sur un hébergeur dédié, c'est pourquoi la deuxième ou la troisième option doit être utilisée.
-
PHP/Webserver fonctionne avec des comptes différents mais le même groupe
En utilisant un groupe partagé entre votre utilisateur et votre compte PHP/Webserver avec les autorisations
775
et664
, vous vous assurez que même si vous avez deux comptes différents, les deux auront un accès en lecture/écriture aux fichiers. Vous devriez également probablement définir unumask 0002
à la racine afin que les nouveaux fichiers soient créés avec les autorisations appropriées. -
Différents comptes, corrigez les autorisations manuellement
La dernière approche consiste à avoir des comptes complètement différents et à mettre à jour la propriété et les autorisations des fichiers après l'édition pour s'assurer que l'utilisateur PHP/Webserver peut lire/écrire correctement.
Un simple script shell de correction des autorisations peut être utilisé pour cela :
1 | #!/bin/ch
2 | chown -R joeblow:staff .
3 | find . -type f -exec chmod 664 {} \;
4 | find ./bin -type f -exec chmod 775 {} \;
5 | find . -type d -exec chmod 775 {} \;
6 | find . -type d -exec chmod +s {} \;
Vous pouvez utiliser ce fichier et le modifier selon vos besoins pour l'utilisateur et le groupe appropriés qui fonctionnent pour votre configuration. Ce que fait essentiellement ce script, c'est :
- Modifie le répertoire actuel, tous les fichiers et sous-dossiers en
joeblow
et la propriétéstaff
- Recherche tous les fichiers du répertoire actuel et définit les autorisations sur
664
afin qu'ils soientRW
pour Utilisateur et groupe etR
pour Autres. - Recherche tous les dossiers du répertoire actuel et définit les autorisations sur
775
afin qu'ils soientRWX
pour l'utilisateur et le groupe etRX
pour les autres. - Définit la propriété de tous les répertoires pour s'assurer que les changements d'utilisateur et de groupe sont conservés
Si les fichiers image dans le dossier cache sont écrits avec les mauvaises autorisations, essayez de définir dans votre fichier user/config/system.yaml
,
1 | images:
2 | cache_perms : '0775'
si la propriété images
est déjà présente, ajoutez simplement cache_perms: '0775'
à la fin de celle-ci.
Si cela ne fonctionne toujours pas, créez un fichier setup.php
dans le dossier racine Grav (celui avec index.php
), et ajoutez-y :
1 | <?php
2 | masque(0002);
Si vous avez déjà un fichier setup.php
, ajoutez simplement cette ligne en haut. Ce fichier est couramment utilisé pour la configuration multisite, mais étant appelé dans chaque appel Grav, vous pouvez également l'utiliser pour d'autres utilisations.
Co-hébergement avec un site WordPress.
En général, Grav peut être installé dans un dossier de niveau racine d'un site WordPress existant et les deux CMS coexisteront bien. (N'oubliez pas de définir Base Rewrite dans le htaccess du dossier Grav.) Si vous rencontrez des erreurs d'autorisations avec les fichiers de cache lors de l'accès aux pages Admin et/ou de la visualisation de Grav, vérifiez si WP-Engine est installé pour ce site WordPress. Si c'est le cas, vous devrez contacter leur support pour créer une exception pour le dossier Grav à partir de leur service de cache distribué agressif.
Conseils spécifiques à SELinux.
Si les suggestions ci-dessus ne fonctionnent toujours pas, exécutez
chcon -Rv system_u:object_r:httpd_sys_rw_content_t:s0 ./
dans le dossier racine Grav.
Les références:
- https://unix.stackexchange.com/questions/337704/selinux-is-preventing-nginx-from-writing-via-php-fpm
- https://github.com/getgrav/grav/issues/912#issuecomment-227627196
- http://stopdisablingselinux.com
- http://stackoverflow.com/questions/28786047/failed-to-open-stream-on-file-put-contents-in-php-on-centos-7
- http://www.serverlab.ca/tutorials/linux/web-servers-linux/configuring-selinux-policies-for-apache-web-servers/