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 a des 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, lorsque quelqu'un essaie d'accéder à ce lien, http://localhost/refresh-app/
j'obtiens une page d'erreur 403 FORBIDDEN et cela 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?
centos
permissions
apache-httpd
Billy Oneal
la source
la source
Réponses:
Trouvé le problème. Il s'avère, Apache veut accéder à non seulement le répertoire que je sers,
/home/billy/refresh-app/
mais aussi tous les répertoires ci - dessus que, à 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 c'est à la recherche de
.htaccess
quelque chose, ou peut-être que * nix est étrange sur la façon dont il traite les autorisations pour le répertoire transversal.la source
/
... à peu près jamais) Les systèmes avec ACL ont généralement une option transversale d'annuaire distincte. On pourrait penser, après 30 ans depuis la conception d'Unix et la grande disponibilité des systèmes ACL, que les ACL seraient la norme. : soupir: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):
Le passage à ceci a trié le problème (même si l'utilisateur du serveur Web n'a pas pu accéder directement au lien symbolique)
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û à des
openbase_dir
restrictions en PHP mais ce n'était pas ça.la source
Cette erreur peut également être provoquée si vous créez un lien vers un dossier chiffré.
la source
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.
la source
Options All
-FollowSymLinks
est déjà spécifié.Vous pouvez également vérifier si selinux est appliqué ou non. Sur RedHat / Fedora, exécutez ceci:
Si la réponse est «Enforcing», vous voudrez peut-être exécuter
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.
la source
Créer un fichier .htaccess avec cela a fait l'affaire pour moi (mettez-le dans un répertoire avant le lien symbolique).
la source
/var/www
un lien symbolique vers un autre lien symbolique intermédiaire. Si vous devez utiliser des liens symboliques, faites-en un lien symbolique DIRECTEMENT vers votre destination.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
répondre d'ici
la source
Ma solution a été de créer un dossier partagé pour tous les référentiels nommés
/home/repo
.Ensuite , un lien symbolique de ma propre maison comme:
ln -s /home/repo ~/Code
si des~/Code/www.xxxx.com/public
points à/home/repo/www.xxxx.com/public
et aussi 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.
la source
@Billey ONeil @Flion Je ne pouvais pas répondre en ligne (faible nombre de répétitions)
Je devais faire ceci :
( note: alias ll = 'ls $ LS_OPTIONS -lh')
Regardez maintenant chaque répertoire dans le lien source
Le répertoire / home / DATA est le coupable.
Corrigez-le avec ceci:
Le correctif est immédiat - pas besoin de redémarrer apache.
la source
Vous pouvez également ajuster vos paramètres SELinux et setenforce peut ne pas être sur votre chemin. Essayez donc ceci:
et pour que cela persiste entre les redémarrages
la source