一个功能强大的 chroot 环境管理脚本,提供自动挂载、自定义绑定、环境变量控制和清理功能,让 chroot 操作变得更简单、更安全。
- 🚀 自动挂载系统目录 - 自动挂载
/proc、/sys、/dev、/dev/pts等必要的系统目录 - 🔗 灵活的绑定挂载 - 支持添加任意数量的自定义绑定挂载
- 🌍 环境变量控制 - 可选择清除环境变量或保留,自动设置基础 PATH
- 🛡️ 智能重复检测 - 自动检测并跳过已挂载的目录,避免重复挂载
- 🧹 自动清理 - 退出时自动卸载所有挂载点,可选保留挂载
- ⚡ 命令执行 - 支持在 chroot 环境中直接执行命令或启动交互式 Shell
- 🎯 优雅的错误处理 - 完善的信号捕获和清理机制
- Linux 操作系统
- Bash 4.0+
- Root 权限(需要
sudo执行) - 已安装
mount、umount、mountpoint工具
使用安装脚本将 achroot 安装到 /usr/local/bin,安装后可以在系统任意位置直接使用:
# 克隆或下载本项目
cd /path/to/AChroot
# 安装(将 achroot.sh 安装为 achroot 命令)
sudo ./install.sh
# 现在可以直接使用 achroot 命令
sudo achroot /path/to/chroot无需安装,直接运行 achroot.sh:
sudo ./achroot.sh /path/to/chroot如果已通过安装脚本安装,可以使用以下命令卸载:
sudo ./install.sh uninstall# 使用已安装的命令(推荐)
sudo achroot /path/to/chroot
# 或直接运行脚本
sudo ./achroot.sh /path/to/chroot
# 在 chroot 环境中执行命令
sudo achroot /path/to/chroot ls -la /
# 执行多个命令
sudo achroot /path/to/chroot bash -c "uname -a && ls /"# 添加自定义绑定挂载
sudo achroot -m /home/user:/mnt/host /path/to/chroot
# 多个绑定挂载
sudo achroot -m /tmp:/host_tmp -m /opt:/host_opt /path/to/chroot
# 保留挂载(不自动卸载)
sudo achroot -k /path/to/chroot
# 清除环境变量(仅保留基础 PATH)
sudo achroot -c /path/to/chroot
# 组合使用
sudo achroot -c -k -m /home/user:/home /path/to/chroot /bin/bash| 选项 | 简写 | 描述 |
|---|---|---|
--bind-mount HOST:CHROOT |
-m |
添加自定义绑定挂载,可重复使用 |
--keep-mount |
-k |
退出后保留挂载,不自动卸载 |
--clear-env |
-c |
清除环境变量,仅保留基础 PATH 环境变量 |
--help |
-h |
显示帮助信息 |
- CHROOT_PATH (必需) - chroot 环境的根目录路径
- COMMAND (可选) - 在 chroot 环境中执行的命令及其参数
- HOST:CHROOT - 绑定挂载格式,例如
/home/user:/mnt/host
- 默认行为:保留当前环境变量,并设置基础 PATH
- 使用
-c参数:清除所有环境变量,仅保留基础 PATH - 基础 PATH:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
脚本会自动挂载以下系统目录:
| 源 | 目标 (chroot 内) | 类型 | 说明 |
|---|---|---|---|
proc |
/proc |
proc | 进程信息文件系统 |
sys |
/sys |
sysfs | 系统设备信息 |
/dev |
/dev |
bind | 设备文件 |
/dev/pts |
/dev/pts |
bind | 伪终端设备 |
1. 解析命令行参数
↓
2. 检查 root 权限和 chroot 目录
↓
3. 注册清理函数(信号捕获)
↓
4. 挂载系统目录和自定义绑定
├─ 检查目录是否存在
├─ 检测是否重复挂载
└─ 执行挂载操作
↓
5. 设置环境变量
├─ 清除环境变量(使用 -c)
└─ 设置基础 PATH
↓
6. 进入 chroot 环境
├─ 交互式 Shell(无命令)
└─ 执行指定命令(有命令)
↓
7. 自动清理(或根据 -k 参数保留)
└─ 逆序卸载所有挂载点
# 挂载根分区
sudo mount /dev/sda1 /mnt/broken-system
# 进入 chroot 环境修复
sudo achroot /mnt/broken-system
# 在 chroot 中执行修复操作
# 退出后自动清理挂载# 创建干净的环境,清除所有环境变量
sudo achroot -c /path/to/dev-rootfs
# 或绑定项目目录
sudo achroot -c -m /home/user/project:/work /path/to/dev-rootfs# 在隔离环境中测试安装
sudo achroot -c /path/to/test-rootfs apt install some-package
# 测试完成后自动清理挂载解决方案: 确保使用 sudo 运行脚本
# 使用已安装的命令
sudo achroot /path/to/chroot
# 或直接运行脚本
sudo ./achroot.sh /path/to/chroot脚本会自动检测并跳过已挂载的目录,这是正常行为。
如果自动卸载失败,可以手动清理:
# 查看挂载点
mount | grep /path/to/chroot
# 递归卸载
sudo umount -R /path/to/chroot原因:PATH 环境变量设置不当或命令不存在于 chroot 环境中
解决方案:
- 确保 chroot 目录包含完整的文件系统,特别是
/bin、/usr/bin等目录 - 脚本已自动设置基础 PATH,包含常用命令路径
- 如果需要自定义 PATH,可以在进入 chroot 后手动设置
说明:使用 -c 参数会清除所有环境变量
解决方案:
- 如需保留环境变量,不要使用
-c参数 - 或在 chroot 环境中手动设置需要的环境变量
- 只在可信的 chroot 环境中使用 - chroot 不是完整的安全隔离机制
- 谨慎绑定敏感目录 - 避免将包含敏感数据的目录绑定到不可信的 chroot 环境
- 使用
-k参数时注意 - 保留的挂载点可能导致资源占用,记得手动清理 - 避免嵌套 chroot - 可能导致挂载点混乱
- 环境变量安全 - 使用
-c参数可以防止敏感环境变量泄露到 chroot 环境
欢迎提交 Issue 和 Pull Request!
如果您发现 bug 或有功能建议,请:
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个 Pull Request
本项目采用 MIT 许可证。详见 LICENSE 文件。
如有问题或建议,请通过 Issue 与我联系。
感谢所有为这个项目做出贡献的开发者!
Made with ❤️ by the AChroot team