I permessi dei file Unix/Linux possono risultare confusi. I permessi UNIX di base si presentano in tre tipologie;
Owner Permissions : Control your own access to files.
Group Permissions : Control access for you and anyone in your group.
Other Permissions : Control access for all others.
In Unix, quando i permessi sono configurati, il server consente di definire permessi diversi per ciascuna di queste tre categorie di utenti. In un ambiente di server Web i permessi vengono utilizzati per controllare quali proprietari di siti Web possono accedere a quali directory e file.
Come si presentano i permessi Unix?
Quando si visualizzano i propri file tramite la riga di comando utilizzando il comando Unix ls -l si vedranno righe come le seguenti, una per ogni file e directory:
drwxr-xr-x@ 7 username usergroup 224 13 Feb 10:48 includes
-rw-r--r--@ 1 username usergroup 1060 13 Apr 21:00 index.php
Spiegazione:
- Il primo carattere nella riga è d per directory o - per file, oppure ...
- I successivi 9 caratteri sono 3 gruppi di 3 che rappresentano lettura (r), scrittura (w) ed esecuzione (x) oppure un simbolo meno (-) che significa nessun accesso per ciascuno di Proprietario, Gruppo e Altri.
- Il simbolo @ è uno dei numerosi possibili attributi estesi,
- Il numero prima del nome utente è la profondità della directory.
- I due nomi sono il nome utente proprietario e il gruppo utente,
- Il numero intero successivo è la dimensione del file in byte.
- La data successiva indica l'ora per gli elementi recenti o l'anno per gli elementi più vecchi.
- Infine c'è il nome del file o della directory.
In un'utilità FTP l'ordine può essere diverso e potrebbero esserci più o meno informazioni.
Proprietario (Utente) si riferisce al nome utente
Il Proprietario (Utente) normalmente sei tu, questi permessi verranno applicati al nome del tuo account di hosting.
Gruppo si riferisce al gruppo utente
I permessi di Gruppo verranno applicati alle altre persone che fanno parte dello stesso gruppo a cui appartieni; all'interno di un ambiente di hosting, molto raramente ci sono altre persone nello stesso gruppo. Questo protegge i tuoi file e le tue directory dall'essere resi disponibili a chiunque altro possa avere un account di hosting sullo stesso server.
Altri si riferisce a tutti gli altri
I permessi Altri verranno applicati a chiunque altro sul server che non sia tu o non faccia parte del tuo gruppo. Quindi in un ambiente di server Web, ricordando che normalmente nessun altro è nel tuo gruppo, questo rappresenta chiunque altro acceda al server tranne te. Ciascuno dei tre insiemi di permessi è definito nel modo seguente;
r = Read permissions
w = Write permissions
x = Execute permissions
Owner Group Other
r w x r w x r w x
Come molti di voi già sanno, i permessi sono normalmente espressi come valore numerico, qualcosa come 755 o 644. Quindi, come si collega questo a quanto discusso sopra? A ciascun carattere dei permessi viene assegnato un valore numerico, assegnato in ciascun insieme di tre, quindi dobbiamo usare solo tre valori e riutilizzarli per ciascun insieme.
Owner Group Other
r w x r w x r w x
4 2 1 4 2 1 4 2 1
Ora che abbiamo un valore che rappresenta ciascun permesso, possiamo esprimerli in termini numerici. I valori vengono semplicemente sommati nei rispettivi insiemi di 3, il che a sua volta ci darà solo tre numeri che ci diranno quali permessi sono impostati. Se ci viene detto che un file ha i permessi 777, questo significherebbe che quanto segue è vero.
Owner Group Other
r w x r w x r w x
4 2 1 4 2 1 4 2 1
Quindi...
4+2+1 4+2+1 4+2+1
= 7 7 7
Il Proprietario del file avrebbe pieni permessi di Lettura, Scrittura ed Esecuzione, anche il gruppo avrebbe pieni permessi di Lettura, Scrittura ed Esecuzione, e il resto del mondo potrebbe anche Leggere, Scrivere ed Eseguire il file. I permessi standard, predefiniti, che vengono assegnati ai file e alle directory dal server sono normalmente;
Files = 644
Directories = 755
Questi permessi consentirebbero, per i file;
644 = rw- r-- r--
Owner has Read and Write
Group has Read only
Other has Read only
e per le directory;
755 = rwx r-x r-x
Owner has Read, Write and Execute
Group has Read and Execute only
Other has Read and Execute only
Ora, le cose possono diventare un po' complicate quando iniziamo a parlare di Web Server condivisi, il software del Web Server verrà eseguito con un proprio nome utente e nome gruppo, la maggior parte dei server è configurata per usare "apache" e "apache" oppure "nobody" e "nobody" come nome utente e nome gruppo. Ecco il problema. Il tuo Web Server viene eseguito con un proprio utente, e questo utente non sei tu né fa parte del tuo gruppo, quindi i primi due insiemi di permessi non si applicano ad esso. Si applicano solo i permessi del mondo (altri). Pertanto, se configuri un insieme di permessi simile a 640 sui file del tuo sito web, il tuo Web Server non sarà in grado di eseguire i file del tuo sito web.
640 = rw- r-- ---
Owner has Read and Write
Group has Read only
Other has no rights
Al Web server non viene assegnato alcun permesso e non può Eseguire, Scrivere o, cosa più importante, nemmeno Leggere il file per consegnarne il contenuto al browser dei visitatori del sito web. Se a una directory venissero assegnati i permessi 750, l'effetto sarebbe lo stesso, perché il Web Server non avrebbe nemmeno i permessi per leggere i file nella directory, anche se i file al suo interno avessero permessi favorevoli.
750 = rw- r-x ---
Owner has Read and Write
Group has Read and Execute
Other has no rights
Le directory hanno una particolarità in più: se una directory non ha il permesso di Esecuzione impostato nell'insieme Mondo, allora anche se Lettura e Scrittura sono impostati, se il programma non viene eseguito come l'utente o il gruppo, non sarà comunque in grado di accedere ai file all'interno della directory. L'impostazione di Esecuzione consente al programma di "Eseguire" comandi nella directory, quindi senza di essa attivata il programma (nel nostro caso un Web Server) non può eseguire il comando "Lettura", e quindi non può consegnare il tuo file al browser web dell'utente.
Come si collega questo a Joomla?
Buona domanda, beh in prima istanza questo sarebbe importante durante il processo di Installazione Web. Se riesci a ricordare quando hai eseguito l'Installatore Web di Joomla!, stavamo cercando directory specifiche da designare come scrivibili. Vediamo un buon numero di messaggi che affermano che ci sono stati problemi durante l'installazione con i permessi oppure chiedono quali permessi siano consigliati. Alcuni considerano persino il messaggio, che richiede permessi "Scrivibili", troppo vago.
Sfortunatamente, poiché l'Installatore Web non sa come è configurato il tuo server, non può essere più specifico, tuttavia, una volta compresa l'impostazione dei permessi e conoscendo un po' gli ambienti di Web Serving, scoprirai che il termine Scrivibile è in realtà molto specifico e più che adeguato a descrivere ciò di cui Joomla! ha bisogno. Ripensando alle informazioni sopra, potresti ricordare che ci sono tre punti in cui i permessi di scrittura possono essere impostati;
Owner Writable
Group Writable
Other Writable
Ricordando inoltre che il Web Server generalmente non gira con il tuo utente o nel tuo stesso gruppo. Quando esegui l'Installatore Web da un browser, è il Web Server che cerca di accedere ai file, quindi sono i permessi "Altri" che gli si applicheranno. Se i permessi "Altri" non consentono al Web Server di eseguire comandi di Lettura, Scrittura o Esecuzione nelle directory di Joomla!, riceverai il messaggio che indica che le directory non sono scrivibili.
In questo caso, dovrai configurare i permessi Altri a "7" sulle directory elencate nell'Installatore Web. Quindi i tuoi permessi totali potrebbero essere qualcosa come 757, nel caso peggiore potresti dover impostare 777. Questi permessi molto aperti potrebbero essere ripristinati a 755 dopo l'esecuzione dell'installatore per contribuire alla sicurezza delle tue directory e file.
757 = rwx r-x rwx
Owner has Read, Write and Execute
Group has Read and Execute
Other has Read, Write and Execute
Per rendere le cose ancora più confuse, molte aziende di hosting utilizzano un software chiamato phpsuExec o suExec, questi strumenti cambiano il modo in cui il Web Server viene eseguito, laddove il Web Server normalmente non girerebbe con il tuo nome utente, in questo caso invece sì. L'uso dei permessi altri potrebbe non essere necessario, ora potresti aver bisogno solo di configurare le directory come scrivibili per il tuo nome utente e nome gruppo, questo consente di impostare i permessi delle directory come 755 o 775 invece di 757 o 777.
755 = rwx r-x r-x
Owner has Read, Write and Execute
Group has Read and Execute
Other has Read and Execute
775 = rwx rwx r-x
Owner has Read, Write and Execute
Group has Read, Write and Execute
Other has Read and Execute
Il Web Server avrà comunque bisogno del permesso di Esecuzione impostato per il nome utente e dei permessi di Lettura ed Esecuzione per il nome gruppo, in modo da poter eseguire il comando di Lettura sui file all'interno della directory. Anche in questo caso, questi permessi potrebbero essere riportati a 755 dopo il completamento dell'Installatore Web. Questo è quanto riguarda le basi delle directory, e per quanto riguarda i file? Qui le cose sono un po' più semplici. La maggior parte dei file utilizzati da Joomla! sarà perfettamente a suo agio con i permessi predefiniti 644.
644 = rw- r-- r--
Owner has Read, Write
Group has Read
Other has Read
Questo è valido se non hai bisogno di scrivere sui file dal Web Server, altrimenti si applicano le stesse regole viste per le directory. Un file che potresti voler rendere "Scrivibile" per il Web Server è il tuo file configuration.php. Questo è il file di configurazione di Joomla!, se hai intenzione di modificare la configurazione tramite l'interfaccia di Amministrazione Web, allora questo file dovrà essere scrivibile per il Web Server.
Se il tuo server richiedeva che i permessi delle directory fossero impostati su "Altri" scrivibili per l'installazione, allora probabilmente anche questo file dovrà essere 757 o 777. Lasciare questo file con permessi 757 o 777 è però pericoloso, poiché si concede a chiunque l'accesso in "Scrittura", e molti exploit dei siti web sfruttano proprio questo fatto, quindi in generale non è consigliabile lasciare questo file con questi permessi.
Se il tuo Web Server ha installato uno degli strumenti SU e hai dovuto configurare solo 755 sulle directory per l'installazione, allora probabilmente dovrai impostare solo 755 o 775 anche su questo file per consentire la modifica tramite l'interfaccia di Amministrazione, e questi permessi sono generalmente considerati più sicuri rispetto a 757 o 777.
In conclusione, quali permessi dovrebbero essere impostati per l'installazione di Joomla!? Beh, come puoi vedere, dipende!
So che questo non è utile quanto avresti voluto e certamente non è una risposta definitiva, ma in generale, dopo l'installazione, qualsiasi impostazione "7" non sicura può essere ripristinata a qualcosa di più sicuro. Ad esempio:
Files = 644
Directories = 755
Questi permessi consentirebbero, per i file;
644 = rw- r-- r--
Il proprietario ha Lettura e Scrittura
Il gruppo ha solo Lettura
Gli altri hanno solo Lettura
e per le directory,
755 = rwx r-x r-x
Il proprietario ha Lettura, Scrittura ed Esecuzione
Il gruppo ha solo Lettura ed Esecuzione
Gli altri hanno solo Lettura ed Esecuzione
Se hai accesso shell SSH, i seguenti comandi possono essere eseguiti da riga di comando per reimpostare tutti i file e le directory ai valori predefiniti del server, ovvero 755 e 644. Spostati nella directory principale (" / ") della tua installazione di Joomla!, quindi esegui:
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
Se hai accesso solo tramite FTP, questo può essere un lavoro molto lungo, tuttavia, a meno che tu non abbia modificato più directory durante l'installazione di quanto richiesto, dovresti aver bisogno di reimpostare solo circa 10 directory e il file configuration.php.
Tieni presente che per installare estensioni o template dopo l'effettiva installazione di Joomla! potresti dover elevare nuovamente i permessi predefiniti sulle directory appropriate solo per il periodo dell'installazione, per poi riportarli ai valori precedenti una volta installato il componente aggiuntivo.
Se decidi di utilizzare la cache, la directory della cache dovrà essere Scrivibile dall'utente del Web Server per permettergli di scrivere i propri file temporanei.
Correggere ricorsivamente i permessi
In una finestra di terminale, partendo dalla radice del sito Joomla, usa i seguenti comandi per impostare i permessi di file e cartelle ai valori predefiniti di Joomla.
find . -type f -exec chmod 644 {} ; find . -type d -exec chmod 755 {} ;
Nota: il comando find presuppone che debba partire dalla directory corrente. Per sicurezza, vai nella tua directory public_html e specifica un percorso come primo argomento. Alcune shell, come bash su Apple OS X, devono avere un percorso specificato nel comando find.
Verifica tutte le estensioni di terze parti dopo aver modificato i permessi.