淺析chroot

chroot是一個系統調用,能改變一個進程的根目錄。linux

進程的根目錄

一個進程有兩個目錄:工做目錄和根目錄。工做目錄(working directory)也叫當前目錄, 隨cd命令常常發生變化,而通常狀況下,全部進程看到的根路徑都是/。不考慮權限問題,整個的文件系統樹對全部進程都是可見的。假如,管理員要把一個進程限制某個目錄下面,這個進程能夠是一個測試程序,就要用到chroot。數據結構關係以下:數據結構

include/linux/sched.h:
struct task_struct {
...
 771         /* Filesystem information: */
 772         struct fs_struct                *fs;
...    
}

測試

include/linux/fs_struct.h:
struct fs_struct {
    ...
struct path root, pwd;
}

chroot調用

注意,使用chroot並非件容易的事情,由於執行chroot後,原來系統中的命令和動態庫等都不可用了,因此要預先準備好環境再切換。chroot系統調用只要改變進程根目錄就能夠了,很簡單。code

fs/open.c:
 482 SYSCALL_DEFINE1(chroot, const char __user *, filename)
 483 {
...
 503         set_fs_root(current->fs, &path);
...
相關文章
相關標籤/搜索