防止 sudo 在运行未经允许的命令时提示输入密码

防止 sudo 在运行未经允许的命令时提示输入密码

我已授予组权限,通过 sudo 无需密码即可运行某些命令。当其中一位用户输入错误或运行错误的命令时,系统会提示他们输入密码,然后他们会收到错误消息。这会让用户感到困惑,因此我只想显示错误,而不是提示他们输入密码。这可能吗?

这是我的 sudoers 文件的示例:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

他们运行错误脚本时的示例:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

期望的输出:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

请注意缺少密码提示。

我的 google-fu 让我失败了,只在用户不要求密码的情况下返回结果允许运行该命令。

答案1

从快速阅读sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

对于怀疑者:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

如此测试:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

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:

因此,对于这些人来说, aliasforsudo可能会起到阻止密码提示的作用。现在为什么需要自定义编译sudo,我不知道,我只是看了手册。

答案2

对我有用的一件事(Sudo 版本 1.8.17p1),但仅满足您问题的一部分,是将密码尝试次数设置为 0。

Defaults:%mygroup passwd_tries = 0

当尝试任何需要密码的命令时,这会使 sudo 以代码 1 退出。但是,它不会产生任何类型的错误消息。

答案3

你不能。

在您进行身份验证之前,无法得知您是谁,并且默认情况下,如果没有密码,您将无法进行身份验证。

您可以将身份验证更改为使用 USB 密钥、指纹扫描仪、语音身份验证、面部识别或其他一些东西,但要点是一样的。

未经身份验证,您无法进行身份验证在您进行身份验证之前, sudo 没有必要告诉您可以运行什么或不能运行什么。

答案4

这不可能。唯一的方法是更改​​源代码并编译自己的分支sudo

相关内容