我试图将主目录的层次结构暴露给许多FreeBSD监狱。配置主目录,以便每个目录都是唯一的ZFS数据集。这些监狱用于开发工作,因此会定期创建和销毁。
我首先想到的只是使用nullfs挂载/home
在监狱中,但是nullfs并没有提供任何访问下级文件系统的方法。
我的第二个想法是通过NFS导出目录,然后在每个监狱中运行自动安装程序守护程序(amd)。如果可以在监狱中执行NFS挂载,那本来可以工作的。但事实并非如此。
我的第三个想法是在主机上运行amd,并将nullfs挂载到监狱中...但是不存在对nullfs的 amd支持。
我的第四个想法是回到使用NFS导出目录的原因,因为amd当然可以与NFS一起使用,对吗?不幸的是,amd不想在目标挂载点上挂载目录,而是希望将其挂载到一个临时位置(/.amd_mnt/...
),然后创建一个符号链接...当然,这在监狱环境中毫无用处。
因此,也许您可以使用nullfs向/.amd_mnt
监狱公开的子目录?没有!这使我们回到了我的第一次尝试,在该尝试中,我们发现无法使用nullfs访问下级文件系统。
然后我的头爆炸了。
我要做什么有很好的解决方案?一个不好的解决方案是在启动监狱后运行一个脚本,该脚本将为每个主目录创建多个nullfs挂载点,但这非常笨拙-需要定期运行以考虑新目录或已删除目录。因此,基本上我将不得不编写一个错误的自动挂载程序。
一定会有更好的办法。帮我,Serverfault,您是我唯一的希望!
更新1:我想到我可以用来解决部分问题pam_mount
,尽管这充其量是不完整的。另外,从文档中还不清楚是否pam_mount
可以自动创建目标安装点。如果它要求挂载点先验存在,那么该解决方案将不会比我已经提出的错误的自动挂载器更好。
更新2:如以下答案中所述,VFCF_JAIL
在NFS文件系统上进行设置确实允许监狱执行NFS挂载。不幸的是,自动挂载程序继续表现为无益的,并且在监狱中运行时似乎很擅长以某种方式陷入困境,以至于必须重新引导系统才能删除进程条目。