问题描述
在14.04这里。我连接到我的机器,将以下行添加到/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
最佳解决方法
导致这种情况的是规则的顺序/顺序。最后一条规则优先考虑。
为了解决您的问题,只需移动您的线,
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
命令,您应该看到您的用户属于这些组。
次佳解决方法
如果myuser在sudo组中,那么这些行的顺序将不提供无密码访问(如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
在myuser帐户下,使用sudo -l
检查myuser具有的权限。
第三种解决方法
如果多个条目匹配用户,则使用最后一个条目。因此,如果fizzbuzz
和chadmin
是admin
或sudo
组的成员,他们仍将被要求输入密码。
在#includedir
行之后将两行放在sudoers
文件的末尾。