Apache «Client refusé par la configuration du serveur», malgré l'autorisation d'accès à un répertoire (configuration vhost)


38

sous Apache sous Ubuntu, j'ai configuré un vhost, mais dans le navigateur, l'erreur «403 Accès interdit» est générée. le journal indique " Client refusé par la configuration du serveur: / home / remix / ".

À la recherche de la solution en ligne, j’ai trouvé de nombreux articles sur l’accès au répertoire (Autoriser de tout, etc.), mais pour autant que je sache, j’avais déjà fait cela. Dans httpd-vhosts.conf il y a le code suivant:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/home/remix/"
    ServerName testproject
    ServerAlias testproject
    <Directory "/home/remix/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

J'ai aussi ajouté

127.0.0.1    testproject

dans le fichier / etc / hosts.

De plus, le dossier / home / remix / contient un fichier index.html et les hôtes virtuels sont activés dans httpd.conf.

Y a-t-il quelque chose que je ne vois pas?

Edit: Ceci est l'entrée Apache error_log:

[Sat Aug 18 09:15:32.666938 2012] [authz_core:error] [pid 6587] 
[client 127.0.0.1:38873] AH01630: client denied by server configuration: /home/remix/

Que contient le journal des erreurs d'Apache?
Shane Madden

Ah, je pensais avoir oublié quelque chose ... Je l'ai ajouté à l'article d'origine.
RemiX

Quelle version d'Apache utilisez-vous?
Shane Madden

Apache / 2.4.2 (Unix)
RemiX

Réponses:


65

Changez votre configuration d'autorisation:

<Directory /home/remix/>
    #...
    Order allow,deny
    Allow from all
</Directory>

... à la version Apache 2.4 de la même chose.

<Directory /home/remix/>
    #...
    Require all granted
</Directory>

Consultez le document de présentation de la mise à niveau pour obtenir des informations sur les autres modifications à apporter. Notez que la plupart des exemples de configuration et de l'aide que vous trouvez sur Google (ainsi que sur ce site) font référence à 2.2.


2
Si j'en avais le temps, je signalerais un bogue à ce sujet, car httpd -t indique qu'il n'y a pas de problème d'utilisation de l'ancienne syntaxe, pas plus que httpd -S. Dans mon esprit, l’intérêt d’un vérificateur de configuration est de signaler les problèmes! ... Si vous avez un répertoire que vous référencez sans cela, cela ne fonctionnera pas - aussi simple que cela. ... Bravo à la réponse.
Richard T

4

Vérifiez les autorisations sur le répertoire. Je parierais qu'il est prévu de refuser l'accès à quiconque sauf vous-même, par exemple:

$ ls -ld /home/remix
drwx------ 92 remix remix 4096 Aug 17 22:59 /home/remix

Si vous voyez drwx------exactement, alors c'est le cas. Corrigez-le en exécutant:

chmod a+x /home/remix

Je vois: drwxrwxr-x 2 remix remix 4096 16 août 09:36 / home / remix. J'ai essayé la commande quand même, sans effet.
RemiX

Ahh, je ne peux pas tous les gagner.
Michael Hampton

3

Assurez-vous que l'utilisateur qui exécute le httpdservice a accès à ces répertoires.


Je ne sais pas qui est l'utilisateur pour httpd ni comment vérifier, mais tout le monde peut lire (utilisateur / groupe / autre).
RemiX

Vérifiez httpd.conf pour Userparam.
cpt.Buggy

1
Ok, il est écrit «utilisateur n °» et «groupe nog». J'ai essayé de le changer en "User remix" (qui est le propriétaire du dossier), mais même cela ne va pas aider.
RemiX

1

"client refusé par la configuration du serveur" signifie que le serveur Linux lui-même interdit l'accès au fichier, pas Apache.

Si la fourniture d'un accès par le biais de modifications des autorisations / de la propriété / du groupe ne résout pas le problème, la cause de la route peut être SELinux qui interdit l'accès à tout dossier ne disposant pas du contexte SE Linux approprié, comme expliqué dans la section "Déplacement d'un Apache DocumentRoot sous Selinux" .

  • Si désactiver temporairement SELinux en setenforce 0rendant le fichier accessible
  • Considérant que réactiver SELinux en faisant setenforce 0rend à nouveau le fichier inaccessible

Ensuite, SELinux interdit l'accès, quelles que soient les autorisations de fichier.


0

Un autre problème simple (mais difficile à comprendre) qui pourrait causer ce problème aux utilisateurs est que les répertoires des utilisateurs ne se trouvent pas dans / home / *. Mais ailleurs, par exemple / nethome / *

Le userdir.conf fourni contient quelque chose comme ceci: (mais avec Userdir: désactivé)

$ cat /etc/httpd/conf.d/userdir.conf 
<IfModule mod_userdir.c>
    UserDir enabled
    UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

La spécification Directory suppose ~ user == / home / user. Il suffit de modifier ou d’ajouter une spécification d’annuaire pour savoir où se trouvent réellement les répertoires personnels des utilisateurs.

Jolie d'évidence mais m'a pris un certain temps à comprendre !! :-P DUH!

Par exemple, ~ utilisateur == / nethome / user

<Directory "/nethome/*/public_html">
    AllowOverride All
    Options MultiViews Indexes Includes FollowSymLinks
    Require all granted
</Directory>

Voir aussi les autorisations plus ouvertes sur ce répertoire en général.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.