chroot - run command or interactive shell with special root directory
以制作一个只有 bash 和 ls 两条命令的隔离环境为例。实践环境 Aliyun ubuntu18.04
制作一个 chroot 隔离环境
创建一个 new root, 并切换到 jail 目录
mkdir jailcd jail
在 jail 下创建 bin 目录
mkdir bin
复制 ls 和 bash 到 jail/bin
cp -v /bin/{bash,ls} ./bin
将 /bin/bash 和 /bin/ls 的依赖复制到 jail 对应的目录
- 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)
注意:
The “vDSO”(virtual dynamic shared object)is a small shared library that the kernelautomaticallymaps into the address space ofall user-space applications. Applications usually do not need to concern themselves with these details as the vDSO is most commonlycalled by the C library. This way you can code in the normal way using standard functions and the C library will take care of using any functionality that is available via the vDSO.
virtual shared objectthat is loaded intoevery Linux processby thekernel and isnot an actual fileon disk.
linux-vdso.so.1是一个虚拟的共享库,用来将内核中的 部分系统调用映射到每一个 user application的,从而调用这部分系统调用很类似函数调用。不用复制这个。其实也无法复制。😄
- 在 jail 这个 new root 目录下创建
lib/x86_64-linux-gnu和lib64目录
mkdir -p lib/x86_64-linux-gnu
mkdir lib64 - 复制 /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 - 复制
/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 功能更强大。
2825

被折叠的 条评论
为什么被折叠?



