Apache: accès refusé car des autorisations de recherche sont manquantes

75

Je sais que cette question est beaucoup posée, mais les solutions que j'ai vues ne m'ont pas fonctionné.

Un seul hôte virtuel est activé et j'essaie d'activer l'accès à un dossier qui ne se trouve pas sous la racine du document.

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

<Directory /home/username/Videos/Movies/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Je mets /etc/apache2/envvarscomme suit

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

Je me suis assuré que / home / nom d'utilisateur / Videos / et ses sous-dossiers appartiennent à username:public, définissez les autorisations sur 777 (après que 775 ne fonctionne pas) et assurez-vous que l'utilisateur www-dataappartient au groupe public.

Maintenant, quand je navigue sur http://localhost/moviesje reçois

[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 /etc/apache2/envvarslance Apache sous username(mon propre nom d'utilisateur), tout fonctionne correctement. Le problème est lié à la permission, mais je ne vois pas comment dans mon cas; surtout quand je mets les permissions à 777. Des idées?

La version PS Ubuntu est 14.04, Apache est 2.4.7 et je n’ai pas édité d’autres fichiers de configuration.

Yotam
la source
J'ai fait tout ce qu'ils ont suggéré là-bas, comme je l'ai écrit, et cela n'aide en rien
Yotam
Une chance que vous ayez monté /homeavec ACL activé? (il y a un signe "+" à la fin des bits d'autorisation si c'est le cas (vérifier avec ls -l))
Polosson
Non, je ne l'ai pas fait. À l'heure actuelle, j'utilise Apache sous mon utilisateur. Cela fonctionne donc, mais j'aimerais le faire sous un autre utilisateur pour des raisons de sécurité.
Yotam
J'utilise Linux pour la première fois. J'ai téléchargé la version Ubuntu 14.04 LTE. Je suis confronté au même problème. Quelqu'un peut-il aider s'il vous plaît?
Imdad

Réponses:

95

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

Peter
la source
6
En effet, et pour vérifier les autorisations de fichiers et de répertoires, le cas échéant, vous pouvez utiliser namei -m /home/youruser/public_html/yourfile.extou essayer people.apache.org/~igalic/hacks/parsepath
Junior M
2
Pour clarifier, tout répertoire que vous voulez lire avec Apache doit être lisible par l'utilisateur Apache. Il est fort probable que votre dossier de départ utilisateur ne soit pas la propriété de votre utilisateur et de votre groupe. Par conséquent, vous devez définir 755 autorisations pour /home/usernamepouvoir y accéder rapidement.
Ruuter
J'ai eu ce problème sur OSX Mac OS High Sierra et cette solution a fonctionné pour moi. Je n'ai même pas eu besoin de redémarrer Apache.
disparu
Après des heures de recherche, il s'avère que les autorisations doivent également être correctes pour les répertoires parent de DocumentRoot. Merci beaucoup . BTW cela n'a pas besoin de redémarrer Apache
Comptable À partir de
27

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

chcon -R -t httpd_sys_content_t ~/public_html/
jozxyqk
la source
1
J'étais sûr que c'était mon problème. Putain CentOS! Thx pour la commande, fonctionne parfaitement.
Balmipour
2
merci, il me suffisait de remplacer la ~/public_html/partie par le répertoire racine du contenu que j'essayais de servir.
trpt4him
chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(dans ma situation)
cssyphus
Découvert, selinux ne peut pas gérer les simples répertoires, et une seule de ces fonctionnalités était requise alors que l’autre était facultative. Merci pour le rappel concernant le correctif - après la période de re-test obligatoire avec chaque nouvelle version, et ma déception, en général, je me contenter de le pirater dans le kickstart. Maintenant pour systemd.
user2066657
17

Vous avez peut-être activé selinux. Essayer

getenforce

Si cela montre "Enforcing", essayez

setenforce 0

et essayez si cela résout votre problème.

Soprano
la source
4
Ne désactivez pas simplement SELinux comme solution. Résolvez les problèmes de SELinux en réaffectant des ports ou en définissant des booléens.
siride
1
Cette réponse aide à identifier que le problème est lié à SELinux. Mais le désactiver n'est pas recommandé.
Rajkumar R
15

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

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

Fondamentalement, le serveur Apache ne requiert pas uniquement les autorisations de lecture de tous les fichiers qu’il sert, mais également les autorisations d’exécution de tous les répertoires situés sur le chemin de votre hôte virtuel.

L'utilitaire namei peut être utilisé pour résoudre les problèmes d'autorisations en répertoriant les autorisations associées à chaque composant du chemin:

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

Dans mon cas, un répertoire dans mon chemin a l'autorisation 700, cela cause le problème. Après avoir changé en 701, le problème a été résolu.

Lu Sun
la source
1
Le lien ici est utile car il explique le problème: Un des noeuds du chemin de répertoire manque d'autorisations de recherche. Utilisez la commande "namei" pour trouver cela, puis "chmod" jusqu'à 755.
user3751385
Cela explique la vraie raison ainsi que la solution. merci
Emdadul Sawon
1

J'éprouvais ce problème lorsque j'essayais d'exécuter Apache dans un conteneur Docker sur un hôte Ubuntu 16.04 qui utilisait le noyau 4.4 au lieu de 4.10.

Une fois que j'ai exécuté cette commande sur l'hôte et que j'ai été redéployé, tout allait bien:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 
Programmeur
la source
Je suis tombé sur ce problème, mais avec l'effet étrange que je peux chmodou chownà l'intérieur du conteneur, et il supprime les erreurs Apache 403 pendant un certain temps, pour revenir plus tard. Autant que je sache, il n'y a pas de redémarrage de conteneur ou autre changement important qui pourrait en être la cause. Depuis que j’exécute effectivement la version 16.04, j’ai essayé d’installer ce fichier binaire, et mes 403 restent à l’écart pour le moment. Je vais garder un oeil sur elle, et merci!
Halfer