Answers:
您可以覆盖选项的默认设置,例如requiretty
针对特定用户或特定命令(或针对特定运行方式的用户或主机)的选项,但不能覆盖以特定用户身份执行时的特定命令。
例如,假定requiretty
在compile-default选项中进行了设置,则以下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
像这样:
myuser ALL=(ALL) NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser !requiretty
/etc/sudoers.d/
文件后,此编辑确实起作用。CentOS 7.1
/etc/sudoers.d/
。CentOS 7.5 :(
我发现使用中的文件对我来说效果很好/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
/etc/sudoers
但似乎不起作用/etc/sudoers.d/