Permessi Linux di file e cartelle: 644, 755, 775 e 777

Permessi Linux di file e cartelle: 644, 755, 775 e 777

I permessi Linux di file e cartelle stabiliscono quali utenti possono leggere, modificare o utilizzare le risorse presenti nel filesystem. Chi gestisce un sito web li incontra spesso lavorando tramite FTP, SFTP, un File Manager oppure direttamente dalla shell del server.

Valori come 644, 755, 775 e 777 non sono semplici numeri da copiare da una guida. Rappresentano precise autorizzazioni concesse al proprietario di un file, al gruppo a cui appartiene e agli altri utenti del sistema.

Comprendere il loro significato è importante anche dal punto di vista della sicurezza. Un permesso troppo restrittivo può impedire il corretto funzionamento di un’applicazione. Un permesso eccessivamente permissivo può invece concedere capacità di lettura o modifica a utenti e processi che non ne hanno bisogno.

Cosa sono i permessi Linux

Linux deriva da una tradizione di sistemi operativi multiutente. Sullo stesso sistema possono quindi operare utenti e processi differenti, senza che tutti debbano avere gli stessi privilegi.

Il filesystem associa a file e directory una serie di informazioni che determinano chi può eseguire determinate operazioni. I permessi tradizionali vengono suddivisi in tre categorie:

  • User (u): il proprietario del file o della directory;
  • Group (g): gli utenti appartenenti al gruppo associato;
  • Others (o): gli altri utenti.

Per ciascuna categoria Linux può concedere tre permessi fondamentali: lettura, scrittura ed esecuzione.

Questo modello fa parte dei tradizionali permessi dei filesystem Unix e Unix-like.

Permessi Linux e FTP: qual è il rapporto?

Quando un client FTP mostra una finestra nella quale è possibile impostare valori come 644 o 755, non si stanno configurando dei particolari “permessi FTP”. Si stanno modificando, se il server lo consente, i permessi associati ai file e alle directory presenti sul server.

FTP rappresenta in questo caso soltanto uno degli strumenti utilizzati per accedere ai file. Per approfondire il funzionamento del protocollo è disponibile la guida su cos’è FTP e a cosa serve.

Lo stesso principio vale quando si utilizza SFTP oppure il File Manager del pannello hosting. Cambia il mezzo con cui si accede al server, non il significato dei permessi del filesystem.

Read, Write ed Execute: cosa significano r, w e x

I tre permessi fondamentali vengono indicati con le lettere r, w e x.

r significa read, quindi lettura. w significa write, cioè scrittura. x significa execute, cioè esecuzione.

Quando un determinato permesso non è concesso, al suo posto viene normalmente visualizzato un trattino.

rwx
r-x
rw-
r--

La prima combinazione concede tutti e tre i permessi. Nella seconda manca la scrittura. Nella terza manca l’esecuzione. Nell’ultima è disponibile soltanto la lettura.

I permessi hanno un significato diverso per file e cartelle

Una delle parti più importanti da comprendere è che r, w e x non producono esattamente lo stesso effetto su un file e su una directory.

Su un normale file, il permesso r consente di leggerne il contenuto. Il permesso w permette di modificarlo. Il permesso x permette di eseguirlo quando si tratta di un file eseguibile o di uno script utilizzabile in questo modo.

Per una directory il significato cambia.

Il permesso r consente di leggere l’elenco dei nomi presenti nella directory. Il permesso w permette di modificarne le voci, quindi è coinvolto nella creazione, eliminazione e rinomina degli elementi contenuti. Il permesso x permette di attraversare la directory e accedere agli elementi al suo interno quando gli altri permessi e quelli del percorso lo consentono.

Dire che il bit x “esegue una cartella” sarebbe quindi tecnicamente sbagliato.

Come leggere i permessi Linux

Da una shell Linux è possibile visualizzare i permessi con il comando ls. Utilizzando l’opzione -l si ottiene la visualizzazione estesa.

ls -l

Una directory potrebbe essere rappresentata in questo modo:

drwxr-xr-x

Questa stringa va separata logicamente:

d | rwx | r-x | r-x
    user  group others

Il primo carattere non appartiene ai nove bit dei permessi appena descritti. In questo esempio la lettera d indica che l’elemento è una directory.

I nove caratteri successivi sono divisi in tre gruppi da tre.

