![在 /etc/sudoers 中添加 NOPASSWD 不起作用](https://linux22.com/image/1121721/%E5%9C%A8%20%2Fetc%2Fsudoers%20%E4%B8%AD%E6%B7%BB%E5%8A%A0%20NOPASSWD%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
在 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
如果多个条目与用户匹配最后的一个被使用。因此,如果fizzbuzz
和chadmin
是群组成员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}} | sort
并printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
查看您当前的语言是否可以打印AaBbCc
等,然后ABC
确定abc
要使用的最佳“最后一个”字母前缀是什么。