Completerò le risposte di Rahmu e MV con una soluzione tecnica. Tutto ciò che segue è valido solo per sistemi simili a UNIX.
Scorri la sezione chmod / chown per un esempio usando gli ACL, uno strumento più potente delle modalità file UNIX.
Individuazione del nome utente del server Web
Innanzitutto, dovrai conoscere il nome utente con cui viene eseguito il tuo server web. Se si utilizza Apache, può essere apache
o httpd
, www-data
ecc Sulla maggior parte dei Debian-come i sistemi, Apache è www-data
. Per nginx, in genere, lo è anche www-data
.
Per provarlo, prova:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Assicurarsi che il nome utente restituito da questo comando sia coerente (ad esempio, utilizzo nginx il 99% delle volte, ma questo comando restituisce tomcat7
un server Web Java che ho installato una volta) .
Concedere autorizzazioni al server Web: utilizzando chmod
echown
Fare un chmod
666 o 777 (la soluzione ideale per quel tipo di problemi in documentazioni / tutorial sbagliati) può magicamente far funzionare le cose, ma è insicuro. Dare autorizzazioni 666 o 777 darà accesso ad "altri". Quindi non solo Apache, ma anche grandmother
e nsa
(purché esistano quegli account utente sul tuo computer - ma no davvero, per favore evita di farlo a meno che non sia solo per test / risoluzione dei problemi).
È meglio essere più specifici e dare autorizzazioni solo a te e Apache. Cambia il gruppo dei tuoi file per dare il pieno controllo dei tuoi file al web server. Per fare ciò, modificare il proprietario in modo ricorsivo:
chown -R www-data:www-data your/folder/
Ma molto probabilmente, potresti voler mantenere pieno accesso ai tuoi file cambiando solo il gruppo:
chown -R yourusername:www-data your/folder/
Quindi, fai quanto è appropriato chmod
per dare al gruppo www-data
le stesse autorizzazioni di te. Ad esempio, se la modalità corrente è 640 (6 per te, 4 per www-data, 0 per altri, traducendo in -rw-r -----) , impostalo su 660 (6 per te, 6 per www- dati, 0 per gli altri, traducendo in -rw-rw ----) . Vedi la risposta di Rahmu per saperne di più sulle modalità dei file, è un meccanismo vecchio, ma elegante.
Per evitare di manipolare i numeri arcani con chmod
, puoi anche usare questa sintassi:
chmod -R g+rw your/folder/
Significa "per il gruppo ( g
), aggiungere +
( rw
) autorizzazioni di lettura e scrittura ( ) sulla cartella your/folder/
, ricorsivamente ( -R
)".
Nel 90% dei casi, questo dovrebbe essere sufficiente.
Il mio metodo preferito: usare ACL (Access Control List)
A volte la prima soluzione non è sufficiente. Prenderò l'esempio di Symfony Framework che registra e memorizza nella cache molti dati. Quindi ha bisogno dell'accesso in scrittura alla cartella appropriata.
E il metodo chmod
/ chown
potrebbe non essere sufficiente, quando si utilizzano in parallelo Symfony Console in CLI (sotto il mio account utente) e il Web (utente del server Web). Ciò causa molti problemi perché Symfony modifica costantemente i permessi.
In questo caso, utilizzeremo ACL (Access Control List), che è un modo più avanzato per gestire le autorizzazioni su molti sistemi UNIX.
Ecco i comandi forniti dalla documentazione ufficiale di Symfony (per favore cambia app/cache
e app/logs
secondo le tue esigenze ):
Su un sistema che supporta chmod +a
(es. Non Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Su un sistema che non supporta chmod +a
(il più comune)
Avrai bisogno dello setfacl
strumento; forse è installato sul tuo sistema per impostazione predefinita, quindi prova setfacl -v
a vedere se il comando è disponibile.
Se il comando non è disponibile e stai utilizzando Ubuntu 14.04+, dovrai solo installare lo strumento:
sudo apt install acl
Altrimenti, segui la documentazione del tuo SO, perché potresti dover cambiare il modo in cui è montata la tua partizione ( qui la documentazione di Ubuntu ).
Ed eccoci qui:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Non ho mai avuto problemi con questo metodo, soddisfatto o rimborsato.