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


44

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

Answers:


55

您可以覆盖选项的默认设置,例如requiretty针对特定用户或特定命令(或针对特定运行方式的用户或主机)的选项,但不能覆盖以特定用户身份执行时的特定命令。

例如,假定requiretty在compile-default选项中进行了设置,则以下sudoers文件允许两者artbristolbob/path/to/programroot用户身份从脚本执行。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

这可能适用于文件,/etc/sudoers但似乎不起作用/etc/sudoers.d/
8bitjunkie 2015年

对于我来说,这是值得的,添加到/etc/sudoers.d/文件后,此编辑确实起作用。CentOS 7.1
John Erck '16

使用时对我不起作用/etc/sudoers.d/。CentOS 7.5 :(
Stefan Lasiewski,

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.