Mám zcela novou instalaci CentOS 6, která má v kořenovém adresáři dokumentu symbolický odkaz na mé vývojové soubory:
[[email protected] 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/
Můj httpd.conf má toto:
<Directory "/">
Options All
AllowOverride None
Order allow,deny
Allow from all
</directory>
Cíl symbolického odkazu má oprávnění, která by měla umožnit Apache číst cokoli chce:
[[email protected] 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
Zkoušel jsem také deaktivovat SELinux změnou /etc/selinux/conf
:
SELINUX=disabled
Ale bez ohledu na to, co dělám, když se někdo pokusí přejít na tento odkaz, http://localhost/refresh-app/
, dostávám chybovou stránku 403 FORBIDDEN a je to zapsáno v /var/log/httpd/error_log
:
Symbolic link not allowed or link target not accessible
Proč Apache nemůže získat přístup k cíli symbolického odkazu?
Přijatá odpověď:
Nalezen problém. Ukázalo se, že Apache chce přístup nejen k adresáři, který obsluhuji, /home/billy/refresh-app/
, ale také každý adresář nad tím, jmenovitě /home/billy/
, /home
a /
. (Nemám ponětí, proč... dát někomu přístup do podadresáře by nemělo vyžadovat udělení oprávnění ke všemu nad tímto podadresářem....)
Hádal bych, že to hledá .htaccess
nebo tak něco, nebo je možná *nix divné, jak zachází s oprávněními pro transverzální adresář.