Risolvere i problemi relativi ai file sudoers


La pagina fornisce suggerimenti sull'utilizzo dell'utilità a riga di comando sudo, sulla gestione del plug-in sudoers e sulla prevenzione o sulla correzione dei problemi che si verificano.

Cause dei problemi

Durante ogni esecuzione del comando sudo, viene eseguita la seguente procedura per convalidare i file sudoers:

  • La sintassi viene verificata per verificarne la correttezza.
  • I contenuti vengono analizzati per escludere alcuni errori logici.
  • La proprietà e le autorizzazioni vengono controllate.

La convalida dei file sudoers potrebbe non riuscire a causa di uno dei seguenti errori:

Quando apporti modifiche ai file sudoers, devi seguire regole di sintassi specifiche. Qualsiasi deviazione da questa sintassi, ad esempio un carattere mancante o in eccesso o una virgola inappropriata, può rendere il file non valido. L'invalidazione del file rende impossibile l'utilizzo dell'utilità sudo.

Soluzione:

La soluzione è utilizzare l'utilità visudo per modificare i file sudoers. Conferma la validità dei contenuti del file prima del salvataggio e invia una notifica in caso di problemi. L'utilità visudo è stata creata per modificare il file in modo sicuro.


Gli esempi riportati di seguito mostrano esempi di sintassi corretti ed errati:

Sintassi corretta

user   ALL=(ALL) ALL

Sintassi errata

user   ALL=(ALL), ALL

Esempio di errore di sintassi

$ sudo useradd username
/etc/sudoers:20:17: syntax error
user   ALL=(ALL), ALL
                ^

Gli errori di questo tipo possono essere causati da uno dei seguenti fattori:

  • Un malinteso dei principi del plug-in sudoers.
  • Deviazioni dalla sintassi corretta.

Tuttavia, gli errori logici non vengono riconosciuti durante la convalida, perché non violano le regole di sintassi e sono quindi difficili da rilevare.

Soluzione:

Quando modifichi il file, devi leggere attentamente la documentazione ufficiale e rispettare i relativi principi.

Google consiglia inoltre di utilizzare l'utilità visudo per modificare i file sudoers, in quanto può rilevare alcuni tipi di errori logici, ad esempio:

  • Alias non definiti o non utilizzati
  • Riferimenti ciclici
  • Voci duplicate

Se vengono rilevati problemi, viene visualizzato un messaggio di avviso.


Gli esempi riportati di seguito mostrano esempi sia corretti che non corretti dal punto di vista logico:

Logicamente corretto

barbara   ALL=(ALL:ALL) /usr/bin/ls

Logicamente errato

barbara   ALL=(4LL:ALL) /usr/bin/ls
               ^
barbara   ALL=(ALL;ALL) /usr/bin/ls
                  ^
bar6ara   ALL=(ALL:ALL) /usr/bin/1s
   ^                             ^

Oltre agli errori causati dai contenuti dei file sudoers, anche le autorizzazioni dei file eccessive o la proprietà errata possono causare l'errore dell'utilità sudo.

Soluzione:

Viene visualizzata una descrizione di questi errori nell'output del comando sudo non riuscito. Leggi la descrizione del messaggio di errore e apporta le correzioni necessarie.


Di seguito è riportato un esempio di autorizzazioni e proprietà dei file corrette

$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username

L'esempio seguente mostra l'errore visualizzato quando sono presenti autorizzazioni ridondanti per il gruppo di autorizzazioni Tutti gli utenti:

$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

L'esempio seguente mostra l'errore visualizzato per la proprietà errata. In questo esempio, un utente con un ID diverso da 0 (o un utente diverso da root) è il proprietario del file:

$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

Per ulteriori informazioni sulla configurazione dei file sudoers, leggi il manuale Sudoers.

Per scoprire come gestire e utilizzare l'editor visudo, consulta il manuale di Visudo.

Conseguenze dei problemi

