2015年8月更新
《The Linux Programming Interface》的Chapter 18 Directories and Links提到chroot jail有幾個注意點:
chroot()不改變工作目錄。因此通常在調用chroot()之後會緊跟chdir("/"),把工作目錄設定到新的root;否則仍可使用工作目錄訪問jail外的文件。只是之後訪問jail外的文件不可以用絕對路徑了,因爲root目錄還在jail裏。- 可以使用jail外文件的文件描述符脫離jail,使用
fchdir()即可改變工作目錄到jail外。如果是特權進程的話(精確地,指擁有CAP_SYS_CHROOT權限),還可以在fchdir()後使用chroot(".")以把root目錄設置到jail外。倘若多chdir("..")幾次,可以回到原先的root目錄。 - Unix domain socket提供了進程間傳遞文件描述符的方法。限定在chroot
jail內的進程可以從外部獲取文件描述符,之後即可
fchdir()使工作目錄脫離jail。
下面的例子展示如何使用jail外的文件描述符脫離jail:
1 |
|