Apache: akses ditolak karena izin pencarian tidak ada

75

Saya tahu pertanyaan ini banyak ditanyakan, tetapi solusi yang saya lihat tidak berhasil untuk saya.

Saya hanya memiliki satu host virtual diaktifkan, dan saya mencoba untuk mengaktifkan akses ke folder yang tidak di bawah root dokumen

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>

Saya menetapkan /etc/apache2/envvarssebagai berikut

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

Saya memastikan bahwa / home / nama pengguna / Video / dan sub foldernya dimiliki oleh username:public, mengatur izin ke 777 (setelah 775 tidak berfungsi) dan memastikan bahwa pengguna www-datamilik grup public.

Sekarang, ketika saya menelusuri http://localhost/moviessaya dapatkan

[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

Tetapi ketika saya mengatur /etc/apache2/envvarsuntuk menjalankan Apache di bawah username(nama pengguna saya sendiri) semuanya berfungsi dengan baik. Masalahnya terkait izin, tapi saya tidak melihat bagaimana dalam kasus saya; terutama ketika saya mengatur izin 777. Ada ide?

Versi PS Ubuntu 14,04, Apache 2,4,7 dan saya tidak mengedit file konfigurasi lainnya.

Yotam
sumber
Saya melakukan semua yang mereka sarankan di sana, seperti yang saya tulis, dan itu tidak membantu
Yotam
Apakah ada kemungkinan Anda telah memasang /homeACL Anda diaktifkan? (ada tanda "+" di akhir bit izin jika itu kasusnya (periksa dengan ls -l))
Polosson
Tidak, saya tidak melakukannya. Saat ini saya sedang menjalankan Apache di bawah pengguna saya, jadi itu berfungsi, tetapi saya ingin menjalankannya di bawah pengguna lain untuk alasan keamanan.
Yotam
Saya menggunakan Linux untuk pertama kalinya. Saya mengunduh versi Ubuntu 14.04 LTE. Saya menghadapi masalah yang sama. Apakah ada yang bisa membantu?
Imdad

Jawaban:

95

Lakukan chmod +xpada dir pengguna Anda, dan restart apache. 755 izin harus berfungsi. Saya punya masalah dengan 644 .

Peter
sumber
6
Memang, dan untuk mengecek izin file dan direktori, jika tersedia, Anda dapat menggunakan namei -m /home/youruser/public_html/yourfile.extatau mencoba people.apache.org/~igalic/hacks/parsepath
Junior M
2
Untuk memperjelas, direktori apa pun yang Anda ingin dibaca oleh Apache, harus dapat dibaca oleh pengguna Apache. Kemungkinan folder rumah pengguna Anda tidak dimiliki oleh Anda pengguna dan grup, karenanya Anda harus menetapkan 755 izin /home/usernameuntuk mengaksesnya dengan cepat.
ruuter
Saya mengalami masalah ini pada OSX Mac OS High Sierra dan solusi ini berhasil untuk saya. Bahkan tidak perlu me-restart Apache.
pergi
Setelah berjam-jam mencari ternyata izin harus benar untuk direktori induk dari DocumentRoot juga. Terima kasih banyak . BTW ini tidak perlu me-restart Apache
Akuntan.
27

Jika dalam kasus selinux menjadi masalah, bukan hanya menonaktifkannya, halaman ini dan halaman ini memberikan perintah untuk memberikan akses:

chcon -R -t httpd_sys_content_t ~/public_html/
jozxyqk
sumber
1
Saya yakin itu masalah saya. Sialan CentOS! Terima kasih atas perintahnya, bekerja dengan sempurna.
Balmipour
2
terima kasih, hanya harus mengganti ~/public_html/bagian dengan direktori root dari konten yang saya coba layani.
trpt4him
chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(dalam situasi saya)
cssyphus
Selinux yang ditemukan tidak dapat menangani homedir sederhana, dan hanya satu dari fitur tersebut yang diperlukan sedangkan yang lainnya opsional. Terima kasih atas pengingat perbaikannya - setelah periode pengujian ulang wajib dengan setiap rilis baru, dan kekecewaan, saya biasanya hanya meretasnya di kickstart. Sekarang untuk systemd.
user2066657
17

Anda mungkin mengaktifkan selinux. Mencoba

getenforce

Jika itu menunjukkan "Menegakkan", coba

setenforce 0

dan coba jika ini memperbaiki masalah Anda.

Sopran
sumber
4
Jangan hanya menonaktifkan SELinux sebagai perbaikan. Perbaiki masalah SELinux dengan menetapkan kembali port atau pengaturan booleans.
siride
1
Jawaban ini membantu mengidentifikasi bahwa masalah tersebut terkait dengan SELinux. Tetapi menonaktifkan itu tidak dianjurkan.
Rajkumar R
15

Saya mengalami masalah yang sama, setelah berjam-jam mencoba, saya menemukan solusi yang tepat memecahkan masalah:

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

Pada dasarnya, server Apache tidak hanya memerlukan izin baca dari semua file yang dilayaninya, tetapi izin eksekusi semua direktori di jalur virtual host Anda.

Namei utilitas dapat digunakan untuk membantu menemukan masalah izin dengan mendaftar izin di sepanjang setiap komponen jalan:

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

Dalam kasus saya, direktori di jalur saya memiliki izin 700, itu menyebabkan masalah. Setelah mengubahnya menjadi 701, masalah terpecahkan.

Lu Sun
sumber
1
Tautan di sini bermanfaat karena menjelaskan masalah: Salah satu simpul di jalur direktori tidak memiliki izin pencarian. Gunakan perintah "namei" untuk menemukan ini dan kemudian "chmod" ke 755.
user3751385
Ini menjelaskan alasan sebenarnya serta solusinya. terima kasih
Emdadul Sawon
1

Saya mengalami masalah ini ketika saya mencoba menjalankan apache dalam wadah buruh pelabuhan pada host Ubuntu 16.04 yang menggunakan kernel 4.4 bukannya 4.10.

Setelah saya menjalankan perintah ini pada host dan digunakan kembali, saya baik-baik saja:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 
Programster
sumber
Saya telah menemukan masalah ini, tetapi dengan efek aneh yang saya dapat chmodatau chowndi dalam wadah, dan itu menekan kesalahan Apache 403 untuk sementara waktu, hanya untuk mengembalikan beberapa waktu kemudian. Tidak ada wadah intervening restart atau perubahan substantif lainnya yang bisa menjadi penyebabnya, sejauh yang saya tahu. Karena saya benar-benar menjalankan 16.04, saya mencoba menginstal biner ini, dan 403-an saya ditahan untuk saat ini. Saya akan terus mengawasi, dan terima kasih!
halfer