日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux chroot命令

發(fā)布時(shí)間:2025/3/15 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux chroot命令 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是 chroot?

chroot,即 change root directory (更改 root 目錄)。在 linux 系統(tǒng)中,系統(tǒng)默認(rèn)的目錄結(jié)構(gòu)都是以?/,即是以根 (root) 開始的。而在使用 chroot 之后,系統(tǒng)的目錄結(jié)構(gòu)將以指定的位置作為?/?位置。

圖 1. Linux 系統(tǒng)的目錄結(jié)構(gòu)?

為何使用 chroot?

在經(jīng)過 chroot 之后,系統(tǒng)讀取到的目錄和文件將不在是舊系統(tǒng)根下的而是新根下(即被指定的新的位置)的目錄結(jié)構(gòu)和文件,因此它帶來的好處大致有以下3個(gè):

A. 增加了系統(tǒng)的安全性,限制了用戶的權(quán)力;?
在經(jīng)過 chroot 之后,在新根下將訪問不到舊系統(tǒng)的根目錄結(jié)構(gòu)和文件,這樣就增強(qiáng)了系統(tǒng)的安全性。這個(gè)一般是在登錄 (login) 前使用 chroot,以此達(dá)到用戶不能訪問一些特定的文件。

B. 建立一個(gè)與原系統(tǒng)隔離的系統(tǒng)目錄結(jié)構(gòu),方便用戶的開發(fā);?
使用 chroot 后,系統(tǒng)讀取的是新根下的目錄和文件,這是一個(gè)與原系統(tǒng)根下文件不相關(guān)的目錄結(jié)構(gòu)。在這個(gè)新的環(huán)境中,可以用來測試軟件的靜態(tài)編譯以及一些與系統(tǒng)不相關(guān)的獨(dú)立開發(fā)。

C. 切換系統(tǒng)的根目錄位置,引導(dǎo) Linux 系統(tǒng)啟動(dòng)以及急救系統(tǒng)等。?
chroot 的作用就是切換系統(tǒng)的根位置,而這個(gè)作用最為明顯的是在系統(tǒng)初始引導(dǎo)磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統(tǒng)的根位置并執(zhí)行真正的 init。另外,當(dāng)系統(tǒng)出現(xiàn)一些問題時(shí),我們也可以使用 chroot 來切換到一個(gè)臨時(shí)的系統(tǒng)。

chroot 的使用?

為了更好的理解 chroot 發(fā)揮的作用,我們將嘗試指定一個(gè)特定的位置進(jìn)行根目錄切換。但是由于在經(jīng)過 chroot 之后,系統(tǒng)讀取到的 bin/ 等與系統(tǒng)相關(guān)目錄將不再是舊系統(tǒng)根目錄下的,而是切換后新根下的目錄結(jié)構(gòu)和文件,因此我們有必要準(zhǔn)備一些目錄結(jié)構(gòu)以及必要的文件。

清單 1. 準(zhǔn)備切換的目錄結(jié)構(gòu)

$ pwd
/home/wstone/Build/work
$ tree .
.
|-- bin
| |-- ash -> busybox
| |-- bash
| `-- busybox
|-- etc
`-- newhome

這里使用了靜態(tài)編譯后的 busybox 來提供必要的命令,使用靜態(tài)編譯僅是為了避免動(dòng)態(tài)庫文件的拷貝。當(dāng)然我們也可以拷貝舊系統(tǒng)的下的命令到新的目錄結(jié)構(gòu)中使用,但是那些命令通常是動(dòng)態(tài)編譯的,這就意味著我們不得不拷貝相關(guān)的動(dòng)態(tài)庫文件到相應(yīng)的目錄結(jié)構(gòu)中。同時(shí)這里的 bash 也非真正的 Bourne Again shell,而是一個(gè)執(zhí)行 ash 的 shell 腳本。在清單 2中,展示了位于舊系統(tǒng)中的 chroot 命令的使用。需要注意的是在使用 chroot 時(shí),要求擁有相關(guān)的操作權(quán)限。

在/home/wstone/Build/work 目錄下建立一個(gè)文件,名為”bash”,內(nèi)容就兩行如下:

#!/bin/ash
ash

然后給與這個(gè)”bash”文件可執(zhí)行權(quán)利?
chmod +x ./bin/bash

這個(gè)腳本的第一句表示解析該腳本的解釋器( interpreter)所在位置。chroot缺省執(zhí)行/bin/bash命令。為了要在新的chroot環(huán)境下使用ash,所以建立/bin/bash這個(gè)用來執(zhí)行ash的文件。也可以顯示的指出要執(zhí)行的命令,比如要執(zhí)行ash

$ pwd

/home/wstone/Build/work

$chroot . ./bin/ash #pwd

/

清單 2. 位于系統(tǒng)中的 chroot 的使用

$ pwd
/home/wstone/Build/work

# chroot .
# pwd

/

# ls
ash: ls: not found

# busybox ls
bin ? ? ?etc ? ? ?newhome

