Как отключить requiretty для одной команды в sudoers?

44

Я хочу отключить requiretty, чтобы я мог использовать sudo в скриптах, но я бы предпочел отключить его только для одной команды, а не для всего. Это возможно в конфиге sudoers?

artbristol
источник

Ответы:

55

Вы можете переопределить настройку по умолчанию для таких параметров, как requirettyдля конкретного пользователя или для конкретной команды (или для конкретного пользователя, запускаемого от имени пользователя или хоста), но не для конкретной команды при выполнении от имени определенного пользователя.

Например, предполагая, что requirettyэто задано в параметрах компиляции по умолчанию, следующий sudoersфайл позволяет и то, artbristolи другое bobвыполнять /path/to/programиз сценария как root. artbristolне требует пароля, тогда как bobдолжен вводить пароль (предположительно tty_ticketsвыключен и bobнедавно ввел свой пароль на каком-либо терминале).

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

Если вы хотите изменить настройку команды с конкретными аргументами, вам нужно использовать псевдоним команды (это ограничение синтаксиса). Например, следующий фрагмент позволяет artbristolзапустить /path/to/program --optionв скрипте, но не /path/to/programс другими аргументами.

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
Жиль "ТАК - перестань быть злым"
источник
31

Что-то вроде этого:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
JRFerguson
источник
Это может работать, /etc/sudoersно не работает в /etc/sudoers.d/файле
8bitjunkie
Как бы то ни было, для меня это редактирование сработало при добавлении в /etc/sudoers.d/файл. CentOS 7.1
Джон Эрк
Это не работает для меня при использовании /etc/sudoers.d/. CentOS 7.5 :(
Стефан Ласевский,
4

Я обнаружил, что он работает нормально для меня, используя файл в /etc/sudoers.d. Это довольно просто проверить.

Во-первых, я создал /etc/sudoers.d/01buildс содержанием:

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

Затем проверил, что это работает:

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

Затем я изменил /etc/sudoers.d/01buildи удалил Defaults:строку, и после этого я получил:

ssh host sudo -n /bin/date
sudo: sorry, you must have a tty to run sudo
Куана Гибсон-Маунт
источник