chroot仅重映射根目录,不提供权限隔离;必须叠加用户降权、依赖精简、资源限制和虚拟文件系统挂载才能实现最小权限隔离,否则root在jail中等于失效。

Linux chroot 环境本身不提供权限隔离,只做路径重映射。要真正实现权限最小化,必须在 chroot 基础上叠加用户降权、依赖精简、资源限制和运行时加固——否则 root 在 jail 里等于敞开大门。
构建最小根目录:只放程序及其直接依赖
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 创建专用路径,如
/srv/chroot/untrusted,避免用/tmp或用户家目录 - 执行
sudo mkdir -p /srv/chroot/untrusted/{bin,lib64,etc,dev,proc,sys,tmp} - 只复制目标程序(如
/usr/bin/curl)及其直接依赖库:
→ 先运行ldd $(which curl)
→ 仅复制输出中明确列出的.so文件到lib64/,不要整套拷贝/lib64 - 手动创建必需设备节点:
sudo mknod -m 666 /srv/chroot/untrusted/dev/null c 1 3
同理补充zero、urandom、tty
挂载必要虚拟文件系统
chroot 内没 /proc /dev /sys,连 ls 和 ps 都会异常:
-
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替代) - 复制网络配置:
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 - 启动时直接切换身份:
sudo chroot --userspec=untrusted:untrusted /srv/chroot/untrusted /bin/bash - 进入后立即执行资源限制:
ulimit -u 32 -n 64 -v 524288000(限制进程数、文件描述符、虚拟内存 512MB)
验证是否真正受限
别只看能否进 bash,三项检查缺一不可:
- 运行
id→ UID 必须是untrusted对应数值,不能为 0 - 运行
ls /etc/shadow或cat /proc/sys/kernel/osrelease→ 应提示 “No such file or directory” - 运行
mount→ 确认/proc、/sys、/dev已正确挂载,且挂载点指向 jail 内路径
不复杂但容易忽略。










