J'ai une toute nouvelle installation CentOS 6, qui a un lien symbolique dans la racine du document vers mes fichiers de développement:
[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root 0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/
Mon httpd.conf a ceci:
<Directory "/">
Options All
AllowOverride None
Order allow,deny
Allow from all
</directory>
La cible du lien symbolique dispose d'autorisations qui devraient permettre à Apache de lire tout ce qu'il veut:
[root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app
J'ai également essayé de désactiver SELinux en modifiant /etc/selinux/conf
:
SELINUX=disabled
Pourtant, peu importe ce que je fais, quand quelqu'un essaie d'aller sur ce lien, http://localhost/refresh-app/
, J'obtiens une page d'erreur 403 FORBIDDEN et ceci est écrit dans le /var/log/httpd/error_log
:
Symbolic link not allowed or link target not accessible
Pourquoi Apache ne peut-il pas accéder à la cible du lien symbolique?
Trouvé le problème. Il s'avère que Apache veut accéder non seulement au répertoire que je sers, /home/billy/refresh-app/
, mais aussi tous les répertoires au-dessus, à savoir /home/billy/
, /home
, et /
. (Je ne sais pas pourquoi ... donner à quelqu'un l'accès à un sous-répertoire ne devrait pas nécessiter de donner des autorisations à tout ce qui se trouve au-dessus de ce sous-répertoire ....)
Je suppose que ça cherche .htaccess
ou quelque chose, ou peut-être * nix étant étrange sur la façon dont il traite les autorisations pour le répertoire transversal.
J'ai eu un problème similaire où j'avais la configuration suivante qui fonctionnait avec Ubuntu 10, mais a cessé de fonctionner avec Ubuntu 14 (Apache 2.4):
<Directory /var/www/vhosts/example.com/httpdocs>
Options +FollowSymLinks
</Directory>
Le passage à ceci a résolu le problème (même si l'utilisateur du serveur Web n'a pas pu accéder directement au lien symbolique)
<Directory /var/www/vhosts/example.com/httpdocs>
Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>
D'après ce que je peux dire, c'est juste le -SymLinksIfOwnerMatch
paramètre et a quelque chose à voir avec les changements dans Apache 2.4 mais je n'ai pas essayé de rechercher la cause exacte.
Je pensais aussi que cela pouvait être dû à openbase_dir
restrictions dans PHP mais ce n'était pas ça.
Cette erreur peut également être provoquée si vous créez un lien vers un dossier chiffré.
Il semble que "FollowSymLinks" soit l'option dont vous avez besoin dans httpd.conf. Il est détaillé ici . Il semble que vous ayez également besoin d'une règle dans htdocs ... mais c'est l'option dont vous avez besoin.
Options +FollowSymLinks
Créer un fichier .htaccess avec cela a fait l'affaire pour moi (mettez-le dans un répertoire avant le lien symbolique).
Vous pouvez également vérifier si selinux est appliqué ou non. Sur RedHat/Fedora, exécutez ceci:
getenforce
Si la réponse est "Enforcing", vous voudrez peut-être exécuter
setenforce 0
et réessayez l'url dans votre navigateur.
Notez que je ne dis pas que la désactivation de selinux est le meilleur moyen de résoudre ce problème, mais cela peut aider à identifier la cause.
@Billey ONeil @Flion Je n'ai pas pu répondre en ligne (faible nombre de répétitions)
Je devais faire ici:
(note: alias ll = 'ls $ LS_OPTIONS -lh')
root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/
Regardez maintenant chaque répertoire dans le lien source
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12 2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug 7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/
/ home/DATA répertoire est le coupable.
Corrigez-le avec ceci:
root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/
Le correctif est immédiat - pas besoin de redémarrer Apache.
Ma solution a été de créer un dossier partagé pour tous les référentiels nommés /home/repo
.
Puis un lien symbolique de ma propre maison comme: ln -s /home/repo ~/Code
donc ~/Code/www.xxxx.com/public
pointe vers /home/repo/www.xxxx.com/public
et également un lien vers la racine Web Apache /var/www/html
pointe vers /home/repo/www.xxxx.com/public
Je l'ai trouvé ici: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide
Avec certains acrobaties symlink + groupes d'utilisateurs, vous pouvez déployer plusieurs utilisateurs/versions.
que ce qui résout mon problème après autoriser toutes les autorisations et autoriser followymlink "Dans le cas de FollowSymLinks spécifiquement, il DOIT être à l'intérieur d'une structure de répertoire dans un fichier .conf. Du manuel actuel d'Apache
Les options FollowSymLinks et SymLinksIfOwnerMatch fonctionnent uniquement dans les sections ou les fichiers .htaccess.