当前位置: 首页>>技术教程>>正文


Sudoers文件,为用户启用NOPASSWD,所有命令

,

问题描述

Preface

这是一个相当复杂的与Sudoers文件和sudo命令相关的问题。

注:我在运行Ubuntu Desktop 13.04的专用计算机上进行了这些更改,我纯粹将其用于学习目的。我知道启用NOPASSWD sudo会带来巨大的安全风险。

Question

最初,我对sudoers文件(/etc /sudoers)的唯一改动是一行,一个用户规范应该使’nicholsonjf’能够使用sudo运行所有命令,而不必输入密码(请参阅以’nicholsonjf’开头的行):

# 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
nicholsonjf    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

但是,这并没有奏效,每次我运行命令’nicholsonjf’时,仍然会提示输入密码。我只能从sudo和admin组中删除’nicholsonjf’,然后才能开始以’nicholsonjf’的身份运行sudo命令。

任何人都可以解释为什么这工作?

是否因为用户’nicholsonjf’继承了’admin’和’sudo’两个组规范中的sudo权限(在sudoers文件中可以看到),它们覆盖了’nicholsonjf’用户规范,因为它们进一步在配置文件中?

最佳解决思路

您添加的行被覆盖。来自man sudoers

When multiple entries match for a user, they are applied in order. Where there are multiple matches, the last match is used (which is not necessarily the most specific match).

在你的情况下,nicholsonjfsudo组的成员,所以对他来说这一行适用:

%sudo   ALL=(ALL:ALL) ALL

如果您想要覆盖/etc/sudoers中的条目,只需将新条目放在它们后面。

新条目应该看起来像

myuser ALL=(ALL) NOPASSWD:ALL适用于单个用户,或者

%sudo ALL=(ALL) NOPASSWD:ALL为一组。

次佳解决思路

对于单个用户:

superuser ALL=(ALL) NOPASSWD:ALL

对于一个组:

%supergroup  ALL=(ALL) NOPASSWD:ALL

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/656.html,未经允许,请勿转载。