如果我正确理解了您的评论,那么这里的问题是该命令将通过没有输入sudo默认请求密码的能力的连接发出。同样,在许多OS发行版中,sudo都默认要求提供TTY-该程序可能没有。
但是,sudo可以具有非常精细的权限结构,从而可以允许一个或多个用户在不使用密码和TTY的情况下发出一个特定命令。下面,我将展示三种方法来配置您的需求。现在,无论您选择哪种方式,用户都可以发出命令sudo rndc reload
而无需输入密码。
(此外,这可能是不必要的,但是... 请记住在编辑之前,先为您的sudoers文件制作备份副本,以保持root用户处于打开状态的shell,以防您需要恢复到备份并进行编辑用它visudo
来代替sudo vi /etc/sudoers
。希望这些措施将是不必要的,但是......我们最好让它们并没有需要他们不是相反!)
1.如果您不想要求任何TTY
摆脱TTY要求(如果存在)的最简单方法是确保以Defaults
in 开头的行/etc/sudoers
不包含单词requiretty
-而是应包含!requiretty
。但是,如果你这样做,就意味着没有 sudo命令需要一个tty!
您还需要添加行
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
2.如果您想要求除该用户外的所有用户的TTY
这可以通过为此用户设置默认值来完成,如下所示:
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
3.如果要由该一位用户要求除该命令以外的所有命令的TTY
由于sudoers文件的语法,这有点复杂。您需要为命令创建命令别名,然后为该命令别名设置默认值,如下所示:
Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD
sudo
它的用途。您sudo
对此有何异议?