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 [email protected]
    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 [email protected]
    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/
RemiX
la source
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.

Shane Madden
la source
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
Michael Hampton
la source
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.

cpt.Buggy
la source
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.

Vincent
la source
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.

Gaoithe
la source