使用标准工具创建舒适的FreeBSD Jails

2021-01-18 04:28:46

Docker在最近几年进入了软件开发领域。虽然其背后的概念功能强大且有用,但数十年来,类似的工具已在系统中使用。 FreeBSD的监狱之一就是建立在更老的chroot(2)上的工具之一。简而言之,借助这些工具,您可以将安全的环境与系统的其余部分分开。

FreeBSD中的Jails绝不是一个新工具(在4.X中引入),但是由于另一个原因,我没有经常使用它们,这很遗憾,因为它们功能强大。因此,我想以简洁明了的方式探讨这个概念。

ZFS数据集是为监狱创建模板的好方法,因为在模板创建之后,您可以使用zfs clone或zfs send / receive轻松创建新的监狱。通常,人们倾向于将监狱分为完成监狱和服务监狱,前者通常类似于真实的FreeBSD系统,后者通常专用于应用程序/服务。我现在将介绍完整的监狱。

模板的创建始于为监狱和模板创建数据集。在这里,我将为FreeBSD12.2的基本安装创建一个新的数据集。

$ sudo zfs create -o mountpoint = / vm zroot / vm $ sudo zfs create zroot / vm / tmpl $ sudo zfs create zroot / vm / tmpl / 12.2

$获取ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.2-RELEASE/base.txz#获取模板所需的所有必要内容,例如lib32(如果需要)$ sudo tar -xJvpf base.txz -C /vm/tmpl/12.2

#没有成功脚本运行的输出。 #输出到默认循环的日志文件.daily_output =" /var/log/daily.log" daily_status_security_output =" /var/log/daily.log" weekly_output =&#34 ; /var/log/weekly.log" weekly_status_security_output =" /var/log/weekly.log" monthly_output =" /var/log/monthly.log" monthly_status_security_output =&# 34; /var/log/monthly.log" #无需那些没有sendmail的用户就可以了#主机执行这些daily_status_disks_enable =" NO" daily_status_zfs_zpool_list_enable =" NO" daily_status_network_enable =" NO" daily_status_uptime_enable =" NO&#34 = dap&d34; ap_d #34; weekly_locate_enable =" NO" weekly_whatis_enable =" NO" security_status_chksetuid_enable =" NO" security_status_neggrpperm_enable =" NO" security_status_chkuid0_enable #34; security_status_ipfwdenied_enable =" NO" security_status_ipfdenied_enable =" NO" security_status_ipfwlimit_enable =" NO" security_status_ipf6denied_enable =&#34_no" #34;

这将创建名为完成的zroot / vm / tmpl / 12.2的快照。然后,您可以使用以下方法检查当前快照:

现在,您应该能够基于该快照创建一个新的监狱。您可以使用zfs clone或zfs send / receive进行操作:

“克隆是一个可写的卷或文件系统,其初始内容与创建它的数据集相同。与快照一样,创建aclone几乎是即时的,并且最初不占用额外的磁盘空间。此外,您可以快照克隆。” [1]

“ zfs send命令创建快照的流表示形式,并将其写入标准输出。默认情况下,将生成完整的流。您可以将输出重定向到文件或其他系统。 zfs receivecommand创建一个快照,该快照的内容在标准输入所提供的流中指定。如果接收到完整的流,则还将创建一个新的文件系统。您可以使用以下命令发送ZFS快照数据并接收ZFS快照数据和文件系统。请参阅下一节中的示例。” [2]

$ sudo zfs clone zroot/vm/tmpl/12.2@complete zroot / vm / jail1#OR $ sudo sh -c" zfs发送zroot/vm/tmpl/12.2@complete | zfs接收zroot / vm / jail1"

注意:这些配置适用于非常简陋的监狱,例如无需任何安装或高级联网。更多配置将在以后的文章中讨论。

#/etc/jail.confexec.start =" / bin / sh /etc/rc";exec.stop =" / bin / sh /etc/rc.shutdown";exec。 clean; mount.devfs; host.hostname = $ name; path =" / vm / $ name&#34 ;; exec.consolelog =" / var / log / jail _ $ {name} _console.log&# 34 ;; exec.prestart =" cp /etc/resolv.conf $ path / etc&#34 ;; exec.poststop =" rm $ path / etc / resolv.conf&#34 ;; jail1 {ip4 .addr =" lo0 | 127.1.1.1/32" ;; ip6.addr =" lo0 | fd00:1:1:1 :: 1/64&#34 ;; allow.chflags; allow.raw_sockets;}

这样便可以在FreeBSD系统上启动一个简单的受限环境。 本主题中仍有很多内容要涉及,例如深度网络和配置。 但是我认为那些人应该有自己的职位。 很快见!