¿Cómo deshabilitar requiretty para un solo comando en sudoers?

44

Quiero deshabilitar requiretty para poder sudo dentro de los scripts, pero prefiero deshabilitarlo solo para un solo comando en lugar de todo. ¿Es eso posible dentro de la configuración de sudoers?

artbristol
fuente

Respuestas:

55

Puede anular la configuración predeterminada para opciones tales como requirettypara un usuario específico o para un comando específico (o para una ejecución específica como usuario o host), pero no para un comando específico cuando se ejecuta como un usuario específico.

Por ejemplo, suponiendo que requirettyse establezca en las opciones predeterminadas de compilación, el siguiente sudoersarchivo permite ambos artbristoly bobejecutar /path/to/programcomo raíz desde un script. artbristolno necesita contraseña, mientras que bobdebe tener que ingresar una contraseña (presumiblemente tty_ticketsestá apagada e bobingresó su contraseña en algún terminal recientemente).

artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty

Si desea cambiar la configuración de un comando con argumentos específicos, debe usar un alias de comando (esto es una limitación de sintaxis). Por ejemplo, el siguiente fragmento permite artbristolejecutarse /path/to/program --optionen un script, pero no /path/to/programcon otros argumentos.

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
Gilles 'SO- deja de ser malvado'
fuente
31

Algo como esto:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
JRFerguson
fuente
Esto podría funcionar /etc/sudoerspero no parece funcionar en un /etc/sudoers.d/archivo
8bitjunkie
Para lo que vale, para mí, esta edición funcionó cuando se agregó a un /etc/sudoers.d/archivo. CentOS 7.1
John Erck
No me funciona cuando lo uso /etc/sudoers.d/. CentOS 7.5 :(
Stefan Lasiewski
4

Descubrí que funciona bien para mí usando un archivo /etc/sudoers.d. Es bastante simple de verificar.

Primero, creé /etc/sudoers.d/01buildcon los contenidos:

build    ALL=(ALL)    NOPASSWD:/bin/date
Defaults:build !requiretty

Luego probó que funciona:

ssh host sudo -n /bin/date
Mon Nov 16 16:04:27 CST 2015

Luego modifiqué /etc/sudoers.d/01buildy eliminé la Defaults:línea, y después de eso, obtengo:

ssh host sudo -n /bin/date
sudo: sorry, you must have a tty to run sudo
Quanah Gibson-Mount
fuente