Erreur 403 interdite sur Mac OS X Localhost

22

J'ai configuré le partage Web dans les Préférences Système sur Mac OS X 10.6 et j'ai cliqué sur le lien qu'il m'y a donné. Malheureusement, Apache m'a donné cette erreur 403:

Interdit

Vous n'êtes pas autorisé à accéder à /~myusername/index.html sur ce serveur.

Le journal d'accès affiche: 10.0.1.2 - - [30/Jun/2010:16:25:15 -0700] "GET /~myusername/ HTTP/1.1" 403 210

Le journal des erreurs s'affiche: [Wed Jun 30 16:26:09 2010] [error] [client 10.0.1.2] client denied by server configuration: /Users/myusername/Sites/

Curieusement, l'accès à http: // localhost fonctionne très bien. C'est juste avec deux des dossiers utilisateur avec lesquels j'ai des problèmes, l'autre dossier utilisateur, qui est plus récent que la mise à niveau de mon système, fonctionne bien.

J'ai déjà eu ce travail sur ma machine dans Leopard, alors j'ai tout modifié en ~/Sites755, ce qui n'a pas fait de bien. Aucune suggestion? Je suppose que j'ai fait quelque chose à ma machine qui a causé cela, car je ne peux pas imaginer qu'Apple gâche quelque chose comme ça.

J'ai créé PEAR avec ces instructions , mais je ne sais pas si cela pourrait en être la cause.

waiwai933
la source
Désolé si c'est une question stupide, mais exactement à quelle URL allez-vous? Je demande parce que l'URL "/~myusername/index.html" est étrange - elle doit être soit "~ myusername / index.html", soit elle doit être " localhost / ~ myusername / index.html ", ou quelque chose similaire. Le simple fait de commencer à partir de / puis d'ajouter ~ myusername sent drôle. En plus de (ou au lieu de) répondre à cela, vous pouvez aller dans Console.app (/Applications/Utilities/Console.app) et trouver le fichier access_log et error_log apache2. Tirez vers le haut, peut-être effacer l'affichage, puis réessayez votre URL pour voir ce que le journal des erreurs vous dit.
Michael H.
@khedron: L'URL est localhost / ~ myusername / index.html , mais l'erreur affiche la partie
/~myusername/index.html
OK, je vérifie. Que dit le journal Apache dans la console (console.app)?
Michael
@khedron: J'ai publié le journal des accès et des erreurs dans la question. Y en a-t-il un autre?
waiwai933
1
J'ai le même problème que vous, et je le fais juste: chmod 777 / Applications / XAMPP / htdocs / myusername, ça marche pour moi
Wassim Sboui

Réponses:

22

Apple a un document de support pour ce problème . La résolution du problème implique la création d'un fichier /etc/apache2/users/yourusername.conf(votre nom d' utilisateur étant le nom abrégé du compte , par exemple danielbeck- il s'agit généralement du nom de votre dossier de départ /Users) avec le contenu suivant:

<Directory "/Users/yourusername/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Ensuite, exécutez sudo chown root:wheel /etc/apache2/users/yourusername.confet redémarrez Apache.

Daniel Beck
la source
et aussi redémarrez votre apache, exécutez simplement sudo apachectl restartdans votre terminal.
15

Pour qu'Apache puisse voir le fichier, l'utilisateur sous lequel Apache s'exécute en tant que (probablement wwwou _www) doit avoir accès aux répertoires Sites de ces utilisateurs. Avoir accès en lecture / exécution au contenu de ~/Sitesne suffit pas, car il doit être autorisé à traverser /le chemin vers ~/Sites. Assurez - vous donc /, /Users, /Users/myusernameet /Users/myusername/Sitestous ont au moins la a+xpermission (Execute bits sur les répertoires permet cette classe d'utilisateurs de parcourir le répertoire, même si l' accès en lecture est pas autorisé).

ls -lde / /Users/ /Users/myusername/ /Users/myusername/Sites

Si l'un de ces répertoires n'affiche pas le dernier xensemble (celui des "autres"), utilisez quelque chose comme chmod a+x ...pour le définir pour ce répertoire.

Si l'ACL pour l'un de ces répertoires indique que l' wwwaccès à l' utilisateur a été spécifiquement refusé, utilisez les arguments appropriés chmodpour corriger les ACL.

Spiff
la source
Le bit d'exécution est défini pour tous ces répertoires, mais je ne sais pas comment vérifier si un utilisateur spécifique s'est vu refuser l'accès.
waiwai933 du
C'est à cela que sert le "e" dans "ls -lde". Il répertorie les ACL (le cas échéant) pour chacun des fichiers.
Spiff
2
Changer les autorisations sur / Users / myusername en chmod 755 a résolu le problème pour moi.
Mark
Cette commande ne donne-t-elle pas à l'utilisateur _www la permission d'accéder à votre répertoire racine, ainsi qu'au répertoire / Users, etc.? Cela ne peut pas être vrai, n'est-ce pas? Tous ces trous de sécurité pour partager une page dans un dossier? Ce comportement est-il documenté quelque part?
Tom Lianza
En réponse à mon propre commentaire, j'ai trouvé cette réponse ( serverfault.com/a/293063/14970 ) qui fournit un lien vers une documentation fiable sur ce comportement: wiki.apache.org/httpd/13PermissionDenied
Tom Lianza
5

