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

我在/ 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

编辑

这是/ 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键进行身份validation(我将取消设置密码,以便“有东西,知道某事”方案将成为密码protected keypair –root login当然是完全禁用的)

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

 my_username ALL=(ALL:ALL) NOPASSWD:ALL 

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

我仍然需要密码validation。

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

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

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

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

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

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

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

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

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

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

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

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

在远程系统上,删除加密,但让所有内容都由root拥有,就像在“Administrators”组中一样 – 不是0!
您可以将#sudo -g Administrators修改为需要完全访问权限的人 – 不是sudo文件,而是.login配置文件。 现在,任何标准脚本都可以以“root”身份访问远程,您可以保护必须受保护的文件。
另一个方便的“组”是“Sandbox”,在浏览器缓存中有一个登录目录,可以自由阅读,没有别的。 使用大写第一个字符。