CHROOT就是Change Root,也就是改变程式执行时所参考的根目录位置。
一般的目录架构:
/bin
/sbin
/usr/bin
/home
CHROOT的目录架构:
/hell/
/hell/bin
/hell/usr/bin
/hell/home
为何要CHROOT?
1.限制被CHROOT的使用者所能执行的程式,如SetUid的程式,或是会造成 Load 的Compiler等等。
2.防止使用者存取某些特定档案,如/etc/passwd。
3.防止入侵者/bin/rm -rf /。
4.提供Guest服务以及处罚不乖的使用者。
5.增进系统的安全。
要如何建立CHROOT的环境?
1.chroot()这个function:
chroot(PATH)这个function必须具有 root的身份才能执行,执行後会将跟目录切换到PATH 所指定的地方。
2.login的过程:
使用者无论是从console或是telnet进入,都必须执行/usr/bin/login来决定是否能进入系统,而login所做的动作大致是:
(1)印出login的提示符号,等待使用者输入密码。
(2)检查密码是否正确,错误的话回到(1)。
(3)正确的话以setuid()来改变身份为login_user。
(4)以exec()执行user的shell。
因此我们必须先修改/usr/bin/login的source code,让login在(2)到(3)的中间执行chroot($CHROOT_PATH)的动作,已达到CHROOT的目的,并以修改过的login 替代原先的/usr/bin/login。
(5)稍微好一点的方法必须在做chroot()之前检查login user的group,如果有某个特定的group(如chrootgrp)才执行chroot(),不然所有的人都会被chroot了。
阅读(4204) | 评论(0) | 转发(0) |