Come posso correggere gli errori sudo sulla mia istanza EC2 quando eseguo il comando sudo?
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:
-
Ottieni l'ID volume e il nome dispositivo del volume root dell'istanza originale.
-
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à.
-
Scollega il volume root dall'istanza originale e collegalo all'istanza di ripristino come volume secondario.
-
Connettiti all'istanza di ripristino con la tua nuova coppia di chiavi SSH.
-
Esegui il seguente comando per passare all'utente root:
[ec2-user ~]$ sudo su
-
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.
-
Per copiare il file /etc/sudoers dall'istanza di lavoro come backup, esegui il seguente comando:
[root ~]$ cp /etc/sudoers /mnt/etc/sudoers.bak
-
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
- Per smontare il volume principale, esegui il seguente comando:
[root ~]$ umount -fl /mnt
- 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.
- 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:
-
Apri la console Amazon EC2.
-
Nel pannello di navigazione, scegli Istanze, quindi seleziona l'istanza.
-
Scegli Stato dell’istanza, quindi scegli Arresta istanza.
-
In Arrestare l'istanza?, scegli Arresta.
-
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.
-
Avvia l'istanza, quindi accedi come ec2-user.
-
Per accedere al file /etc/sudoers, esegui il seguente comando pkexec:
pkexec /usr/sbin/visudo
-
Inserisci la password dell'utente root, quindi modifica il file /etc/sudoers.
-
Esegui un comando sudo per verificare che sudo funzioni correttamente.
Per utilizzare la console Amazon EC2 per eliminare i valori dei dati utente, inclusa la password dell'utente root, completa i seguenti passaggi:
- Apri la console Amazon EC2.
- Nel pannello di navigazione, scegli Istanze, quindi seleziona l'istanza.
- Scegli Operazioni, quindi scegli Impostazioni dell'istanza.
- 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?
Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa