我想禁用 requiretty,以便可以在脚本中使用 sudo,但我宁愿只对单个命令禁用它,而不是对所有命令禁用它。这在 sudoers 配置中可能吗?
答案1
您可以覆盖选项的默认设置,例如requiretty
特定用户或特定命令(或特定运行用户或主机)的默认设置,但不能覆盖作为特定用户执行的特定命令的默认设置。
例如,假设requiretty
在编译默认选项中设置了 ,则以下sudoers
文件允许artbristol
和作为 root 从脚本bob
执行。不需要密码,而必须输入密码(大概是关闭并最近在某个终端上输入了密码)。/path/to/program
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
答案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