Come posso correggere gli errori sudo sulla mia istanza EC2 quando eseguo il comando sudo?

6 minuti di lettura
0

Ho modificato o eliminato il file /etc/sudoers sulla mia istanza Amazon Elastic Compute Cloud (Amazon EC2). Pertanto ricevo errori di sintassi o sudo quando eseguo comandi sudo.

Breve descrizione

Quando elimini o configuri erroneamente il file /etc/sudoers, si verificano i seguenti errori di sintassi o sudo:

  • "/etc/sudoers:abc:x: syntax error"
  • "sudo: unable to open /etc/sudoers: No such file or directory"
  • "sudo: no valid sudoers sources found, quitting"
  • "sudo: error initializing audit plugin sudoers_audit"

Se ricevi uno di questi errori, non puoi concedere a utenti o gruppi di utenti le autorizzazioni di accesso alle risorse di sistema. Per correggere il file /etc/sudoers, collega il disco root a un'istanza di ripristino. Se non riesci a collegare un disco root a un'istanza di ripristino, utilizza i dati utente per modificare il file.

Risoluzione

Se ricevi errori quando esegui i comandi della linea di comando di AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Collega un disco root a un'istanza di ripristino

È consigliabile collegare un disco root a un'istanza di ripristino per modificare il file /etc/sudoers.

Prerequisiti: Quando si arresta o si avvia un'istanza, i dati sui volumi dell'archivio dell'istanza vengono eliminati. Esegui il backup di tutti i dati sul volume dell'archivio dell'istanza che desideri conservare. Per ulteriori informazioni, consulta Tipo di dispositivo root. Inoltre, quando arresta o avvia un'istanza, l'indirizzo IP pubblico dell'istanza cambia. Se indirizzi il traffico esterno alla tua istanza, è consigliabile utilizzare un indirizzo IP elastico anziché un indirizzo IP pubblico.

Per collegare un disco root a un'istanza di ripristino, completa i seguenti passaggi:

  1. Crea una nuova coppia di chiavi.

  2. Ottieni l'ID volume e il nome dispositivo del volume root dell'istanza originale.

  3. Arresta l'istanza originale.

  4. Avvia un'istanza di ripristino da un'Amazon Machine Image (AMI) con la stessa versione del sistema operativo Linux (OS) nella stessa zona di disponibilità.

  5. Scollega il volume root dall'istanza originale e collegalo all'istanza di ripristino come volume secondario.

  6. Connettiti all'istanza di ripristino con la tua nuova coppia di chiavi SSH.

  7. Esegui il seguente comando per passare all'utente root:

    [ec2-user ~]$ sudo su
  8. Per identificare il nome e la partizione del dispositivo bloccato, esegui il seguente comando dall'istanza di ripristino:

    [root ~]$ lsblkNAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0    8G  0 disk
    └─xvda1 202:1    0    8G  0 part /
    xvdf    202:80   0  101G  0 disk
    └─xvdf1 202:81   0  101G  0 part
    xvdg    202:96   0   30G  0 disk

    Nell'esempio precedente, /dev/xvda e /dev/xvdf sono nomi di dispositivi di volumi partizionati, mentre /dev/xvdg non corrisponde a un volume partizionato.
    Se il volume è partizionato, esegui il seguente comando per montare la partizione /dev/xvdf1 invece del dispositivo raw /dev/xvdf:

    [root ~]$ mount -o nouuid  /dev/xvdf1 /mnt

    Se utilizzi un'istanza basata su AWS Nitro System, il nome del dispositivo del volume è simile a /dev/nvme[0-26]n1. Se la tua istanza è costruita su Nitro System con NVMe, monta la partizione nella directory /mnt. Utilizza il nome del dispositivo che hai identificato con il comando lsblk:

    [root ~]$ mount -o nouuid  /dev/nvme1n1p1 /mnt

    Per ulteriori informazioni, consulta Nomi dei dispositivi per i volumi sulle istanze Amazon EC2.

  9. Per copiare il file /etc/sudoers dall'istanza di lavoro come backup, esegui il seguente comando:

    [root ~]$ cp /etc/sudoers /mnt/etc/sudoers.bak
  10. Per creare un ambiente chroot nella directory /mnt, esegui questo comando:

[root ~]$ for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt

