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


36

在设置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)。注释字符及其后的任何文本,直到行尾都将被忽略。

有人知道为什么在#includeand #includedir指令中选择使用井号吗?

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

Answers:


38

#include在2004年添加。它必须与已经存在的兼容。不过,我认为include /path/to/file这并不是模棱两可的,但是解析起来可能会有些困难,因为解析器必须将include /path/to/file(包括指令)与include = foo(允许用户include运行命令foo)区分开来。

但是我认为主要原因是看起来像C预处理程序,该手册明确引用了C预处理程序。


1
很好的捕获和解释,不幸的是,这些解释已从手册中删除(至少在Ubuntu,RedHat,OpenBSD和Solaris上)。
兰伯特

2
第一次分析sudoers文件时,我认为这include是一个指令,并且#include注释掉了。最不令人意外的规则遭到了严重违反。我认为这是不好的设计。
卡米尔Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.