it-swarm-eu.dev

"Symbolický odkaz není povolen nebo cíl odkazu není přístupný" / Apache na CentOS 6

Mám zbrusu novou instalaci CentOS 6, která má v kořenovém adresáři dokumentu 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 Apache umožnit číst cokoli, co 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

Také jsem se pokusil deaktivovat SELinux změnou /etc/selinux/conf:

SELINUX=disabled

Přesto 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 403 ZAKÁZANOU chybovou stránku, která je zapsána na /var/log/httpd/error_log:

Symbolic link not allowed or link target not accessible

Proč nemůže Apache získat přístup k cíli symbolu?

32
Billy ONeal

Nalezen problém. Ukázalo se, že Apache chce přístup nejen k adresáři, který obsluhuji, /home/billy/refresh-app/, ale také nad každým adresářem, jmenovitě /home/billy/, /home, a /. (Nemám ponětí, proč ... udělení přístupu někomu do podadresáře by nemělo vyžadovat udělení povolení pryč všem nad tímto podadresářem ....)

Myslím, že to hledá .htaccess nebo něco, nebo snad * nix je divné, jak zachází s oprávněními pro průřez adresáře.

45
Billy ONeal

Měl jsem podobný problém, když jsem měl následující konfiguraci, která pracovala s Ubuntu 10, ale přestal jsem pracovat s Ubuntu 14 (Apache 2.4):

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>

Přechod na tento problém vyřešil (přestože uživatel webového serveru nebyl schopen přímo přistupovat k symbolickému odkazu)

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>

Z toho, co mohu říct, je to jen nastavení -SymLinksIfOwnerMatch A má něco společného se změnami v Apache 2.4, ale nezkoušel jsem zkoumat přesnou příčinu.

Také jsem si myslel, že to může být až openbase_dir Omezení v PHP, ale nebylo to tak).

12
icc97

Tato chyba může být také způsobena, pokud se připojujete k šifrované složce.

7
cherrysoft

Zobrazí se „FollowSymLinks“ je možnost, kterou potřebujete v httpd.conf. Je to podrobně zde . Vypadá to, že možná budete potřebovat pravidlo i v htdocs ... ale je to možnost, kterou potřebujete.

4
RobotHumans
Options +FollowSymLinks

Vytvořte soubor .htaccess s tímto udělal trik pro mě (dal to do dir před symlink).

2
Codebeat

Můžete také zkontrolovat, zda je selinux vynucován nebo ne. Na RedHat/Fedora proveďte toto:

getenforce

Pokud je odpověď „Vynutit“, možná budete chtít provést

setenforce 0

a zkuste adresu URL znovu v prohlížeči.

Všimněte si, že neříkám, že deaktivace selinuxu je nejlepším způsobem, jak tento problém vyřešit, ale může pomoci identifikovat příčinu.

2
botkop

@Billey ONeil @Flion Nemohl jsem odpovědět v řadě (nízký počet opakování)
Tady jsem musel udělat:
(Poznámka: alias ll = 'ls $ LS_OPTIONS -lh')

[email protected]:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/

Nyní se podívejte na každý adresář ve zdrojovém odkazu

[email protected]:/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/
[email protected]:/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/
[email protected]:/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/
[email protected]:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug  7 18:22 /home/DATA/Documents/
[email protected]:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
[email protected]:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/

/ home/DATA adresář je viník.
Opravte to takto:

[email protected]:/var/www/html# chmod +x /home/DATA/
[email protected]:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/

Oprava je okamžitá - není třeba restartovat Apache.

1
ausinch

Mým řešením bylo vytvořit sdílenou složku pro všechna úložiště s názvem /home/repo.

Pak symlink z mého domova jako: ln -s /home/repo ~/Code tak ~/Code/www.xxxx.com/public ukazovat na /home/repo/www.xxxx.com/public

a také odkaz do webového kořenového adresáře Apache /var/www/html ukazovat na /home/repo/www.xxxx.com/public

Nalezené zde: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

S nějakou akrobací uživatelských skupin symlink + můžete mít nasazeno více uživatelů/verzí.

0
alo Malbarez

to, co vyřeší můj problém po povolení všech povolení a povolení followsymlink "V případě FollowSymLinks konkrétně to MUSÍ být uvnitř adresářové struktury, když je v souboru .conf. Z aktuální příručky Apache

Možnosti FollowSymLinks a SymLinksIfOwnerMatch fungují pouze v částech nebo souborech .htaccess.

odpověď odsud

0
yoni333