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


75

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

2
您能显示完整的sudoers,规则的顺序不是无关紧要的吗?
enzotib 2012年

Answers:


117

您应该将该行放在该组的规则之后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).

5
另外要注意的是,这也适用于多个组中的用户:例如,如果用户属于admin,则属于sudo组,如果sudo的规则位于admin之后,则sudo的规则将覆盖两个组中用户的admin规则。
Populus 2012年

2
谢谢!我将行添加到末尾,/etc/sudoers现在可以使用了。这里是对感兴趣的人的完整解释:techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve

4

理想情况下,如果要自定义可以通过哪些命令运行,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},{A-Z},{a-z}} | sortprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort查看您当前使用的语言是否打印AaBbCc等,ABC然后abc确定要使用的最佳“最后”字母前缀是什么。


我同意这一点。编辑/ etc / sudoers文件中的某些逻辑似乎很不直观-我无法让%wheel ALL =(ALL)NOPASSWD:ALL以sudoers的方式工作,直到我读到有人说#includedir /etc/sudoers.d行必须位于%SUDO和%WHEEL之类的其他行之前。当我将#include dir置于其他组权限之上时,它们开始工作。因此,我在/etc/sudoers.d/中为每个组制作了文件,其编号顺序与它们在sudoers文件中的顺序相同,但是root ALL =(ALL)ALL必须仍然是#includedir行下方的sudoers。奇怪的。
AveryFreeman

实际上,我认为includeir应该保留在sudoers的末尾。您可能看到的是sudoers中的其他文件之一。d正在撤消更改。您的主文件中可能还有一行限制了车轮组。请记住,将在最后一条适用于命令或组的规则获胜的情况下处理sudoers,因此提供更具体的帮助会有所帮助,但是如果常规ANY命令位于末尾并且没有NOPASSWD,它将覆盖您之前的异常。这就是为什么您应该将规则放在单独的文件中,以便稍后进行处理的原因。
Dragon788 '17

我不这么认为,它是Arch的全新安装。我所做的只是尝试并取消注释该行。但这绝对是一件好事,谢谢。
AveryFreeman

某些系统实际上并不使用wheel,而是使用名为sudo或adm或admin的组。我记不起Arch的行为,但是您可以运行id并查看您属于哪些组。
Dragon788

拱使用轮子。
AveryFreeman '17

4

刚遇到这个。

我的情况是我正在建立一个远程运行的系统。我已经启用了全盘加密(否则,具有物理访问权限的攻击者可以执行他或她想要的任何事情),我只想使用发布密钥进行身份验证(我将取消设置密码,以便“拥有一些知识,知道一些知识”方案将成为密码)受保护的密钥对-完全禁止root登录)

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

my_username ALL=(ALL:ALL) NOPASSWD:ALL

注意:如果您在笔记本电脑上使用nopasswd,则必须在走开时始终锁定计算机,否则,随意的攻击者可能会在起床时将奶油倒入咖啡中

我仍然需要密码验证。

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

与其将我的条目移到sudo行下方,我只是删除了我之前添加的行,然后将其添加NOPASSWD%sudo

这似乎有效。同样,仅在确实需要时才使用nopasswd(就我而言,正是我所需要的,对于大多数需要密码进行sudo活动的用户而言,这是最好的)

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


禁止对任何/所有命令启用NOPASSWD从来不是一个好主意,这意味着任何进入您的系统并设法将用户加入sudo组的人都将能够非常快速地对您的系统进行任何操作。我可以使用LiveCD进行几分钟访问,或者通过诱使您的用户运行一个名为cmd的命令来轻松地做到这一点,该cmd sudo使用您自己的权限,除了运行您所请求的命令外,还可以将另一个用户添加到sudo组中。
dragon788

2
不要这样发表笼统的声明。在无头系统上,根本不需要设置登录密码(而是依靠密钥对),因为我启用了全磁盘加密,因此该实时CD祝您好运。(顺便说一句,无论使用sudoers文件,它都可以使您在未加密的系统上执行各种有趣的操作)此外,您无法写入PATH中的任何位置,并且我也没有给您提供Shell开头除非我相信您不要尝试颠覆系统。您的安全隐患不是无效的,它只是过时的,并不像您所暗示的那样普遍适用。
jorfus

对于像您这样对安全性没有深入了解的人,这种建议可能比其他建议更好,但我同意这并不理想。
dragon788

@ dragon788的确,也许我们俩都可以编辑响应,以帮助各个级别的用户朝着更好的安全性迈出一步。我将添加一条警告以启用全盘加密,以防止在攻击者具有物理访问权限时造成危害,并注意如果笔记本电脑用户忘记将其计算机锁定在公共场所,则sudo nopasswd可能会导致快速危害。(尽管我建议设置五分钟锁定和屏幕锁定快速键实际上可以带来更好的安全性。)
jorfus

出色的更新,我的答案除了这里的这些评论以外没有其他强力建议,而且具有讽刺意味的是,在我确实使用全盘加密的工作中,我最终启用了NOPASSWD,因为我有一个非常安全的密码,很难输入反复使用,在短暂的空闲时间后,我使用xautolock锁定了我的机器。
dragon788

0

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

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.