Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo soluciono los errores de sudo en mi instancia de EC2 cuando ejecuto el comando sudo?
He editado o eliminado el archivo /etc/sudoers en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2). A continuación, recibo errores de sintaxis o sudo cuando ejecuto los comandos sudo.
Descripción corta
Al eliminar o configurar incorrectamente el archivo /etc/sudoers, se producen los siguientes errores de sintaxis 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»
Si recibe uno de estos errores, no puede conceder a los usuarios o grupos de usuarios permisos de acceso a los recursos del sistema. Para corregir el archivo /etc/sudoers, conecte el disco raíz a una instancia de rescate. Si no puede conectar un disco raíz a una instancia de rescate, use los datos del usuario para modificar el archivo.
Resolución
Si se muestran errores al poner en marcha comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Conexión de un disco raíz a una instancia de rescate
Se recomienda conectar un disco raíz a una instancia de rescate para modificar el archivo /etc/sudoers.
Requisitos previos: Al detener o iniciar una instancia, se eliminan los datos de los volúmenes del almacén de instancias. Realice una copia de seguridad de todos los datos del volumen del almacén de instancias que desee conservar. Para obtener más información, consulte Tipo de dispositivo raíz. Además, al detener o iniciar una instancia, la dirección IP pública de la instancia cambia. Si enruta el tráfico externo hacia la instancia, se recomienda utilizar una dirección IP elástica en lugar de una dirección IP pública.
Para conectar un disco raíz a una instancia de rescate, siga estos pasos:
-
Obtenga el ID del volumen y el nombre del dispositivo del volumen raíz de la instancia original.
-
Inicie una instancia de recuperación desde una imagen de máquina de Amazon (AMI) con la misma versión del sistema operativo Linux en la misma zona de disponibilidad.
-
Separe el volumen raíz de la instancia original y conéctelo a la instancia de recuperación como volumen secundario.
-
Conéctese a la instancia de recuperación con su nuevo par de claves SSH.
-
Ejecute el siguiente comando para cambiar al usuario raíz:
[ec2-user ~]$ sudo su
-
Para identificar la partición y el nombre del dispositivo de bloques, ejecute el siguiente comando desde la instancia de recuperación:
[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
En el ejemplo anterior, los nombres de los dispositivos de volumen /dev/xvda y /dev/xvdf son volúmenes particionados y /dev/xvdg no es un volumen particionado.
Si el volumen está particionado, ejecute el siguiente comando para montar la partición /dev/xvdf1 en lugar del dispositivo sin procesar /dev/xvdf:[root ~]$ mount -o nouuid /dev/xvdf1 /mnt
Si usa una instancia basada en AWS Nitro System, el nombre del dispositivo de volumen es similar a /dev/nvme[0-26]n1. Si la instancia se ha creado en Nitro System con NVMe, monte la partición en el directorio /mnt. Utilice el nombre del dispositivo que identificó con el comando lsblk:
[root ~]$ mount -o nouuid /dev/nvme1n1p1 /mnt
Para obtener más información, consulte Nombres de dispositivos para volúmenes en instancias de Amazon EC2.
-
Para copiar el archivo /etc/sudoers de la instancia de trabajo como copia de seguridad, ejecute el siguiente comando:
[root ~]$ cp /etc/sudoers /mnt/etc/sudoers.bak
-
Para crear un entorno chroot en el directorio /mnt, ejecute el siguiente comando:
[root ~]$ for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt
En el ejemplo anterior, los directorios /dev, /proc, /sys y /run se montan mediante enlaces desde el sistema de archivos raíz original. Esta configuración permite que los procesos que se ejecutan dentro del entorno chroot accedan a estos directorios del sistema. Para editar el archivo /etc/sudoers, ejecute el comando visudo en el entorno chroot:
[root ~]$ visudo
Nota: Debe ejecutar el comando visudo para editar el archivo sudoers. El comando visudo bloquea el archivo sudoers.
Si recibe errores del comando anterior, ejecute el siguiente comando diff para comparar el archivo /etc/sudoers con el nuevo archivo /etc/sudoers.bak:
[root ~]$ diff /etc/sudoers /etc/sudoers.bak
Nota: Si no hizo cambios personalizados antes de editar el archivo, restaure el archivo /etc/sudoers.bak en /etc/sudoers. Para salir del entorno chroot, ejecute el siguiente comando:
[root ~]$ exit
- Para desmontar el volumen raíz, ejecute el siguiente comando:
[root ~]$ umount -fl /mnt
- Separe el volumen raíz que estaba conectado como volumen secundario de la instancia de recuperación. A continuación, vuelva a conectarlo a la instancia original con el nombre del dispositivo del paso 2.
- Inicie la instancia original y, a continuación, confirme que los comandos sudo funcionan correctamente.
Uso de los datos del usuario para modificar el archivo
Nota: El siguiente método de solución de problemas utiliza la entrada de datos del usuario. Para usar este método, debe establecer una contraseña para el usuario raíz.
Para usar los datos del usuario para modificar el archivo, siga estos pasos:
-
Abra la consola de Amazon EC2.
-
En el panel de navegación, elija Instancias y, a continuación, seleccione la instancia.
-
Elija Estado de instancia y, a continuación, Detener instancia.
-
En ¿Detener instancia?, seleccione Detener.
-
Establezca una contraseña temporal para el usuario raíz.
Ejemplo: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: Esta contraseña utiliza texto sin formato para transmitir secretos y no es segura. Asegúrese de eliminar la contraseña temporal del usuario raíz después de completar los pasos de solución de problemas.
-
Inicie la instancia y, a continuación, inicie sesión como ec2-user.
-
Para acceder al archivo /etc/sudoers, ejecute el siguiente comando pkexec:
pkexec /usr/sbin/visudo
-
Introduzca la contraseña del usuario raíz y, a continuación, modifique el archivo /etc/sudoers.
-
Ejecute un comando sudo para comprobar que sudo funciona correctamente.
Para usar la consola de Amazon EC2 para eliminar los valores de los datos del usuario, incluida la contraseña del usuario raíz, siga estos pasos:
- Abra la consola de Amazon EC2.
- En el panel de navegación, elija Instancias y, a continuación, seleccione la instancia.
- Seleccione Acciones y, a continuación, seleccione Configuración de la instancia.
- Seleccione Editar datos de usuario y, a continuación, elimine todos los datos de usuario.
Para usar la interfaz de la AWS CLI para eliminar los valores de los datos del usuario, incluida la contraseña del usuario raíz, ejecute el siguiente comando modify-instance-attribute:
aws ec2 modify-instance-attribute --instance-id example-instance-id --user-data Value=""
Nota: Sustituya example-instance-id por el ID de su instancia.
Para comprobar que ha eliminado los datos de usuario, ejecute el siguiente comando describe-instance-attribute:
aws ec2 describe-instance-attribute --instance-id example-instance-id --attribute userData
Nota: Sustituya example-instance-id por el ID de su instancia.
Tras eliminar los datos de usuario, inicie la instancia.
Información relacionada
¿Por qué no puedo ejecutar los comandos sudo en mi instancia de Linux de EC2?

Contenido relevante
- preguntada hace 3 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace un díalg...
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- OFICIAL DE AWSActualizada hace 2 años