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


45

在这里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

您可以发布您的sudoers文件吗?该指令是正确的,但是由于上下文的原因它无法工作。
Lety

谢谢@Letizia-请查看我的最新消息,有什么事对您有用吗?
扎克2014年

我想我也应该注意到,我并没有使用visudo但任何手工编辑这个文件并没有复制正粘贴工作,我输入的,就是一切。但是visudo除了这个文件以外,还可以编辑其他文件吗?可能就是…
Zac 2014年


另外,请检查中的所有文件/etc/sudoers.d/,这些文件可能是覆盖了/etc/sudoers
Tokland

Answers:


68

导致此问题的是规则的顺序/顺序。最后一条规则优先。

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

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命令,您应该看到您的用户属于这些组。


该文件的名称应遵循的约定nn-somename,例如/etc/sudoers.d/20-myoverrides
shimatai

是的,当然,如果您有多个文件,这些文件将按排序的词法顺序进行解析,因此使用数字是一种很好的做法,并且很容易知道该顺序。
Lety

21

如果myusersudo组中,则此行顺序将不提供无密码访问(如Florian Diesch所述),因为第三行将覆盖第一行。

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

myuser帐户下,用于sudo -l检查myuser拥有哪些权限。


10

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

将两行放在sudoers文件末尾#includedir


实际上,@ Letizia和您的答案的组合是最好的,因为默认情况下,这#includedir是最后一项sudoers
muru 2014年

0

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

例: 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确定要使用的最佳“最后”字母前缀是什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.