Permessi speciali in Linux: SUID, SGID e Bit Sticky

Ti sei mai trovato in una situazione in cui dovevi eseguire un’operazione su un sistema Linux, solo per ricevere una frustrante negazione di accesso? Bene, dì addio a questi problemi e benvenuto nel mondo dei permessi speciali in Linux!

Questo tutorial è il tuo biglietto per padroneggiare i punti più raffinati dei permessi speciali in Linux — Sticky Bit, Set User ID (SUID) e Set Group ID (SGID). Questi permessi speciali offrono un livello più elevato di controllo della sicurezza.

Continua a leggere e gestisci i tuoi file in modo sicuro con precisione e fiducia!

Prerequisiti

Prima di immergerti nei dettagli dei permessi speciali in Linux, assicurati di avere una macchina Linux. Questo tutorial utilizza Ubuntu 22.04 LTS (Jammy Jellyfish) per dimostrazioni pratiche.

Eseguire File con Permessi Speciali in Linux (SUID)

I permessi dei file Linux determinano tipicamente la capacità di un utente di leggere, scrivere o eseguire un file basandosi sui loro permessi e su quelli del loro gruppo. Tuttavia, ci sono situazioni in cui un utente deve eseguire un file con i permessi del proprietario del file piuttosto che con i propri.

Ad esempio, considera un programma che solo gli utenti root possono eseguire, ma c’è bisogno che un utente normale lo esegua per una specifica attività. In tali casi, SUID diventa inestimabile.

Per vedere come impostare i permessi SUID, segui questi passaggi:

1. Apri il terminale ed esegui i seguenti comandi per creare un utente (useradd) chiamato A-user (arbitrario) e assegnagli una password (passwd).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Successivamente, esegui il comando stat qui sotto per visualizzare i permessi esistenti del comando cat.

stat /usr/bin/cat

Fai attenzione ai permessi di accesso qui sotto, poiché ne avrai bisogno per confronti successivi:

  • 0755 – Consente al file di essere eseguito con i permessi del proprietario, fornendo privilegi elevati agli utenti non privilegiati durante l’esecuzione del file.
  • -rwxr-xr-x – Imposta il permesso al proprietario di leggere, scrivere ed eseguire il file (rwx), mentre i membri del gruppo e altri utenti possono leggere ed eseguire il file (r-x e r-x).
Viewing access permissions of the cat command

3. Ora, esegui il comando chmod qui sotto, che non fornisce output ma imposta il bit SUID sul comando cat.

Questo comando permette al comando cat di essere eseguito con i permessi del proprietario del file anziché con i permessi dell’utente che sta eseguendo il comando.

? Nota che l’uso di SUID dovrebbe essere fatto con cautela, poiché può potenzialmente introdurre rischi per la sicurezza se non implementato correttamente. Assicurati di applicare SUID solo a comandi e file fidati.

sudo chmod u+s /usr/bin/cat

4. Una volta impostato il bit SUID, esegui il seguente comando stat per verificare il bit SUID ricontrollando i permessi del comando cat.

stat /usr/bin/cat

Se avrai successo, vedrai quanto segue, dove farai un confronto con le informazioni che hai annotato al passo due:

  • 0755 cambiato in 4755, dove il numero 4 rappresenta il bit SUID.
  • -rwxr-xr-x cambiato in -rwsr-xr-x, dove s rappresenta il permesso di esecuzione dell’utente (x) rispettivamente.
Verifying the SUID bit

5. Esegui il seguente comando cat per testare i permessi dell’utente attualmente connesso per accedere al file /etc/shadow. Questo file è un file di sistema critico che memorizza le password degli utenti crittografate e informazioni correlate, alle quali solo un utente root può accedere.

Per impostazione predefinita, il comando cat ti consente di visualizzare il contenuto di un file in Linux. Ma questo comportamento non è sempre vero per ogni file.

cat /etc/shadow

Compare il messaggio sottostante poiché l’utente attuale non ha il permesso di accedere al file.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

6. Ora, esegui ogni comando qui sotto per passare (su) al nuovo utente (A-user) e prova ad accedere nuovamente al file /etc/shadow.

Questa volta, il comando cat viene eseguito con i permessi del proprietario del file (di solito root) anziché con i permessi dell’utente che ha eseguito il comando.

# Passa ad A-user
su A-user
# Visualizza il contenuto del file /etc/shadow
cat /etc/shadow

Dato che hai temporaneamente concesso il permesso ad A-user di leggere il contenuto di quel file, otterrai un output simile a quello qui sotto.

Viewing the /etc/shadow file’s content

7. Per motivi di sicurezza, esegui i seguenti comandi per exit dal utente corrente (A-user) e ripristina i permessi del comando cat al suo stato originale.

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Infine, esegui il comando qui sotto per verificare che il bit SUID sia stato rimosso.

stat /usr/bin/cat

