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


为什么sudoers NOPASSWD选项不起作用?

ubuntuer 技术教程 , 去评论

问题描述

我在/etc /sudoers中有一个NOPASSWD行(用visudo编辑)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

但是,输出是,

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

这种命令适用于OpenSuSE机器,但不适用于Ubuntu 11.10。我究竟做错了什么?

注意:我找不到任何相关的系统日志消息,例如通过tail -f /var/log/syslog

edit

这是/etc /sudoers。

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

最佳解决方案

您应该将该行放在具有sudo组规则的行之后,因为,正如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).

次佳解决方案

刚碰到这个。

我的情况是我正在建立一个无头的远程系统。我启用了全盘加密(否则具有物理访问权限的攻击者可以执行任何他或她想做的事情)我想只使用pub键进行身份验证(我将取消设置密码,以便“有东西,知道某事”方案将成为密码protected keypair –root login当然是完全禁用的)

Ubuntu安装程序会提示输入一个non-root管理员用户,该用户将被添加到组sudo中。然后我使用sudo visudo手动将自己添加到sudoers文件中:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

注意如果你在笔记本电脑上使用nopasswd,你必须在走开时锁定你的电脑,否则一个偶然的攻击者可能会在你开始在你的咖啡中加入奶油时妥协

我仍然需要密码验证。

enzotib的答案是正在发生的事情的关键。在输入用户名后,组sudo出现在sudoers中。

我没有将我的条目移到sudo线下面,而是删除了之前添加的行,然后将NOPASSWD添加到%sudo的条目中

这似乎有效。如果你真的需要它,再次只使用nopasswd(在我的情况下,它正是我需要的,对于大多数需要密码进行sudo活动的用户来说最好)

附加警告:始终使用visudo编辑sudoers。 (sudo visudo)此外,打开另一个窗口切换到root用户可以让你恢复更改sudoers文件时可能出现的任何错误。

第三种解决方案

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

示例:sudo visudo -f /etc/sudoers.d/slowcpu

插入您的行授予权限:gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

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

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

如果您发现自己创建了大量这些sudoers.d文件,那么您可能希望按用户创建它们,以便更容易可视化。请记住,文件名称和文件中的规则的排序非常重要,最后一个加载胜利,无论是比先前条目更多还是更少许可。

您可以使用前缀00-99或aa /bb /cc控制文件名排序,但请记住,如果您有任何没有数字前缀的文件,它们将在编号文件后加载,覆盖设置。这是因为根据您的语言设置,”lexical sorting” shell首先使用排序编号,然后在”ascending”顺序排序时可以交错大写和小写。

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

参考资料

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