我正在 FreeBSD 中设置多个监狱来为动态网站提供服务。主机环境有一个基于 HTTP 主机标头调度连接的网络服务器,每个监狱都有一个包含每个站点数据的 /var/lib/www-db 目录。
问题是,我正在创建多个监狱,通过将模板监狱 mount_nullfs'ing 到实际监狱的目录中,尽管我单独安装了 /var/lib/www-db,但监狱仍然共享 /var/log 和其他/var 层次结构中的目录。
我意识到共享 /var/log 和其他一些目录在某种程度上是一个安全问题,所以我的问题是
- 建立多个监狱的最佳做法是什么?
更新
我使用过 ZFS:我有一个由两个大磁盘组成的 zpool,其中包含要在监狱中挂载为 /var/lib/www-db 的子目录。
答案1
有一个简单的解决方案,允许 jail 修改其根目录(包括 /var 和 /tmp,它们都很重要),同时保持 FreeBSD 中的“模板”完好无损。
程序:
为jail创建根目录,这里表示为
<jail-root>
<jail-root>
使用以下命令使用 unionfs“下面”挂载模板目录:mount_unionfs -o below <template> <jail-root>
通过这种方式,每个监狱都有一个完整的根层次结构可用,并且可以增量写入而不消耗太多存储空间。
参考
除少数特殊情况外,创建或修改 uniondir 中对象的请求都会传递到上层。尝试打开并写入存在于下层中的文件会导致将整个文件复制到上层,然后打开上层副本。类似地,尝试将下层文件截断为零长度会导致在上层中创建一个空文件。最终需要修改较低层的任何其他操作都会因 EROFS 失败。