3 directories, 3 files

我們可以看到當(dāng)前路徑(/home/wstone/Build/work/),在經(jīng)過 chroot 后轉(zhuǎn)變成了?/?目錄,同時(shí)從新根下讀取了與系統(tǒng)相關(guān)的目錄結(jié)構(gòu)。使用 ls 命令失敗是由于我們創(chuàng)建的測試目錄結(jié)構(gòu)中并沒有包含命令 ls,但是我們成功的使用了 busybox 中的 ls。以上看到的只是 chroot 的一種使用方式,其實(shí)標(biāo)準(zhǔn)的 chroot (Coreutils - GNU core utilities 提供的 chroot)使用方式有2種:

清單 3. 標(biāo)準(zhǔn) chroot 的2種使用方式

[1] chroot NEWROOT [COMMAND...]

[2] chroot OPTION

剛才我們使用的是方式[2]。這將在沒有給定環(huán)境時(shí),默認(rèn)執(zhí)行?/bin/sh,但是當(dāng)給定環(huán)境后,將運(yùn)行?${SHELL} –i,即與環(huán)境相同的可交互的 shell。我們的目錄結(jié)構(gòu)中并沒有包含sh,顯然清單 2中的 chroot 運(yùn)行了?${SHELL} –i。當(dāng)然我們也可以在進(jìn)行切換時(shí)指定需要的命令,即使用方式[1]。

清單 4. chroot 另一種方式的使用

# chroot . /bin/ash

#

在清單 4 中,嘗試了在經(jīng)過 chroot 后,執(zhí)行新目錄結(jié)構(gòu)下的 ash shell。不得不說的是,如果新根下的目錄結(jié)構(gòu)和文件準(zhǔn)備的夠充分,那么一個(gè)新的簡單的 Linux 系統(tǒng)就可以使用了。其實(shí)更為常見的是在初始 RAM 磁盤 (initrd)中使用 chroot,以此來執(zhí)行系統(tǒng)的 init。清單 5 中,展示的是在 Linux 2.4 內(nèi)核 initrd 中使用 chroot。

清單 5. 在 Linux 2.4 內(nèi)核 initrd 中使用 chroot 的示例

mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . /sbin/init <dev/console >dev/console 2>&1
umount /old-root

由于 Linux 內(nèi)核的升級(jí),initrd 處理機(jī)制和格式發(fā)生了變化,在 Linux 2.6 內(nèi)核 initrd 中不能再使用 pivot_root,因此一般也不再使用 chroot,而是選擇使用 busybox 提供的 switch_root 或者 klibc 提供的 run-init 進(jìn)行根目錄的切換。(這并不是說不能在 Linux 2.6內(nèi)核 initrd 中使用 chroot,選擇 switch_root 或 run-init 僅是出于習(xí)慣和方便的考慮。)但是實(shí)質(zhì)上,它們僅是將 chroot 的功能進(jìn)行了封裝,以此更加方便簡單的切換根目錄。

清單 6. 在 Linux 2.6 內(nèi)核 initrd 中 chroot 的使用

[1] find -xdev / -exec rm '{}' ';

[2] cd /newmount; mount --move . /; chroot .

switch_root 和 run-init 完成了類似清單 6中的功能,刪除 rootfs 的全部內(nèi)容以釋放空間,以及掛載新的根文件系統(tǒng)并進(jìn)行切換。在 busybox 和 klibc中也有提供 chroot 命令,只是功能上與 Coreutils (GNU core utilities) 包含的 chroot 有稍許差異。?
編寫一個(gè) chroot

上面介紹了 chroot 及其使用,但是編寫一個(gè)簡單的 chroot 并不復(fù)雜,下面我們就嘗試編寫chroot 以此來更好的認(rèn)識(shí) chroot 的處理過程,先編寫一個(gè)粗略的 chroot 然后再完善它的功能。chroot 的編寫涉及了2個(gè)函數(shù),chroot() 以及 chdir(),它們都包含在 unistd.h 頭文件中。

清單 7. 編寫 chroot 涉及的2個(gè)函數(shù)

#include <unistd.h> int chroot(const char *path); int chdir(const char *path);

chroot() 將切換參數(shù) path 所指位置為根目錄 (/),chdir() 用來將當(dāng)前的工作目錄改變成以參數(shù)path 所指的目錄。以此我們可以編寫一個(gè)非常粗略的?chroot。

清單 8. 粗略的?chroot

#include <unistd.h>int main(int argc, char *argv[]) {chroot(".");chdir("/");char *arrays[]={"ash",NULL};execvp("ash", arrays);return 0; }

這個(gè)粗略的?chroot?僅能切換當(dāng)前位置為根目錄,同時(shí)默認(rèn)執(zhí)行 ash shell,不包含任何的錯(cuò)誤處理及警告。編寫并保存代碼為 test.c。在清單 9 中,展示了這個(gè)粗略?chroot?的使用情況,成功的進(jìn)行了根目錄的切換。

