当前位置: 首页 > Linux

linux的chroot命令

时间:2023-04-06 19:35:14 Linux

将根目录替换为指定的目标目录补充说明chroot命令用于在指定的根目录下运行命令。chroot,即改变根目录(changerootdirectory)。在Linux系统中,系统默认的目录结构以/开头,即以根(root)开头。而使用chroot后,系统的目录结构中会有指定的位置为/位置。chroot命令后,系统读取的目录和文件不会在旧系统根目录下,而是新根目录下(即指定的新位置)下的目录结构和文件,所以它带来的好处大致有以下几点三:增加系统的安全性,限制用户权限:chroot后,新root下将无法访问旧系统的根目录结构和文件,从而增强了系统的安全性。这一般是为了在登陆(login)之前使用chroot,让用户无法访问一些特定的文件。建立与原系统隔离的系统目录结构,方便用户开发:使用chroot后,系统读取新根目录下的目录和文件,这是一个与原系统根目录下的文件没有关系的目录结构。在这个新环境下,可以用来测试软件的静态编译和一些与系统无关的独立开发。切换系统根目录位置,引导Linux系统启动和急救系统等:chroot的作用就是切换系统根目录位置,这个功能最明显的用在初次启动的过程中系统的磁盘,从初始RAM磁盘(initrd)开始切换系统的根位置并执行真正的init。另外,当系统出现一些问题时,我们也可以使用chroot来切换到一个临时系统。命令格式>chroot(选项)(参数)命令选项--help:在线帮助;--version:显示版本信息。命令参数directory:指定新的根目录;command:指定要执行的命令。示例以target为根目录(运行/bin/sh):chroottarget/bin/sh这里target是busybox的安装路径,类似于一个包含很多工具的文件系统。这样就会进入一个shell界面,shell就root到target了。运行exit退出shell,回到原来的本地环境,也可以使用Ctrl+D。注意:默认情况下,root用户仅在直接chroot目标以查找目标的/bin/bash时才有效。这会以target为根目录,target为根目录(运行/bin/ls):chroottarget/bin/ls这里,target是安装busybox的路径,类似于包含很多工具的文件系统。这会运行目标中的ls(不是本地机器的/bin/ls),然后返回到直接的本地目录环境。注意,在本地编译一个程序生成a.out后,复制到target/bin/是不行的,因为里面有动态链接库,需要用ldd查看a.out需要哪些动态库,复制这些库复制到新根对应的路径下执行。使用chroot运行自己编译的程序:准备chroot的根目录:mkdirrumenz编译自己的程序:gccmain.c这里main.c生成a.out,作用是输出hello。查看程序需要的库:输入ldda.out后,输出如下:linux-gate.so.1=>(0xb8034000)libc.so.6=>/lib/tls/i686/cmov/libc.so.6(0xb7eab000)/lib/ld-linux.so.2(0xb801a000)将需要的库和程序复制到新的根目录下:cpa.outrumenzmkdirrumenz/libcp/lib/tls/i686/cmov/libc.so。6rumenz/libcp/lib/ld-linux.so.2rumenz/lib这里rumenz的内容如下:a.outlib/使用chroot运行自己的程序:suchrootrumenz/a.out这样out可以正确运行,因为a.out使用了其他动态链接库,所以需要将库复制到rumenz。如果没有其他库,直接复制a.out运行即可。例如静态编译busybox后,其安装目录下的/bin/busybox不依赖其他库。原文链接:https://rumenz.com/rumenbiji/...微信公众号:入门站