Migliori pratiche per la messa in sicurezza dei Filesystem Linux con Permessi Speciali

Padroneggia la sicurezza del filesystem Linux sfruttando i permessi speciali: SUID, SGID e lo Sticky Bit. Questa guida spiega come applicare in sicurezza queste modalità utilizzando la notazione ottale per imporre il contesto di esecuzione, garantire l'ereditarietà del gruppo nelle cartelle condivise e prevenire l'eliminazione non autorizzata di file in directory come /tmp, fornendo esempi pratici per l'hardening del sistema.

37 visualizzazioni

Migliori Pratiche per la Sicurezza dei Filesystem Linux con Permessi Speciali

I permessi dei file Linux costituiscono le fondamenta della sicurezza del sistema, controllando chi può leggere, scrivere ed eseguire i file. Mentre i permessi standard di lettura/scrittura/esecuzione (rwx) sono fondamentali, Linux introduce i bit di permesso speciali—SUID, SGID e Sticky Bit—per gestire il contesto di esecuzione e l'integrità delle risorse condivise. Padroneggiare questi permessi consente agli amministratori di concedere in modo sicuro specifiche capacità elevate, garantendo la funzionalità necessaria e minimizzando al contempo i rischi per la sicurezza.

Questa guida approfondisce l'applicazione pratica e le implicazioni di sicurezza del Set User ID (SUID), Set Group ID (SGID) e dello Sticky Bit. Comprendere quando e come implementare queste funzionalità è cruciale per mantenere l'efficienza operativa senza compromettere la postura di sicurezza complessiva del tuo ambiente Linux.

Riepilogo sulla Comprensione dei Permessi Standard

Prima di esplorare i permessi speciali, è essenziale ricordare la notazione a triplette standard (rwx per proprietario, gruppo e altri). Questi permessi sono rappresentati numericamente utilizzando valori ottali (ad esempio, 755 o 644).

  • r (Lettura) = 4
  • w (Scrittura) = 2
  • x (Esecuzione) = 1

I permessi speciali modificano questo comportamento di base e sono rappresentati da una quarta cifra ottale iniziale (4, 2 o 1).

I Permessi Speciali: SUID, SGID e Sticky Bit

I permessi speciali aggiungono funzionalità oltre il controllo degli accessi standard. Sono solitamente indicati nell'output dell'elenco lungo (ls -l) con una s o t che sostituisce il flag x standard.

