我有以下 sudoers 文件:
misha@misha-K42Jr:~$ sudo cat /etc/sudoers
[sudo] password for misha:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
misha ALL = (root) NOPASSWD: /sbin/pm-suspend
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
我想在不输入密码的情况下运行 /sbin/pm-suspend。我遵循以下示例:如何在没有密码的情况下运行特定的 sudo 命令?
但是,当我尝试暂停时,仍然会收到密码提示:
misha@misha-K42Jr:~$ sudo /sbin/pm-suspend
[sudo] password for misha:
我究竟做错了什么?
答案1
pm-suspend
不低于/sbin/
misha ALL = (root) NOPASSWD: /usr/sbin/pm-suspend
可能会给你带来更好的运气。
答案2
理想情况下,如果您要自定义可以通过哪些命令运行,sudo
则应在单独的文件中进行这些更改,/etc/sudoers.d/
而不是sudoers
直接编辑文件。您还应始终使用visudo
来编辑文件。您永远不应授予NOPASSWD
命令ALL
。
例子:
sudo visudo -f /etc/sudoers.d/sleepytime
插入授予权限的行:
misha ALL= NOPASSWD: /usr/sbin/pm-suspend
然后保存并退出,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
要使用的最佳“最后一个”字母前缀是什么。