rwx     r-x     r-x
user    group   others

Il proprietario dispone quindi di lettura, scrittura e attraversamento. Il gruppo dispone di lettura e attraversamento. Gli altri utenti dispongono anch’essi di lettura e attraversamento.

Permessi Linux di file e cartelle: 644, 755, 775 e 777

Perché i permessi vengono scritti come 644 o 755

I permessi possono essere rappresentati anche in forma numerica. È proprio questa notazione che si incontra frequentemente nei client FTP e nei pannelli di hosting.

A ciascun permesso viene associato un valore:

r = 4
w = 2
x = 1

I valori dei permessi presenti vengono sommati per ciascuna delle tre categorie.

--- = 0
--x = 1
-w- = 2
-wx = 3
r-- = 4
r-x = 5
rw- = 6
rwx = 7

Un valore 7 corrisponde quindi a rwx, perché 4 + 2 + 1 = 7. Un valore 6 corrisponde a rw-, mentre 5 corrisponde a r-x.

Le tre cifre rappresentano, nello stesso ordine, proprietario, gruppo e altri utenti.

Permessi Linux di file e cartelle: 644, 755, 775 e 777

Cosa significa il permesso 755

Il permesso 755 è molto comune per le directory di un sito web.

7 = rwx
5 = r-x
5 = r-x

755 = rwxr-xr-x

Il proprietario dispone di lettura, scrittura e attraversamento. Il gruppo e gli altri utenti dispongono di lettura e attraversamento, ma non della scrittura.

In molti ambienti hosting questa configurazione permette al proprietario di gestire la directory senza concedere indiscriminatamente la possibilità di modificarla agli altri utenti.

755 non deve però essere considerato il valore corretto per qualsiasi directory e qualsiasi server. La configurazione effettiva dipende anche da proprietario, gruppo e modalità con cui vengono eseguiti i servizi che devono accedere ai file.

Cosa significa il permesso 644

Per i normali file di un sito web si incontra frequentemente il valore 644.

6 = rw-
4 = r--
4 = r--

644 = rw-r--r--

Il proprietario può leggere e modificare il file. Il gruppo e gli altri utenti dispongono invece della sola lettura.

File HTML, CSS, JavaScript e molti file PHP non hanno normalmente bisogno del permesso di esecuzione soltanto perché fanno parte di un sito web. L’esecuzione del codice PHP, ad esempio, viene gestita dall’ambiente PHP e dal server secondo la configurazione adottata.

755 per le cartelle e 644 per i file?

Nella gestione di molti siti ospitati su server Linux si incontra spesso questa combinazione:

Directory: 755
File:      644

È una configurazione comune, ma non una regola universale da applicare senza verifiche.

Un server può utilizzare utenti, gruppi e processi differenti. Alcuni ambienti possono richiedere che un gruppo disponga della scrittura; altri sono progettati affinché i processi PHP operino direttamente con l’utente proprietario dei file.

Prima di modificare i permessi è quindi necessario capire quale utente o processo deve realmente accedere alla risorsa e quale operazione deve compiere.

Cosa significano 775 e 664

Il valore 775 concede la scrittura anche al gruppo:

775 = rwxrwxr-x

Può essere appropriato in configurazioni nelle quali più utenti o processi appartenenti allo stesso gruppo devono lavorare sulla medesima directory.

Lo stesso principio applicato a un file porta spesso al valore 664:

664 = rw-rw-r--

Anche in questo caso il valore non va scelto perché “più permissivo”, ma perché la scrittura da parte del gruppo è realmente necessaria e coerente con la configurazione del server.

Perché 777 può diventare un problema di sicurezza

Il valore 777 viene spesso suggerito come soluzione rapida quando un’applicazione non riesce a creare o modificare un file.

777 = rwxrwxrwx

Significa concedere lettura, scrittura ed esecuzione o attraversamento al proprietario, al gruppo e agli altri utenti.

Il problema non è il numero in sé, ma l’ampiezza dei privilegi concessi. Se una directory non deve essere modificabile dagli utenti che ricadono nella categoria “others”, concedere loro la scrittura significa attribuire un privilegio non necessario.

Dal punto di vista della sicurezza si applica il principio del minimo privilegio: un utente o un processo dovrebbe ricevere soltanto i permessi necessari per svolgere il proprio compito.