Nota che il bit SUID 4 e s non sono più presenti nei permessi di accesso.

Confirming the SUID bit removal

Abilitazione dei flussi di lavoro collaborativi nelle directory Linux (SGID)

Eseguire file con permessi speciali in Linux tramite SUID funziona senza dubbio bene. Ma cosa succede se miri a flussi di lavoro collaborativi, dove più utenti collaborano ai progetti? Tipicamente, è necessario assicurarsi che i file appena creati ereditino la proprietà del gruppo della directory genitore.

Di fronte a questo scenario, l’SGID si rivela essere il game-changer. Questa potente funzionalità semplifica la gestione delle risorse condivise e migliora i flussi di lavoro basati su gruppi negli ambienti Linux.

Per vedere come funziona il SGID, creerai un gruppo, aggiungerai utenti ad esso, imposterai il permesso SGID su una directory e ne testerai la funzionalità come segue:

1. Esegui i seguenti comandi per accedere come utente root e creare un nuovo gruppo chiamato demo (arbitrario). Questo gruppo sarà utilizzato per testare la funzionalità SGID.

Questi comandi non

# Passa a root
sudo su
# Crea un nuovo gruppo
groupadd demo
Switching to root and creating a job

2. Successivamente, esegui i comandi seguenti per creare due utenti (userA e userB) che utilizzerai per simulare un ambiente collaborativo.

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. Dopo aver creato nuovi utenti, esegui i comandi usermod seguenti, che non producono output nel terminale ma aggiungono gli utenti (userA e userB) al gruppo demo.

usermod -aG demo userA
usermod -aG demo userB

4. Ora, esegui ciascun comando seguente, crea una directory (mkdir) chiamata /demo-dir (arbitraria) e imposta le proprietà di utente e gruppo della directory su userA e demo, rispettivamente.

? Quando questi comandi sono eseguiti con successo, non producono output, il che si applica a tutta questa guida.

# Crea una directory
mkdir /demo-dir
# Cambia le proprietà della directory
chown userA:demo /demo-dir

5. Successivamente, esegui il seguente comando ls per visualizzare i permessi della directory /demo-dir.

ls -ld /demo-dir/

L’output qui sotto verifica che l’utente della directory /demo-dir sia impostato su userA e il gruppo su demo.

Viewing the /demo-dir directory’s permissions

6. Con le autorizzazioni verificate, esegui il comando chmod qui sotto per impostare il bit SGID sulla directory /demo-dir/ come segue:

  • g+s – Set the SGID bit on the /demo-dir/ directory.
  • o-rwx – Remove all permissions (read, write, execute) for others.
  • u+rwx – Grant read, write, and execute permissions to the owner.
  • g+rwx – Grant read, write, and execute permissions to the group.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. Una volta impostato il bit SGID, esegui il seguente comando per verificare le autorizzazioni della directory /demo-dir.

stat /demo-dir

Se avrai successo, vedrai il bit SGID impostato, rappresentato dal numero 2 prima delle autorizzazioni in modalità ottale e s nel punto dell’autorizzazione di esecuzione del proprietario del gruppo (x) (rws).

Verifying the SGID bit set to the /demo-dir directory

8. Successivamente, esegui ciascun comando qui sotto per creare una directory /home per userA.

mkdir /home/userA
chown userA:userA /home/userA

9. Esegui i seguenti comandi per passare (su) a userA e creare un file (touch) chiamato textA.txt (arbitrario) nella directory /demo-dir.

Questi comandi non generano output (cosa valida per l’intero tutorial), ma verificherai le autorizzazioni del file nel passaggio successivo.

# Passare a userA
su - userA
# Cambiare directory
cd /demo-dir
# Creare un file di testo
touch textA.txt

10. Esegui il comando ls qui sotto per visualizzare le autorizzazioni del file textA.txt.

ls -l textA.txt

Di seguito, il proprietario del gruppo del file textA.txt è demo, che è il gruppo primario del creatore, userA. I membri del gruppo demo possono leggere e modificare il file, mentre altri possono solo leggerlo.

Per garantire che i nuovi file nella directory /demo-dir ereditino la proprietà di gruppo della directory, deve essere impostato un bit SGID sulla directory, che verrà trattato nei passaggi successivi.

Verifying the textA.txt file’s permissions

11. Ora, eseguire i seguenti comandi per uscire dall’utente corrente (userA) e impostare il bit SGID (chmod g+s) nella directory /demo-dir

# Uscire da userA
exit
# Impostare SGID su /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Una volta impostato il bit SGID, eseguire il seguente comando per verificare il bit SGID aggiunto alla directory /demo-dir.

stat /demo-dir

Come mostrato di seguito, noterai che il bit SUID 2 è stato aggiunto, e c’è una s nella posizione dell’esecuzione del proprietario del gruppo. Questo output conferma che il bit SGID è stato impostato con successo sulla directory /demo-dir.

