Recientemente, cambié el archivo sudoers y el nombre de host a través de /etc/hostname. Después de cambiar estos archivos, mi comando sudo está tomando mucho tiempo. Además, dice que sudo no puede resolver el host kaagini (nombre de host de mi máquina).
¿Por qué sudo tiene que saber el nombre de host para otorgar permiso a algo?
Mi archivo sudoers tiene un comando "Valores predeterminados env_reset". Vi algunas preguntas similares pero el contexto aquí no es un inicio de sesión remoto. El error se muestra en un host local.
La búsqueda inicial del problema en Google dice que el archivo /etc/hosts debe tener el nombre de host real para 127.0.0.1. Esto solucionó mi problema. Pero mi pregunta real es: ¿Por qué requerimos esto para sudo? ¿Debería funcionar sudo independientemente del lugar de inicio de sesión?
Respuesta1
El /etc/sudoers
archivo está diseñado para poder distribuirse entre varios servidores. Para lograr esto, cada permiso en el archivo tiene una porción de host.
Por lo general, esto se establece en ALL=
lo que significa que el permiso es válido para cualquier servidor; sin embargo, se puede configurar para hosts específicos:
%sudo kaagini=(ALL) ALL
Para que sudo sepa si se debe aplicar esta regla, necesita buscar el host en el que se está ejecutando. Utiliza una llamada que se basa en que /etc/hosts
sea correcta, por lo que falla si no es correcta.
Se podría argumentar que sudo
no es necesario molestarse en realizar una búsqueda de nombres si la parte del host está configurada ALL=
para todos los permisos, pero simplemente no funciona de esa manera: parece determinar dónde se está ejecutando antes de procesar las reglas. .
Esto es realmente para facilitar el mantenimiento ya que sudo solo lee /etc/sudoers para ver qué puede hacer el usuario en la máquina actual. Pero como administrador con 100 servidores, esto podría requerir el mantenimiento de 100 archivos /etc/sudoers diferentes. Debido a que sudoers tiene una parte de host en los permisos, puede mantener un único archivo sudoers y distribuirlo a todas las máquinas, y aun así tener granularidad sobre lo que los usuarios pueden hacer en cada máquina.
Respuesta2
Gracias ainforme de error vinculadopresentado por Matthias Urlichs en otro comentario, el siguiente comando me resolvió el problema:
Defaults !fqdn
Coloque esta línea en el /etc/sudoers
archivo.
Respuesta3
Marionetaes un software de gestión de configuración que es capaz de configurar una flota de servidores automáticamente leyendo archivos Puppet Manifests. Un archivo de este tipo podría incluir una definición de su archivo /etc/sudoers, que luego puede enviarse a todos sus "agentes" títeres desde su "maestro" títere. Entonces todos los hosts obtendrán la misma copia de su archivo /etc/sudoers, que puede (y debe) incluir definiciones de HOST, para que pueda otorgar a algunos usuarios algunos comandos enalgunos anfitriones(pero no en otros).