Se una directory funziona soltanto dopo essere passata da 755 a 777, questo non dimostra che 777 sia il permesso corretto. Indica piuttosto che deve essere verificato chi sta tentando di scrivere e con quali privilegi.

Permessi e proprietario: perché chmod non basta sempre

I permessi sono soltanto una parte del sistema.

Ogni file e directory ha anche un proprietario e un gruppo. Due directory entrambe impostate a 755 possono quindi comportarsi diversamente per uno specifico processo se appartengono a proprietari differenti.

Per visualizzare i dati di una directory si può utilizzare:

ls -ld nome-directory

Per esempio:

drwxr-xr-x 5 mario utenti 4096 Aug 14 12:00 uploads

Da questa riga si ricavano sia i permessi sia il proprietario e il gruppo associati alla directory.

Il comando utilizzato per modificare i permessi è chmod:

chmod 755 nome-directory

Il comando chown svolge invece un compito differente: modifica il proprietario e, quando specificato, il gruppo.

chown mario:utenti nome-directory

Aumentare indiscriminatamente i permessi con chmod può quindi mascherare un problema di ownership senza correggerne la causa.

Il principio del minimo privilegio applicato a un sito web

Il criterio più utile per scegliere i permessi non consiste nel chiedersi quale valore faccia funzionare tutto. Bisogna chiedersi chi deve fare cosa.

Se un file deve essere modificato soltanto dal proprietario, non esiste un motivo tecnico per concedere la scrittura anche a group e others.

Se una directory deve essere attraversata dal processo che serve le pagine del sito, bisogna assicurarsi che quel processo disponga dei permessi necessari. Questo non implica automaticamente che debba anche poter scrivere.

Se una directory destinata agli upload deve essere scrivibile dall’applicazione, va individuato l’utente o il gruppo con cui l’applicazione opera e si assegnano i privilegi necessari a quel soggetto.

Questo approccio riduce i privilegi disponibili e limita le conseguenze di errori di configurazione o della compromissione di un account.

Attenzione ai permessi applicati ricorsivamente

Un errore comune consiste nell’applicare lo stesso valore a tutta la struttura di un sito.

Il comando seguente, per esempio, applica 755 ricorsivamente agli elementi interessati:

chmod -R 755 public_html

In una struttura web, però, file e directory possono richiedere permessi differenti. Se l’obiettivo è impostare 755 sulle directory e 644 sui file, dalla shell è possibile selezionarli separatamente.

Per le directory:

find public_html -type d -exec chmod 755 {} \;

Per i file:

find public_html -type f -exec chmod 644 {} \;

La stessa attenzione è necessaria quando si utilizza l’opzione ricorsiva di un client FTP o di un File Manager. Prima di confermare bisogna verificare se la modifica verrà applicata ai file, alle directory oppure a entrambi.

Come modificare i permessi tramite FTP

I client FTP dotati di questa funzione permettono normalmente di selezionare un file o una directory e modificare i relativi permessi attraverso un’interfaccia grafica.

Il programma può mostrare direttamente il valore numerico oppure caselle corrispondenti a lettura, scrittura ed esecuzione per proprietario, gruppo e altri utenti.

Impostando, per esempio:

Owner:  Read + Write + Execute
Group:  Read + Execute
Others: Read + Execute

si ottiene 755.

Il client invia la richiesta al server, ma l’operazione può essere completata soltanto se l’account utilizzato dispone dei privilegi necessari per cambiare quei permessi.

La modifica può essere effettuata anche dai pannelli hosting. La guida a DirectAdmin, ad esempio, mostra anche le funzioni disponibili per la gestione di file, cartelle e relativi permessi.

FTP, FTPS e SFTP: i permessi non proteggono la connessione

Esiste un’altra distinzione importante dal punto di vista della sicurezza. I permessi del filesystem stabiliscono cosa può fare un utente o un processo dopo aver ottenuto accesso alle risorse. Non proteggono invece il canale utilizzato per collegarsi al server.

La sicurezza della connessione deve essere gestita separatamente utilizzando protocolli e configurazioni appropriati.

SFTP, per esempio, utilizza SSH per il trasferimento dei file. Per approfondire questo aspetto è disponibile la guida dedicata a SSH e alle connessioni sicure al server.

Permessi corretti e connessione protetta risolvono quindi problemi differenti e sono entrambi elementi della sicurezza complessiva di un ambiente hosting.

