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?
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.
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).
Tato chyba může být také způsobena, pokud se připojujete k šifrované složce.
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.
Options +FollowSymLinks
Vytvořte soubor .htaccess s tímto udělal trik pro mě (dal to do dir před symlink).
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.
@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.
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í.
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.