web-dev-qa-db-fra.com

"Lien symbolique non autorisé ou cible de lien non accessible" / Apache sur CentOS 6

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?

32
Billy ONeal

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.

45
Billy ONeal

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.

12
icc97

Cette erreur peut également être provoquée si vous créez un lien vers un dossier chiffré.

7
cherrysoft

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.

4
RobotHumans
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).

2
Codebeat

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.

2
botkop

@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.

1
ausinch

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.

0
alo Malbarez

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.

réponse d'ici

0
yoni333