欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

chroot命令

来源:原创    更新时间:2018-10-11 16:28:13    作者:jason    浏览:3561
  • 命令描述
chroot()将调用进程的根目录更改为 path中指定的目录。此目录将用于以 /开头的路径名 。根目录由调用进程的所有子进程继承。

只有特权进程(Linux:具有CAP_SYS_CHROOT功能的进程)才可以调用chroot()。

此调用更改了路径名解析过程中的一个成分,并且不执行任何其他操作。

此调用不会更改当前工作目录,因此在调用之后' 。'可以在树的外面以' / '为根。特别是,超级用户可以通过以下方式逃离“ chroot监狱”:

mkdir foo; chroot foo; cd ..
此调用不会关闭打开的文件描述符,并且此类文件描述符可能允许访问chroot树之外的文件。
  • 命令语法
[选项] [新的目录] [命令] [参数]
  • 命令实例

choot 即用于更改根目录

在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:


增加了系统的安全性,限制了用户的权力;

在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。


建立一个与原系统隔离的系统目录结构,方便用户的开发;

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


切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。

chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。

实例:通过 chroot 重新设置 root 密码

忘记了 root 密码该怎么办?接下来的 demo 将演示如何通过 chroot 命令重新设置 centos7 中被忘记了的 root 密码。
systemd 的管理机制中,rescure 模式和 emeryency 模式是无法直接取得 root 权限的,需要使用 root 密码才能进入 rescure 和 emeryency 环境。所以我们需要通过其他方式来设置 root 密码。我们可以为内核的启动指定 "rd.break" 参数,从而让系统在启动的早期停下来,此时我们可以通过使用 root 权限并结合 chroot 命令完成设置 root 密码的操作。下面我们一起来看具体的操作过程。

在系统启动过程中进入开机菜单时按下字母键 e 进程开机菜单的编辑模式:

这就是系统的内核选择界面,按下 e 后进入编辑界面:

找到以 "linux16 /vmlinuz-" 开头的行。如果默认没有看到该行,使用向下箭头符号找到该行然后定位到该行末尾处,输入一个空格和字符串 "rd.break",如下图所示:

接着按下 ctrl + x 以该设置继续启动,启动过程中操作系统会停下来,这是系统启动过程中的一个非常早的时间点:


所以系统的根目录还挂载在 RAM disk 上(就是内存中的一个文件系统),我们可以通过 mount 命令检查系统当前挂载的文件系统,下面是我们比较关心的两条:

上图中 mount 命令输出的第一行说明此时的根目录在一个 RAM disk 中, 即 rootfs。图中输出的第二行说明我们的文件系统此时被挂载到了 /sysroot 目录,并且是只读的模式:

/dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr2,inode64,noquota)

在我们正常登陆系统的情况下,系统根目录的挂载情况如下:

image.png

/dev/mapper/centos-root / xfs rw,relatime,attr2,inode64,noquota 0 0

该时间点的最大好处可以让你具有 root 权限!到这里就可以设置新的 root 密码了


首先像之前说过的,需要把 /sysroot 重新挂载为可读写的模式。命令如下:


switch_root:/# mount -o remount,rw /sysroot

接下来使用 chroot 命令把根目录切换到我们正常的环境中:


switch_root:/# chroot /sysroot

此时可以理解为:我们以 root 权限正常登录了,都到这里了,修改密码当然就很容易了吧!

用下面的命令为 root 用户设置新的密码:

sh-4.2# echo "www.linuxbaodian.com" | passwd --stdin root

当然也可以使用这种密文方式:

sh-4.2#passwd root

接下来就是处理 SELinux 相关的问题(如果原环境关闭了SELINUX,可以不考虑)。由于当前的环境中 SELinux 并未启动,所以我们对文件的修改可能造成文件的 context 不正确。为了确保开机时重新设定 SELinux context,必須在根目录下添加隐藏文件 .autorelabel:

sh-4.2# touch /.autorelabel

然后接着从 chroot 中退出,并重启系统:

sh-4.2# exit
switch_root:/# reboot


最后使用www.linuxbaodian.com 作为新的root密码,登录系统。


上一条命令:createrepo

下一条命令:atq

笔记分享

表情

共0条分享记录
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

最受欢迎

猜你喜欢

最受争议