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 来直接编辑文件,但这不会捕获也存在于不同文件中的别名的重新定义。