我们使用#include
sudoers 文件中的功能根据每个应用程序组织我们的 sudo 规则。
我们的 sudoers 设置看起来有点像这样:
/etc/sudoers
-> #include /usr/local/etc/sudo/sudoers.master
-> #include /usr/local/etc/sudo/app1.sudo
-> #include /usr/local/etc/sudo/app2.sudo
-> #include /usr/local/etc/sudo/<...etc...>.sudo
/usr/local/etc
是我们在所有服务器上同步的目录。
有时我们需要特定于主机的 sudo 规则,因此我们将其直接放入 /etc/sudoers 中。所有全局内容都放入这些集中同步的文件中。
当我运行visudo
编辑本地 sudoers 时,它会/etc/sudoers
在 vi 中打开,没有任何问题。当我保存更改时,系统会提示我:
"/etc/sudoers.tmp" XX lines, XXXX characters
press return to edit /usr/local/etc/sudo/sudoers.master:
visudo: can't stat /usr/local/etc/sudo/sudoers.master: Bad file number
然后 visudo 就存在(退出代码 1)。
sudoers.master
和文件的语法appX.sudo
均已检查。
什么原因导致 visudo 无法打开通过基本 sudoers 末尾sudoers.master
包含的文件?#include
我在 AIX、Linux 和 Solaris 上看到了这种行为。
作为一种解决方法,有没有办法告诉 visudo 不要遵循任何#include
指令,而只编辑主文件?
答案1
如果您使用#includedir
而不是,则#include
visudo
不会尝试编辑包含的文件,除非它们有语法错误。