FreeBSD 下的 ZFS 允许将文件系统分配给 jail,这样 jail 中具有适当权限的帐户可以访问文件系统、创建新的下属文件系统等等。至少在 8-STABLE 中,这些功能尚未集成到现有脚本中/etc/rc.d/jail
。基本过程如下所示:
sysctl -w security.jail.enforce_statfs=0
sysctl -w security.jail.mount_allowed=1
zfs set jailed=on <filesystem>
zfs jail <jid> <filesystem>
并且还需要暴露zfs
监狱内的设备节点。
与此同时,似乎有大量的工具(ezjail、jailer、warden 等/usr/ports/sysutils/*jail*
)声称更容易/更好/更强大/等等,但其中大多数似乎只进行了轻微的维护,而且与标准 jail 脚本相比并没有太大的优势。
我想避免重复造轮子。有没有可以与 ZFS 很好地集成的 jail 管理工具?我正在寻找一种可以在启动 jail 时负责设置必要的 devfs 规则、sysctl 设置和 zfs 属性的工具……并且理想情况下允许基于名称的 jail 引用,尽管许多第三方工具都支持此功能,但不幸的是,现有的 jail 脚本中却缺少此功能。
答案1
经过一番探索,结果发现最新版本的埃兹贾伊尔已经有了这种支持。关键部分是中的以下配置选项/usr/local/etc/ezjail.conf
:
ezjail_use_zfs="YES"
ezjail_jailzfs="tank/jails"
-c zfs
在创建监狱时使用,如下所示:
ezjail-admin create -c zfs myjail 192.168.1.10
您可以使用以下命令将 ZFS 数据集与监狱关联ezjail-admin config
(您不能将此作为create
命令的一部分执行):
ezjail-admin config -z tank/data/myjail myjail
这假设您已经设置了 ZFS 数据集并配置了适当的 sysctl 设置和 devfs 规则以使其工作。
您的 ZFS 数据集需要设置以下jailed
选项:
zfs set jailed=on tank/data/myjail
您需要以下内容/etc/sysctl.conf
:
# support zfs in jails
security.jail.mount_allowed=1
security.jail.enforce_statfs=0
我对使用 ezjail 配置的 jails 使用以下 devfs 规则集:
[devfsrules_zfsjail=100]
add include $devfsrules_jail
add path zfs unhide
答案2
答案3
CBSD(位于http://www.bsdstore.ru/en/about.html) 对 ZFS 有很深入的了解。