Finalmente ho trovato una soluzione. Ho eseguito queste 2 funzioni per archiviare in modo ricorsivo la cartella e i permessi dei file di www e inside.
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
Ho letto questa pagina qui:https://wiki.apache.org/httpd/13PermissionDenied e sostanzialmente mi ha spiegato e mi ha ricordato che i permessi sono ereditati, "fai lo stesso per la directory e per ciascuna directory principale". Quindi ho eseguito quei 2 e tutto funziona di nuovo.
Di solito l'autorizzazione di esecuzione per un percorso non è impostata, come in questa domanda. Il modo più semplice per risolvere questo è il seguente comando:
chmod a+rX -R /var/www
Ma usando CentOS7 o RHEL7 potresti riscontrare problemi con SELinux. Se i permessi del file sono corretti e ricevi ancora l'errore, guarda il seguente registro:
tail -f /var/log/audit/audit.log
Se ricevi un messaggio come questo:
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)
Ciò significa:SELinux blocca l'accesso alla root dei documenti. Puoi provare un comando come questo (ricorsivo e dettagliato sull'opzione -Rv
):
chcon --user system_u --type httpd_sys_content_t -Rv /var/www/app/public
Per trovare le impostazioni corrette, cerca in una directory di lavoro come /var/www/html
con questo:
ls -laZ /var/www/
Dovrebbe essere simile a:
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
Per le persone che potrebbero aver provato quanto sopra e stanno ancora riscontrando problemi, assicurati che nessuna delle directory nel percorso abbia un ACL che impedisce l'accesso ad Apache.
Puoi usare:
getfacl <directoryname>
per ottenere le autorizzazioni sulla directory che potrebbero essere state impostate utilizzando gli ACL. Vedrai qualcosa del genere in seguito che sostanzialmente dice che l'utente ha tutte le autorizzazioni e il gruppo ha letto ed eseguito (o cercato) ma non scritto:
# file: <directoryname>
# owner: username
# group: username
user::rwx
user:1000:rwx
group::---
group:username:r-x
mask::rwx
other::rwx
Per concedere ad apache oa un gruppo l'accesso all'utilizzo degli ACL, utilizzare quanto segue:
setfacl -m g:<groupname>:rx <directoryname>
assicurati solo che le directory principali abbiano le stesse. Puoi utilizzare l'opzione -R per apportare la modifica in modo ricorsivo nella directory principale.
Mi sono imbattuto nello stesso problema con i permessi di Apache e stavo sbattendo la testa cercando di capire perché chmod e chown non avessero avuto effetto prima di ricordare che avevo impostato gli ACL sulla directory quando usavo Samba qualche tempo fa.