Verifying the SGID is set to the /demo-dir directory

13. Successivamente, tornare a userA e creare un altro file chiamato testA.txt (arbitrario) nella directory /demo-dir.

# Tornare a userA
su - userA
# Cambiare directory
cd /demo-dir
# Creare un file di testo
touch testA.txt

14. Una volta creato, eseguire il comando ls qui sotto per controllare la proprietà del nuovo file (testA.txt).

ls -l testA.txt

Se il SGID funziona come previsto, l’output mostra che mentre l’utente userA è il proprietario, il possesso del gruppo è demo a causa del bit SGID impostato sulla directory /demo-dir.

Verifying permissions of the testA.txt file

15. Ora, crea una directory /home per userB per testare ulteriormente la funzionalità SGID.

mkdir /home/userB
chown userB:userB /home/userB

16. Passa a userB e crea un file chiamato testB.txt (arbitrario) nella stessa directory /demo-dir.

# Passa a userB
su - userB
# Cambia directory
cd /demo-dir
# Crea un file di testo
touch testB.txt
Switching to userB and creating the testB.txt file

17. Visualizza (ls) le informazioni sul nuovo file (testB.txt).

ls -l testB.txt

Verifica il possesso del file textB.txt.

Checking the ownership of the textB.txt file

Protezione dei file all’interno delle directory (Bit sticky)

L’abilitazione dei flussi di lavoro collaborativi nelle directory Linux favorisce il lavoro di squadra e la collaborazione senza soluzione di continuità. Ma quando è necessario stabilire un ambiente sicuro per gestire i file in modo efficace, le autorizzazioni Bit sticky faranno al caso tuo.

Impostando il Bit sticky, essenzialmente metti “le chiavi del castello” nelle mani del proprietario del file, del proprietario della directory o dell’utente root. In questo modo si garantisce che solo loro abbiano l’autorità per eliminare o rinominare il file all’interno della directory, fornendo un ulteriore salvagente per i dati sensibili.

Per impostare le autorizzazioni Bit sticky, devi prima creare una directory condivisa con i seguenti passaggi:

1. Accedi come utente root e crea una directory (condivisa) dove più utenti possono creare file.

# Passa a root
sudo su
# Crea una directory (condivisa)
mkdir /shared-dir

2. Successivamente, esegui i seguenti comandi per cambiare i permessi della directory /shared-dir per concedere i permessi di scrittura a tutti.

Il primo numero (1) in 1777 imposta il Sticky Bit, mentre il resto (777) rende la directory leggibile, scrivibile ed eseguibile da tutti.

# Cambia i permessi, imposta il Sticky Bit
chmod 1777 /shared-dir
# Visualizza i permessi della directory
ls -ld /shared-dir

Le seguenti sono caratteristiche o attributi dello Sticky Bit in un sistema Linux:

Feature Function
Directory Protection When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users.
Shared Directories The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users.

Di seguito, puoi vedere la lettera ‘t‘ nella parte finale del campo dei permessi, che indica che lo Sticky Bit è impostato sulla directory /shared-dir.

Viewing permissions of the /shared-dir directory

3. Passa a userA e crea un file chiamato fileA.txt (arbitrario) nella directory /shared-dir:

# Passa a userA
su - userA
# Crea un file di testo
touch /shared-dir/fileA.txt

4. Esci da userA, passa a userB e crea un altro file chiamato fileB.txt (arbitrario) nella stessa directory /shared-dir.

# Uscita utenteA
exit
# Passare a utenteB
su - userB
# Creare un file di testo
touch /shared-dir/fileB.txt

5. Ora, uscire da utenteB, passare a utenteA e tentare di eliminare il file fileB.txt di utenteB.

# Uscita utenteB
exit
# Passare a utenteA
su - userA
# Eliminare un file di proprietà di utenteB
rm /shared-dir/fileB.txt

Otterrai un output come quello sotto poiché solo il proprietario del file può apportare modifiche o eliminarlo.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Infine, eseguire il seguente elenco di comandi (ls) per elencare tutti i file nella directory condivisa (/shared-dir).

ls /shared-dir/

Se le autorizzazioni Sticky Bit funzionano, vedrai che il file fileB.txt creato da utenteB è al sicuro e non è stato eliminato.

Confirming the fileB.txt file still exists

Conclusione

Avvolgendo questa esplorazione delle autorizzazioni speciali in Linux, hai sbloccato un robusto set di strumenti: SUID, SGID e Sticky Bit. Armato di questa conoscenza, ora puoi regolare l’accesso e proteggere i tuoi file con precisione.

Ma non fermarti qui! Perché non provare a configurare una directory condivisa con SGID e sperimentare come i file ereditano la proprietà del gruppo? Il mondo Linux è tuo e con ogni impresa, padroneggerai l’arte di proteggere il tuo sistema con maestria!

Source:
https://adamtheautomator.com/special-permissions-in-linux/