Apache: arama izinleri eksik olduğundan erişim reddedildi


75

Bu sorunun çok sorulduğunu biliyorum ama gördüğüm çözümler benim için işe yaramadı.

Yalnızca bir sanal ana makinem var ve belge kökünün altında olmayan bir klasöre erişimi etkinleştirmeye çalışıyorum

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

<Directory /home/username/Videos/Movies/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

/etc/apache2/envvarsAşağıdaki gibi ayarladım

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

/ Home / username / Videos / ve alt klasörlerinin sahip olduklarından emin oldum username:public, izinleri 777'ye (775'in ardından çalışmadı) ayarladım ve kullanıcının www-datagruba ait olduğundan emin oldum public.

Şimdi, göz http://localhost/moviesattığımda

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

Ancak /etc/apache2/envvarsApache'yi username(kendi kullanıcı adım) altında çalıştırmaya başladığımda her şey iyi çalışıyor. Sorun izinle ilgili, ancak benim durumumda nasıl olduğunu anlamıyorum; özellikle izinleri ayarladığımda 777. Herhangi bir fikir?

PS Ubuntu sürümü 14.04, Apache 2.4.7 ve diğer yapılandırma dosyalarını düzenlemedim.



Orada önerdikleri her şeyi yaptım, yazdığım gibi yaptım ve işe yaramadı
Yotam

/homeACL etkinken monte etme şansınız var mı? (eğer öyleyse, izin bitlerinin sonunda bir "+" işareti vardır (check-in ls -l))
Polosson

Hayır yapmadım. Şu anda benim kullanıcı altında Apache kullanıyorum, bu yüzden çalışıyor, ancak güvenlik nedeniyle başka bir kullanıcı altında çalıştırmak istiyorum.
Yotam

Linux'u ilk defa kullanıyorum. Ubuntu 14.04 LTE sürümünü indirdim. Aynı sorunla karşı karşıyayım. Birisi yardım edebilir mi lütfen?
Imdad

Yanıtlar:


95

Bir Do chmod +xkullanıcı dir üzerinde ve apache yeniden başlatın. 755 izin işe yaramalı . 644 ile ilgili sorunlar yaşadım .


6
Nitekim, dosya ve dizin izinlerini iki kez kontrol etmek için, mümkünse, people.apache.org/~igalic/hacks/parsepathnamei -m /home/youruser/public_html/yourfile.ext
Junior M

2
Netleştirmek için Apache'nin okumasını istediğiniz herhangi bir dizinin Apache kullanıcısı için okunabilir olması gerekir. Kullanıcı ana klasörünüz büyük olasılıkla size ait kullanıcı ve gruplara ait değildir, bunun için hızlı bir /home/usernameşekilde erişmek için 755 izin ayarlamak zorundasınız .
ruuter

Bu sorunu OSX Mac OS High Sierra'da yaşadım ve bu çözüm benim için çalıştı. Apache'yi yeniden başlatmanız bile gerekmedi.
gitti

Saatlerce aradıktan sonra, izinlerin DocumentRoot'un ana dizinleri için de doğru olması gerektiği ortaya çıktı. Çok teşekkür ederim . BTW bunun Apache'yi yeniden başlatması gerekmiyor
Muhasebeci م

27

Selinux'un sorun olması durumunda, sadece devre dışı bırakmak yerine, bu sayfa ve bu sayfa erişim izni verme komutunu verir:

chcon -R -t httpd_sys_content_t ~/public_html/

1
Benim sorunum olduğundan emindim. Kahretsin CentOS! Komut için Thx, mükemmel çalışıyor.
Balmipour

2
teşekkürler, sadece ~/public_html/sunmaya çalıştığım içeriğin kök diziniyle kısmını değiştirmek zorunda kaldım .
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(benim
durumumda

Keşfedilen selinux basit homedir'leri idare edemiyor ve diğeri isteğe bağlıyken bu özelliklerden sadece biri gerekliydi. Düzeltme ile ilgili hatırlattığınız için teşekkürler - her yeni sürümde zorunlu yeniden test süresinden ve hayal kırıklığından sonra, genellikle bunu sadece başlangıçta keserim. Şimdi sistemd için.
user2066657

17

Selinux'u etkinleştirmiş olabilirsiniz. Deneyin

getenforce

"Zorlama" gösteriyorsa, deneyin

setenforce 0

ve bunun sorununuzu çözüp çözmediğini deneyin.


4
SELinux'u sadece bir düzeltme olarak devre dışı bırakmayın. SELinux sorunlarını, portları yeniden atayarak veya boolean'ler ayarlayarak düzeltin.
Siride

1
Bu cevap, sorunun SELinux ile ilgili olduğunu tespit etmeye yardımcı olur. Ancak devre dışı bırakılması önerilmez.
Rajkumar R

15

Aynı sorunla karşılaştım, saatlerce uğraştıktan sonra, sorunu tamamen çözen bir çözüm buldum:

https://wiki.apache.org/httpd/13PermissionDenied

Temel olarak, Apache sunucusu yalnızca hizmet verdiği tüm dosyaların okuma izinlerini değil, sanal ana makinenizin yolundaki tüm dizinlerin yürütme iznini de gerektirir.

Yardımcı program adı, yolun her bileşeni boyunca izinleri listeleyerek izin sorunlarını bulmanıza yardımcı olmak için kullanılabilir:

namei --modes /usr/local/apache2/htdocs/foo/bar.html

Benim durumumda, yolumdaki bir dizin 700 iznine sahip, bu soruna neden oluyor. 701'e değiştirdikten sonra sorun çözüldü.


1
Buradaki bağlantı yararlıdır, çünkü sorunu açıklar: Dizin yolundaki düğümlerden birinde arama izinleri eksik. Bu bulmak için "namei" komutunu kullanın ve 755. daha sonra "chmod"
user3751385

Çözümün yanı sıra gerçek nedeni de açıklar. teşekkürler
Emdadul Sawon

1

Apache'yi 4.10 yerine 4.4 çekirdeğini kullanan bir Ubuntu 16.04 ana bilgisayarındaki bir docker kapsayıcısında çalıştırmaya çalışırken bu sorunu yaşıyordum.

Bu komutu anasisteme koydum ve yeniden konuşlandırdığımda iyiydim:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 

Bu sorunla karşılaştım, ancak kabın içinde chmodveya chownkabın içinde tutabildiğim garip etkiyle ve bir süre sonra Apache 403 hatalarını bir süre daha bastırıyor. Söyleyebileceğim kadarıyla, müdahale kabı yeniden başlatma veya bunun nedeni olabilecek başka önemli değişiklik yoktur. Gerçekten 16.04'ü çalıştırdığımdan beri, bu ikiliyi kurmaya çalıştım ve 403'lerim şimdilik kapalı tutuluyor. Üzerinde durup dururum, teşekkürler!
yarıya
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.