如何在 sudoers 中禁用单个命令的 requiretty?

如何在 sudoers 中禁用单个命令的 requiretty?

我想禁用 requiretty,以便可以在脚本中使用 sudo,但我宁愿只对单个命令禁用它,而不是对所有命令禁用它。这在 sudoers 配置中可能吗?

答案1

您可以覆盖选项的默认设置,例如requiretty特定用户或特定命令(或特定运行用户或主机)的默认设置,但不能覆盖作为特定用户执行的特定命令的默认设置。

例如,假设requiretty在编译默认选项中设置了 ,则以下sudoers文件允许artbristol和作为 root 从脚本bob执行。不需要密码,而必须输入密码(大概是关闭并最近在某个终端上输入了密码)。/path/to/programartbristolbobtty_ticketsbob

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

答案2

像这样的东西:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty

答案3

我发现它对我使用/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

相关内容