Introduzione
Quando più utenti devono collaborare su un progetto in un ambiente
Linux, nasce l’esigenza di gestire correttamente i permessi su file e
directory. Per evitare che i file creati da un singolo utente assumano
come owner e group il suo gruppo primario, possiamo sfruttare il bit
SGID (Set Group ID) sulle directory condivise.
In questo articolo vedremo come impostare il bit SGID solo sulle
directory — perché è pensato esclusivamente per gestire l’ereditarietà
del gruppo —, così da semplificare la collaborazione in una struttura
come /var/www/html
.
Il problema
Supponiamo che un utente (es. user1
) carichi o modifichi file via FTP
nella directory /var/www/html
. Di default, ogni file nuovo assume come
proprietario user1
e come gruppo il gruppo primario di user1
(es.user1
stesso). Se vogliamo che il gruppo di questi file sia invecewww-data
(tipico in ambiente web), dobbiamo configurare correttamente
i permessi e impostare il bit SGID sulle directory.
Obiettivi
- Far sì che tutte le directory sotto
/var/www/html
abbiano il
gruppowww-data
e il bit SGID attivo, in modo che qualsiasi file
creato o caricato al loro interno eredi automaticamente il gruppowww-data
. - Applicare permessi ragionevoli per directory (2775) e file (0644),
così da garantire che i membri del gruppowww-data
possano
interagire correttamente con il contenuto, mantenendo un livello di
sicurezza adeguato. - Verificare che tutti i file e le directory appartengano
effettivamente al gruppowww-data
.
Passo 1: Assegnare proprietà e gruppo a /var/www/html
Per prima cosa, se non l’hai già fatto, assegna ricorsivamente owner e
gruppo www-data:www-data
a /var/www/html
:
1 | sudo chown -R www-data:www-data /var/www/html |
Questo fa sì che l’utente e il gruppo su tutti i file e directory
all’interno di /var/www/html
siano ora www-data:www-data
.
Passo 2: Impostare i permessi sui file e sulle directory
Distinguiamo due situazioni: directory e file.
- Directory: vogliamo che abbiano i permessi 2775 (rwxrwsr-x).
- Il “2” all’inizio indica il bit SGID, così che tutti i nuovi
file/dir ereditino il gruppo della cartella madre (in questo
caso,www-data
). - “775” permette al proprietario (
www-data
) e al gruppo di
leggere, scrivere ed entrare nella directory; gli “altri”
possono solo leggere ed entrare (r-x
).
- Il “2” all’inizio indica il bit SGID, così che tutti i nuovi
- File: vogliamo che abbiano i permessi 0644 (rw-r--r--).
- In questo modo, il proprietario e il gruppo possono leggere e
scrivere, mentre gli altri possono solo leggere (nessuna
esecuzione di default).
- In questo modo, il proprietario e il gruppo possono leggere e
Per applicare questi permessi ricorsivamente:
1 | # Imposta 2775 su tutte le directory |
In questo modo, ogni directory avrà:rwxrwsr-x www-data www-data (2775)
, mentre ogni file avrà:rw-r--r-- www-data www-data (0644)
.
Passo 3: Verificare che il bit SGID sia applicato solo alle directory
Il bit SGID va usato solo sulle directory, non sui file. Se vuoi
controllare che nelle directory sia attivo, puoi eseguire:
1 | ls -ld /var/www/html |
Vedrai un output simile:
1 | drwxrwsr-x 5 www-data www-data 4096 Jan 22 12:34 /var/www/html |
dove la presenza di s
nella sezione dei permessi del gruppo (rws
)
indica che la directory ha il bit SGID attivo.
Se accidentalmente hai applicato SGID anche ai file, puoi rimuoverlo dai
soli file con:
1 | sudo find /var/www/html -type f -exec chmod g-s {} \; |
Passo 4: Verificare l’appartenenza al gruppo www-data
Infine, se vuoi controllare che tutti i file e le directory
appartengano al gruppo www-data
(e segnalare se qualcosa non va), puoi
usare un comando find
dedicato:
1 | sudo find /var/www/html -not -group www-data -exec ls -l {} \; |
Se non viene stampato nulla, significa che tutti gli elementi presenti
in /var/www/html
hanno già il gruppo www-data
.
Conclusioni
Configurare correttamente i permessi e il bit SGID in /var/www/html
è
fondamentale per gestire un ambiente di sviluppo o produzione in cui più
utenti collaborano sui file. Impostando i permessi 2775 sulle directory
e 0644 sui file, e assicurandoti che il bit SGID sia attivo solo sulle
directory, potrai lavorare in modo coerente e ordinato, senza dover
correggere manualmente le impostazioni di proprietà ogni volta che
vengono caricati nuovi file.