Perché non riesco a eseguire i comandi sudo sulla mia istanza EC2 per Linux?

5 minuti di lettura
0

Quando eseguo i comandi sudo sulla mia istanza Amazon Elastic Compute Cloud (Amazon EC2) per Linux, ricevo un errore.

Breve descrizione

Il seguente errore potrebbe verificarsi quando si tenta di eseguire comandi sudo su un'istanza Amazon EC2 per Linux:

  • "/usr/bin/sudo must be owned by uid 0 and have the setuid bit set"

Questo errore si verifica quando un utente non root è proprietario del file /usr/bin/sudo. Il file /usr/bin/sudo deve avere come proprietario root:root.

  • Errore "sudo: /etc/sudoers is world writable"

Questo errore si verifica quando il file /etc/sudoers dispone di autorizzazioni errate. Il file sudoers non può essere world-writable. Se un file è world-writable, significa che tutti possono scrivere sul file. Per impostazione predefinita, la modalità file per il file sudoers è 0440. Ciò consente al proprietario e al gruppo di leggere il file e, al contempo, proibisce a chiunque di scrivere sul file.

Per correggere questi errori, utilizza la console seriale Amazon EC2 o uno script di dati utente.

Risoluzione

Usa la console seriale EC2

Se hai attivato la console seriale EC2 per Linux, puoi usarla per risolvere i problemi relativi ai tipi di istanze supportate da Nitro. La console seriale consente di risolvere i problemi di avvio, configurazione di rete e configurazione SSH. La console seriale si connette all'istanza senza richiedere una connessione di rete funzionante. Per accedere alla console seriale è possibile usare la console Amazon EC2 o l'interfaccia della linea di comando AWS (AWS CLI).

Prima di utilizzare la console seriale concedi l'accesso alla console a livello di account. Quindi, crea delle policy AWS Identity and Access Management (IAM) che garantiscano l'accesso ai tuoi utenti IAM. Inoltre, ogni istanza che utilizza la console seriale deve includere almeno un utente basato su password. Se non riesci ad accedere all'istanza o alla console seriale, segui le istruzioni riportate nella sezione Metodo 2: Usa uno script di dati utente. Per maggiori informazioni sulla configurazione della console seriale EC2 per Linux, consulta la pagina Configurazione dell'accesso alla console seriale EC2.

Nota: se ricevi dei messaggi di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Usa uno script di dati utente

Usa uno script di dati utente per correggere gli errori sudo nelle seguenti distribuzioni:

  • Distribuzioni basate su Red Hat, come SUSE, CentOS, Amazon Linux 1, Amazon Linux 2, Amazon Linux 2023 e RHEL
  • Distribuzioni basate su Debian, come Ubuntu

Importante: questa procedura richiede l'interruzione e l'avvio dell'istanza EC2. Ciò potrebbe comportare la perdita di dati, l'interruzione di altre istanze e la modifica dell'indirizzo IP pubblico. Per ulteriori informazioni, consulta la pagina Cosa succede quando arresti un'istanza.

  1. Apri la console Amazon EC2, quindi seleziona l'istanza.

  2. Scegli Operazioni, Stato dell'istanza, Arresta.
    Nota: se non puoi selezionare Arresta, significa che l'istanza è già stata interrotta o il suo dispositivo root è un volume di archivio dell'istanza.

  3. Scegli Operazioni, Impostazioni dell'istanza, Modifica dati utente.

  4. Copia e incolla il seguente script nel campo Modifica dati utente, quindi scegli Salva. Assicurati di copiare l'intero script. Non inserire spazi aggiuntivi quando incolli lo script:
    Distribuzioni basate su Red Hat

    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
    PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
    rpm --setugids sudo && rpm --setperms sudo
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    Nota: le ultime due righe di comando recuperano le autorizzazioni, il proprietario e il gruppo per i plugin personalizzati della policy di sicurezza sudo nella directory /etc/sudoers.d/.
    Distribuzioni basate su Debian

    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
    /bin/chown root:root /usr/bin/sudo
    /bin/chmod 4111 /usr/bin/sudo
    /bin/chmod 644 /usr/lib/sudo/sudoers.so
    /bin/chmod 0440 /etc/sudoers
    /bin/chmod 750 /etc/sudoers.d
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    Le ultime due righe di comando recuperano le autorizzazioni, il proprietario e il gruppo per i plugin personalizzati della policy di sicurezza sudo nella directory /etc/sudoers.d/.
    Importante: le autorizzazioni per /usr/bin/sudo sono diverse nelle varie distribuzioni Linux. Prima di impostare definitivamente le autorizzazioni, verifica quelle di un'istanza con un sistema operativo simile. Esegui il comando ls -l /usr/bin/sudo, quindi usa le autorizzazioni in questo esempio come riferimento.
    Assicurati che l'istanza di riferimento sia un'installazione pulita e non in produzione, in modo da mantenere questo file invariato.

  5. Avvia l'istanza, quindi connettiti a essa tramite SSH.
    Nota: se ricevi un errore di sintassi, consulta la pagina Se modifico il file sudoers sulla mia istanza EC2, ricevo errori di sintassi quando eseguo i comandi sudo. Come faccio a risolvere questo problema?

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa