在 /etc/sudoers 中添加 NOPASSWD 不起作用

在 /etc/sudoers 中添加 NOPASSWD 不起作用

在 14.04 上。我通过 SSH 进入我的机器,将以下行添加到/etc/sudoers

myuser   ALL=NOPASSWD: ALL

然后尝试运行:

sudo mkdir /etc/blah

...系统要求我输入密码。为什么?!?

我愿意不是执行此操作时需要输入密码。请注意,当我运行时,ls -ltr /我得到:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

但我不认为这很重要,因为我已经将自己设置为“sudoer”,对吗?

更重要的是,我需要做什么才能以sudo mkdir /etc/blah当前用户身份运行(myuser)而无需输入密码?

这是我的整个/etc/sudoers文件:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

答案1

这是由规则的顺序/排序导致的。最后一条规则优先。

为了解决你的问题,只需移动你的线条,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

来自sudoers文件到

sudo visudo -f /etc/sudoers.d/myOverrides 

这比sudoers使用纯文本编辑器编辑文件更好。如果您不小心将错误插入文件中,您可能无法再运行sudo. 始终使用visudo,这样就会检查语法并且您会收到有关错误的警告!

您的指令不起作用,因为它被以下指令覆盖:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

如果您运行该groups命令,您应该会看到您的用户属于这些组。

答案2

如果我的用户在里面须藤组,那么这几行的顺序将不会提供无密码访问 (正如 Florian Diesch 所指出的),因为第 3 行覆盖了第 1 行。

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

因此,只需按以下顺序排列这些行:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

在下面我的用户账户使用sudo -l检查什么权限我的用户有。

答案3

如果多个条目与用户匹配最后的一个被使用。因此,如果fizzbuzzchadmin是群组成员admin,或sudo他们仍将被要求输入密码。

sudoers将这两行放在文件末尾的#includedir行后面。

答案4

理想情况下,如果您要自定义可以通过哪些命令运行,sudo则应在单独的文件中进行这些更改,/etc/sudoers.d/而不是sudoers直接编辑文件。您还应始终使用visudo来编辑文件。您永远不应授予NOPASSWD命令ALL

例子: sudo visudo -f /etc/sudoers.d/mynotriskycommand

插入授予权限的行: myuser ALL= NOPASSWD: /bin/mkdir

然后保存并退出,visudo如果有任何语法错误,它会警告您。

您可以运行sudo -l来查看您的用户已被授予的权限,如果任何用户特定的NOPASSWD命令出现%groupyouarein ALL=(ALL) ALL在输出中的任何命令之前,系统将提示您输入密码。

如果您发现自己创建了大量这样的 sudoers.d 文件,那么您可能希望按用户命名这些文件,以便更容易查看。请记住,文件名和文件内规则的顺序非常重要,最后加载的那个文件获胜,无论它比前面的条目更宽松还是更宽松。

您可以使用 00-99 或 aa/bb/cc 前缀来控制文件名排序,但请记住,如果您有任何文件没有数字前缀,它们将在编号文件之后加载,从而覆盖设置。这是因为根据您的语言设置,shell 使用的“词汇排序”首先对数字进行排序,然后在按“升序”排序时可能交错大小写。

尝试运行printf '%s\n' {{0..99},{A-Z},{a-z}} | sortprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort查看您当前的语言是否可以打印AaBbCc等,然后ABC确定abc要使用的最佳“最后一个”字母前缀是什么。

相关内容