Nell'esempio precedente, le directory /dev, /proc, /sys e /run sono montate in bind dal file system root originale. Tale configurazione consente ai processi eseguiti all'interno dell'ambiente chroot di accedere a queste directory di sistema. Per modificare il file /etc/sudoers, esegui il comando visudo all'interno dell'ambiente chroot:

[root ~]$ visudo

Nota: è necessario eseguire il comando visudo per modificare il file sudoers. Il comando visudo blocca il file sudoers.
Se ricevi errori dal comando precedente, esegui il seguente comando diff per confrontare il file /etc/sudoers con il nuovo file /etc/sudoers.bak:

[root ~]$ diff /etc/sudoers /etc/sudoers.bak

Nota: se non hai apportato modifiche personalizzate prima di modificare il file, ripristina il file /etc/sudoers.bak in /etc/sudoers. Per uscire dall'ambiente chroot, esegui il seguente comando:

[root ~]$ exit
  1. Per smontare il volume principale, esegui il seguente comando:
[root ~]$ umount -fl /mnt
  1. Scollega il volume root collegato come volume secondario dall'istanza di ripristino. Quindi ricollegalo all'istanza originale con il nome del dispositivo del passaggio 2.
  2. Avvia l'istanza originale e verifica che i comandi sudo funzionino correttamente.

Utilizza i dati utente per modificare il file

Nota: il seguente metodo di risoluzione dei problemi utilizza l']( dei dati utente[. Per utilizzare questo metodo, è necessario impostare una password per l'utente root.

Per utilizzare i dati utente per modificare il file, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.

  2. Nel pannello di navigazione, scegli Istanze, quindi seleziona l'istanza.

  3. Scegli Stato dell’istanza, quindi scegli Arresta istanza.

  4. In Arrestare l'istanza?, scegli Arresta.

  5. Imposta una password temporanea per l'utente root.
    Esempio:

                Content-Type: multipart/mixed; boundary="//"
                MIME-Version: 1.0
    
                --//
                Content-Type: text/cloud-config; charset="us-ascii"
                MIME-Version: 1.0
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment; filename="cloud-config.txt"
    
                #cloud-config
                cloud_final_modules:
                - [scripts-user, always]
    
                --//
                Content-Type: text/x-shellscript; charset="us-ascii"
                MIME-Version: 1.0
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment; filename="userdata.txt"
    
                #!/bin/bash
                chpasswd <<<"root:root"
                --//

    Importante: questa password utilizza testo semplice per trasmettere informazioni segrete e non è sicura. Assicurati di rimuovere la password temporanea dall'utente root dopo aver completato la procedura di risoluzione dei problemi.

  6. Avvia l'istanza, quindi accedi come ec2-user.

  7. Per accedere al file /etc/sudoers, esegui il seguente comando pkexec:

    pkexec /usr/sbin/visudo
  8. Inserisci la password dell'utente root, quindi modifica il file /etc/sudoers.

  9. Esegui un comando sudo per verificare che sudo funzioni correttamente.

  10. Arresta l'istanza.

Per utilizzare la console Amazon EC2 per eliminare i valori dei dati utente, inclusa la password dell'utente root, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.
  2. Nel pannello di navigazione, scegli Istanze, quindi seleziona l'istanza.
  3. Scegli Operazioni, quindi scegli Impostazioni dell'istanza.
  4. Scegli Modifica dati utente, quindi elimina tutti i dati utente.

Per utilizzare l'interfaccia AWS CLI per eliminare i valori dei dati utente, inclusa la password dell'utente root, esegui il seguente comando modify-instance-attribute:

aws ec2 modify-instance-attribute --instance-id example-instance-id --user-data Value=""

Nota: sostituisci a ** example-instance-id** il tuo ID istanza.

Per verificare di aver rimosso i dati utente, esegui il seguente comando describe-instance-attribute:

aws ec2 describe-instance-attribute --instance-id example-instance-id --attribute userData

Nota: sostituisci a ** example-instance-id** il tuo ID istanza.

Dopo aver eliminato i dati utente, avvia l'istanza.

Informazioni correlate

Perché non posso eseguire i comandi sudo sulla mia istanza EC2 Linux?

AWS UFFICIALE
AWS UFFICIALEAggiornata un mese fa