noteTb: 335
This data as json
| id | user_id | content | tags | created_at | updated_at | enable | pinned | folder_id | comment | position | visibility |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 335 | 1 1 | # linux-jail bb乐园经验 - 版本:1.0.0 - 2026-05-16:Goose - 初始记录 # 事件 1:bb 用户 chroot 后路径套娃 ## 解决方法 ssh + chroot + shell 包装脚本 1. sshd_config 设置 `ChrootDirectory /home/bb`,用户 bb 登录后自动 chroot 到 `/home/bb` 2. `/etc/passwd` 中 bb 的 home 目录必须指向真实路径 `/home/bb`(sshd 在 chroot 前读 authorized_keys) 3. 创建包装脚本 `/usr/local/bin/chroot-bb-shell.sh`,内容:`export HOME=/root; cd /; exec /bin/bash --login` 4. bb 用户的 shell 设为该包装脚本,确保 chroot 后 `$HOME` 指向 jail 内的 `/root`(即 `/home/bb/root/`) 5. jal 内所有文件 `chown bb:bb`(bb 就是 jail 里的 root) ## 坑 sshd 的 ChrootDirectory 和 home 目录的关系 - sshd **在 chroot 之前**就要读取 `~/.ssh/authorized_keys` 做公钥认证,所以 `$HOME` 必须是外部真实路径 - chroot 后 ssd 才切换文件系统,所以 `.profile`、`.bashrc` 等要从 jail 内的路径读取 - 用 `usermod -d / bb` 会导致 ssd 在真实系统找 `/.ssh/authorized_keys` 而失败 - chroot 根目录 `/home/bb/` 必须归 `root:root` 且权限 `755`,否则 ssd 拒绝 chroot # 事件 2:jail 内用户权限不足(goose 写配置、mkdir 失败) ## 解决方法 $HOME 重定向到 /root - jail 内所有文件已经 chown 给 bb,但 `$HOME` 默认是 `/home/bb`(chroot 后不存在) - goose 读 `$HOME/.config/goose/` 写配置,路径不存在所以 `Permission denied` - 通过包装脚本将 `$HOME` 设为 `/root`(jail 内是 `/home/bb/root/`),goose 就能正常读写 - 同理 `mkdir /project` 失败是因为 chroot 根 `/` 归 root,改为进 `/project` 子目录操作 ## 坑 chroot jail 里 $HOME 必须指向存在的路径 - root 用户的 shell 包装脚本在 ssh 登录时会被 ssd 执行,权限是 bb 用户 - 如果 `$HOME` 指向一个 bb 无权限读的目录(如外部真实的 `/root`),shell 起不来 - 解决方案:jail 内的 `/home/bb/root/` 归 bb 所有,设 `$HOME=/root` 即可 # 事件 3:jail 内 nginx 与外部 nginx 协同 ## 解决方法 反向代理 + 固定端口 - 外部 nginx 监听 443/80,`location /bb/` 反向代理到 `http://127.0.0.1:8080/bb/` - jail 内再跑一个 nginx,监听 8080,负责 `/bb/` 下的路由分发 - jail 内 nginx 配置文件:`/etc/nginx/sites-enabled/bb` - 三个固定服务端口 8081/8082/8083,全留给 bb 用户自由使用 - 外部通过 `https://leedreamer.cn/bb/serverN/` 访问 ## 坑 jail 内 nginx 不能用 80/443 端口(无权限 + 被外部占用) - 用高端口 8080 做入口,8081/8082/8083 做服务端口 - jail 里 nginx 配置变化后:`nginx -t && nginx -s reload` - `sbin/nginx`、`/etc/sudo.conf`、`/etc/sudoers` 等系统文件被 chown 后 sudo 失效,需恢复 `root:root` # 事件 4:SFTP 无法连接(exit code 127) ## 解决方法 将 sftp-server 拷入 jail - ssd 的 Subsystem sftp 配置指向 `/usr/lib/openssh/sftp-server` - chroot jail 里没有这个文件,所以 SFTP 连接失败 - 从外部复制:`cp /usr/lib/openssh/sftp-server /home/bb/usr/lib/openssh/sftp-server` - 注意保持权限 755 # 附录:最终架构 ``` 用户 → https://leedreamer.cn/bb/xxx ↓ 外部 nginx 反向代理 jail 内 nginx (127.0.0.1:8080) ├── /bb/ → 导航页 (/project/index.html) ├── /bb/weber/ → 静态文件 ├── /bb/gogog/ → 静态文件 ├── /bb/deyu/ → 静态文件 ├── /bb/server1/ → proxy_pass 127.0.0.1:8081 ├── /bb/server2/ → proxy_pass 127.0.0.1:8082 └── /bb/server3/ → proxy_pass 127.0.0.1:8083 ``` **关键配置** - 外部 nginx-bb.conf:`/home/bb/nginx-bb.conf`(反向代理配置) - jail 内 nginx:`/etc/nginx/sites-enabled/bb`(路由配置) - 包装脚本:`/usr/local/bin/chroot-bb-shell.sh`(设 HOME + cd /) - bb 登录 shell:`/usr/local/bin/chroot-bb-shell.sh` | ["linux", "chroot", "nginx", "jail", "bb"] | 2026-05-16 21:21:14 | 2026-05-16 21:41:24 | T | F | 36 36 | 0 | public |