J'ai du mal à configurer Apache sur Ubuntu. J'ai suivi ce guide .
# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built: Feb 22 2011 18:33:02
Mon répertoire public, / var / www, peut servir et exécuter avec succès les pages PHP qui y sont placées. Cependant, je souhaite créer un lien symbolique dans / var / www qui pointe vers un répertoire de mon dossier personnel et y sert des pages.
[root /var/www]# ll
total 36
drwxr-xr-x 3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about
Lorsque j'essaye d'accéder à / à propos du navigateur, j'obtiens
Forbidden
You don't have permission to access /about on this server.
Pour autant que je sache, j'ai accordé des privilèges suffisants aux fichiers que je souhaite servir:
[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume
Je connais l'option FollowSymLinks, et je pense qu'elle est définie dans mon fichier / etc / apache2 / sites-enabled / 000-default:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Une idée de ce que je pourrais manquer?
chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/about
qui accorde ces autorisations uniquement à l'application apache (_www), ce qui est un peu plus sûr que "other".L'erreur 403 peut également être causée par un système de fichiers crypté, par exemple un lien symbolique vers un dossier de départ crypté .
Si votre lien symbolique pointe vers le dossier chiffré, l'utilisateur apache (par exemple www-data) ne peut pas accéder au contenu, même si les autorisations apache et fichier / dossier sont correctement définies. L'accès de l'utilisateur www-data peut être testé avec un tel appel:
Il existe des solutions de contournement / solutions à cela, par exemple en ajoutant l'utilisateur www-data à votre groupe privé (expose les données cryptées à l'utilisateur Web) ou en créant un dossier rsynced non crypté (probablement plutôt sécurisé). Pour ma part, je vais probablement opter pour une solution rsync pendant le développement.
/ubuntu/633625/public-folder-in-an-encrypted-home-directory
Un outil pratique pour mes besoins est lsyncd . Cela me permet de travailler directement dans mon dossier de départ chiffré et de voir les modifications presque instantanément dans la page Web Apache. La synchronisation est déclenchée par des changements dans le système de fichiers, appelant un rsync. Comme je ne travaille que sur des pages Web et des scripts plutôt petits, la synchronisation est très rapide. J'ai décidé d'utiliser un court délai de 1 seconde avant le démarrage de rsync, même s'il est possible de définir un délai de 0 seconde .
Installation de lsyncd (dans Ubuntu):
Démarrage du service d'arrière-plan:
la source
sudo -u www-data ...
un excellent moyen de vérifier s'il y a un problème d'autorisations! Notez que l'utilisateur peut être www-data, apache ou autre chose selon votre distribution.J'avais un problème similaire que je ne pouvais pas résoudre depuis longtemps sur mon nouveau serveur. En plus de la réponse de palacsint, une bonne question à se poser est: utilisez-vous Apache 2.4? Dans Apache 2.4, il existe un mécanisme différent pour définir les autorisations qui ne fonctionnent pas lorsque vous utilisez la configuration ci-dessus, j'ai donc utilisé la solution expliquée dans cet article de blog .
Fondamentalement, ce que je devais faire était de convertir mon fichier de configuration à partir de:
à:
Notez comment les lignes Order et allow ont été remplacées par Exiger tout accordé
la source
access_compat
module. Si ce module est activé, il est peu probable que la première partie fonctionne comme prévu. Si ce n'est pas là, essayer de démarrer Apache2 devrait échouer avec des erreurs./etc/httpd/conf/httpd.conf
n'existe pas sur mon système, et le répertoire/etc/httpd/
n'existe pas non plus./etc/apache2/apache2.conf
existe pour moi.En ce qui concerne cette question, je viens de comprendre pourquoi mon hôte virtuel me donnait ce 403.
J'avais testé TOUTES les possibilités sur cette question et d'autres sans succès. Cela me rend presque fou.
Je suis en train de configurer un serveur avec un déploiement de versions similaire à Capistrano via des liens symboliques et lorsque j'ai essayé d'accéder au dossier DocRoot (qui est maintenant un lien symbolique vers le dossier de version actuel), il m'a donné le 403.
Mon vhost est:
et mon fichier principal httpd.conf était (installation par défaut d'Apache 2.4):
Il s'avère que la définition principale des options prenait le pas sur mon champ vhosts (pour moi, c'est contre-intuitif). Alors je l'ai changé en:
et Eureka! (notez le signe plus avant FollowSymLinks dans le fichier MAIN httpd.conf. J'espère que cela aidera une autre âme perdue.
la source
Il y a une autre façon dont les liens symboliques peuvent vous échouer, comme je l'ai découvert dans ma situation. Si vous avez un système SELinux comme serveur et que les liens symboliques pointent vers un dossier monté sur NFS (d'autres systèmes de fichiers peuvent produire des symptômes similaires),
httpd
peuvent voir les mauvais contextes et refuser de servir le contenu des dossiers cibles.Dans mon cas, le contexte SELinux de
/var/www/html
(que vous pouvez obtenir avecls -Z
) estunconfined_u:object_r:httpd_sys_content_t:s0
. Les liens symboliques dans/var/www/html
auront le même contexte, mais le contexte de leur cible, étant un dossier monté sur NFS, le sontsystem_u:object_r:nfs_t:s0
.La solution est d'ajouter
fscontext=unconfined_u:object_r:httpd_sys_content_t:s0
auxmount
options (par exemple# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>
).rootcontext
n'est pas pertinent etdefcontext
est rejeté par NFS. Je n'ai pas essayé toutcontext
seul.la source
Commencez par désactiver selinux (vim / etc / selinux / config)
vim /etc/httpd/conf/httpd.conf éditez les lignes suivantes pour les liens symboliques et l'indexation des répertoires:
Si fichier .htaccess, AllowOverride all
la source
/etc/httpd/
dossier sur mon système?Pour tous ceux qui rencontrent des problèmes après la mise à niveau vers 14.04 /ubuntu/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04 en tant que root modifié avant la mise à niveau = / var / www après la mise à niveau = / var / www / html
la source
En plus de changer les permissions comme les autres réponses l'ont indiqué, j'ai dû redémarrer apache pour qu'il prenne effet:
la source
Encore un piège subtil, au cas où vous auriez besoin
AllowOverride All
:Quelque part au fond de l'arbre fs, un vieux
.htaccess
ayantOptions Indexes
au lieu de
Options +Indexes
était tout ce qu'il fallait pour désactiver nonchalamment l'
FollowSymLinks
ensemble dans la configuration du serveur, et provoquer un mystérieux 403 ici.la source