一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎样利用 CHROOT jail 技术为不安全服务创建隔离运行环境教程

时间:2026-07-10 09:48:52 编辑:袖梨 来源:一聚教程网

chroot jail 不是安全沙箱,仅重定向文件系统路径,必须配合最小化构建、挂载控制、用户降权和资源限制四步才能形成有效约束链。

chroot jail 本身不是安全沙箱,它只做文件系统路径重定向,不隔离进程、网络或内核资源。所以为不安全服务建隔离环境,不能只靠 chroot 命令,必须配合最小化构建、挂载控制、用户降权和资源限制四步动作,才能形成有效约束链。

准备最小化 jail 根目录

选专用路径,比如 /srv/chroot/untrusted,避免用 /tmp 或用户家目录:

  • 建标准骨架:sudo mkdir -p /srv/chroot/untrusted/{bin,lib64,etc,dev,proc,sys,tmp,usr}
  • 只复制目标服务二进制及其直接依赖:例如要跑 curl,先执行 ldd $(which curl),再仅把输出中带 /lib64/ 的 .so 文件拷入 /srv/chroot/untrusted/lib64/
  • 手动创建基础设备节点:sudo mknod -m 666 /srv/chroot/untrusted/dev/{null,zero,urandom,tty} c 1 3(主次设备号按需调整)

挂载必需虚拟文件系统

没这些,psls /proc、DNS 解析等基本功能都会失效:

  • sudo mount -t proc proc /srv/chroot/untrusted/proc
  • sudo mount --bind /sys /srv/chroot/untrusted/sys
  • sudo mount --bind /dev /srv/chroot/untrusted/dev(若服务纯计算无设备访问,可用 --bind /dev/null 替代整个 /dev
  • 复制网络配置:sudo cp /etc/resolv.conf /srv/chroot/untrusted/etc/,并确保 /srv/chroot/untrusted/etc/nsswitch.conf 存在且含 hosts: files dns

以非 root 身份启动并加固

chroot 内保留 root 权限等于主动放弃隔离效果:

  • 创建专用受限用户:sudo useradd -r -s /bin/bash -d /untrusted untrusted
  • 在 jail 内建好该用户 home:sudo mkdir -p /srv/chroot/untrusted/home/untrusted,并设属主:sudo chown -R untrusted:untrusted /srv/chroot/untrusted/home/untrusted
  • --userspec 启动:sudo chroot --userspec=untrusted:untrusted /srv/chroot/untrusted /bin/bash
  • 进入后立即执行资源限制:ulimit -u 32 -n 64 -v 524288000(限制最大进程数、文件描述符、虚拟内存 512MB)

验证是否真正受限

别只看能否进 bash——三项检查缺一不可:

  • 运行 id:UID 必须是 untrusted 对应数值,不能为 0
  • 运行 ls /:只应看到你放进去的 binlib64 等目录,看不到宿主机的 /etc/home
  • 尝试 ls /etc/shadowcat /proc/sys/kernel/osrelease:应返回 “No such file or directory” 或权限拒绝

热门栏目