Page 1 sur 1

[Droits d'accès] «Permission denied» (résolu)

Publié : ven. 24 avr. 2015, 18:17
par chindit
Salut tout le monde

Je suis en train de coder un p'tit site en PHP, donc, dans le répertoire «/srv/http».
Et je rencontre cette erreur:

Code : Tout sélectionner

Warning: require_once(vue/Twig/Autoloader.php): failed to open stream: Permission denied in /srv/http/test/index.php on line 9
À première vue, elle est limpide: Apache n'a pas l'autorisation de lire le fichier «vue/Twig/Autoloader.php».
Sauf que… Sauf que, d'après le terminal, il A ce droit!

Code : Tout sélectionner

ls -l vue/Twig/Autoloader.php 
-rw-r-xr-x 1 chindit http 1136 abr 19 10:30 vue/Twig/Autoloader.php
Et il a même le droit de lire/exécuter le dossier «Twig», ainsi que le dossier «vue»

Code : Tout sélectionner

drwxr-xr-x  13 chindit http  4096 abr 19 10:30 Twig

Code : Tout sélectionner

-rwxr-xr-x+ 1 chindit http 1684 abr 24 16:23 index.php
drwxr-xr-x+ 9 chindit http 4096 abr 24 17:21 vue
Je vous avoue que je n'y comprend rien.
POURQUOI cette erreur «permission denied»?

Je précise que l'erreur ne vient pas de la configuration PHP/Apache pour la bonne raison que tout fonctionnait bien avant.
Sauf que j'avais des problèmes de droits: les fichiers que je créais étaient en 400 par défaut.
Donc, pour tout le dossier «/srv/http/test», j'ai fait ceci:
  • chmod -R 755
  • chown -R chindit
  • chgrp -R http
Comme ça, je suis propriétaire, ce qui est plus simple pour le développement, création de fichiers et autres et Apache conserve tous les droits nécessaires pour lire/exécuter mes pages.

Mais apparemment, tout a sauté :(

Vous pourriez m'expliquer ce que j'ai fait de mal?
Merci d'avance

Re: [Droits d'accès] «Permission denied»

Publié : ven. 24 avr. 2015, 18:27
par benjarobin
Pour information quelque soit la configuration d'Apache cela n'a aucun impact pour tout ce qui est lecture/inclusion de fichier depuis php. C'est géré par la directive open_basedir. C'est pour cela que c'est une bonne pratique de ne mettre que les fichiers .php des pages accessibles aux utilisateur dans les dossiers accessibles par Apache, et les autres fichiers .php (lib, utilitaires...) sont en dehors.
Quelle est la sortie de :

Code : Tout sélectionner

grep open_basedir /etc/php/php.ini
Mais il y a de forte chance que ton souci ne soit pas ici, mais bien dans les droits des fichiers. Il y a un "plus" dans ta sortie de "ls" : http://serverfault.com/questions/227852 ... -from-ls-l

Re: [Droits d'accès] «Permission denied»

Publié : ven. 24 avr. 2015, 18:47
par chindit
Plus besoin de s'inquiéter pour les ACL, c'est viré partout (sudo setfacl -R -b vue/)

Code : Tout sélectionner

-rwxr--r-x 1 chindit http 1684 abr 24 16:23 index.php
drwxr--r-x 9 chindit http 4096 abr 24 18:31 vue
Et pour le résultat de la commande:

Code : Tout sélectionner

; open_basedir, if set, limits all file operations to the defined directory
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps
Sachant que je travaille dans /srv/http/test, il n'y a pas de restriction open_basedir

Pour moi, il n'y a vraiment aucune raison que ça continue à foirer :(

Re: [Droits d'accès] «Permission denied»

Publié : ven. 24 avr. 2015, 20:58
par benjarobin
Tu as au moins supprimé les droits d’exécution pour le groupe http du dossier vue... Donc il est impossible d'accéder à son contenu.
Le fichier index.php possède des droits d’exécution alors qu'il ne devrait pas

Re: [Droits d'accès] «Permission denied»

Publié : sam. 25 avr. 2015, 15:46
par chindit
benjarobin a écrit :Tu as au moins supprimé les droits d’exécution pour le groupe http du dossier vue... Donc il est impossible d'accéder à son contenu.
Le fichier index.php possède des droits d’exécution alors qu'il ne devrait pas
Ha ha! J'ai re-fait un chmod 755 sur les dossiers et un 644 sur les fichiers et… ça marche! :D
Mais, petite question: pourquoi doit-on donner les droits d'exécution pour un répertoire dans lequel on souhaite simplement lire des fichiers.
Je comprends pas trop la logique.

Re: [Droits d'accès] «Permission denied»

Publié : sam. 25 avr. 2015, 16:42
par benjarobin
:resolu:
Sinon pour rappel sur les droits d'un dossier :
- r : Permet de lister le contenu d'un répertoire.
- w : Permet de créer / supprimer un fichier d'un répertoire.
- x : Permet d'accéder au contenu d'un fichier du répertoire.

Donc les droits d’exécutions seuls sur un dossier permettent de lire le contenu des fichiers du répertoire tant que l'on connaît son chemin.

Et mettre uniquement les droits de lecture sur le dossier permet juste d'obtenir les noms des fichiers/dossiers contenus dans ce répertoire, mais tu ne pourras pas avoir des informations plus détaillées sur un fichier (sa taille, son contenu, ses autorisations...)

En résumé il est obligatoire d'avoir au moins les droits d’exécutions sur tous les dossiers parents au fichier que tu veux accéder.