Permission denied: perché non conviene aumentare subito i permessi

Quando compare un errore Permission denied, modificare immediatamente 755 in 777 non è un buon metodo di diagnosi.

Prima conviene controllare almeno i permessi, il proprietario e il gruppo della risorsa interessata.

ls -ld nome-directory
ls -l nome-file

Bisogna poi individuare quale utente o processo sta tentando l’operazione. Solo a quel punto si può stabilire se manca realmente un permesso oppure se il problema dipende dall’ownership o dalla configurazione del servizio.

Una cartella non scrivibile non richiede automaticamente 777

Si consideri una directory di upload. Se l’applicazione web deve crearvi dei file, deve disporre della scrittura sulla directory attraverso la classe di permessi che si applica al processo interessato.

Concedere la scrittura a tutti gli utenti può far scomparire l’errore, ma amplia inutilmente i privilegi.

La soluzione corretta consiste nell’identificare il soggetto che deve scrivere e configurare proprietario, gruppo e permessi in modo coerente.

Errori comuni con i permessi di file e cartelle

Usare 777 per risolvere qualsiasi problema

È probabilmente l’errore più conosciuto. Può eliminare alcune restrizioni, ma non identifica la causa del problema e concede privilegi molto ampi.

Applicare 755 sia ai file sia alle directory

Il fatto che 755 sia comune per le directory non significa che debba essere applicato automaticamente a ogni file. Molti normali file di un sito non necessitano del bit di esecuzione.

Confondere i permessi con la proprietà del file

Un valore numerico apparentemente corretto non garantisce che il processo interessato possa svolgere l’operazione richiesta. Bisogna considerare anche owner e group.

Applicare modifiche ricorsive senza distinguere file e cartelle

Su siti con migliaia di elementi una modifica ricorsiva errata può alterare rapidamente l’intera struttura. Prima di applicarla bisogna conoscere l’effetto del comando o dell’opzione utilizzata dal client FTP.

Concedere la scrittura quando serve soltanto la lettura

Ogni permesso aggiuntivo dovrebbe avere una motivazione. Se un processo deve soltanto leggere un file, concedergli anche la possibilità di modificarlo aumenta inutilmente i privilegi disponibili.

Quali permessi usare per un sito web?

Non esiste un valore valido per qualsiasi server, CMS o configurazione. In molti hosting Linux tradizionali si incontrano frequentemente 755 per le directory e 644 per i normali file, ma questi valori devono essere verificati rispetto alla configurazione effettiva dell’hosting.

Quando è necessaria la scrittura da parte di un gruppo possono essere appropriati valori differenti, come 775 per una directory o 664 per un file. La scelta deve derivare dal modello di utenti e gruppi utilizzato dal server.

Per questo motivo è più utile comprendere il significato dei numeri che memorizzare una tabella di valori “giusti”.

Tabella rapida dei permessi Linux

PermessoRappresentazioneDescrizione generale
400r——–Il proprietario può soltanto leggere
600rw——-Il proprietario può leggere e scrivere
644rw-r–r–Il proprietario legge e scrive; gruppo e altri leggono
700rwx——Solo il proprietario dispone dei tre permessi
755rwxr-xr-xIl proprietario può modificare; gruppo e altri non hanno scrittura
775rwxrwxr-xProprietario e gruppo dispongono anche della scrittura
777rwxrwxrwxTutte le categorie dispongono di tutti i permessi tradizionali

Come scegliere un permesso senza andare a tentativi

Prima di modificare i permessi conviene ragionare su tre elementi: chi deve accedere alla risorsa, quale operazione deve compiere e quali privilegi non sono necessari.

Se deve leggere, si concede la lettura. Se deve modificare, serve la scrittura. Nel caso delle directory deve essere considerato anche l’attraversamento. Poi si stabilisce se questi privilegi spettano al proprietario, al gruppo oppure anche agli altri utenti.

Solo alla fine si traduce il risultato nella forma numerica utilizzata da chmod, dal File Manager o dal client FTP.

In questo modo valori come 644, 755 o 775 smettono di essere numeri da provare finché il sito riprende a funzionare. Diventano la rappresentazione di una precisa scelta di accesso. Ed è proprio questa consapevolezza che permette di utilizzare i permessi Linux come parte della sicurezza del server, invece che come semplice soluzione a un errore di scrittura.