92 votes

Apache: accès refusé car les permissions de recherche sont manquantes

Je sais que cette question est posée souvent, mais les solutions que j'ai vues ne fonctionnaient pas pour moi.

J'ai seulement un hôte virtuel activé, et j'essaie d'autoriser l'accès à un dossier qui n'est pas situé sous la racine des documents

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted

J'ai configuré /etc/apache2/envvars comme suit

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

J'ai vérifié que /home/username/Videos/ et ses sous-dossiers appartiennent à username:public, j'ai défini les autorisations à 777 (après que 775 n'a pas fonctionné) et je me suis assuré que l'utilisateur www-data appartient au groupe public.

Maintenant, lorsque je navigue à http://localhost/movies j'obtiens

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

Mais lorsque je configure /etc/apache2/envvars pour exécuter Apache sous username (mon propre nom d'utilisateur), tout fonctionne bien. Le problème est lié aux permissions, mais je ne vois pas où est le problème dans mon cas; surtout quand j'ai défini les permissions à 777. Des idées?

P.S. La version d'Ubuntu est 14.04, Apache est 2.4.7 et je n'ai pas modifié d'autres fichiers de configuration.

117voto

Peter Points 1348

Faites un chmod +x sur votre répertoire utilisateur, et redémarrez apache. Les permissions 755 devraient fonctionner. J'ai eu des problèmes avec 644.

37voto

jozxyqk Points 993

Si dans le cas de selinux est le problème, plutôt que de simplement le désactiver, cette page et cette page donnent la commande pour accorder l'accès :

chcon -R -t httpd_sys_content_t ~/public_html/

23voto

Lu Sun Points 331

J'ai rencontré le même problème, après des heures d'essais, j'ai trouvé une solution qui résout exactement le problème :

https://wiki.apache.org/httpd/13PermissionDenied

Fondamentalement, le serveur Apache ne requiert pas seulement des autorisations de lecture de tous les fichiers qu'il sert, mais aussi l'autorisation d'exécution de tous les répertoires dans le chemin de votre hôte virtuel.

L'utilitaire namei peut être utilisé pour aider à trouver les problèmes de permissions en listant les autorisations le long de chaque composant du chemin :

namei --modes /usr/local/apache2/htdocs/foo/bar.html

Dans mon cas, un répertoire dans mon chemin a la permission 700, ce qui pose problème. Après l'avoir changé en 701, le problème a été résolu.

18voto

Soprano Points 205

Vous pourriez avoir selinux activé. Essayez

getenforce

Si cela affiche "Enforcing", essayez

setenforce 0

et vérifiez si cela résout votre problème.

2voto

tinlyx Points 2767

Au lieu de donner accès aux répertoires personnels ~ et ~/public_html (par exemple en utilisant chmod 755 ...) à tous les utilisateurs, une alternative est d'ajouter l'utilisateur apache2 (généralement www-data pour Ubuntu) au groupe personnel de l'utilisateur actuel (le groupe portant le même nom que le nom d'utilisateur) :

sudo adduser www-data $(whoami)
sudo service apache2 reload

(en supposant que ~/public_html appartient au groupe d'utilisateurs par défaut.)

Cela est important lorsqu'il y a plusieurs utilisateurs et qu'il est crucial que les utilisateurs ne puissent pas accéder aux dossiers personnels des autres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X