我在 /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
答案1
你应该把那条线后该行符合该组的规则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).
答案2
刚刚也遇到过这个问题。
我的情况是,我正在设置一个无头运行的远程系统。我已启用全盘加密(否则具有物理访问权限的攻击者可以做任何他或她想做的事情)我只想使用公钥进行身份验证(我将取消设置密码,以便“拥有某物,知道某物”方案将成为受密码保护的密钥对——当然,root 登录已完全禁用)
Ubuntu 安装程序提示输入非 root 管理员用户,该用户将被添加到组中。然后我使用sudo
以下命令手动将自己添加到文件中:sudoers
sudo visudo
my_username ALL=(ALL:ALL) NOPASSWD:ALL
注意,如果你在笔记本电脑上使用 nopasswd,那么在离开时必须始终锁定计算机,否则,当你起身往咖啡里加奶油时,一个随意的攻击者可以对你造成很大的危害
我仍然需要密码验证。
enzotib 的回答是事情的关键。输入我的用户名后,sudoers 中出现了 sudo 组。
我没有将条目移动到 sudo 行下方,而是删除了之前添加的行,然后将其添加NOPASSWD
到条目中%sudo
这似乎有效。同样,只有在真正需要时才使用 nopasswd(就我而言,这正是我所需要的,对于大多数需要密码才能进行 sudo 活动的用户来说,这是最好的选择)
额外的警告:总是用 visudo 编辑 sudoers。(sudo visudo)此外,打开另一个窗口切换到 root 用户可以让您恢复在更改 sudoers 文件时可能犯的任何错误。
答案3
理想情况下,如果您要自定义可以通过哪些命令运行,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}} | sort
并printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
查看您当前的语言是否可以打印AaBbCc
等,然后ABC
确定abc
要使用的最佳“最后一个”字母前缀是什么。
答案4
在远程系统上,删除加密,但让所有东西都归根所有,就像“管理员”组中的根一样 - 这不是 0!
您可以修改 #sudo -g Administrators
那些需要完全访问权限的内容 - 不是在文件中 sudo
,而是.login
在配置文件中。现在任何标准脚本都可以以“root”身份访问远程,您可以保护必须保护的文件。
另一个方便的“组”是“沙盒”,它在浏览器缓存中有一个登录目录,可以自由读取它,而不能读取其他内容。第一个字符使用大写。