我有一个Debian 7和bind9的默认安装程序,我手动将/etc/bind/named.conf的权限更改为1000,并从/etc/default/bind9中删除-u bind标志,以查看发生了什么。
据我所知:当bind9作为运行级别3的守护进程启动时,init守护进程将调用bind9守护进程脚本/etc/init.d/bind9作为根。bind9守护进程脚本不切换用户,bind9程序本身也不切换-因为-u bind标志已经删除。
但问题是,bind9未能启动,并在/etc/bind/named.conf上抱怨“拒绝许可”。
如果根用户调用了bind9启动脚本,权限问题如何发生?
为了进一步澄清:没有设备,selinux被禁用。bind9配置的其余部分默认保留。
发布于 2014-02-12 19:25:39
在命名读取它的配置文件之前,除了必要的功能之外,它还会删除所有的功能。允许根用户绕过所有文件权限检查的功能是CAP_FOWNER --如果您有兴趣,请参阅功能(7)。如果您检查绑定源代码,在bin/named/unix/os.c中,您会发现函数linux_initialprivs()、linux_minprivs()和其他对此行为负责的函数。
所以你的困惑是可以理解的。uid 0通常有CAP_FOWNER,因此作为uid 0操作的进程将能够在大多数文件访问和权限检查中不受阻碍地操作。在这种情况下,bind不可撤销地取消了操作所不明确需要的所有特权。在我看来,对于守护进程来说,这是一个非常合理和谨慎的操作。
为了避免这个问题,请考虑将该配置文件的权限更改为0400,这允许uid=0在不依赖CAP_FOWNER的情况下读取该文件。
https://unix.stackexchange.com/questions/114221
复制相似问题