GB | BIG5
|
| 首頁 > 系統管理 > 其它 > 正文 |
 |
| 什是CHROOT? |
| jdli@csie.nctu.edu.tw (2001-04-16 13:51:59) |
* 什是CHROOT?
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了。
3.建立CHROOT所需的境:
(1)必具的目:(假$CHROOT希望建立的路)
$CHROOT/etc $CHROOT/lib $CHROOT/bin
$CHROOT/sbin $CHROOT/usr/lib $CHROOT/usr/bin
$CHROOT/usr/bin $CHROOT/usr/local $CHROOT/home
(2)仔查/etc中的案,需具行程式所需的
案,如passwd,groups,hosts,resolv.conf等等。
(3)拿掉不想的行,如su,sudo等SetUid的程式,
以及compiler甚至telnet。
(4)一下,以root身份行 chroot $CHROOT /bin/sh
即可入CHROOT境中。(man chroot for details)
4.在console或是以telnet入。
5.Username/Password Resolve的考量:
在CHROOT你可能不希望被CHROOT的使用者(以後
CHROOTer)能拿到/etc/passwd或是/etc/shadow等
案,尤其是有root密的。以下有三情形:
(1)/etc/passwd跟 $CHROOT/etc/passwd相同:
是最差的作法,因一被CHROOTer有得到root
的encrypted password,二要保持/etc/passwd及
$CHROOT/etc/passwd的同步性是大。因
/usr/bin/login考的是/etc/passwd,可是一旦
CHROOTer被chroot後行passwd,他所行的
passwd所更改的是$CHROOT/etc/passwd。
(2)/etc/passwd跟$CHROOT/etc/passwd不同:
你可以把$CHROOT/etc/passwd中的重要人物(如root)
的密拿掉,然後以比的方法修改
/usr/bin/login:
if (has_chroot_group) {
re-load $CHROOT/etc/passwd
if (password is valid) {
chroot($CHROOT)
exec(shell)
} else logout()
}
此法的好是你可以/etc/passwd跟
$CHROOT/etc/passwd分。/etc/passwd只影
CHROOTer在login所使用的username,其他如
password甚至uid,gid,shell,home等等都是
考$CHROOT/etc/passwd的。
缺是你其他的daemon如ftpd,httpd都必做相同
的修改才能正取的CHROOTer的,而且你在把一
user加入或移出chroot_group都必更改
/etc/passwd跟$CHROOT/etc/passwd。
(3)使用NIS/YP:
此法大概是最,且麻最少的了。因一切的user
information都NIS Bind取得,不但可以保住
root的密,也省去/etc/passwd跟
$CHROOT/etc/passwd同步管理上的。不只是
passwd,其他如groups,hosts,services,
aliases等等都可以一解。
* 其他必考的:
1.行的同步性:
再更新系或是更新,必考到一更
$CHROOT目下的案,尤其如SunOS或是BSD等用
nlist()取得Kernel Information的,在更新kernel
必更新$CHROOT下的kernel。
2./dev的:
一般而言你必用local loopback NFS/dev read-
write mount到$CHROOT/dev以使得一般user跟CHROOTer
可以互相write以及解devices同步性的。
3./proc的:
在Linux或是SYSV或是4.4BSD的系上多程式去
考/proc的料,你必也/proc mount到
$CHROOT/proc。
4./var的:
一般而言/var也是用local loopback NFS read-write
mount到$CHROOT/var下,以解spool同步性的,
否你可能必要修改lpd或是sendmail等daemon,
不然他是不知道$CHROOT/var下也有spool的存在。
5.Daemon的:
你必修改一些跟使用者相的Daemon如ftpd,httpd
以使些daemon能找到正的user home。
* CHROOT法解的安全:
1.不小心或是忘拿掉SetUid的程式:
CHROOTer是有利用SetUid的程式取得root的
限,不因你已他CHROOT了,所以所能影到
的只有$CHROOT/目以下的案,就算他
"/bin/rm -rf /" 也不怕了。
不其他root能做的事是防不了,如利用tcpdump
localnet中的通取得在localnet上其他
器的密,reboot器,更改NIS的料,更改
其他有被CHROOT的的密藉以取得一般(所
以root不可加入NIS中)等等。
(此就必藉由securetty或是login.access或是
wheel group拿出NIS防止其login as root)
2.已入中的Daemon:
於那些一就行的程式如sendmail,httpd,
gopherd,inetd等等,如果些daemon有hole(如
sendmail),那hacker只要破解些daemon是可以取
得root限。
* :
CHROOT可以增系的安全性,限制使用者能做的事,
但是CHROOT Is Not Everything,因是有其他的
漏洞等hacker找出。
--------------------------------------------------------------------------------
By jdli@csie.nctu.edu.tw
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
===菠=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |