chroot,即改变根目录(修改根目录)。在linux系统中,系统默认的目录结构都是以/,即以根(root)开始的。而在使用chroot以后,系统的目录结构将以指定的位置作为/位置。

强基本句型

  chroot NEWROOT命令(ARG) […] 

具体用法请参考本文的演示。

强降低了系统的安全性,限制了用户的权利:

在经过chroot以后,在新根下将访问不到旧系统的根目录结构和文件ubuntu linux,这样就提高了系统的安全性。通常会在用户登陆前应用chroot,把用户的访问能力控制在一定的范围之内。

强构建一个与原系统隔离的系统目录结构,便捷用户的开发:

使用chroot后linux chroot,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以拿来测试软件的静态编译以及一些与系统不相关的独立开发。

linux chroot_linux 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 

linux chroot_linux chroot_linux chroot

尽管输出结果与刚刚执行的lsrootfs命令形同,而且此次运行的命令却是rootfs/bin/ls。

强运行chroot后的pwd命令

  $ sudo chroot rootfs/bin/pwd 

哈linux解压命令,pwd命令真把rootfs目录当根目录了!

linux chroot_linux chroot_linux chroot

不带命令执行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命令的根目录(请在另外一个shell中执行):

  $ pid=$ (pidof - s sh)
  $ sudo ls ld/proc/$ pid/根

输出中的内容明晰的强调PID为46644的进程的根目录被映射到了/tmp/rootfs目录。

通过代码理解chroot命令

下边我们尝试自己实现一个chroot程序,代码中涉及到两个函数,分别是chroot()函数和目录()函数,虽然真正的chroot命令也是通过调用它们实现的:linuxchroot命令解读

本文原创地址:https://www.linuxprobe.com/lqqhxtdgmljg.html编辑:刘遄,审核员:暂无