Sicurezza Linux · 5 min read · Nov 14, 2025

Come consentire agli utenti di modificare file in modo sicuro utilizzando sudoedit su Linux

Supponiamo che tu sia un amministratore di sistema in un’azienda in cui i team lavorano principalmente su Linux con privilegi limitati. Ora immagina una situazione in cui i membri di uno dei team - nell’ambito di un nuovo lavoro - devono modificare frequentemente un file che richiede privilegi di superutente. Cosa faresti?

Un’opzione è quella di dare loro accesso ‘sudo’, ma sarebbe come dare a uno sconosciuto accesso all’intera casa quando tutto ciò di cui hanno bisogno è essere solo in una delle tue stanze - ciò che intendo dire è che l’accesso ‘sudo’ predefinito consentirà loro di fare qualsiasi cosa che richiede privilegi di root, quando tutto ciò che è richiesto è la possibilità di modificare un certo file di sistema.

Data la flessibilità che ‘sudo’ offre, l’altra opzione che hai è quella di modificare la politica ‘sudo’ in modo che venga concessa solo la possibilità di modificare il file in questione. Ad esempio, qualcosa del genere:

%newsudo ALL = vim /path/to/file

Sebbene questa sia senza dubbio una soluzione molto migliore rispetto a fornire l’accesso completo a sudo, c’è ancora una falla che qualcuno potrebbe sfruttare.

Per capire di cosa sto parlando, considera uno scenario in cui l’accesso limitato di cui sopra viene fornito al gruppo e qualcuno apre il file in questione per la modifica utilizzando il comando ‘sudo’.

Ora, una mente intelligente con una buona conoscenza di vim saprebbe che può avviare una nuova shell dall’interno dell’editor - tutto ciò che deve fare è eseguire il seguente comando vim:

:shell

Questo ti porterà immediatamente in una shell interattiva. Se stai provando questi passaggi sulla tua macchina, esegui semplicemente il comando ‘whoami’ e capirai di quale falla stavo parlando - Sì, sei nella shell come root.

Ecco un esempio di screenshot:

Non c’è bisogno di dire che lo scopo di fornire accesso alla modifica a un solo file è stato vanificato, e l’utente può fare QUALSIASI COSA ora.

Vediamo se abbiamo qualche altra opzione. Esiste un tag NOEXEC che puoi utilizzare nella tua voce sudoers:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC fondamentalmente ti consente di impedire a un programma eseguito da sudo di eseguire altri programmi. Quindi, è questa la soluzione definitiva? Purtroppo no. Per quanto riguarda le ragioni, ecco come il manuale sudoers spiega questo tag:

noexec  
Molti sistemi che supportano librerie condivise hanno la capacità di sovrascrivere le funzioni di libreria predefinite puntando una variabile di ambiente (di solito LD_PRELOAD) a una libreria condivisa alternativa. Su tali sistemi, la funzionalità noexec di sudo può essere utilizzata per impedire a un programma eseguito da sudo di eseguire altri programmi. Nota, tuttavia, che questo si applica solo agli eseguibili nativi collegati dinamicamente. Gli eseguibili collegati staticamente e gli eseguibili esterni in esecuzione sotto emulazione binaria non sono interessati.  
...  
...  
...  
Per abilitare noexec per un comando, utilizza il tag NOEXEC come documentato nella sezione Specifica Utente sopra. Ecco di nuovo quell'esempio:  
  
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi  
Questo consente all'utente aaron di eseguire /usr/bin/more e /usr/bin/vi con noexec abilitato. Questo impedirà a quei due comandi di eseguire altri comandi (come una shell). Se non sei sicuro se il tuo sistema è in grado di supportare noexec, puoi sempre semplicemente provarlo e controllare se le escape della shell funzionano quando noexec è abilitato.  
Nota che limitare le escape della shell non è una panacea. I programmi in esecuzione come root sono ancora in grado di molte operazioni potenzialmente pericolose (come cambiare o sovrascrivere file) che potrebbero portare a un'inaspettata escalation dei privilegi.  
...  
...  
...

