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 |
|