chroot 实践

chroot - run command or interactive shell with special root directory
以制作一个只有 bash 和 ls 两条命令的隔离环境为例。实践环境 Aliyun ubuntu18.04

制作一个 chroot 隔离环境

创建一个 new root, 并切换到 jail 目录

  1. mkdir jail
  2. cd jail

在 jail 下创建 bin 目录

mkdir bin

复制 bin 和 bash 到 jail/bin

cp -v /bin/{bash,ls} ./bin

将 /bin/bash 和 /bin/ls 的依赖复制到 jail 对应的目录

  1. ldd /bin/bash
root@aliyun:bin# ldd /bin/bash
        linux-vdso.so.1 (0x00007ffd9b6b8000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007feb160d5000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb15ed1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb15ae0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007feb16619000)

注意 linux-vdso.so.1 是一个虚拟的共享库,用来将内核中的 部分系统调用映射到每一个 user application 的,从而调用这部分系统调用很类似函数调用。不用复制这个。其实也无法复制。😄

  1. 在 jail 这个 new root 目录下创建 lib/x86_64-linux-gnulib64 目录
    mkdir -p lib/x86_64-linux-gnu
    mkdir lib64
  2. 复制 /bin/bash 的依赖库
    cp /lib/x86_64-linux-gnu/libtinfo.so.5 .lib/x86_64-linux-gnu/
    cp /lib/x86_64-linux-gnu/libdl.so.2 .lib/x86_64-linux-gnu/
    cp /lib/x86_64-linux-gnu/libc.so.6 .lib/x86_64-linux-gnu/
    cp /lib64/ld-linux-x86-64.so.2 .lib64
  3. 复制 /bin/ls 的依赖库
root@aliyun:bin# ldd /bin/ls
        linux-vdso.so.1 (0x00007ffe6f32b000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff1e7296000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff1e6ea5000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff1e6c33000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff1e6a2f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff1e76e0000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff1e6810000)

cp /lib/x86_64-linux-gnu/libselinux.so.1 ./lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libpcre.so.3 ./lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libpthread.so.0 ./lib/x86_64-linux-gnu/

jail 这个 new root 构建完毕

在这里插入图片描述

执行 chroot jail /bin/bash

在这里插入图片描述
如上图所示,chroot jail /bin/bash 进入了构建的隔离环境。执行 ls 可以查看文件。因为只构建了 bash 和 ls 两条命令,其余的命令无法执行。

chroot 是啥?

通过上面的实践 chroot 一个基本功能就是可以切换到一个隔离的环境,与宿主机进行隔离。不错,这其实也就是 docker 的功能。只不过 docker 功能更强大。

Reference

  1. vdso
  2. chroot examples
  3. chroot-vitualization
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读