I problemi nei file sudoers causano effetti negativi e possono influire sulla funzionalità dell'intero sistema.

  • Il comando sudo non funziona più.

    Questa è la conseguenza più evidente dei problemi nei file sudoers. La conseguenza è l'impossibilità di utilizzare privilegi elevati per gli utenti, il che blocca la loro attività sul server.

    Tuttavia, le conseguenze più distruttive e imprevedibili sono i guasti delle applicazioni che si basano sul comando sudo. In alcuni casi, questo può causare il fallimento completo dell'applicazione, con conseguenti comportamenti imprevisti, arresti anomali o perdita di dati. Un altro esempio è quando il comando sudo viene chiamato da un'applicazione durante la sequenza di avvio del sistema operativo e non va a buon fine. Può causare un errore del sistema operativo o bloccare la sequenza di avvio.

  • Possibile accesso non autorizzato al sistema.

    Un'altra conseguenza rischiosa è che i problemi nei file sudoers possono portare a accessi non autorizzati al sistema. Questo può accadere a causa di un errore logico, quando le regole nei file sudoers assegnano a alcuni utenti o gruppi autorizzazioni eccessive.

    Ciò può accadere anche perché il proprietario del sistema disattiva temporaneamente o attenua le difese del sistema per accedere e risolvere il problema.

Ripristino in caso di problemi

Se perdi i privilegi utente elevati o non riesci a utilizzare il comando sudo a causa di problemi con i file sudoers, utilizza l'account superutente per il recupero.

Nei sistemi operativi Unix-like, il superutente è un account utente speciale con ID uguale a 0, che in genere viene chiamato root. Il superutente ha accesso completo alle risorse di sistema e può eseguire qualsiasi attività amministrativa senza restrizioni. Sebbene l'interazione con il sistema operativo per conto del superutente sia generalmente considerata non sicura, potrebbe essere l'unica opzione per determinate attività come il recupero dei file sudoers.

L'accesso diretto come superutente espone il sistema operativo a rischi. Per evitare questo rischio, Google consiglia di utilizzare una funzionalità di script di avvio, poiché questo script viene eseguito per conto del superutente.

Scopri di più sugli script di avvio di Compute Engine.

Per recuperare i file sudoers con uno script di avvio:

  1. Crea una copia di backup dello script di avvio corrente se è già in uso. L'approccio di backup dipende dalla configurazione dello script di avvio.

    Se i contenuti dello script sono impostati direttamente nel valore dei metadati, puoi copiarli nel bucket Cloud Storage, nel file locale o in qualsiasi altro spazio di archiviazione privato temporaneo.

    Se i contenuti dello script sono già nello spazio di archiviazione remoto e il suo indirizzo URL viene utilizzato, puoi semplicemente rimuovere temporaneamente la chiave di metadati startup-script-url per disattivare lo script di avvio corrente.

  2. Aggiorna lo script di avvio con la seguente sequenza di comandi:

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers
    

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s")

    Questo comando crea una copia del file /etc/sudoers con un nome diverso ed elimina il file originale. Il nome del nuovo file contiene un timestamp alla fine per univocità (ad es. sudoers.backup.1672527600).

    echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

    Questo comando crea il file eliminato in precedenza /etc/sudoers con una singola regola che consente agli utenti Google Cloud autorizzati con accesso alla VM di eseguire qualsiasi comando per conto di qualsiasi utente di sistema. Questa regola esiste sempre per impostazione predefinita in un file aggiuntivo/etc/sudoers.d/google_sudoers.

    chown 0:0 /etc/sudoers

    Questo comando imposta il proprietario del file /etc/sudoers su un utente il cui ID è 0 e un gruppo di proprietari su un gruppo il cui ID è 0.

    chmod 0440 /etc/sudoers

    Questo comando imposta le autorizzazioni per il file /etc/sudoers su di sola lettura e consente solo al proprietario e al gruppo proprietario di leggere il file.

  3. Arresta la VM, se è in esecuzione. Riavvia la VM per attivare l'esecuzione dello script di avvio.

  4. Connettiti alla VM e modifica il file sudoers danneggiato per recuperarlo.

    sudo visudo /etc/sudoers.backup.TIMESTAMP
  5. Salva le modifiche e sostituisci il file /etc/sudoers corrente con quello appena modificato.

    sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
  6. Assicurati che il problema originale relativo all'utilizzo del comando sudo e dei privilegi elevati sia stato risolto.

  7. Rimuovi lo script di avvio temporaneo e ripristina quello originale, se è stato utilizzato.

Passaggi successivi