24.5 Alpine Jail
24.5.1 创建 Alpine Jail 基本系统
构建基本系统:
sh
# 下载 Alpine Linux 3.17.1 minirootfs 镜像
# fetch https://mirrors.ustc.edu.cn/alpine/v3.17/releases/x86_64/alpine-minirootfs-3.17.1-x86_64.tar.gz
# 创建 Alpine Jail 根目录
# mkdir -p /usr/jails/alpine
# 解压 minirootfs 到 Jail 根目录
# tar zxf alpine-minirootfs-3.17.1-x86_64.tar.gz -C /usr/jails/alpine/
# 创建必要的设备节点
# touch /usr/jails/alpine/dev/shm
# touch /usr/jails/alpine/dev/fd24.5.2 管理挂载文件
创建 /etc/fstab.alpine 文件。其中 /tmp 挂载已被注释,避免将整个宿主机 /tmp 目录暴露给 Jail,以提高安全性:
ini
devfs /usr/jails/alpine/dev devfs rw 0 0
tmpfs /usr/jails/alpine/dev/shm tmpfs rw,size=1g,mode=1777 0 0
fdescfs /usr/jails/alpine/dev/fd fdescfs rw,linrdlnk 0 0
linprocfs /usr/jails/alpine/proc linprocfs rw 0 0
linsysfs /usr/jails/alpine/sys linsysfs rw 0 0
#/tmp /usr/jails/alpine/tmp nullfs rw 0 0 # 注释掉可避免将整个宿主机 /tmp 目录暴露给 Jail24.5.3 管理 Jail 模板
在 /etc/jail.conf 文件中写入:
ini
alpine { # Jail 名称
host.hostname = "alpine"; # 设置 Jail 的主机名
mount.fstab = "/etc/fstab.alpine"; # Jail 使用的 fstab 文件
path = "/usr/jails/alpine"; # Jail 根目录路径
devfs_ruleset = 4; # devfs 挂载规则集
enforce_statfs = 1; # 设置挂载点可见性
allow.mount; # 允许挂载文件系统
allow.mount.devfs; # 允许挂载 devfs
exec.start = "/bin/true"; # minirootfs 中未初始化系统,暂时使用 /bin/true,后续会设置 openrc
exec.stop = "/bin/true"; # 停止时使用 /bin/true
persist; # 即使无进程也保持 Jail 存活
allow.raw_sockets; # 允许使用 raw Socket
interface = "lo1"; # 指定网络接口
ip4.addr = 192.168.5.4; # 分配 IPv4 地址
ip6 = "disable"; # 禁用 IPv6
}设置开机时启动,随后立即启动:
sh
# sysrc jail_list+="alpine"
# jail -c alpine24.5.4 防火墙放行网络
在 pf 防火墙中允许网络访问,与前述方法相同:
sh
# pfctl -t jails -T add 192.168.5.424.5.5 为基本系统配置 OpenRC
进入 Jail。minirootfs 仅提供基础环境,安装 OpenRC 可获得完整的服务管理能力:
sh
freebsd # jexec alpine /bin/sh # 初始仅有 sh,请留意 Shell 提示符的变化
alpine # sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories # 修改镜像地址
alpine # echo 'nameserver 223.5.5.5' >> /etc/resolv.conf # 初始没有此文件,需自行创建
alpine # apk update # minirootfs 可直接运行程序,但无法管理服务,需安装 OpenRC 以获得完整的服务管理能力
alpine # apk add openrc # 安装 OpenRC 作为初始化系统
alpine # mkdir /run/openrc # 创建 OpenRC 运行目录
alpine # touch /run/openrc/softlevel # 在 Docker、Chroot 或 Jail 环境中使用 OpenRC 时建议创建此文件
alpine # exit # 留意 Shell 提示符的变化
FreeBSD # jail -r alpine # 先关闭 Alpine Jail,以便在 FreeBSD 宿主机中配置 OpenRC修改 /etc/jail.conf 文件中 Alpine 的配置:
ini
alpine { # Jail 名称
host.hostname = "alpine"; # 设置 Jail 的主机名
mount.fstab = "/etc/fstab.alpine"; # Jail 使用的 fstab 文件
path = "/usr/jails/alpine"; # Jail 根目录路径
devfs_ruleset = 4; # devfs 挂载规则集
enforce_statfs = 1; # 设置挂载点可见性
allow.mount; # 允许挂载文件系统
allow.mount.devfs; # 允许挂载 devfs
exec.start = "/sbin/openrc default"; # 使用 OpenRC 初始化系统,启动 default 运行级别
exec.stop = "/sbin/openrc shutdown"; # 使用 OpenRC 初始化系统,执行 shutdown 运行级别任务
persist; # 即使无进程也保持 Jail 存活
allow.raw_sockets; # 允许使用 raw Socket
interface = "lo1"; # 指定网络接口
ip4.addr = 192.168.5.4; # 分配 IPv4 地址
ip6 = "disable"; # 禁用 IPv6
}重启 alpine Jail:
sh
# jail -c alpine