chroot
(change root directory
) 在 Linux 系统中发挥了根目录的切换的作用,通常 Linux
系统的根目录是 /
,chroot
可以将特定的目录制定为 /
。因此,chroot
也带来了系统的安全隔离(用户权限、文件目录)等特性。
chroot技术简介
- chroot是一种隔离技术,开始主要是为了测试安装和构建系统(及制作镜像)。
- 到2008年的时候,基于
cgroups
开发 LXC
,之后有开发了 Docker
等。可以说chroot技术是容器技术的前身。
用法
chroot [-u user] [-g group] [-G group,group,...] newroot [command]
command
通常是 bash
。并不是任何目录都可以作为 chroot
的目标,chroot
有一下条件
cd /mnt/myroot
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/
例子
CHROOTDIR="/mnt/myroot"
# 创建一个用于存放系统的根目录
mkdir $CHROOTDIR
# 挂载 chroot 的目录
cd /mnt
mount --bind myroot myroot
# 挂载一些需要的目录
mkdir $CHROOTDIR/{dev,etc,proc,sys}
mount -t proc proc $CHROOTDIR/proc/
mount -t sysfs sys $CHROOTDIR/sys/
mount -o bind /dev $CHROOTDIR/dev/
mount -t devpts pts $CHROOTDIR/dev/pts/
# 配置 dns
cp -i /etc/resolv.conf $CHROOTDIR/etc/
# 配置 yum 源
cp -rap /etc/yum.conf /etc/yum.repos.d $CHROOTDIR/etc
VERSION=`rpm -qf /etc/redhat-release --qf '%{VERSION}\n'`
sed -i -e "s/\$releasever/$VERSION/g" `find $CHROOTDIR/etc/yum* -type f`
# 安装 bash 等
$ yum install --installroot=$CHROOTDIR -y bash yum #kernel grub
$ chroot $CHROOTDIR bash
bash-4.2# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 12G 5.7G 67% /
devtmpfs 894M 0 894M 0% /dev