¿Cuál es la sintaxis adecuada de sudoers para agregar un usuario?

50

De acuerdo con los comentarios en /etc/sudoers(Fedora 13):

## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.

Mis dos preguntas relacionadas:

  1. ¿Qué ALL=(ALL) ALLsignifica el siguiente en la siguiente línea:

    root  ALL=(ALL)   ALL
    
  2. He probado estas dos líneas pero no puedo entender cómo son funcionalmente diferentes:

    superadm    ALL=(ALL)    ALL
    superadm    ALL=ALL
    

He leído el manual pero la especificación de sintaxis es difícil de seguir. He deducido que la (ALL) ALLparte es el comando y las especificaciones de la etiqueta, pero todavía no puedo entenderlo.

Belmin Fernandez
fuente

Respuestas:

91

Nota: estoy respondiendo 1. , ya que Ignacio ya respondió 2 ..

En la siguiente sudoentrada:

superadm  ALL=(ALL)   ALL

hay cuatro campos:

  • El primero especifica un usuario al que se le otorgarán privilegios para algunos comandos.
  • El segundo rara vez se usa. Es una lista de nombres de host en los que esta entrada de sudo será efectiva. En configuraciones estándar, solo un host es relevante (localhost), por lo que este campo generalmente se deja como ALL.
  • El cuarto campo es la lista de comandos superadmque se podrán ejecutar con privilegios elevados. ALLsignifica todos los comandos. De lo contrario, use una lista de comandos separados por comas.
  • El tercer campo (el escrito (…)que es opcional) especifica qué usuarios (y grupos) el superadmusuario podrá ejecutar los siguientes comandos como. ALLsignifica que pueden elegir cualquier cosa (sin restricciones). Si este campo se omite, significa lo mismo que (root).

Ejemplo:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill

Aquí, alanse permite ejecutar los dos comandos /bin/lsy /bin/killcomo root(o bin), posiblemente con privilegios adicionales operatoro systemgrupales.

Por alanlo tanto, puede optar por ejecutarse lscomo el binusuario y con operatorlos privilegios de grupo como este:

sudo -u bin -g operator /bin/ls /whatever/directory

Si -use omite, es lo mismo que -u root. Si -gse omite, no se otorgan privilegios de grupo adicionales.

Stéphane Gimenez
fuente
1
Bueno, esa es probablemente la mejor respuesta ...
David Betz
1
Observé que un \ncarácter de nueva línea es obligatorio al final de la entrada en sudoers o /etc/sudoers.d/your_file_name
ramonrails
También puede usar comodines en nombres de host, nombres de ruta y argumentos de línea de comandos. Me gusta /bin/cat /var/log/messages.?o /bin/ls /var/log/*más información aquí
Alex
9

Desde la sudoers(5)página de manual, sección DESCRIPCIÓN , subsección Runas_Spec :

La primera Runas_List indica a qué usuarios se puede ejecutar el comando como a través sudode la -uopción.

...

Si no se especifica Runas_Spec, el comando se puede ejecutar como rooty no se puede especificar ningún grupo.

Por lo tanto, no existe una diferencia funcional cuando se intenta ejecutar comandos como root, es decir, cuando no se usa -ucon sudo. La diferencia es importante cuando se intenta ejecutar comandos como otros usuarios; lo último evitará esto, pero lo primero lo permitirá.

Ignacio Vazquez-Abrams
fuente