comando sudo tratando de buscar el nombre de host

15

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.

prathmesh.kallurkar
fuente
@OliverSalzburg He reformulado la pregunta correctamente. Por favor, hágame saber si algo está mal
prathmesh.kallurkar

Respuestas:

16

El /etc/sudoersarchivo 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:

%sudo    kaagini=(ALL) ALL

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/hostsser correcta, por lo que falla si no es correcta.

Se podría argumentar que sudono es necesario molestarse en hacer 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 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.

Pablo
fuente
Gracias por la respuesta. ¿Puedes volver al archivo distribuido de sudoers nuevamente? Mira, tengo un sistema operativo corriendo en la máquina A. En caso de que el archivo de permisos (/ etc / sudoers) para este sistema operativo se almacene en otras máquinas. ¿O su respuesta significa decir que el comando sudo puede decir algo así como el usuario John puede sudo desde la máquina A pero no desde la máquina B?
prathmesh.kallurkar
Realmente es para facilitar el mantenimiento. 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 porción de host en los permisos, puede mantener un solo archivo de sudoers y distribuirlo a todas las máquinas, y aún así tener granularidad sobre lo que los usuarios pueden hacer en cada máquina.
Paul
una pregunta más ... ¿el administrador del servidor tiene que scp el nuevo archivo sudoers cada vez que hay un cambio en el archivo sudoers principal o sudo proporciona una manera de mantener el archivo sudoers en la red?
prathmesh.kallurkar
@ prathmesh.kallurkar No, no hay un método incorporado de distribución, pero esto es Linux, así que esto es normal. Usaría rsync o scp u otra herramienta para completar esta parte.
Paul
1
Considero que es un error (si solo hay TODAS las reglas, entonces sudo no necesita saber su nombre de host) y, por lo tanto, he presentado bugzilla.sudo.ws/show_bug.cgi?id=916
Matthias Urlichs
1

Gracias al informe de error vinculado presentado por Matthias Urlichs en otro comentario, el siguiente comando resolvió el problema por mí:

Defaults !fqdn

Coloque esta línea en el /etc/sudoersarchivo

kjones
fuente
-3

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

Felipe Alvarez
fuente
3
¿Puedes ampliar tu respuesta para explicar qué es una marioneta, dónde la encuentras y cómo la usas para resolver el problema? De la cola de revisión
fixer1234
2
Lea Cómo recomiendo el software para obtener algunos consejos sobre cómo debe recomendar el software. Debe proporcionar al menos un enlace, información adicional sobre el software en sí y cómo se puede utilizar para resolver el problema en la pregunta.
DavidPostill