Akhirnya menemukan perbaikan. Saya menjalankan 2 fungsi ini untuk mengarsipkan folder dan izin file dari www dan di dalamnya secara rekursif.
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
Saya membaca halaman ini di sini:https://wiki.apache.org/httpd/13PermissionDenieddan pada dasarnya menjelaskan dan mengingatkan saya bahwa izin diwariskan, "lakukan hal yang sama untuk direktori dan setiap direktori induk." Jadi saya menjalankan 2 itu dan semuanya berfungsi kembali.
Biasanya izin eksekusi untuk satu jalur tidak disetel, seperti di pertanyaan ini. Cara termudah untuk menyelesaikan ini adalah perintah berikut:
chmod a+rX -R /var/www
Tetapi saat menggunakan CentOS7 atau RHEL7 Anda mungkin mengalami masalah dengan SELinux. Jika izin file benar dan Anda masih mendapatkan kesalahan, lihat log berikut:
tail -f /var/log/audit/audit.log
Jika Anda mendapatkan pesan seperti ini:
type=AVC msg=audit(1464350432.916:8222): avc: denied { getattr } for pid=17526 comm="httpd" path="/var/www/app/index.html" dev="sda1" ino=42021595 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
type=SYSCALL msg=audit(1464350432.916:8222): arch=c000003e syscall=4 success=no exit=-13 a0=7fde4e450d40 a1=7ffd05e79640 a2=7ffd05e79640 a3=7fde42e43792 items=0 ppid=17524 pid=17526 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
Artinya:SELinux memblokir akses ke root dokumen Anda. Anda dapat mencoba perintah seperti ini (Recursive dan verbose pada opsi -Rv
):
chcon --user system_u --type httpd_sys_content_t -Rv /var/www/app/public
Untuk menemukan setelan yang tepat, lihat direktori kerja seperti /var/www/html
dengan ini:
ls -laZ /var/www/
Seharusnya terlihat seperti:
drwxr-xr-x. server server system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root root system_u:object_r:var_t:s0 ..
drwxr-xr-x. server server system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. server server system_u:object_r:httpd_sys_content_t:s0 html
drwxrwxr-x. server server unconfined_u:object_r:var_t:s0 app
Untuk orang-orang yang mungkin telah mencoba hal di atas dan masih mengalami masalah, pastikan tidak ada direktori di jalur yang memiliki ACL yang menghalangi akses apache.
Anda dapat menggunakan:
getfacl <directoryname>
untuk mendapatkan izin pada direktori yang mungkin telah diatur menggunakan ACL. Anda akan melihat sesuatu seperti berikut yang pada dasarnya mengatakan pengguna memiliki semua izin dan grup telah membaca dan mengeksekusi (atau mencari) tetapi tidak menulis:
# file: <directoryname>
# owner: username
# group: username
user::rwx
user:1000:rwx
group::---
group:username:r-x
mask::rwx
other::rwx
Untuk memberikan akses apache atau grup untuk menggunakan ACL, gunakan yang berikut ini:
setfacl -m g:<groupname>:rx <directoryname>
pastikan direktori induk memiliki yang sama. Anda dapat menggunakan tombol -R untuk melakukan perubahan secara rekursif pada direktori teratas.
Saya mengalami masalah izin apache yang sama dan membenturkan kepala mencoba mencari tahu mengapa chmod dan chown tidak berpengaruh sebelum saya ingat saya telah menyetel ACL pada direktori saat menggunakan Samba beberapa waktu lalu.