为什么 sudo 中的 #include 和 #includedir 指令以井号 (#) 字符为前缀

为什么 sudo 中的 #include 和 #includedir 指令以井号 (#) 字符为前缀

在设置sudo环境时,我注意到 include 指令以井号 (#) 字符为前缀。

Solaris 将其显示为:

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

手册(Linux 和 Solaris)指出:

包含 sudoers 中的其他文件 可以使用 #include 和 #includedir 指令包含当前正在解析的 sudoers 文件中的其他 sudoers 文件。

和:

其他特殊字符和保留字井号(`#')用于指示注释(除非它是 #include 指令的一部分,或者除非它出现在用户名的上下文中并且后跟一个或多个数字,在这种情况下,它被视为 uid)。注释字符及其后的任何文本(直到行尾)都将被忽略。

#include有谁知道为什么选择在和指令中使用英镑字符#includedir

附带说明:我经常使用类似的方法egrep -v '^#|^$' configfile来获取非默认/活动的配置设置,这显然不适用于该sudoers文件。

答案1

#include加入2004年。它必须与已有的内容兼容。不过,我认为include /path/to/file不会含糊不清,但解析起来可能有点困难,因为解析器必须区分include /path/to/file(include 指令) 和include = foo(允许用户include运行命令foo)。

但我认为主要的原因是看起来像 C 预处理器,手动的明确引用作为灵感。

答案2

附带说明:我经常使用诸如egrep -v '^#|^$' configfile之类的东西来获取非默认/活动的配置设置,这显然不适用于 sudoers 文件。

这将从须藤版本1.9.1作为支持@include@includedir已添加以使其“减少混乱”

添加对 @include 和 @includedir 的支持

当哈希字符也是注释字符时,这些比 #include 和 #includedir 更容易混淆。

此提交还添加了包含指令的真正解析,而不是之前使用的纯词法分析器方法。因此,现在可以通过使用双引号字符串或使用反斜杠转义空格字符来包含带有空格的文件。

使用#includeand#includedir保留为了与 1.9.1 之前的版本兼容。

相关内容