最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 用户登录后的环境隔离技术 chroot/jail
时间:2026-07-12 09:04:46 编辑:袖梨 来源:一聚教程网
chroot不是安全沙箱,仅限制路径可见性,需配合OpenSSH ChrootDirectory等配置才能实现用户登录即隔离,且必须满足父目录属主为root、权限≤755等硬性条件。
Linux 用户登录后的环境隔离,chroot 是最轻量、最直接的路径级限制手段,但它不是“自动生效”的登录机制——必须配合 SSH 配置或定制登录流程才能让用户一登录就落入 jail。它不加密、不虚拟化、也不阻断网络,只管“根目录在哪”,所以用对了很实用,用错了反而带来安全隐患。
chroot 对用户生效的前提条件
OpenSSH 的 ChrootDirectory 是最常用也最稳妥的方式,但有硬性要求:
- 从系统根(/)到 chroot 目录的每一级父目录,所有权必须是 root:root
- 这些父目录权限不能开放组/其他写权限(chmod 755 是上限,775 或 777 会拒绝登录)
- chroot 目录本身(如
/sftp/user1)必须由 root 拥有,且不可被组/其他人写 - 用户真正需要写的子目录(如
/sftp/user1/upload)才归属该用户,并设好权限
SFTP 场景下的标准配置流程
这是生产中最常见、风险最低的落地方式,完全禁用 Shell,只允许文件传输,所有操作可审计:
- 新建专用组:
sudo groupadd sftp-locked - 添加用户并禁用登录 shell:
sudo useradd -m -d /sftp/user1 -s /sbin/nologin -g sftp-locked user1 - 创建结构并设权:
sudo mkdir -p /sftp/user1/upload,然后执行sudo chown root:root /sftp /sftp/user1sudo chmod 755 /sftp /sftp/user1sudo chown user1:sftp-locked /sftp/user1/upload - 编辑
/etc/ssh/sshd_config,追加以下段落:Subsystem sftp internal-sftpMatch Group sftp-lockedX11Forwarding noAllowTcpForwarding noChrootDirectory /sftp/%uForceCommand internal-sftpPermitTunnel no - 重启服务:
sudo systemctl restart sshd
手动构建可交互的 chroot 环境(适合调试或修复)
若需让用户登录后进入一个带 bash 的受限命令行(非 SFTP),必须手动准备完整骨架:
- 建目录:
sudo mkdir -p /srv/jail/user1/{bin,lib64,etc,dev,proc,sys,home} - 复制基础命令和依赖:
sudo cp /bin/bash /srv/jail/user1/bin/,再运行ldd /bin/bash,把所有/lib64/*.so.*文件复制进去 - 补关键设备节点:
sudo cp -a /dev/{null,zero,random,urandom} /srv/jail/user1/dev/ - 挂载虚拟文件系统:
sudo mount -t proc proc /srv/jail/user1/proc,sudo mount --bind /dev /srv/jail/user1/dev,sudo mount -t sysfs sysfs /srv/jail/user1/sys - 同步必要配置:
sudo cp /etc/resolv.conf /srv/jail/user1/etc/,sudo cp /etc/nsswitch.conf /srv/jail/user1/etc/ - 设置用户家目录:
sudo mkdir /srv/jail/user1/home/user1,sudo chown user1:user1 /srv/jail/user1/home/user1
关键提醒:这不是安全沙箱
chroot 只改根路径,不隔离进程、网络、内核资源。如果用户在 jail 内获得 root 权限,仍可能通过 /proc/1/root、设备节点或内核漏洞逃逸。因此:
- 绝不应在 jail 内保留 su、sudo、mount 等特权命令
- 避免以 root 身份运行用户进程;可用
--userspec=nobody:nogroup降权启动 - 真正需要强隔离,请用 systemd-nspawn、podman 或 Docker
- chroot 的价值在于“路径可见性控制”,而非“权限边界控制”
相关文章
- 崩坏因缘精灵海游龙召唤条件说明 07-22
- 尽管工作室已关闭:Wreckreation 2 仍正式公布:距离前作发布仅九个月 07-22
- 率土之滨武将强度排行 率土之滨武将开荒搭配攻略表 07-22
- 挖掘者米娜怎样召唤伙伴成就攻略分享 07-22
- 仙灵物语最强阵容搭配攻略:仙灵物语高战力阵容推荐与实战解析 07-22
- 天堂2盟约怎么升级快:天堂2盟约快速升级技巧与高效练级指南 07-22