¿Cómo puedo solucionar los errores de sudo en mi instancia de Amazon EC2 o Lightsail cuando ejecuto el comando sudo?
He cambiado la propiedad del archivo /etc/sudoers o lo he eliminado en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) o Amazon Lightsail. Ahora, recibo errores cuando ejecuto los comandos sudo.
Descripción corta
Al eliminar o configurar incorrectamente el archivo /etc/sudoers, es posible que recibas los siguientes errores de sintaxis o sudo:
- "sudo: /etc/sudoers is owned by uid 1000, should be 0"
- "sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set"
- "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 recibes uno de estos errores, no puedes conceder a los usuarios o grupos de usuarios acceso a los recursos del sistema. Para corregir los archivos /etc/sudoers y /usr/bin/sudo en Amazon EC2 o Lightsail, utiliza un script de inicio o de datos de usuario para modificar los permisos de los archivos. O bien, conecta el disco raíz a una instancia de rescate para realizar cambios manualmente.
Nota: Si has eliminado el archivo /etc/sudoers, debes usar un script de datos de usuario para volver a crearlo.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Uso de un script de inicio o de datos de usuario para modificar los permisos del archivo
Para resolver los mensajes de error "owned by uid 1000" o "must be owned by uid 0", debes modificar los permisos de los archivos /etc/sudoers y /usr/bin/sudo.
Para las instancias de Amazon EC2, sigue estos pasos para usar un script de datos de usuario para modificar los permisos de los archivos:
-
Abre la consola de Amazon EC2.
-
En el panel de navegación, elige Instancias y, a continuación, selecciona la instancia de EC2.
-
Elige Estado de instancia y, a continuación, Detener instancia.
-
Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
-
Selecciona Editar datos de usuario.
-
Introduce el siguiente script:
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 # To fix error sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set. use below commands chown -R root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo # to fix below sudo errors: #sudo: /etc/sudoers is owned by uid 1000, should be 0 #sudo: no valid sudoers sources found, quitting #sudo: error initializing audit plugin sudoers_audit chown -R root:root /etc/sudoers chown -R root:root /etc/sudoers.d/ sudo service sshd restart --//-- -
Inicia la instancia y espera a que pase las comprobaciones de estado.
-
Conéctate a la instancia y, a continuación, ejecuta el siguiente comando para validar que los permisos de los archivos /etc/sudoers y /usr/bin/sudo son correctos:
sudo ls -la /etc/sudoers sudo ls -la /usr/bin/sudoEl siguiente ejemplo de salida muestra los permisos correctos:
$sudo ls -la /etc/sudoers /usr/bin/sudo -r--r----- 1 root root 1714 Jun 25 13:38 /etc/sudoers -rwsr-xr-x 1 root root 281624 Jun 27 2023 /usr/bin/sudo
Para las instancias de Lightsail, sigue estos pasos para usar un script de inicio para modificar los permisos de los archivos:
-
Abre la consola de Lightsail.
-
Elige Instantáneas y, a continuación, selecciona la instantánea de la instancia.
-
Elige Acciones y, a continuación, selecciona Crear nueva instancia.
-
En Opcional, elige + Agregar script de inicio.
-
Introduce el siguiente script de inicio:
#!/bin/bash # To fix error sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set. use below commands chown -R root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo # to fix below sudo errors: #sudo: /etc/sudoers is owned by uid 1000, should be 0 #sudo: no valid sudoers sources found, quitting #sudo: error initializing audit plugin sudoers_audit chown -R root:root /etc/sudoers chown -R root:root /etc/sudoers.d/ sudo service sshd restart --//-- -
Elige Crear instancia.
-
Conéctate a la instancia y, a continuación, ejecuta el siguiente comando para comprobar los permisos de los archivos /etc/sudoers y /usr/bin/sudo:
sudo ls -la /etc/sudoers sudo ls -la /usr/bin/sudoEl siguiente ejemplo de salida muestra los permisos correctos:
$sudo ls -la /etc/sudoers /usr/bin/sudo -r--r----- 1 root root 1714 Jun 25 13:38 /etc/sudoers -rwsr-xr-x 1 root root 281624 Jun 27 2023 /usr/bin/sudo
Conexión de un disco raíz a una instancia de rescate
Configuración de una instancia para detenerla e iniciarla
Nota: Al detener e iniciar una instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica para enrutar el tráfico externo hacia la instancia en lugar de una dirección IP pública. Si usas Amazon Route 53, es posible que tengas que actualizar los registros DNS de Route 53 cuando cambies la dirección IP pública.
Antes de detener e iniciar la instancia, lleva a cabo las siguientes acciones:
- Si tu instancia usa un almacén de instancias, guarda los datos del volumen del almacén de instancias en un almacenamiento persistente. Por ejemplo, puedes guardar los datos en volúmenes de Amazon Elastic Block Store (Amazon EBS) o en buckets de Amazon Simple Storage Service (Amazon S3).
Importante: Amazon EC2 elimina los datos del almacén de instancias cuando detienes la instancia. - Crea una instantánea de tu volumen de Amazon EBS. Si tienes problemas, puedes usar la instantánea para restaurar la instancia.
- Elimina temporalmente la instancia de tu grupo de Amazon EC2 Auto Scaling para no terminar accidentalmente la instancia al detenerla.
Nota: EC2 Auto Scaling podría terminar las instancias detenidas en un grupo de escalamiento automático en función de tu configuración de protección de escalamiento horizontal. Las instancias que inicies con Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk pueden estar en un grupo de escalamiento automático. - Establece el comportamiento de apagado de las instancias en Detener para asegurarte de que las instancias no terminen cuando las detengas.
Conexión del disco raíz a una instancia de rescate
Sigue estos pasos:
-
Obtén el ID del volumen y el nombre del dispositivo del volumen raíz de la instancia original.
-
Inicia 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.
-
Separa el volumen raíz de la instancia original y conéctalo a la instancia de recuperación como volumen secundario.
-
Conéctate a la instancia de recuperación con tu nuevo par de claves SSH.
-
Ejecuta el siguiente comando para cambiar al usuario raíz:
sudo su -
Para identificar la partición y el nombre del dispositivo de bloques, ejecuta el siguiente comando desde la instancia de recuperación:
lsblkResultado de ejemplo
[root ~]$ lsblk NAME 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 diskEn el ejemplo anterior, los nombres de los dispositivos de volumen xvda y xvdf son volúmenes particionados y xvdg no es un volumen particionado.
Si el volumen está particionado, ejecuta el siguiente comando para montar la partición /dev/xvdf1 en lugar del dispositivo sin procesar /dev/xvdf:mount -o nouuid /dev/xvdf1 /mntSi usas una instancia creada en AWS Nitro System, el nombre del dispositivo de volumen usa el formato /dev/nvme[0-26]n1. Ejecuta el siguiente comando para montar la partición en el directorio /mnt:
mount -o nouuid /dev/nvme1n1p1 /mntNota: Sustituye /dev/nvme1n1p1 por el nombre del dispositivo que has identificado en el comando lsblk. Para más información, consulta 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, ejecuta el siguiente comando:
cp /etc/sudoers /mnt/etc/sudoers.bak -
Para crear un entorno chroot en el directorio /mnt, ejecuta el siguiente comando:
for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt
El enlace de comando anterior monta los directorios /dev, /proc, /sys y /run del 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, ejecuta el comando siguiente en el entorno chroot:
visudo
Asegúrate de que el archivo tenga la siguiente configuración predeterminada:
# This file MUST be edited with the 'visudo' command as root. # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # See the man page for details on how to write a sudoers file. Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
Nota: El comando visudo bloquea el archivo sudoers.
Si recibes errores cuando ejecutas el comando anterior, ejecuta el siguiente comando diff para comparar el archivo /etc/sudoers con el nuevo archivo /etc/sudoers.bak:
diff /etc/sudoers /etc/sudoers.bak
Nota: Si no hiciste cambios personalizados antes de editar el archivo, restaura el archivo /etc/sudoers.bak en /etc/sudoers. Para salir del entorno chroot, ejecuta el siguiente comando:
exit
- Para desmontar el volumen raíz, ejecuta el siguiente comando:
umount -fl /mnt
- Separa el volumen raíz que conectaste como volumen secundario de la instancia de recuperación. A continuación, vuelve a conectarlo a la instancia original con el nombre del dispositivo del paso 2.
- Inicia la instancia original y, a continuación, ejecuta el siguiente comando para confirmar que los comandos sudo funcionan correctamente:
sudo su
Uso de los datos de usuario para modificar el contenido del archivo o volver a crear el archivo
Nota: Para utilizar el siguiente método de solución de problemas, debes establecer una contraseña para el usuario raíz.
Volver a crear el archivo
Para acceder a la instancia como usuario raíz y poder volver a crear el archivo, sigue estos pasos:
-
Abre la consola de Amazon EC2.
-
En el panel de navegación, elige Instancias y, a continuación, selecciona la instancia.
-
Elige Estado de instancia y, a continuación, Detener instancia.
-
En ¿Detener instancia?, selecciona Detener.
-
Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
-
Selecciona Editar datos de usuario.
-
Introduce el siguiente script para establecer una contraseña temporal para el usuario raíz:
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úrate de eliminar la contraseña temporal del usuario raíz después de completar los pasos de solución de problemas.
-
Inicia la instancia y, a continuación, inicia sesión como ec2-user.
-
Para volver a crear al archivo /etc/sudoers, ejecuta el siguiente comando pkexec:
pkexec /usr/sbin/visudo -
Introduce la contraseña del usuario raíz y modifica el archivo /etc/sudoers con los valores siguientes:
# This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
- Ejecuta un comando sudo para comprobar que sudo funciona correctamente.
- Detén la instancia.
Eliminar el script de datos de usuario
Para usar la consola de Amazon EC2 para eliminar los valores de los datos del usuario, incluida la contraseña del usuario raíz, sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, elige Instancias y, a continuación, selecciona la instancia.
- Selecciona Acciones y, a continuación, selecciona Configuración de la instancia.
- Selecciona Editar datos de usuario y, a continuación, elimina todos los datos de usuario.
Para usar la AWS CLI para eliminar los valores de los datos de usuario, incluida la contraseña del usuario raíz, ejecuta el siguiente comando modify-instance-attribute:
aws ec2 modify-instance-attribute --instance-id example-instance-id --user-data Value=""
Nota: Sustituye example-instance-id por el ID de tu instancia.
Para comprobar que has eliminado los datos de usuario, ejecuta el siguiente comando describe-instance-attribute:
aws ec2 describe-instance-attribute --instance-id example-instance-id --attribute userData
Nota: Sustituye example-instance-id por el ID de tu instancia.
Tras eliminar los datos de usuario, inicia la instancia.
Información relacionada
¿Por qué no puedo ejecutar los comandos sudo en mi instancia de Linux de EC2?
- Temas
- Compute
- Etiquetas
- LinuxAmazon EC2Amazon Lightsail
- Idioma
- Español

Contenido relevante
- preguntada hace un año
- preguntada hace 8 meses
- preguntada hace 7 meses
- Respuesta aceptadapreguntada hace 10 meses
OFICIAL DE AWSActualizada hace 3 años