noteTb: 328
This data as json
| id | user_id | content | tags | created_at | updated_at | enable | pinned | folder_id | comment | position | visibility |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 328 | 1 1 | # bb乐园chroot配置经验 - 版本:1.0.0 - 2026-05-16:Hermes - bb乐园chroot沙箱完整配置 # 事件1:SSH Chroot Jail 搭建 ## 概述 在 leedreamer.cn 服务器上为 bb 用户搭建 SSH chroot 沙箱,使用 debootstrap 构建 Ubuntu 24.04 (noble) 环境,用户登录后被锁定在 /home/bb 目录下,无法访问主机文件系统。 ## 架构 ``` 用户 bb → SSH → ChrootDirectory /home/bb ├── 完整 Ubuntu 24.04 系统 ├── /home/bb/ (bb 家目录) ├── /www/ (nginx 静态文件) └── 绑定挂载: /proc /sys /dev ``` ## 关键配置 ### SSH 配置 (/etc/ssh/sshd_config) ``` Match User bb ChrootDirectory /home/bb X11Forwarding no AllowTcpForwarding no PasswordAuthentication no ``` ### 用户映射 - 主机: bb:x:2000:2000::/home/bb/home/bb:/bin/bash - chroot内: bb:x:2000:2000::/home/bb:/bin/bash - UID必须一致,否则文件权限错乱 ### chroot目录权限 - ChrootDirectory 必须 root:root 755,sshd 拒绝非 root 拥有的目录 - bb 家目录: bb:bb 700 ### sudo - /home/bb/etc/sudoers.d/bb: bb ALL=(ALL) NOPASSWD:ALL - sudo 仅在 chroot 内生效,不影响主机 ### fstab 持久化 ``` /proc /home/bb/proc none bind 0 0 /sys /home/bb/sys none bind 0 0 /dev /home/bb/dev none bind 0 0 ``` # 事件2:家目录套娃问题修复 ## 问题 bb 家目录内存在多余的 home/ 子目录,形成 /home/bb/home/bb/ 的嵌套结构。嵌套目录中有实际使用过的数据(.bash_history、.hermes sessions、goose config等),而外层是初始模板。 ## 解决方法 1. 将嵌套层 /home/bb/home/bb/.bash_history 合并到主目录 2. 将嵌套层 .bashrc 中的路径修正($HOME/home/bb/ → $HOME/) 3. 用 rsync 合并 .hermes/、.config/goose/、.local/ 目录 4. 删除多余的 home/ 子目录 5. 修复 .bash_history 的所有者(之前操作导致变成 root:root) ## 坑 - 嵌套 .bashrc 里有 $HOME/home/bb/.local/bin 这种套娃路径,直接删目录会导致 PATH 失效 - 合并后必须修所有者,用 cat >> 追加文件会改变 owner # 事件3:Node.js 升级到 22 ## 背景 Reasonix 要求 Node ≥ 22,chroot 内初始只有 Node 18.19.1 ## 步骤 ```bash curl -fsSL https://deb.nodesource.com/setup_22.x | bash - apt-get install -y nodejs ``` ## 结果 - Node.js: 18.19.1 → 22.22.2 - npm: 9.2.0 → 10.9.7 - 注意: 升级会把旧 node 相关的 deb 包全删掉重新装 # 事件4:Reasonix Agent 安装 ## 概述 DeepSeek 原生的终端 AI 编程代理,npm 包名 reasonix,GitHub: esengine/DeepSeek-Reasonix (⭐2869) ## 安装 ```bash npm install -g reasonix ``` 安装后位于 /usr/bin/reasonix,版本 0.43.0 ## 配置 Reasonix 只需 DEEPSEEK_API_KEY 环境变量: ```bash export DEEPSEEK_API_KEY=sk-f2f9203fb09a47fc9f0f9d2724a84e9a ``` ## 验证 ```bash reasonix doctor # ✓ api key set, ✓ api reach (balance ok), ✓ tokenizer ``` # 事件5:API Key 隔离 ## 需求 bb 用户登录后使用的 Hermes、Goose、Reasonix 都应使用 bb 自己的 DeepSeek API key,与主机 root 的 key 完全隔离。 ## 涉及配置文件 | 工具 | 配置位置 | 原 key | 新 key | |------|----------|--------|--------| | Reasonix | /home/bb/.env + .bashrc | sk-168548... | sk-f2f920... | | Hermes | /home/bb/.hermes/.env | sk-168548... | sk-f2f920... | | Goose | 环境变量继承 | sk-168548... | sk-f2f920... | ## 步骤 1. 更新 /home/bb/.env 2. 更新 /home/bb/.bashrc 中的 export 语句 3. 更新 /home/bb/.hermes/.env 4. 确认旧 key 完全清除(grep -r sk-168548 返回空) ## 坑 - Hermes 的 .env 里旧 key 被重复拼接了5次(sk-168548...sk-168548...),需要完整替换而不是 sed 替换片段 - 需要用 sudo chroot 操作,确保文件所有者为 bb:bb # 事件6:Nginx /bb/ 路径配置 ## 需求 leedreamer.cn/bb 指向 chroot 内的 /home/bb/www/index.html ## 配置 主 nginx config 中: ```nginx location = /bb { return 301 /bb/; } location /bb/ { include /home/bb/nginx-bb.conf; } ``` nginx-bb.conf (bb 可编辑): ```nginx alias /home/bb/www/; index index.html; try_files $uri $uri/ /bb/index.html; ``` ## 坑 1. 不带斜杠的 /bb 不匹配 location /bb/,会掉到主站 location / - 解决: 加 location = /bb { return 301 /bb/; } 2. nginx 配置修改后需要 reload 才能生效 - systemctl reload nginx 可能被工具安全机制拦截 - 备用: nginx -s reload 3. /etc/nginx/sites-enabled/default 是独立文件不是 sites-available 的软链接 - 改完 sites-available 必须 cp 到 sites-enabled 4. bb 从 chroot 内无法 reload nginx(systemctl 在 chroot 内无效) - 需要主机侧机制触发 reload # 事件7:bb 可用工具总览 ## 开发工具 | 工具 | 版本 | 安装方式 | |------|------|----------| | Python | 3.14.4 | deadsnakes PPA | | Node.js | 22.22.2 | NodeSource | | npm | 10.9.7 | 随 Node.js | | pip | 24.0 | apt | | gcc | 13.3.0 | build-essential | | git | 2.43.0 | apt | | sqlite3 | 3.45.1 | apt | | vim | - | apt | | tmux | - | apt | | htop | - | apt | ## AI Agent | 工具 | 版本 | API Key | |------|------|---------| | Hermes Agent | 0.12.0 | bb 独立 key | | Goose | 1.34.0 | bb 独立 key | | Reasonix | 0.43.0 | bb 独立 key | ## 权限 - sudo NOPASSWD:ALL(chroot 内) - apt install 任意软件 - npm install -g 全局包 - pip3 install 任意 Python 包 ## 网络 - DNS 通过主机 systemd-resolved 解析(/etc/resolv.conf → nameserver 127.0.0.53) - 可以访问外网 # 事件8:踩坑汇总 ## 坑1:sudo 装了但 su - bb 找不到 - 原因: su - 登录 shell 的 PATH 不包含 /usr/bin - 实际 sudo 可用: /usr/bin/sudo -u bb whoami 正常 ## 坑2:chroot 内 locale 警告 - apt 和 perl 都会报 "Setting locale failed" - 不影响功能,可以忽略 ## 坑3:systemctl 在 chroot 内无效 - chroot 没有自己的 init 系统 - systemctl reload nginx 会输出 "Running in chroot, ignoring command" - 需要从主机侧操作 ## 坑4:nginx sites-enabled 不是软链接 - 这台服务器的 /etc/nginx/sites-enabled/default 是独立文件 - 修改 sites-available 后必须 cp 到 sites-enabled,否则 reload 不生效 ## 坑5:Hermes .env 中 API key 拼接错误 - .env 文件中 key 被重复写了多次,导致值异常 - 需要用完整替换而非 sed 片段匹配 ## 坑6:chroot 内 DNS 依赖主机 systemd-resolved - resolv.conf 指向 127.0.0.53(systemd-resolved stub) - chroot 内 127.0.0.1 不可达,但 127.0.0.53 可以通过回环访问 - 如果名称解析失败,检查主机 systemd-resolved 状态 | [] | 2026-05-16 00:36:03 | 2026-05-16 00:36:03 | T | F | 36 36 | 0 | public |