如题!
| mmmmn 回复于:2002-07-31 10:09:51 |
| 呵呵,这个我也想知道,好象是配合ftp使用的吧? |
| prowater 回复于:2002-07-31 10:45:10 |
| 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權限。
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |




