Solución de problemas de archivos sudoers


En la página, se proporcionan sugerencias para usar la utilidad de la línea de comandos de sudo, administrar el complemento de 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 verifica que la sintaxis sea correcta.
  • El contenido se analiza para excluir algunos de los errores lógicos.
  • Se verificaron la propiedad y los permisos.

Es posible que la validación de los archivos sudoers falle debido a cualquiera de los siguientes errores:

Errores de sintaxis

Cuando realices cambios en los archivos sudoers, debes seguir reglas de sintaxis específicas. Cualquier desviación de esta sintaxis, incluidos, sin límites, un carácter faltante o adicional, o una coma inadecuada, puede hacer que el archivo sea no válido. La invalidación del archivo hace que sea imposible usar la utilidad sudo.

Solución

La solución es usar la utilidad visudo para editar los archivos sudoers. Esta valida el contenido del archivo antes de guardarlo y notifica en caso de problemas. La utilidad visudo se creó para editar el archivo de manera segura.


En los siguientes ejemplos, se muestran ejemplos de sintaxis correcta e incorrecta:

Sintaxis correcta

user   ALL=(ALL) ALL

Sintaxis incorrecta

user   ALL=(ALL), ALL

Ejemplo de errores de sintaxis

$ sudo useradd username
/etc/sudoers:20:17: syntax error
user   ALL=(ALL), ALL
                ^

Errores lógicos

Los errores de este tipo se pueden deber a uno de los siguientes motivos:

  • Un malentendido de los principios del complemento sudoers
  • Desviaciones de la sintaxis correcta

Sin embargo, no se reconocen errores lógicos durante la validación porque no incumplen las reglas de sintaxis y, por lo tanto, son difíciles de detectar.

Solución

Lee atentamente la documentación oficial y cumple con sus principios cuando edites el archivo.

Google también te recomienda usar la utilidad visudo para editar los archivos sudoers, ya que pueden detectar algunos tipos de errores lógicos, como los siguientes:

  • Alias no definidos o sin usar
  • Referencias cíclicas
  • Entradas duplicadas

Si se detectan problemas, verás un mensaje de advertencia.


En los siguientes ejemplos, se muestran ejemplos correctos e incorrectos de forma lógica:

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 que genera el contenido de los archivos sudoers, los permisos de archivo excesivos o la propiedad incorrecta también pueden provocar que la utilidad sudo falle.

Solución

Verás una descripción de estos errores en el resultado del comando sudo con errores. Lee la descripción del mensaje de error y realiza las correcciones necesarias.


A continuación, se muestra un ejemplo de la los permisos de archivo y propiedad 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 aparece 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 aparece para propiedades incorrectas. En este ejemplo, un usuario con un ID que no sea 0 (o un usuario que no sea root) es el propietario del archivo:

$ 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, lee el manual de Sudoers.

Para obtener información sobre cómo administrar y usar el editor de visudo, consulta el manual de Visudo.

Consecuencias de los problemas

Los problemas en los archivos sudoers causan efectos negativos y pueden afectar 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. La consecuencia de esto es la incapacidad de usar privilegios elevados para usuarios, lo que bloquea su actividad en el servidor.

    Sin embargo, las consecuencias más destructivas e impredecibles son las fallas de las aplicaciones que dependen del comando sudo. En algunos casos, esto puede causar que la aplicación falle por completo, lo que lleva a un comportamiento, fallas o pérdida de datos inesperados. Otro ejemplo es cuando al comando sudo lo llama una aplicación durante la secuencia de inicio del SO y falla. Puede provocar fallas del SO o que la secuencia de inicio se detenga.

  • Posible acceso no autorizado al sistema.

    Otra consecuencia riesgosa es que los problemas de los archivos sudoers pueden provocar acceso no autorizado al sistema. Esto puede ocurrir debido a un error lógico, cuando las reglas de los archivos sudoers otorgan a algunos usuarios o grupos una cantidad excesiva de permisos.

    Esto también se puede deber a que el propietario del sistema inhabilita o debilita temporalmente debilita 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, usa la cuenta de superusuario para la recuperación.

En sistemas operativos similares a Unix, el superusuario es una cuenta de usuario especial con ID, igual a 0, que, por lo general, se llama 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 suele considerar una acción insegura puede ser la única opción para realizar ciertas tareas, como la recuperación de los archivos sudoers.

Acceder directamente como el superusuario pone en riesgo el SO. Para evitar este riesgo, Google recomienda que uses una funcionalidad de secuencia de comandos de inicio, ya que esta se ejecuta en nombre del superusuario.

Lee 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:

  1. Crea una copia de seguridad de la secuencia de comandos de inicio actual si ya está en uso. El enfoque 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 establece directamente en el valor de los metadatos, puedes copiar el contenido de la secuencia de comandos en el archivo local del bucket de Cloud Storage o en cualquier otro almacenamiento privado temporal.

    startup-script-url

    Si el contenido de la secuencia de comandos ya se encuentra en el almacenamiento remoto y se usa su dirección URL, puedes quitar temporalmente la La clave de metadatos startup-script-url para inhabilitar la secuencia de comandos de inicio actual.

  2. Actualiza la secuencia de comandos 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
    

    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 un nombre diferente y borra el archivo original. El nombre del archivo nuevo contiene una marca de tiempo al final de la unicidad (p. ej., sudoers.backup.1672527600).

    echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

    Este comando crea un archivo borrado anteriormente /etc/sudoers por una sola regla que permita autorizar los usuarios de Google Cloud con acceso a la VM para ejecutar comandos en nombre de cualquier usuario del sistema. Esta regla siempre existe de forma predeterminada en un archivo /etc/sudoers.d/google_sudoers

    chown 0:0 /etc/sudoers

    Con este comando, se establece el propietario del archivo /etc/sudoers en un usuario cuyo ID es 0 y un grupo de propietarios de un grupo cuyo ID es 0.

    chmod 0440 /etc/sudoers

    Este comando establece permisos para el archivo /etc/sudoers en modo de solo lectura y solo les permite a su propietario y grupo de propietarios leer el archivo.

  3. Detén la VM, si se está ejecutando. Reinicia la VM para activar la ejecución de la secuencia de comandos de inicio.

  4. Establece la conexión a la VM y edita el archivo sudoers dañado para recuperarlo.

    sudo visudo /etc/sudoers.backup.TIMESTAMP
    
  5. Guarda los cambios y reemplaza el archivo /etc/sudoers actual por el archivo que acabas de editar.

    sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
    
  6. Asegúrate de que el problema original con el uso del comando sudo y los privilegios elevados se hayan arreglado.

  7. Quita la secuencia de comandos de inicio temporal y restablece la original si se había usado.

Próximos pasos