Recientemente, he cambiado 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 dar permiso a algo?
Mi archivo sudoers tiene un comando "Por defecto env_reset". Vi algunas preguntas similares, pero el contexto no es un inicio de sesión remoto aquí. El error se muestra en un host local.
La búsqueda inicial en Google del problema indica 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é necesitamos esto para sudo? Si el sudo funciona independientemente del lugar de inicio de sesión.
Respuestas:
El
/etc/sudoers
archivo está diseñado para poder distribuirse entre varios servidores. Para lograr esto, cada permiso en el archivo tiene una parte de host.Esto generalmente se establece en lo
ALL=
que significa que el permiso es válido para cualquier servidor, sin embargo, se puede configurar en hosts específicos:Para que sudo sepa si esta regla debe aplicarse, debe buscar el host en el que se está ejecutando. Utiliza una llamada que se basa en
/etc/hosts
ser correcta, por lo que falla si no es correcta.Se podría argumentar que
sudo
no es necesario molestarse en hacer una búsqueda de nombres si la parte del host está configuradaALL=
para todos los permisos, pero simplemente no funciona de esa manera: parece funcionar donde 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 puede requerir 100 archivos / etc / sudoers diferentes para mantener. Debido a que sudoers tiene una parte de host en los permisos, puede mantener un solo archivo de sudoers y distribuirlo a todas las máquinas, pero aún tiene granularidad sobre lo que los usuarios pueden hacer en cada máquina.
fuente
Gracias al informe de error vinculado presentado por Matthias Urlichs en otro comentario, el siguiente comando resolvió el problema por mí:
Coloque esta línea en el
/etc/sudoers
archivofuente
Puppet es un software de gestión de configuración que es capaz de configurar una flota de servidores automáticamente leyendo los archivos de Manifiesto de Puppet. Tal archivo podría incluir una definición de su archivo / etc / sudoers, que luego puede ser enviado a todos sus "agentes" de títeres desde su "maestro" de títeres. Luego, todos los hosts obtendrán la misma copia de su archivo / etc / sudoers, que puede (y debe) incluir definiciones HOST, por lo que puede otorgar a algunos usuarios algunos comandos en algunos hosts (pero no en otros).
fuente