Pour référence, je viens de traiter de cela, et aucune des réponses ici n'a fonctionné dans mon cas spécifique. Je configurais des hôtes virtuels, mais plus important encore, j'avais besoin que mes fichiers htaccess fonctionnent réellement.

J'ai changé sur "AllowOverride None" en "AllowOverride All" dans mon fichier /etc/apache2/users/USERNAME.conf, et tous mes sites ont commencé à être interdits.

Je l'ai changé en arrière, puis je l'ai changé uniquement pour un site dans mon fichier httpd-vhosts.conf, et seul ce site était interdit.

Après avoir consulté les journaux et constaté que le problème venait de la réécriture d'URL et du manque de FollowSymLinks, je suis retourné au fichier USERNAME.conf. Je passe de "AllowOverride None" à "AllowOverride All" et j'ajoute "Options + FollowSymLinks" sur la ligne suivante.

Les choses ont commencé à fonctionner. Je venais d'utiliser xampp sur Windows et beaucoup de ces paramètres étaient déjà définis sur l'ensemble du serveur pour les nuls comme moi.

Jake
la source
1
merci beaucoup, a passé pas mal de temps à comprendre ce qui se passe, n'a pas eu à tinter avec Apache / PHP depuis un certain temps maintenant
Misha Reyzlin
1
Ouais, Options +FollowSymLinksfonctionnait comme un charme.
agarie
2

J'ai eu le même problème: mon (ancien) compte n'était pas accessible, mais un autre compte d'utilisateur créé après la mise à niveau vers Lion fonctionnait très bien.

Après vous être assuré que votre /etc/apache2/users/USERNAME.conf ressemble à ceci:

<Directory "/Users/USERNAME/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

faire une racine chown sudo: wheel /etc/apache2/users/USERNAME.conf

il semble que ce paramètre d'autorisation ne soit pas défini lors de la mise à niveau du système d'exploitation, et l'utilisateur Apache ne peut pas lire le fichier de configuration et génère une erreur.

Au moins, cela l'a résolu pour moi.

Arve Nygård
la source
1
Et peut-être courir sudo apachectl restartaprès ça.
Arjan
Cela fonctionne pour moi en exécutant 10.7.5. Le chemin du répertoire ne pointait pas vers ma racine Web locale, une fois que j'ai mis à jour et redémarré apache, tout fonctionnait. Ce qui est étrange, c'est que le chemin est incorrect depuis plus d'un an et fonctionne tout le temps. Je viens de recevoir l'erreur aujourd'hui à l'improviste.
supajb
2

mise à jour pour Lion en 10/2011 je devais aussi ajouter

UserDir activé donc mon /etc/apache2/extra/httpd-userdir.conf est comme ceci:

UserDir enabled 
UserDir Sites

#
# Users might not be in /Users/*/Sites, so use user-specific config files.
#
Include /private/etc/apache2/users/*.conf

<IfModule bonjour_module>
   RegisterUserSite customized-users
</IfModule>
nunya
la source
1

Poursuite de la conversation à partir des commentaires de la question initiale - Consultez votre /etc/apache2/httpd.confdossier. Sur ma machine, j'ai ceci:

# User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf

Je soupçonne que le vôtre est commenté. Je me souviens vaguement d'avoir changé cela à la main lors du passage de 10,5 à 10,6 et la valeur par défaut a changé.

C'est probablement évident, mais vous devrez utiliser sudopour modifier le fichier car il appartiendra à root.

Michael H.
la source
1
Non, le mien ressemble exactement au vôtre.
waiwai933
1

Mon cas est XAMPP + Mac OS X 10.7 + Répertoire dans le dossier Dropbox (référence croisée à une autre question dans Stack Overflow)

403 Access Forbidden est signalé par Apache, par conséquent, j'ai suivi le commentaire ci-dessus pour changer d'utilisateur dans le /XAMPP/xamppfiles/etc/httpd.conf, de User nobodyà User my_user_name. Redémarrez Apache et cela fonctionne bien.

Raptor
la source
0

Vous n'avez probablement pas activé les index . Si vous ne le faites pas, vous devrez soit créer un fichier d'index ( index.htmlou index.php), soit spécifier le fichier explicitement, c'est-à-dire http://localhost/~me/mypage.html.

Josh K
la source
Désolé, juste pour vérifier, je devrais visiter localhost / ~ myusername / index.html et avoir un fichier appelé index.html dans mon dossier Sites, non? Si oui, alors la 403 est toujours en cours.
waiwai933
Vous ne devriez pas du tout visiter, ~myusernameje crois. http://localhost/devrait pointer vers /Users/youruser/Sites/.
Josh K