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
ou httpd
, www-data
etc. Sur la plupart des systèmes Debian comme, Apache est www-data
. Pour nginx, généralement, c'est aussi le cas www-data
.
Pour le vérifier, essayez:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
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 aussi grandmother
et nsa
(à 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:
chown -R www-data:www-data your/folder/
Mais il est fort probable que vous souhaitiez conserver un accès complet à vos fichiers en modifiant uniquement le groupe:
chown -R yourusername:www-data your/folder/
Ensuite, faites le nécessaire chmod
pour accorder au groupe www-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:
chmod -R g+rw your/folder/
Cela signifie "au groupe ( g
), ajouter +
( rw
) les autorisations de lecture et d'écriture ( ) sur le dossier your/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
et app/logs
selon vos besoins ):
Sur un système qui prend en charge chmod +a
(c'est-à-dire pas Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
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 essayez setfacl -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:
sudo apt install acl
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à:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Je n'ai jamais eu de problème avec cette méthode, satisfait ou remboursé.