我正在尝试将主目录层次结构公开给多个 FreeBSD jail。主目录的配置使得每个主目录都是一个唯一的 ZFS 数据集。jail 用于开发工作,因此会定期创建和销毁。
我的第一个想法就是简单地使用空值/home
在监狱里安装,但是空值不提供任何访问下属文件系统的方法。
我的第二个想法是通过 NFS 导出目录,然后在每个 jail 内运行自动挂载守护程序 (amd)。如果可以在 jail 内执行 NFS 挂载,那么这个方法就奏效了。但事实并非如此。
我的第三个想法是在主机上运行 amd 并提供空值安装到监狱里...但 amd 支持空值不存在。
我的第四个想法是回到使用 NFS 导出目录,因为 amd 当然可以使用 NFS,对吧?不幸的是,amd 不喜欢将目录挂载到目标挂载点,而是喜欢将内容挂载到临时位置(/.amd_mnt/...
),然后创建符号链接……当然,这在监狱环境中是无用的。
所以也许你可以使用空值将 的子目录暴露/.amd_mnt
给 jail?不行!这又回到了我的第一次尝试,我们发现无法使用空值。
然后我的头就爆炸了。
对于我想做的事情,有没有什么好的解决方案?坏的解决方案是在启动监狱后运行一个脚本,该脚本将创建多个空值每个主目录都有挂载点,但这很笨重——它需要定期运行以考虑新目录或已删除的目录。所以基本上我必须编写一个糟糕的自动挂载程序。
一定有更好的方法。帮帮我吧,Serverfault,你是我唯一的希望!
更新 1:我突然想到,我可能能够使用 解决部分问题pam_mount
,尽管这充其量只是不完整的。此外,从文档中不清楚是否pam_mount
可以自动创建目标挂载点。如果它要求挂载点先验存在,那么这个解决方案不会比我已经提出的糟糕的自动挂载程序更好。
更新2:正如以下答案中讨论的那样,VFCF_JAIL
NFS 文件系统上的设置确实允许 jail 执行 NFS 挂载。不幸的是,自动挂载程序继续表现得毫无帮助,并且在 jail 中运行时似乎非常容易陷入困境,以至于需要重新启动系统才能删除进程条目。
答案1
你好,Lars!你问的问题很有趣,经过一番研究,我可能已经为你找到了答案。
根据
这
和其他帖子一样,可能可以设置VFCF_JAIL
NFS 文件系统提供程序的属性,理论上这将允许 jail 执行 NFS 挂载。反过来,这又可能允许人们在 jail 内运行 amd……这将巧妙地解决这个问题。
我今晚会尝试重建内核,看看效果如何。这不一定是最好的解决方案(因为这意味着你需要确保此更改在将来的内核更新中保持不变),但如果它有效,那就很有趣了。
记住...
___________ ____
______/ \__// \__/____\
_/ \_/ : //____\\
/| : : .. / \
| | :: :: \ /
| | :| || \ \______/ Don't try to rebuild the
| | || || |\ / | kernel remotely because
\| || || | / | \ you know you're just
| || || | / /_\ \ going to hose the server.
| ___ || ___ || | / / \
\_-_/ \_-_/ | ____ |/__/ \
_\_--_/ \ /
/____ /
/ \ /
\______\_________/