无法在 sudoers 中使用 :NOPASSWD

无法在 sudoers 中使用 :NOPASSWD

我有以下 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}} | sortprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort查看您当前的语言是否可以打印AaBbCc等,然后ABC确定abc要使用的最佳“最后一个”字母前缀是什么。

相关内容