Como desativar o requiretty para um único comando em sudoers?

44

Quero desabilitar o requiretty para que eu possa sudo dentro de scripts, mas prefiro desabilitá-lo apenas para um único comando, em vez de tudo. Isso é possível na configuração dos sudoers?

artbristol
fonte

Respostas:

55

Você pode substituir a configuração padrão para opções como requirettyum usuário específico ou um comando específico (ou para uma execução específica como usuário ou host), mas não para um comando específico quando executado como um usuário específico.

Por exemplo, supondo que requirettyesteja definido nas opções padrão de compilação, o sudoersarquivo a seguir permite que ambos artbristole bobsejam executados /path/to/programcomo raiz a partir de um script. artbristolnão precisa de senha e bobdeve ter que digitar uma senha (presumivelmente tty_ticketsestá desativada e bobinseriu sua senha em algum terminal recentemente).

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

Se você deseja alterar a configuração de um comando com argumentos específicos, é necessário usar um alias de comando (essa é uma limitação de sintaxe). Por exemplo, o fragmento a seguir permite artbristolexecutar /path/to/program --optionem um script, mas não /path/to/programcom outros argumentos.

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

Algo assim:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
JRFerguson
fonte
Este trabalho poder em /etc/sudoersmas não aparece para trabalhar em um /etc/sudoers.d/arquivo
8bitjunkie
Pelo que vale a pena, para mim, essa edição funcionou quando adicionada a um /etc/sudoers.d/arquivo. CentOS 7.1
John Erck
Não funciona para mim ao usar /etc/sudoers.d/. - CentOS 7.5 :(
Stefan Lasiewski 15/09/18
4

Eu achei que funciona bem para mim usando um arquivo no /etc/sudoers.d. É bastante simples de verificar.

Primeiro, eu criei /etc/sudoers.d/01buildcom o conteúdo:

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

Em seguida, testou que funciona:

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

Modifiquei /etc/sudoers.d/01builde excluí a Defaults:linha e, depois disso, recebo:

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