CentOS 6'da “Sembolik bağlantıya izin verilmiyor veya bağlantı hedefi erişilebilir değil” / Apache


30

Belge kökünde geliştirme dosyalarıma bir bağlantı bulunan yepyeni bir CentOS 6 kurulumum var:

[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/

Httpd.conf'umda şunlar var:

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

Sembolik bağlantının hedefi, apache'nin istediği her şeyi okumasına izin vermesi gereken izinlere sahiptir:

 [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

Ayrıca SELinux'u değiştirerek devre dışı bırakmayı da denedim /etc/selinux/conf:

SELINUX=disabled

Yine de ne yaparsam yapayım, birisi bu bağlantıya http://localhost/refresh-app/girmeye çalıştığında , 403 FORBIDDEN hata sayfasıyla karşılaşıyorum ve bu /var/log/httpd/error_log:

Symbolic link not allowed or link target not accessible

Apache neden bağlantının hedefine erişemiyor?


Hangi kullanıcı apache olarak çalışıyor? Bu kaynağı gerçekten o kullanıcı olarak okuyabilir misiniz?
23'te

Ayrıca, selinux'u izin verilen modda çalıştırmaktan ve daha sonra denetim günlüğünü ayrıştırmak için mühürleyiciyi kullanmaktan daha iyidir - bu, SELinux'un neden / nasıl reddettiğini görmenizi sağlar ve çoğu zaman size bir çözüm sunar.
23'te

@koşul: Bunun nasıl kontrol edileceği hakkında hiçbir fikrim yok.
Billy ONeal 19:11

@deriyo: 1. Bu bir üretim kutusu değil; SELinux'un kapalı olması umrumda değil. 2. Her halükarda, sadece bu noktada sorun giderme yaşıyorum - temel nedeni çözdüğümde muhtemelen geri yükleyeceğim.
Billy ONeal 19:11

Endişelenmeyin, bu genel bir gözetimdir, ilk yaptığımda günlerce sıkışıp kaldım, serverfault.com/questions/313485/… :: Bu hatalardan biri. : D
whoami

Yanıtlar:


44

Sorunu buldum. Meğerse Apache sadece dizine erişimi ben ikram ediyorum, istediği /home/billy/refresh-app/, aynı zamanda yukarıda her dizin, yani /home/billy/, /homeve/ . (Neden birisinin bir alt dizine erişmesine izin vermek, o alt dizinin üstündeki her şeye izin vermek zorunda olmamalıdır…)

Sanırım aradığını .htaccessya da bir şey olduğunu ya da belki de * nix'in dizin geçişi için izinleri nasıl kullandığı konusunda garip davrandığını tahmin ediyorum .


15
Garip değil. İşte böyle çalışır. Erişmeye çalıştığınız yolun tamamı için + x değerine sahip olmalısınız.
bahamat

4
@ bahamat: Bu hiç mantıklı değil. Neden hiç kimse yürütülmeyen dosyalar için ayrıcalıklara ihtiyaç duyuyor? (Bu tamamen iskonto edilmez ki bunun için /... haklarını vermek zorunda kalmamalıydık. ) ACL'li sistemler genellikle ayrı bir dizin çaprazlama seçeneğine sahiptir. Unix'in tasarlanmasından bu yana 30 yıl sonra ve ACL sistemlerinde geniş bir kullanılabilirliğin, ACL'lerin standart olacağını düşünürdünüz. : iç:
Billy ONeal

11
Dizinlerdeki + x demek istediğine inanıyorum. Kullanıcıya geçmeyi ve w / o + x dizinine cd- çekmeyi deneyin. + X bellekten dizine erişmenize izin vermiyor ancak + r dosyaları listelemenize izin veriyor ve + w belirtilen dizindeki dosyaları değiştirmenize izin veriyor

1
@BillyONeal: "tüm yol" ifadesi dizinleri ifade eder.
bahamat

5
Bu unix'te doğru davranış. Alt dizinlerde alt dizinlere değiştirmeye çalıştığınız üst dizinlerde ayrıcalıklara (+ x veya g) kullanın.
slm

11

Ubuntu 10 ile çalışan, ancak Ubuntu 14 (Apache 2.4) ile çalışmayı bırakan aşağıdaki yapılandırmaya sahip olduğumda da benzer bir problem yaşadım:

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

Buna geçmek sorunu sıraladı (web sunucusu kullanıcısı doğrudan bağlantı bağlantısına erişemiyor olsa da)

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

Söyleyebileceğim şey onun sadece -SymLinksIfOwnerMatch ayarını Apache 2.4'teki değişikliklerle bir ilgim var ancak kesin sebebi araştırmayı denemedim.

Ayrıca openbase_dirPHP'deki kısıtlamalara bağlı olabileceğini düşündüm ama öyle değildi.


6

Bu hata ayrıca şifrelenmiş bir klasöre bağlanıyorsanız da oluşabilir.


4

Görünüşe göre "FollowSymLinks" httpd.conf'ta ihtiyacınız olan seçenektir. Bu ayrıntılı olarak burada . Görünüşe göre htdocs da bir kurala ihtiyacınız olabilir ... ama ihtiyacınız olan seçenek.


3
Bkz Options All- FollowSymLinkszaten belirlenmiş.
Billy ONeal 19:11

2

Selinux'un zorunlu olup olmadığını kontrol etmek de isteyebilirsiniz. RedHat / Fedora'da şunu yürütün:

getenforce

Yanıt 'Zorlayıcı' ise, yürütmek isteyebilirsiniz.

setenforce 0

ve URL’yi tarayıcınızda tekrar deneyin.

Selinux'u devre dışı bırakmanın bu sorunu çözmenin en iyi yolu olduğunu söylemediğime dikkat edin, ancak sebebi belirlemeye yardımcı olabilir.


bu, sembolik bağlantı problemini düzeltti, ancak herhangi bir olumsuz etkisi var mı?
digz6666

2
Options +FollowSymLinks

Bununla bir .htaccess dosyası oluşturun benim için hile yaptı (sembolik bağlantıdan önce bir dizine koyun).


Benim durumumda, /var/wwwbaşka bir ara sembolik bağa sembolik bir bağ yapıyordum . Sembolik linkler kullanmanız gerekiyorsa, onu DIRECTLY hedefinize sembolik bir link haline getirin.
Sridhar Sarnobat

0

Bu, sorunumu çözdükten sonra tüm izinlere izin veren ve aşağıdaki izin verilen bağlantıya izin veriyor "FollowSymLinks özelinde, bir .conf dosyası içindeyken bir Dizin yapısı içinde OLMALIDIR.

FollowSymLinks ve SymLinksIfOwnerMatch Seçenekleri yalnızca bölümlerde veya .htaccess dosyalarında çalışır.

buradan cevap


0

Benim çözümüm, adlandırılmış tüm depolar için ortak bir klasör oluşturmaktı /home/repo.

Sonra kendi evden sembolik köprüyü gibi: ln -s /home/repo ~/Code böylece ~/Code/www.xxxx.com/public hiç puan /home/repo/www.xxxx.com/public

ve ayrıca apache web kök içine bir bağlantı /var/www/html noktalarına /home/repo/www.xxxx.com/public

Burada bulundu: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

Bazı symlink + kullanıcı grupları bilgisiyle, birden fazla kullanıcıya / sürüme sahip olabilirsiniz.


0

@Billey ONeil @Flion Doğrultusunda cevap veremedim (düşük rep sayısı)
Burada yapmak zorunda kaldım:
( not: 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/

Şimdi kaynak linkindeki her dizine bakın

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 dizini suçlu.
Şununla düzelt:

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/

Düzeltme hemen - apache'yi yeniden başlatmaya gerek yok.


-1

SELinux ayarlarınızı da değiştirebilirsiniz; ayar ayarları yolunuzda olmayabilir. Öyleyse şunu dene:

sudo /usr/sbin/setenforce 0

ve bunu yeniden başlatmalar arasında kalıcı kılmak

sudo vi /etc/sysconfig/selinux
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.