欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
理解 chroot - 通過(guò)編寫(xiě) chroot 來(lái)認識 chroot 發(fā)揮的作用和它帶來(lái)的好處

什么是 chroot

chroot,即 change root directory (更改 root 目錄)。在 linux 系統中,系統默認的目錄結構都是以 `/`,即是以根 (root) 開(kāi)始的。而在使用 chroot 之后,系統的目錄結構將以指定的位置作為 `/` 位置。


圖 1. Linux 系統的目錄結構


為何使用 chroot

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

  1. 增加了系統的安全性,限制了用戶(hù)的權力;

    在經(jīng)過(guò) chroot 之后,在新根下將訪(fǎng)問(wèn)不到舊系統的根目錄結構和文件,這樣就增強了系統的安全性。這個(gè)一般是在登錄 (login) 前使用 chroot,以此達到用戶(hù)不能訪(fǎng)問(wèn)一些特定的文件。

  2. 建立一個(gè)與原系統隔離的系統目錄結構,方便用戶(hù)的開(kāi)發(fā);

    使用 chroot 后,系統讀取的是新根下的目錄和文件,這是一個(gè)與原系統根下文件不相關(guān)的目錄結構。在這個(gè)新的環(huán)境中,可以用來(lái)測試軟件的靜態(tài)編譯以及一些與系統不相關(guān)的獨立開(kāi)發(fā)。

  3. 切換系統的根目錄位置,引導 Linux 系統啟動(dòng)以及急救系統等。

    chroot 的作用就是切換系統的根位置,而這個(gè)作用最為明顯的是在系統初始引導磁盤(pán)的處理過(guò)程中使用,從初始 RAM 磁盤(pán) (initrd) 切換系統的根位置并執行真正的 init。另外,當系統出現一些問(wèn)題時(shí),我們也可以使用 chroot 來(lái)切換到一個(gè)臨時(shí)的系統。


chroot 的使用

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

清單 1. 準備切換的目錄結構

busybox

Busybox 被稱(chēng)為是嵌入式 Linux 中的瑞士軍刀。Busybox 包含了許多有用的命令,如 cat、find 等,但是它的體積卻非常的小。


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

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


清單 2. 位于系統中的 chroot 的使用
$ pwd            /home/wstone/Build/work            # chroot .            # pwd            /            # ls            ash: ls: not found            # busybox ls            bin      etc      newhome            3 directories, 3 files            

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


清單 3. 標準 chroot 的2種使用方式
[1] chroot NEWROOT [COMMAND...]            [2] chroot OPTION            

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

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


# chroot . /bin/ash
#

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


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


清單 6. 在 Linux 2.6 內核 initrd 中 chroot 的使用
[1] find -xdev / -exec rm '{}' ';            [2] cd /newmount; mount --move . /; chroot .            

switch_root 和 run-init 完成了類(lèi)似清單 6中的功能,刪除 rootfs 的全部?jì)热菀葬尫趴臻g,以及掛載新的根文件系統并進(jìn)行切換。在 busybox 和 klibc中也有提供 chroot命令,只是功能上與 Coreutils (GNU core utilities) 包含的 chroot 有稍許差異。


編寫(xiě)一個(gè) chroot

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


清單 7. 編寫(xiě) chroot 涉及的2個(gè)函數
#include <unistd.h>            int chroot(const char *path);            int chdir(const char *path);            

chroot() 將切換參數 path 所指位置為根目錄 (/),chdir() 用來(lái)將當前的工作目錄改變成以參數path 所指的目錄。以此我們可以編寫(xiě)一個(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` 僅能切換當前位置為根目錄,同時(shí)默認執行 ash shell,不包含任何的錯誤處理及警告。編寫(xiě)并保存代碼為 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 ,加上了一些錯誤處理并新增了可執行指定命令的功能。當在沒(méi)有給出 chroot 切換后要執行的命令時(shí),默認執行 `/bin/sh`,同時(shí)檢測環(huá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 文件,編譯后運行測試其功能。最后要指出的是,本文中的 `chroot` 并沒(méi)有使用靜態(tài)編譯。如果有必要(如,在 initrd 中使用 chroot),chroot 應該使用靜態(tài)編譯,若是使用動(dòng)態(tài)編譯,那么要拷貝相關(guān)的動(dòng)態(tài)庫文件到相應目錄結構中。


清單 11. `newchroot` 的測試
$ gcc -Wall newchroot.c -o newchroot            # ./newchroot . /bin/ash            newroot = .            #            


結束語(yǔ)

在 Linux 系統初始引導的過(guò)程中,通常都有使用 chroot。但是 chroot 的好處不僅于此,它還增加了系統的安全性等。而通過(guò)本文后半部分對 chroot 的認識,我相信讀者可以更好的發(fā)揮chroot 的作用。



下載

描述名字大小下載方法
樣例代碼 work.tar.bz2 734KB HTTP

關(guān)于下載方法的信息


參考資料

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
什么是chroot
WIN7下硬盤(pán)安裝linux雙系統教程(EasyBCD法)[圖文]
在安卓手機或平板設備上運行Linux系統 | HackingDev
【Linux Deploy】一、Linux Deploy安裝配置使用教程
Linux系統中如何添加vsFTPd用戶(hù)和設置權限
根據服務(wù)器用途合理選擇Linux分區
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久