sudoers - se solicita una explicación simple

24

Cada vez que quiero poder ejecutar algo que requiere que lo haga sudoerdemasiadas veces, necesito buscar en Google el formato /etc/sudoerspara recordarme nuevamente cuál es exactamente la forma correcta de escribirlo.

Ahora veo diferentes estilos de escritura en mi sudoersarchivo, que es la consecuencia de los diferentes resultados de Google a lo largo de los meses. También noté que el segundo ejemplo (abajo) parece funcionar en XFCE, pero no en Cinnamon (Gnome 3). Esto podría no estar relacionado, pero de todos modos me gustaría saber de una vez por todas, ¿cuál es la gramática correcta de la línea sudoer y cuál es la diferencia entre los ejemplos dados?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Además, ¿para qué sirven todos los ALL? Un usuario, un comando, pero ¿necesito usar la ALLpalabra clave hasta tres veces? ¿Estoy haciendo esto mal?

Por supuesto, omitiendo NOPASSWD:las marcas que indique su contraseña antes de que se le permita ejecutar el comando, sino un punto de confusión es el uso de =y :, para el comando final que es el sujeto de la línea puede ser precedidas por cualquiera =, :, , o ), gramática confusa para semántica similar.

Redsandro
fuente
3
También me siento realmente frustrado con la sudoerssintaxis. Leer la página del manual fue aún más frustrante: describe el llamado lenguaje EBNF conciso y exacto, los ejemplos son exhaustivamente largos. Por lo tanto, no me sorprende encontrar tantos hilos aquí con respecto a este archivo.
m-ric
1
Gracias por esto. He estado queriendo hacer esta pregunta desde que me encontré con un archivo de sudoers hace algunos años :-)
vahidg

Respuestas:

35

Es más que solo un usuario y un comando:


redsandro host=(user:group) tag:commands
  • hostespecifica los nombres de host para los que es válida esta línea. A menos que esté compartiendo un archivo de asudoers entre diferentes hosts que necesitan reglas diferentes, usar el valor especial que ALLsignifica "todos los hosts" es una buena opción.

  • userespecifica qué usuarios puede usar con las -uopciones para ejecutar el comando. Si omite esto, no puede usar la -uopción.

  • groupespecifica qué grupos puede usar con las -gopciones. Si lo omite, no puede usar la -gopción.

Ambos usery groupentienden el valor especial ALLcomo "todos los usuarios / grupos"

Si omite todo (user:group)lo que no puede usar -uy -gsolo ejecuta el comando como root.

  • tag le permite especificar algunas opciones, como NOPASSWD

Entonces, con su primer ejemplo, puede ejecutar el comando como root pero no puede usarlo -uy -gejecutarlo como cualquier otro usuario o grupo.

Con el ejemplo 2. puede ejecutar el comando como root o usarlo -upara ejecutarlo como cualquier otro usuario.

Con 3. puede ejecutar el comando como root o usar -uo -gpara ejecutar el comando como cualquier otro usuario o grupo.

Florian Diesch
fuente
Esto es exactamente lo que estaba buscando. He aceptado tu respuesta y gracias por tu esfuerzo.
Redsandro
1
Pensamiento final, ¿puedo usar 127.0.0.1o en localhostcuanto hosta seguridad trivial agregada?
Redsandro
55
La página de manual dice 'Nota sudo solo inspecciona las interfaces de red reales; Esto significa que la dirección IP 127.0.0.1 (localhost) nunca coincidirá. Además, el nombre de host "localhost" solo coincidirá si ese es el nombre de host real, que generalmente es solo el caso de los sistemas no conectados en red '.
Florian Diesch
1
Gracias. No tengo nombre de host, especialmente porque quiero poder copiar el sudoersfile en varias máquinas. ALLestá.
Redsandro
9

Desarmemos esto:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro es el nombre de usuario al que le estamos dando permiso. Ponga un% al frente para que se aplique a un grupo.

ALL es un nombre para esta regla. Los sudoers pueden hacer mucho más que simplemente otorgar permisos globales. Sin embargo, ahí es donde se complica.

= no necesita explicación

ALL: ALL se lee como (who_to_run_it_as: what_group_to_run_it_as). De esta manera, puede permitir ejecutar un comando, pero solo en el contexto de un usuario o grupo específico.

NOPASSWD: le dice que desactive la solicitud de contraseña.

/ path / to / command le permite especificar comandos específicos path_to_commmand, another_command

Lo que hay que recordar es que, aunque los usuarios domésticos utilizan principalmente sudo para escalar a los privilegios de root, pueden y lo hacen para controlar el acceso a comandos específicos de una manera mucho más granular.

RobotHumanos
fuente
1
Gracias por el adicional %y , another_commandnotas. Ahora entiendo la %wheellínea en la distribución basada en Fedora.
Redsandro