Impostazione dei permessi in /var/www/html con il bit SGID

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 invece
www-data (tipico in ambiente web), dobbiamo configurare correttamente
i permessi e impostare il bit SGID sulle directory.

Obiettivi

  1. Far sì che tutte le directory sotto /var/www/html abbiano il
    gruppo www-data e il bit SGID attivo, in modo che qualsiasi file
    creato o caricato al loro interno eredi automaticamente il gruppo
    www-data.
  2. Applicare permessi ragionevoli per directory (2775) e file (0644),
    così da garantire che i membri del gruppo www-data possano
    interagire correttamente con il contenuto, mantenendo un livello di
    sicurezza adeguato.
  3. Verificare che tutti i file e le directory appartengano
    effettivamente al gruppo www-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.

  1. 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).
  2. 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).

Per applicare questi permessi ricorsivamente:

1
2
3
4
5
# Imposta 2775 su tutte le directory
sudo find /var/www/html -type d -exec chmod 2775 {} \;

# Imposta 0644 su tutti i file
sudo find /var/www/html -type f -exec chmod 0644 {} \;

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.