Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

一个功能强大的 chroot 环境管理脚本,提供自动挂载、自定义绑定、环境变量控制和清理功能,让 chroot 操作变得更简单、更安全。

License

Notifications You must be signed in to change notification settings

ShouChenICU/AChroot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AChroot - Advanced Chroot Wrapper

License Shell Script Version

一个功能强大的 chroot 环境管理脚本,提供自动挂载、自定义绑定、环境变量控制和清理功能,让 chroot 操作变得更简单、更安全。


✨ 特性

  • 🚀 自动挂载系统目录 - 自动挂载 /proc/sys/dev/dev/pts 等必要的系统目录
  • 🔗 灵活的绑定挂载 - 支持添加任意数量的自定义绑定挂载
  • 🌍 环境变量控制 - 可选择清除环境变量或保留,自动设置基础 PATH
  • 🛡️ 智能重复检测 - 自动检测并跳过已挂载的目录,避免重复挂载
  • 🧹 自动清理 - 退出时自动卸载所有挂载点,可选保留挂载
  • 命令执行 - 支持在 chroot 环境中直接执行命令或启动交互式 Shell
  • 🎯 优雅的错误处理 - 完善的信号捕获和清理机制

📋 系统要求

  • Linux 操作系统
  • Bash 4.0+
  • Root 权限(需要 sudo 执行)
  • 已安装 mountumountmountpoint 工具

🛠️ 安装

方法 1: 安装到系统路径(推荐)

使用安装脚本将 achroot 安装到 /usr/local/bin,安装后可以在系统任意位置直接使用:

# 克隆或下载本项目
cd /path/to/AChroot

# 安装(将 achroot.sh 安装为 achroot 命令)
sudo ./install.sh

# 现在可以直接使用 achroot 命令
sudo achroot /path/to/chroot

方法 2: 直接运行脚本

无需安装,直接运行 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 参数保留)
   └─ 逆序卸载所有挂载点

💡 使用场景

场景 1: 修复损坏的系统

# 挂载根分区
sudo mount /dev/sda1 /mnt/broken-system

# 进入 chroot 环境修复
sudo achroot /mnt/broken-system

# 在 chroot 中执行修复操作
# 退出后自动清理挂载

场景 2: 构建隔离的开发环境

# 创建干净的环境,清除所有环境变量
sudo achroot -c /path/to/dev-rootfs

# 或绑定项目目录
sudo achroot -c -m /home/user/project:/work /path/to/dev-rootfs

场景 3: 测试软件包

# 在隔离环境中测试安装
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

问题:chroot 中找不到命令

原因:PATH 环境变量设置不当或命令不存在于 chroot 环境中

解决方案

  1. 确保 chroot 目录包含完整的文件系统,特别是 /bin/usr/bin 等目录
  2. 脚本已自动设置基础 PATH,包含常用命令路径
  3. 如果需要自定义 PATH,可以在进入 chroot 后手动设置

问题:环境变量丢失

说明:使用 -c 参数会清除所有环境变量

解决方案

  • 如需保留环境变量,不要使用 -c 参数
  • 或在 chroot 环境中手动设置需要的环境变量

🔒 安全注意事项

  1. 只在可信的 chroot 环境中使用 - chroot 不是完整的安全隔离机制
  2. 谨慎绑定敏感目录 - 避免将包含敏感数据的目录绑定到不可信的 chroot 环境
  3. 使用 -k 参数时注意 - 保留的挂载点可能导致资源占用,记得手动清理
  4. 避免嵌套 chroot - 可能导致挂载点混乱
  5. 环境变量安全 - 使用 -c 参数可以防止敏感环境变量泄露到 chroot 环境

🤝 贡献

欢迎提交 Issue 和 Pull Request!

如果您发现 bug 或有功能建议,请:

  1. Fork 本仓库
  2. 创建您的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启一个 Pull Request

📄 许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。


📞 联系方式

如有问题或建议,请通过 Issue 与我联系。


🙏 致谢

感谢所有为这个项目做出贡献的开发者!


Made with ❤️ by the AChroot team

About

一个功能强大的 chroot 环境管理脚本,提供自动挂载、自定义绑定、环境变量控制和清理功能,让 chroot 操作变得更简单、更安全。

Topics

Resources

License

Stars

Watchers

Forks

Languages