¿Por qué no puedo ejecutar los comandos sudo en mi instancia de Linux de EC2?

5 minutos de lectura
0

Cuando ejecuto comandos sudo en mi instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2), aparece un error.

Breve descripción

Al intentar ejecutar comandos sudo en una instancia de Linux de Amazon EC2 puede producirse el siguiente error:

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

Este error se produce cuando un usuario no raíz es propietario del archivo /usr/bin/sudo. El archivo /usr/bin/sudo debe tener root:root como propietario.

  • Error «sudo: /etc/sudoers is world writable»

Este error se produce cuando el archivo /etc/sudoers tiene los permisos incorrectos. El archivo sudoers no puede tener permisos de escritura para todos los usuarios. Si un archivo tiene permisos de escritura para todos los usuarios, cualquier persona puede escribir en él. De forma predeterminada, el modo del archivo sudoers es 0440, lo cual permite al propietario y al grupo leer el archivo, pero impide que cualquier persona escriba en él.

Para corregir estos errores, utilice la consola serie de Amazon EC2 o un script de datos de usuario.

Solución

Uso de la consola serie de EC2

Si ha activado la consola serie de EC2 para Linux, puede usarla para solucionar problemas de tipos de instancia basados en Nitro compatibles. La consola serie le ayuda a solucionar problemas de arranque, configuración de red y configuración SSH. La consola serie se conecta a la instancia sin necesidad de una conexión de red activa. Puede utilizar la consola de Amazon EC2 o la Interfaz de la línea de comandos de AWS (AWS CLI) para acceder a la consola serie.

Antes de utilizar la consola serie, conceda acceso a la consola a nivel de cuenta. A continuación, cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a sus usuarios de IAM. Además, cada instancia que utilice la consola serie debe incluir al menos un usuario con contraseña. Si no puede acceder a su instancia o a la consola serie, siga las instrucciones de la sección Método 2: Uso de un script de datos de usuario. Para obtener más información sobre la configuración de la consola serie de EC2 para Linux, consulte Configurar el acceso a la consola serie de EC2.

Nota: Si se muestran errores al ejecutar comandos de AWS CLI, compruebe si está utilizando la versión más reciente de AWS CLI.

Uso de un script de datos de usuario

Utilice un script de datos de usuario para corregir los errores de sudo en las siguientes distribuciones:

  • Distribuciones basadas en Red Hat, como SUSE, CentOS, Amazon Linux 1, Amazon Linux 2, Amazon Linux 2023 y RHEL
  • Distribuciones basadas en Debian, como Ubuntu

Importante: Este procedimiento requiere que detenga e inicie la instancia de EC2. Esto puede provocar la pérdida de datos, la detención de otras instancias y cambios en la dirección IP pública. Para obtener más información, consulte Qué ocurre cuando se detiene una instancia.

  1. Abra la consola de Amazon EC2 y, a continuación, seleccione la instancia.

  2. Elija Acciones, Estado de la instancia y Detener.
    Nota: Si la opción Detener no está disponible, significa que la instancia ya está detenida o que el dispositivo raíz es un volumen de almacén de instancias.

  3. Elija Acciones, Configuración de la instancia y Editar datos de usuario.

  4. Copie el siguiente script y péguelo en el campo Editar datos de usuario y, a continuación, seleccione Guardar. Asegúrese de copiar todo el script y no introduzca espacios adicionales al pegarlo:
    Distribuciones basadas en 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: Las dos últimas líneas del comando recuperan los permisos, el propietario y el grupo de complementos personalizados de la política de seguridad de sudo en el directorio /etc/sudoers.d/.
    Distribuciones basadas en 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 {} \;
    --//

    Las dos últimas líneas del comando recuperan los permisos, el propietario y el grupo de complementos personalizados de la política de seguridad de sudo en el directorio /etc/sudoers.d/.
    Importante: Los permisos para /usr/bin/sudo difieren en las distintas distribuciones de Linux. Antes de configurar los permisos de forma permanente, verifique los permisos de una instancia con un sistema operativo similar. Ejecute ls -l /usr/bin/sudo y, a continuación, utilice los permisos de este ejemplo como referencia.
    Asegúrese de que la instancia de referencia sea una instalación limpia y no esté en producción, de modo que este archivo permanezca inalterado.

  5. Inicie la instancia y, a continuación, conéctese a ella mediante SSH.
    Nota: Si se muestra un error de sintaxis, consulte He editado el archivo sudoers en mi instancia de EC2 y ahora recibo errores de sintaxis al intentar ejecutar comandos sudo. ¿Cómo soluciono el problema?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 10 meses