在centos下利用chroot实现一个和宿主机隔离的虚拟系统

Administrator
发布于 2025-07-09 / 8 阅读
0
0

在centos下利用chroot实现一个和宿主机隔离的虚拟系统

chroot 是一个用于改变进程根目录的操作系统功能和命令。在 Unix 和类 Unix 操作系统(如 Linux)中,chroot 可以将进程的根目录(即 /)改变为指定的路径,这个路径被称为“chroot 环境”或“chroot 监狱”。当一个进程在 chroot 环境中运行时,它对文件系统的视图被限制在这个新的根目录下。这样做的主要目的是为了隔离进程,增加安全性,或者为软件提供一个不同的运行环境。

一、下载centos8系统文件包,制作chroot需要的根目录

wget https://fileoss.recallg.com/download/2d45b4c3099g:057:e01fddb38:eb:8.gz
# 将系统文件解压到指定目录
tar -zxvf centos8.tar.gz -C /usr/local/centos8

二、实现chroot虚拟系统需要的shell脚本,制作一个开机自启动的服务

  • /usr/local/overlay-root.sh
  • 首先在宿主机根目录下新建一个目录,用于存放虚拟系统文件;在宿主机每次重启chroot虚拟系统后都会将上一次虚拟系统文件重置一次,让虚拟系统每次重启后都是新系统
#!/bin/bash

# 定义chroot环境的根目录
CHROOT_DIR="/mychroot"

# 取消挂载文件系统,添加异常处理
umount -l $CHROOT_DIR/dev || true
umount -l $CHROOT_DIR/sys || true
umount -l $CHROOT_DIR/proc || true
sudo rm -rf $CHROOT_DIR

# 创建chroot目录
# sudo mkdir -p $CHROOT_DIR

# 复制基本系统文件和目录
sudo cp -r /usr/local/centos8 /mychroot

# 创建必要的设备文件
sudo mknod -m 666 $CHROOT_DIR/dev/null c 1 3
sudo mknod -m 666 $CHROOT_DIR/dev/zero c 1 5
sudo mknod -m 666 $CHROOT_DIR/dev/random c 1 8
sudo mknod -m 666 $CHROOT_DIR/dev/urandom c 1 9

# 挂载必要的文件系统
sudo mount -t proc /proc $CHROOT_DIR/proc
sudo mount -o bind /sys $CHROOT_DIR/sys
sudo mount -o bind /dev $CHROOT_DIR/dev

# 进入chroot环境
# echo "Entering chroot environment..."
# sudo chroot $CHROOT_DIR /bin/bash

# 退出chroot环境后卸载文件系统
# echo "Exiting chroot environment..."
# sudo umount $CHROOT_DIR/proc
# sudo umount $CHROOT_DIR/sys
# sudo umount $CHROOT_DIR/dev

echo "Chroot environment has been cleaned up."

三、编写centos的chroot服务

  • /etc/systemd/system/overlay-login.service
[Unit]
Description=Overlay Login Script
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/overlay-root.sh
User=root
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • 设置完chroot服务后重新加载刷新一下系统服务,然后设置开启自启动
sudo systemctl daemon-reload
systemctl enable overlay-login.service
systemctl start overlay-login.service

四、给宿主机某个用户配置权限,使用户登录后直接进入chroot虚拟系统,在虚拟系统执行exit推出时,也直接推出宿主机登录

# 新建一个vr用户,这个用户只有登录权限,没有root权限
sudo usermod -s /sbin/nologin vr
sudo chmod 700 /home/vr
sudo usermod -s /bin/bash vr
  • 编辑 /etc/sudoers 文件,在最后一行添加以下内容
vr ALL=(root) NOPASSWD: /usr/sbin/chroot /mychroot /bin/bash
  • 切换到vr用户,设置登录时执行的脚本
# 登录到vr用户
su - vr
vim overlay-login.sh
# overlay-login.sh 文件内容

#!/bin/bash
exec sudo chroot /mychroot /bin/bash
  • 编辑vr用户目录下的 .bashrc 文件,添加以下内容即可在登录vr用户时直接进入虚拟系统,如果需要免密登录vr用户,则直接设置vr用户没密码登录(不推荐)
if [ -f /home/vr/overlay-login.sh ]; then
    /home/vr/overlay-login.sh
fi

exit

评论