Solucionar problemas con archivos sudoers

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 comando sudo 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 archivos sudoers 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:

  1. 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.

  2. 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 es 0 y un grupo de propietarios a un grupo cuyo ID es 0.

    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.

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

  4. Conéctate a la VM y edita el archivo sudoers dañado para recuperarlo.

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

    sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
  6. Comprueba que se ha solucionado el problema original con el uso del comando sudo y los privilegios elevados.

  7. Elimina la secuencia de comandos de inicio temporal y restaura la original si se ha usado.

¿Qué debo hacer ahora?