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系統調用只要改變進程根目錄就能夠了,很簡單。code
fs/open.c: 482 SYSCALL_DEFINE1(chroot, const char __user *, filename) 483 { ... 503 set_fs_root(current->fs, &path); ...