sudo:在第 27 行附近的 /etc/sudoers 中解析错误

sudo:在第 27 行附近的 /etc/sudoers 中解析错误
root@debian:/home/debian8# cat  /etc/sudoers
#
# 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    mail_badpass
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

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

includedir /etc/sudoers.d 

第27行只去掉了一个#字符,原始格式如下。

#includedir /etc/sudoers.d 

我只是删除#字符。

root@debian:/home/debian8# ls  /etc/sudoers.d
myRules  README
root@debian:/home/debian8# cat  /etc/sudoers.d/myRules
debian8  ALL=(ALL:ALL) NOPASSWD:ALL

如何修复它?

答案1

#includedir /etc/sudoers.d不是评论,#includedir是指令。哈希符号是其中的一部分。只需重新添加即可。

答案2

根据man sudoers应该使用@includedir

包含 sudoers 中的其他文件 可以使用 @include 和 @includedir 指令包含当前正在解析的 sudoers 文件中的其他 sudoers 文件。为了与 1.9.1 之前的 sudo 版本兼容,还接受 #include 和 #includedir。

@includedir 指令可用于创建 sudoers.d 目录,系统包管理器可以将 sudoers 文件规则放入该目录中,作为包安装的一部分。例如,给定:

@includedir /etc/sudoers.d

sudo 将暂停当前文件的处理并读取 /etc/sudoers.d 中的每个文件,跳过以“~”结尾或包含“.”的文件名。字符以避免导致包管理器或编辑器临时/备份文件出现问题。文件按词汇顺序进行解析。也就是说, /etc/sudoers.d/01_first 将在 /etc/sudoers.d/10_second 之前解析。请注意,由于排序是词法排序,而不是数字排序,因此 /etc/sudoers.d/1_whoops 将在 /etc/sudoers.d/10_second 之后加载。在文件名中使用一致数量的前导零可以避免此类问题。解析目录中的文件后,控制返回到包含 @includedir 指令的文件。

请注意,与通过 @include 包含的文件不同,visudo 不会编辑 @includedir 目录中的文件,除非其中之一包含语法错误。仍然可以使用 -f 标志运行 visudo 来直接编辑文件,但这不会捕获也存在于不同文件中的别名的重新定义。

相关内容