chroot,即改变根目录(修改根目录)。在linux中,系统默认的目录结构都是以/,即以根(root)开始的。而在使用chroot以后,系统的目录结构将以指定的位置作为/位置。
强基本句型
chroot NEWROOT(ARG) […]
具体用法请参考本文的演示。
强降低了系统的安全性,限制了用户的权利:
在经过chroot以后,在新根下将访问不到旧系统的根目录结构和文件ubuntu linux,这样就提高了系统的安全性。通常会在用户登陆前应用chroot,把用户的访问能力控制在一定的范围之内。
强构建一个与原系统隔离的系统目录结构,便捷用户的开发:
使用chroot后linux chroot,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以拿来测试软件的静态编译以及一些与系统不相关的独立开发。
强切换系统的根目录位置,引导Linux系统启动以及急救系统等:
chroot的作用就是切换系统的根位置,而这个作用最为显著的是在系统初始引导c盘的处理过程中使用,从初始RAMc盘(initrd)切换系统的根位置并执行真正的init,本文的最后一个演示会详尽的介绍这些用法。
busybox包含了丰富的工具,我们可以把这种工具放置在一个目录下,之后通过chroot构造出一个迷你系统。简单起见我们直接使用码头工人的busybox镜像打包的文件系统。先在当前目录下创建一个目录rootfs:
美元mkdir rootfs
之后把busybox镜像中的文件释放到这个目录中:
(码头工人出口美元(码头工人创建busybox) | tar - c rootfs -xvf)
通过ls查看rootfs文件夹下的内容:
$ ls rootfs
万事俱备,让我们开始吧!
执行chroot后的ls
$ sudo chroot rootfs/bin/ls
尽管输出结果与刚刚执行的lsrootfs命令形同,而且此次运行的命令却是rootfs/bin/ls。
强运行chroot后的pwd命令
$ sudo chroot rootfs/bin/pwd
哈linux解压命令,pwd命令真把rootfs目录当根目录了!
不带命令执行chroot
$ sudo chroot rootfs
此次出错了linux chroot,由于找不到/bin/bash。我们晓得busybox中是不包含bash的,并且chroot命令为何会找bash命令呢?原先,倘若不给chroot指定执行的命令,默认它会执行“${壳}-我”,而我的系统中${壳}为/bin/bash。
既然busybox中没有bash,我们只得指定/bin/sh来执行壳了。
$ sudo chroot rootfs/bin/sh
运行sh是没有问题的,但是我们复印出了当前进程的PID。
尽管我们做了好几个实验,并且肯定会有同学心存疑惑,如何能证明我们运行的命令就是在chroot目录后的路径中呢?
虽然,我们可以通过/proc目录下的文件检测进程的中的根目录,例如我们可以通过下边的代码检测里面运行的/bin/sh命令的根目录(请在另外一个中执行):
$ pid=$ (pidof - s sh) $ sudo ls ld/proc/$ pid/根
输出中的内容明晰的强调PID为46644的进程的根目录被映射到了/tmp/rootfs目录。
通过代码理解chroot命令
下边我们尝试自己实现一个chroot程序,代码中涉及到两个函数,分别是chroot()函数和目录()函数,虽然真正的chroot命令也是通过调用它们实现的:linuxchroot命令解读
本文原创地址://gulass.cn/lqqhxtdgmljg.html编辑:刘遄,审核员:暂无