配置 sudo 以在执行不允许的命令时不提示输入密码

配置 sudo 以在执行不允许的命令时不提示输入密码

关于如何使 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全部alicesudo 行。就我而言,这就是目的。

更多细节

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'

相关内容