核心是通过chroot切断SSH用户对全局文件系统的遍历能力,使其活动根路径禁锢在指定jail目录内;需构建最小化jail结构、配置sshd强制chroot、创建无shell受限账号并绑定jail内home路径。

多租户环境下配置SSH用户隔离,核心不是单纯改HOME路径,而是通过chroot切断用户对系统全局文件系统的遍历能力,使其登录后“只能看到 jail 内的有限目录”,活动目录(即用户实际可访问的根路径)自然被禁锢在指定位置。
一、创建专用 chroot jail 目录结构
选择隔离路径(如/srv/jail/webdev),按最小化原则构建必要子目录:
- 创建基础目录:
sudo mkdir -p /srv/jail/webdev/{etc,dev,lib,lib64,usr/bin,usr/lib,home/webdev} - 复制必要设备节点:
sudo cp -a /dev/{null,zero,random,urandom} /srv/jail/webdev/dev/ - 复制基础命令及依赖库(以
bash和ls为例):ldd /bin/bash | grep "=> /" | awk '{print $3}' | xargs -I{} cp --parents {} /srv/jail/webdev/cp -a /bin/{bash,ls} /srv/jail/webdev/bin/ - 设置 jail 内用户主目录权限:
sudo chown webdev:webdev /srv/jail/webdev/home/webdev,权限设为700
二、配置 SSH 强制 chroot 登录
编辑/etc/ssh/sshd_config,添加或修改以下内容:
- 禁用密码登录(推荐仅用密钥):
PasswordAuthentication no - 为特定用户组启用强制 chroot:
Match Group sftpusersChrootDirectory /srv/jail/webdevX11Forwarding noAllowTcpForwarding noForceCommand internal-sftp -u 002 - 确保
ChrootDirectory路径属主为root且不可写:sudo chown root:root /srv/jail/webdev,sudo chmod 755 /srv/jail/webdev
重启服务:sudo systemctl restart sshd
三、创建受限服务账号并绑定 jail
该账号不能拥有交互式 shell 权限,且HOME必须指向 jail 内路径:
- 创建用户并指定 jail 内 home:
sudo useradd -m -d /home/webdev -s /usr/sbin/nologin -G sftpusers webdev - 手动修正
/etc/passwd中webdev的 home 字段为/home/webdev(注意:这是 jail 内的相对路径,真实路径是/srv/jail/webdev/home/webdev) - 禁止该用户使用
sudo或登录 shell:sudo usermod -s /usr/sbin/nologin webdev - 上传公钥到
/srv/jail/webdev/home/webdev/.ssh/authorized_keys,并设好权限:chmod 700 .ssh; chmod 600 .ssh/authorized_keys; chown -R webdev:webdev /srv/jail/webdev/home/webdev
四、验证隔离效果
用该用户 SSH 登录后,执行以下检查确认禁锢生效:
-
pwd应显示/(因 chroot 后其根就是/srv/jail/webdev) -
ls /只能看到dev etc home lib lib64 usr等 jail 内目录,/etc/passwd内容也应仅含 jail 内用户(需手动同步) -
cd /etc && cat passwd不应泄露宿主机用户信息(若需读取,须在 jail 内维护独立的/etc/passwd) -
ls /proc应为空或报错——chroot 本身不隐藏/proc,需配合mount --bind或容器化进一步限制
不复杂但容易忽略。

















