我们在 chroot 环境中运行绑定名称服务器。我们在另一台主机上编辑区域文件,希望named-checkzone
在上传之前验证这些文件。我们使用参数-w
来调整目录,但当我们开始在区域文件中使用绝对路径的包含时,它就停止工作了。因此,我尝试使用参数-t
来模拟实际服务器的 chroot 行为,但要实现这一点,named-checkzone
需要 chroot 的权限。我正在考虑创建一个 named-checkzone 的副本并赋予它 CAP_SYS_CHROOT 功能,以避免需要以 root 身份运行它。然后,该副本将对负责编辑区域文件的用户组可执行。
由于 CAP_SYS_CHROOT 可能导致安全问题(如“创建自己的 etc/passwd,chroot + su”),我宁愿避免使用它。有没有更好的方法可以named-checkzone
在这种设置下工作?
答案1
创建一个特权脚本或服务,设置 chroot 并named-checkzone
在内部以非特权方式运行(即在 chroot 之后将权限降至原始 UID)。这就是 BIND 本身和其他网络服务实现其“chroot”选项的方式。
或者,创建一个非特权用户命名空间使用unshare --user
,您将能够设置自定义挂载命名空间 - 用户命名空间内的 UID 0 不会自动映射到父命名空间中的 UID 0,并且在那里没有特殊权限。(用户命名空间通常用作容器实现的一部分。)
(或者,最后,不要使用绝对路径......)