Permesso Valore Ottale Effetto
SUID (Set User ID) 4 Il file viene eseguito con i permessi del proprietario del file (non dell'utente che lo esegue).
SGID (Set Group ID) 2 Il file viene eseguito con i permessi del gruppo del file, oppure i nuovi file ereditano l'ID di gruppo della directory padre.
Sticky Bit 1 Impedisce agli utenti di eliminare o rinominare file di proprietà di altri utenti in una directory condivisa, anche se hanno il permesso di scrittura sulla directory.

1. Set User ID (SUID)

Il bit SUID è potente e potenzialmente pericoloso se usato impropriamente. Quando impostato su un file eseguibile, qualsiasi utente che esegue quel file esegue il processo con i permessi del proprietario.

Caso d'uso pratico: Utility che richiedono privilegi di root per eseguire un'attività specifica, ma non dovrebbero concedere un accesso root generale all'utente.

Esempio: SUID su /usr/bin/passwd

Il comando /usr/bin/passwd richiede tipicamente l'accesso root per modificare il file sicuro /etc/shadow. Ha il bit SUID impostato, consentendo a un utente standard di ottenere temporaneamente i privilegi del proprietario (root) solo per la durata dell'esecuzione di passwd per cambiare la propria password.

Visualizzazione SUID: Nota la s nello slot di esecuzione del proprietario:

ls -l /usr/bin/passwd
# Esempio di output: -rwsr-xr-x 1 root root ... /usr/bin/passwd

Impostazione SUID: Usa il valore ottale 4 combinato con i permessi standard (ad esempio, 755 diventa 4755):

# Supponendo che 'my_script' sia di proprietà di 'appuser'
chmod 4755 /percorso/del/mio_script

Avviso di Sicurezza per SUID: Non impostare mai il bit SUID su shell generiche (come /bin/bash) o script che interpretano input esterni, poiché ciò concede un accesso root illimitato a chiunque esegua il file.

2. Set Group ID (SGID)

Il bit SGID ha due funzioni principali a seconda che sia applicato a un file o a una directory.

A. SGID su File Eseguibili

Quando impostato su un file eseguibile, il processo viene eseguito con i permessi associati al gruppo proprietario del file, non al gruppo primario dell'utente.

B. SGID su Directory (Cruciale per Ambienti Condivisi)

Quando impostato su una directory, qualsiasi nuovo file o sottodirectory creata al suo interno eredita automaticamente il gruppo proprietario della directory padre, anziché il gruppo primario dell'utente che ha creato il nuovo file.

Caso d'uso pratico: Cartelle di progetto condivise in cui tutti i collaboratori devono avere un accesso di gruppo unificato per la collaborazione.

Impostazione SGID su una Directory: Usa il valore ottale 2 combinato con i permessi standard (ad esempio, 775 diventa 2775):

# Imposta la proprietà di gruppo su 'developers' e abilita SGID
chgrp developers /srv/shared_project
chmod 2775 /srv/shared_project

3. Lo Sticky Bit

Lo Sticky Bit (o Attributo di Salvataggio del Testo) è quasi esclusivamente utilizzato su directory condivise per controllare l'eliminazione dei file.

Quando lo Sticky Bit è impostato su una directory, solo il proprietario di un file all'interno di quella directory, o l'utente root, può eliminare o rinominare quel file, anche se la directory stessa consente l'accesso in scrittura agli 'altri' (o+w).

Caso d'uso pratico: Directory condivise pubbliche come /tmp o cartelle di upload dipartimentali in cui gli utenti dovrebbero poter gestire solo i file che hanno creato.

Esempio: La Directory /tmp

La directory /tmp ha spesso permessi come 1777. L'1 indica che lo Sticky Bit è attivo.

ls -ld /tmp
# Esempio di output: drwxrwxrwt 15 root root 4096 Mar 10 11:30 /tmp

La t alla fine conferma che lo sticky bit è impostato. Senza di esso, qualsiasi utente potrebbe eliminare i file creati da altri utenti in /tmp.

Impostazione dello Sticky Bit: Usa il valore ottale 1 combinato con i permessi standard (ad esempio, 777 diventa 1777):

chmod 1777 /var/public_uploads

Gestione Completa: Combinazione di Permessi Speciali

I permessi speciali vengono spesso combinati. La quarta cifra iniziale è la somma dei bit speciali desiderati (4+2+1 = 7).

Permessi Desiderati Valore Ottale
Standard rwxr-xr-x (755) 755
SUID + rwxr-xr-x 4755
SGID + rwxr-xr-x 2755
Sticky Bit + rwxrwxrwx 1777
SUID + SGID + Sticky Bit + rwx (Raramente necessario) 7777

Esempio di Combinazione di SGID e Sticky Bit per Cartelle Condivise:

Per creare una directory di collaborazione sicura e condivisa in cui tutti gli utenti fanno parte del gruppo 'team', i nuovi file ereditano il gruppo 'team' e gli utenti non possono eliminare i file degli altri:

  1. Imposta la proprietà di gruppo: chgrp team /data/projectX
  2. Applica SGID (2) + Standard rwx (7) + Sticky Bit (1) $\rightarrow 2+1 = 3$ per i bit speciali.
    • Usando la somma esplicita: SGID (2) + Sticky Bit (1) = 3. Permessi standard 775.
    • Comando completo: chmod 3775 /data/projectX

Quando si visualizza questo: drwxrwxrw t (o drwxrwsrw t se il bit di gruppo è stato utilizzato anche per l'esecuzione).

Migliori Pratiche per la Sicurezza dei Permessi Speciali

A causa dei privilegi elevati che SUID e SGID concedono, devono essere gestiti con estrema cautela.

  1. Limita l'Ambito di SUID: Imposta SUID solo su eseguibili binari compilati che sono necessari per le operazioni standard (come passwd, ping). Non applicare mai SUID a script interpretati (Shell, Python, Perl) a meno che non siano racchiusi in un eseguibile wrapper sicuro che convalida l'input.
  2. Audit Regolari: Scansiona periodicamente il filesystem alla ricerca di file SUID/SGID insoliti utilizzando il comando find:
    bash # Trova tutti i file con SUID impostato find / -perm /4000 2>/dev/null # Trova tutti i file con SGID impostato find / -perm /2000 2>/dev/null
  3. Usa SGID per la Coerenza del Gruppo: Preferisci SGID alla gestione manuale della proprietà di gruppo dei file nelle strutture dati condivise; automatizza l'ereditarietà del gruppo.
  4. Sticky Bit per Aree Pubbliche Scrivibili: Lo Sticky Bit è essenziale per qualsiasi directory destinata all'uso generale da parte degli utenti in cui l'eliminazione da parte di non proprietari deve essere limitata (ad esempio, /tmp, /var/tmp).

Impiegando SUID con cautela per i compiti elevati richiesti, SGID per una gestione coerente del gruppo e lo Sticky Bit per l'integrità delle directory condivise, gli amministratori possono costruire un ambiente filesystem Linux altamente funzionale ma robustamente protetto.