En la página se ofrecen consejos sobre cómo usar la utilidad de línea de comandos sudo
, gestionar el complemento sudoers
y evitar o solucionar los problemas que surjan.
Causas de los problemas
Durante cada ejecución del comando sudo
, se lleva a cabo el siguiente proceso para validar los archivos sudoers
:
- Se comprueba que la sintaxis sea correcta.
- El contenido se analiza para excluir algunos de los errores lógicos.
- Se comprueban la propiedad y los permisos.
La validación de los archivos sudoers
puede fallar por alguno de los siguientes errores:
Errores de sintaxis
Debe seguir reglas de sintaxis específicas cuando haga cambios en los archivos sudoers
. Cualquier desviación de esta sintaxis, incluidos, entre otros, la falta o el exceso de caracteres o el uso de comas inadecuadas, puede invalidar el archivo. Si el archivo no es válido, no se podrá usar la utilidad sudo
.
Solución
La solución es usar la utilidad visudo
para editar los archivos sudoers
. Valida el contenido del archivo antes de guardarlo y te avisa si hay algún problema. La utilidad visudo
se creó para editar el archivo de forma segura.
En los siguientes ejemplos se muestran muestras de sintaxis correctas e incorrectas:
Sintaxis correcta
user ALL=(ALL) ALL
Sintaxis incorrecta
user ALL=(ALL), ALL
Ejemplo de error de sintaxis
$ sudo useradd username
/etc/sudoers:20:17: syntax error
user ALL=(ALL), ALL
^
Errores lógicos
Los errores de este tipo pueden deberse a uno de los siguientes motivos:
- No se han entendido los principios del complemento
sudoers
. - Desviaciones de la sintaxis correcta.
Sin embargo, los errores lógicos no se reconocen durante la validación, ya que no infringen las reglas de sintaxis y, por lo tanto, son difíciles de detectar.
Solución
Debe leer atentamente la documentación oficial y seguir sus principios cuando edite el archivo.
Google también recomienda usar la utilidad visudo
para editar los archivos sudoers
, ya que puede detectar algunos tipos de errores lógicos, como los siguientes:
- Alias indefinidos o sin usar
- Referencias cíclicas
- Entradas duplicadas
Si se detecta algún problema, aparecerá un mensaje de advertencia.
En los siguientes ejemplos se muestran muestras lógicamente correctas e incorrectas:
Lógicamente correcto
barbara ALL=(ALL:ALL) /usr/bin/ls
Lógicamente incorrecto
barbara ALL=(4LL:ALL) /usr/bin/ls
^
barbara ALL=(ALL;ALL) /usr/bin/ls
^
bar6ara ALL=(ALL:ALL) /usr/bin/1s
^ ^
Permisos incorrectos
Además de los errores causados por el contenido de los archivos sudoers
, los permisos de archivo excesivos o la propiedad incorrecta también pueden provocar que falle la utilidad sudo
.
Solución
Verás una descripción de estos errores en el resultado del comando sudo
fallido. Lee la descripción del mensaje de error y haz las correcciones necesarias.
A continuación, se muestra un ejemplo de los permisos y la propiedad de archivo correctos.
$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
En el siguiente ejemplo se muestra el error que se produce cuando hay permisos redundantes para el grupo de permisos todos los usuarios:
$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit
En el siguiente ejemplo se muestra el error que se muestra cuando la propiedad es incorrecta. En este ejemplo, el propietario del archivo es un usuario con un ID que no es 0
(o un usuario que no es root
):
$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
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
Para obtener más información sobre la configuración de los archivos sudoers
, consulta el manual de sudoers.
Para saber cómo gestionar y usar el editor visudo
, consulta el manual de Visudo.
Consecuencias de los problemas
Los problemas en los archivos sudoers
provocan efectos negativos y pueden afectar a la funcionalidad de todo el sistema.
El comando
sudo
ya no funciona.Esta es la consecuencia más notable de los problemas en los archivos
sudoers
. Como consecuencia, los usuarios no podrán usar privilegios elevados, lo que bloqueará su actividad en el servidor.Sin embargo, las consecuencias más destructivas e impredecibles son los fallos de las aplicaciones que dependen del comando
sudo
. En algunos casos, esto puede provocar que la aplicación falle por completo, lo que puede dar lugar a un comportamiento inesperado, fallos o pérdida de datos. Otro ejemplo es cuando una aplicación llama al comandosudo
durante la secuencia de arranque del SO y falla. Puede provocar un fallo del SO o que la secuencia de arranque se quede bloqueada.Posible acceso no autorizado al sistema.
Otra consecuencia arriesgada es que los problemas en los archivos
sudoers
pueden provocar un acceso no autorizado al sistema. Esto puede ocurrir debido a un error lógico, cuando las reglas de los archivossudoers
otorgan permisos excesivos a algunos usuarios o grupos.Esto también puede ocurrir porque el propietario del sistema inhabilita o debilita temporalmente las defensas del sistema para iniciar sesión y solucionar el problema.
Recuperación en caso de problemas
Si pierdes los privilegios de usuario elevados o no puedes usar el comando sudo
debido a problemas con los archivos sudoers
, utiliza la cuenta de superusuario para la recuperación.
En los sistemas operativos de tipo Unix, el superusuario es una cuenta de usuario especial con el ID 0, que suele llamarse root
. El superusuario tiene acceso completo a los recursos del sistema y puede realizar cualquier tarea administrativa sin restricciones.
Aunque interactuar con el SO en nombre del superusuario se considera una práctica poco segura, puede ser la única opción para determinadas tareas, como la recuperación de los archivos sudoers
.
Si inicias sesión directamente como superusuario, el SO estará expuesto a riesgos. Para evitar este riesgo, Google recomienda que uses una función de secuencia de comandos de inicio, ya que esta secuencia se ejecuta en nombre del superusuario.
Consulta más información sobre las secuencias de comandos de inicio de Compute Engine.
Para recuperar los archivos sudoers
con una secuencia de comandos de inicio, haz lo siguiente:
Crea una copia de seguridad de la secuencia de comandos de inicio actual si ya está en uso. El método de copia de seguridad depende de cómo se configure la secuencia de comandos de inicio.
startup-script
Si el contenido de la secuencia de comandos se define directamente en el valor de los metadatos, puedes copiarlo en el segmento de Cloud Storage, en el archivo local o en cualquier otro almacenamiento privado temporal.
startup-script-url
Si el contenido de la secuencia de comandos ya está en el almacenamiento remoto y se usa su dirección URL, puedes quitar temporalmente la clave de metadatos
startup-script-url
para inhabilitar la secuencia de comandos de inicio actual.Actualiza el script de inicio con la siguiente secuencia de comandos:
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers
Consulta más información sobre lo que hacen los comandos
-
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s")
-
Este comando crea una copia del archivo
/etc/sudoers
con otro nombre y elimina el archivo original. El nombre del nuevo archivo contiene una marca de tiempo al final para que sea único (por ejemplo,sudoers.backup.1672527600
). -
echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
-
Este comando crea el archivo
/etc/sudoers
que se había eliminado anteriormente Google Cloud con una sola regla que permite a los usuarios autorizados Google Cloud con acceso a la VM ejecutar cualquier comando en nombre de cualquier usuario del sistema. Esta regla siempre existe de forma predeterminada en un archivo adicional/etc/sudoers.d/google_sudoers
. -
chown 0:0 /etc/sudoers
-
Este comando asigna el propietario del archivo
/etc/sudoers
a un usuario cuyo ID es0
y un grupo de propietarios a un grupo cuyo ID es0
. -
chmod 0440 /etc/sudoers
-
Este comando asigna permisos de solo lectura al archivo
/etc/sudoers
y permite que solo su propietario y el grupo de propietarios puedan leerlo.
-
Detén la VM si está en ejecución. Reinicia la VM para activar la ejecución de la secuencia de comandos de inicio.
Conéctate a la VM y edita el archivo
sudoers
dañado para recuperarlo.sudo visudo /etc/sudoers.backup.TIMESTAMP
Guarda los cambios y sustituye el archivo
/etc/sudoers
actual por el que acabas de editar.sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
Comprueba que se ha solucionado el problema original con el uso del comando
sudo
y los privilegios elevados.Elimina la secuencia de comandos de inicio temporal y restaura la original si se ha usado.
¿Qué debo hacer ahora?
- Consulta cómo recuperar una máquina virtual inaccesible o dañada.
- Consulta cómo añadir un disco a otra máquina virtual.