问题描述
我在/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}} | sort
和printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
以查看当前语言是否打印AaBbCc
等或ABC
然后打印abc
以确定要使用的最佳”last”字母前缀。