![配置 sudo 以在执行不允许的命令时不提示输入密码](https://linux22.com/image/635162/%E9%85%8D%E7%BD%AE%20sudo%20%E4%BB%A5%E5%9C%A8%E6%89%A7%E8%A1%8C%E4%B8%8D%E5%85%81%E8%AE%B8%E7%9A%84%E5%91%BD%E4%BB%A4%E6%97%B6%E4%B8%8D%E6%8F%90%E7%A4%BA%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81.png)
关于如何使 sudo 不提示输入密码(NOPASSWD)有很多信息。
假设我有一个用户alice
,并且我的 sudoers 中有以下行:
alice ALL=(root) NOPASSWD: /bin/myadmintool
一切正常。用户可以跑步sudo /bin/myadmintool
和做其他事情。
但是,如果用户这样做:
sudo /bin/bash
事情是这样的:
$ sudo /bin/bash
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:
Sorry, user alice is not allowed to execute '/bin/bash' as root on myhostname.
我希望 sudo 直接跳转到:
Sorry, user alice is not allowed to execute '/bin/bash' as root on myhostname.
...没有密码提示。
我如何在 sudoers 文件中表达这一点,仅针对该用户?
答案1
在仔细阅读sudoers 手册页,我确实找到了一个可行的解决方案!
我的 sudoers 配置alice
如下所示:
Defaults:alice !authenticate
alice ALL=(root) NOPASSWD: /bin/myadmintool
请记住,这将实质上设置 NOPASSWD全部的alice
sudo 行。就我而言,这就是目的。
更多细节
该authenticate
选项在手册中定义如下:
认证
如果设置,用户必须通过密码(或其他身份验证方式)验证自己的身份,然后才能运行命令。此默认设置可以通过 PASSWD 和 NOPASSWD 标签覆盖。此标志默认为开启状态。
该Defaults
选项允许您定义用户、组、主机列表等,如下所示:
Default_Type ::= 'Defaults' |
'Defaults' '@' Host_List |
'Defaults' ':' User_List |
'Defaults' '!' Cmnd_List |
'Defaults' '>' Runas_List
由于authenticate
是一个布尔配置选项,因此可以通过执行将其取反或设置为 false !authenticate
。
答案2
作为解决方法,您可以使用非交互模式:
sudo -n echo test
sudo:需要密码
您可以为该用户创建别名:
别名 sudo='sudo -n'