清單 9. 粗略?chroot?的使用

$ gcc -Wall test.c -o test# ./test # ls ash: ls: not found# busybox ls bin etc newhome test test.c

下面給出功能將近完整的 chroot ,加上了一些錯(cuò)誤處理并新增了可執(zhí)行指定命令的功能。當(dāng)在沒有給出 chroot 切換后要執(zhí)行的命令時(shí),默認(rèn)執(zhí)行?/bin/sh,同時(shí)檢測環(huán)境以確認(rèn)使用何種 shell。

清單 10. 功能完整的 chroot

#include <stdio.h> #include <unistd.h> #include <stdlib.h>int main(int argc, char *argv[]) {if(argc<2){printf("Usage: chroot NEWROOT [COMMAND...] \n");return 1;}printf("newroot = %s\n", argv[1]);if(chroot(argv[1])) {perror("chroot");return 1;}if(chdir("/")) {perror("chdir");return 1;}if(argc == 2) {argv[0] = getenv("SHELL");if(!argv[0])argv[0] = (char *)"/bin/sh";argv[1] = (char *) "-i";argv[2] = NULL;} else {argv += 2;}execvp (argv[0], argv);printf("chroot: cannot run command `%s`\n", *argv);return 0; }

保存以上代碼為 newchroot.c 文件,編譯后運(yùn)行測試其功能。最后要指出的是,本文中的?chroot?并沒有使用靜態(tài)編譯。如果有必要(如,在 initrd 中使用 chroot),chroot 應(yīng)該使用靜態(tài)編譯,若是使用動(dòng)態(tài)編譯,那么要拷貝相關(guān)的動(dòng)態(tài)庫文件到相應(yīng)目錄結(jié)構(gòu)中。

清單 11.?newchroot?的測試

$ gcc -Wall newchroot.c -o newchroot# ./newchroot . /bin/ash newroot = . #

?

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Linux chroot命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: a天堂中文 | 精品人妻一区二区三区三区四区 | 天堂在线资源网 | 国产草草草| 亚洲日日夜夜 | 第一av在线 | 北条麻妃在线一区二区 | 老狼影院伦理片 | 韩国伦理在线视频 | 天天撸天天射 | 中文字幕爱爱 | 欧美亚洲影院 | 午夜极品视频 | 国产一级爽片 | 在线观看av网页 | 欧美极品少妇xxxxⅹ免费视频 | 少妇h视频 | 3d动漫精品h区xxxxx区 | 免费成人黄色网址 | 日韩欧美激情视频 | 欧美亚色| 欧美成人精品激情在线视频 | 林雅儿欧洲留学恋爱日记在线 | 欢乐谷在线观看免费播放高清 | 澳门黄色 | 美女免费av | 曰女同女同中文字幕 | 精品一二三四区 | 九色自拍| 小仙女av| 视频日韩 | 天天婷婷 | 国产精品一区二区免费在线观看 | 激情高潮呻吟抽搐喷水 | 老司机免费在线视频 | 热久久国产| 新亚洲天堂 | 日韩大片免费观看 | 91亚洲国产成人精品性色 | 国产精品丝袜黑色高跟鞋 | 视频在线观看一区二区三区 | 51成人做爰www免费看网站 | 欧美顶级黄色大片免费 | 日韩一区二区三区不卡 | 久操操 | 99久热| 日韩一区二区视频在线播放 | 欧美91看片特黄aaaa | 激情六月色 | 美国少妇在线观看免费 | 精品久久久久久久久久久久久久久久 | 另类第一页 | 澳门av在线 | 成了校长的性脔h文 | 四虎黄色| 国产精品久久久久久久成人午夜 | 成人激情视频网站 | 无码国产精品一区二区色情男同 | 成人黄色小视频在线观看 | 九九久久免费视频 | 国产精品嫩草久久久久 | 国产一区二区三区精品视频 | 久久国产精品波多野结衣av | 在线观看wwww | 91麻豆精品国产91久久久无需广告 | 欧美久久综合网 | 日本综合视频 | 国产 第1190页 | 色多多导航 | 成人福利视频 | 久久久久久穴 | 欧美日韩精品一区二区三区四区 | 小香蕉影院 | 色网站视频 | 亚洲精品少妇久久久久久 | 久久这里| 日韩欧美一区二区区 | 黄色性视频 | 日本一区二区不卡视频 | 在线观看911视频 | 午夜精品国产 | www.五月天婷婷 | 中文字幕国产视频 | 亚洲成av人片在线观看 | 男人的影院 | 爱久久视频 | 亚洲区小说区图片区 | 中文字幕一区二区三区波野结 | 午夜美女福利视频 | 超碰人人做 | yellow免费在线观看 | 黑人操日本女优 | 免费人成视频在线 | 在线观看av中文字幕 | 午夜精品久久久久久久99老熟妇 | 天天干网 | 伊人手机在线视频 | 国产精品卡一卡二 | 国产高清视频免费在线观看 |