Se leggi attentamente il testo evidenziato in grassetto, saprai che NOEXEC ha il suo insieme di limitazioni.

Quindi, qual è la soluzione più affidabile? Bene, è sudoedit. Anche il manuale sudoers raccomanda questo strumento:

Nel caso specifico di un editor, un approccio più sicuro è dare all'utente il permesso di eseguire sudoedit.

Sudoedit è un comando integrato che consente agli utenti di modificare file in modo sicuro. Secondo la pagina man di sudo, ‘sudoedit’ è equivalente all’esecuzione di ‘sudo’ con l’opzione della riga di comando ‘-e’.

Perché è meglio

Con ‘sudoedit’, gli utenti hanno la possibilità di utilizzare il proprio editor preferito - il che è diverso dalla soluzione di cui abbiamo discusso all’inizio di questo tutorial in cui gli utenti sono costretti a utilizzare l’editor Vim - consentendo loro di godere delle proprie personalizzazioni. E il motivo più grande di tutti, con ‘sudoedit’, l’utente modificherà il file come se stesso, e non come ‘root’.

Come funziona Sudoedit

Per utilizzare sudoedit, la voce nella sudoers dovrebbe essere, ad esempio, qualcosa del genere:

%newsudo ALL = sudoedit /path/to/file

E gli utenti che fanno parte del gruppo ‘newsudo’ saranno in grado di modificare il file eseguendo il seguente comando:

sudoedit /path/to/file

Quindi, ciò che farà questo comando è, prima creerà una copia temporanea del file che desideri modificare. Poi, il comando cercherà le variabili di ambiente SUDO_EDITOR, VISUAL e EDITOR (in quest’ordine) per determinare quale editor dovrebbe essere invocato per aprire la copia temporanea che è appena stata creata. Dopo che l’utente ha terminato il lavoro di modifica, le modifiche vengono copiate di nuovo nel file originale.

Ecco la spiegazione dettagliata dalla pagina man del comando ‘sudo’:

-e, --edit  
Modifica uno o più file invece di eseguire un comando. In luogo di un nome di percorso, la stringa "sudoedit" è utilizzata quando si consulta la politica di sicurezza. Se l'utente è autorizzato dalla politica, vengono eseguiti i seguenti passaggi:  
 1. Vengono create copie temporanee dei file da modificare con  
 il proprietario impostato sull'utente invocante.  
 2. L'editor specificato dalla politica viene eseguito per modificare i  
 file temporanei. La politica sudoers utilizza le  
 variabili di ambiente SUDO_EDITOR, VISUAL e EDITOR (in  
 quest'ordine). Se nessuna delle variabili SUDO_EDITOR, VISUAL o EDITOR  
 è impostata, viene utilizzato il primo programma elencato nell'opzione editor  
 sudoers(5).  
 3. Se sono stati modificati, i file temporanei vengono  
 copiati di nuovo nella loro posizione originale e le versioni temporanee vengono rimosse.  
Se il file specificato non esiste, verrà creato. Nota che, a differenza della maggior parte dei comandi eseguiti da sudo, l'editor viene eseguito con l'ambiente dell'utente invocante non modificato. Se, per qualche motivo, sudo non è in grado di aggiornare un file con la sua versione modificata, l'utente riceverà un avviso e la copia modificata rimarrà in un file temporaneo.

Ormai dovresti avere un’idea di base su ‘sudoedit’, inclusi quando usarlo e perché è meglio utilizzare ‘sudo’ quando tutto ciò che vuoi è modificare un file, o alcuni file. Naturalmente, come qualsiasi altro strumento legato alla sicurezza, ‘sudoedit’ ha avuto la sua parte di exploit, ma è comunque una soluzione raccomandata in molti casi d’uso.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.