目錄 第一部分:Chrooting 簡介 * 1.1 什麼是 chrooting? * 1.2 什麼時候應該使用 chroot? * 1.3 所有後台程序都能使用 chroot 嗎? * 1.4 chrooting 會給用戶帶來什麼後果? * 1.5 chrooting 需要些什麼? 第二部分:系統資料收集 * 2.1 我們是否能 chroot 這個進程? * 2.2 trss, lsof 和 ldd 簡介 * 2.3 查找所依賴的數據文件 * 2.4 策略性的建立數據文件 * 2.5 查找所使用的Library(庫)文件 * 2.6 尋找一個好的監獄地方(jail home) 第三部分:建立chrooted 環境 * 3.1 建立新的監獄 * 3.2 拷貝程序文件,數據文件和設置cron * 3.3 拷貝庫數據文件 * 3.4 建立 devices (安裝設備驅動程序) * 3.5 交替啟動腳本 * 3.6 成品 第四部分:詞匯解釋
第一部分 1.1什麼是 chrooting? 指令chroot 是 “change root” 的縮寫,為了是交換本身根(root)系統環境所設計。就是相對來說 / (根目錄)由此改變。比如:一個文件的路徑實際上是/home/wuming/hello.txt 在現有的系統中。我現在chroot /home/wuming目錄後,那麼這個文件在我chrooted 過的環境下的路徑是 /hello.txt Chroot 本身目的是為了建立一個難以滲透的(理論上)的“監獄式”的保護層。不允許chroot過的環境下訪問任何以外文件數據。比如在chroot過的/home/wuming目錄下,我將無法訪問任何 /home/wuming 以外的文件。普通情況下是限制一個多用戶系統中用戶訪問系統文件。Chroot也可以用來限制各種不同類型的後台程序,從而避免駭客入侵的機會。或者讓入侵者獲得根(root)權限更加困難。比如系統使用一個有漏洞的遠程服務,如果被黑客入侵而得到shell,但是這個shell並不包含在本身系統中,從而阻止了黑客訪問其他系統文件。雖然很多人聲稱能夠突破chroot過的jail,但是多數時候是從一個shell中突破的。在我們所討論的例子中不存在這樣的問題,所以攻破daemon 環境是非常困難的。 1.2什麼時候應該使用 chroot? Chroot 化 daemons 是十分實踐的使用方法在系統中添加不同層次,從而保護你現有系統。很多系統進程和第三方軟件已經有對於漏洞的安全措施。也有很多進程使用非根用戶(non-root user),同樣也使用戶入侵root更加困難。 網絡安全層中有比如說防火牆,TCP wrappers,過濾層和其他附加程序等。與他們一樣chrooting 可以在多數環境中適當使用,同時不對本身功能作出太多危及。 * 1.3 所有後台程序都能使用 chroot 嗎? 從技術上說完全可以chroot 所有東西,甚至你女朋友的收音機。但是在其他情況下chrooting是否是最好解決方式,那就沒准了。某些 daemon 後會帶來很多問題,這些都是應當考慮的問題。比如說 sendmail 在 chroot 的環境下,無法閱讀用戶目錄下的 .forward 文件,就是一個很好的例子。所以要想chroot sendmail,首先應該精心策劃所有細節問題。當然在我提到的這個例子實際上最好使用smrsh(sendmail restricted shell),而不需要chroot.無論如何,只要稍微努力一下我們就能安全的 chroot 很多系統 daemons. * 1.4 chrooting 會給用戶帶來什麼後果? 如果一切設置正確,你的用戶不應該感覺到任何系統變動。本身系統並沒有變動,而是在現有系統上建立一個監獄式的環境。在這裡我們並不是討論什麼安全的建立FTP或者ssh daemons.對於他們也有類似的方法,但是要復雜的多。這裡將主要介紹如何給普通的服務帶來更大的安全系數。 * 1.5 chrooting 需要些什麼? Chroot各種 daemon 有一個步驟,基本如下: #建立”監獄式”目錄 #拷貝本身服務軟件和其他要求的文件 #拷貝所需要系統庫文件 #變換啟動腳本,使系統啟動正確環境 第二步和第三步基本是同一時間。但是第二步驟中,更需要一些有周全的考慮,比如一個郵件服務,必須能訪問所有mail目錄,但是同時把所有郵件目錄拷貝到jail目錄下也不是個周全的辦法。將在後面具體介紹如何解決以上問題。
第二部分 * 2.1 我們是否能 chroot 這個進程? 在建立目錄或者生成文件前,讓我們先考慮一下是否能建立chroot 環境。我將介紹三個系統進程的例子,有三個問題我們應當考慮。#這個 daemon 否訪的數據是否在一個普通目錄下?#是否可以拷貝文件其他地方或者周期性的使用cron替代?#是否能夠謹慎在這些指定文件目錄中生成一個監獄式環境? 如果你對以上問題回答是都是不可能的話,那麼可能chroot不是一個好的解決方法。讓我們看以下例子: Eudora Qpopper #這個 daemon 否訪的數據是否在一個普通目錄下? 首先對於一郵件服務系統應當能訪問用戶郵件目錄,同時/etc中的一些文件,比如passwd文件確認用戶。所以這個問題答案是可以。因為主要文件通常在 /var/mail下面。 #是否可以拷貝文件其他地方或者周期性的使用cron替代? 拷貝郵件箱不是什麼好的想法,這樣很容易給用戶造成郵箱不穩定的感覺。 #是否能夠謹慎在這些指定文件目錄中生成一個監獄式環境? 當然可以,在這裡我們有兩種選擇,一種是移動這些牽連文件到監獄環境中,一種是重新生成。對於原有連接可以使用symbolic links,Linux下常見的一種文件目錄解決方式。 Sun的RPCBIND #這個 daemon 否訪的數據是否在一個普通目錄下?主要訪問/etc下的一些小文件 #是否可以拷貝文件其他地方或者周期性的使用cron替代? 大部分文件很小而且很少更新,用cron一天拷貝一次足夠。 #是否能夠謹慎在這些指定文件目錄中生成一個監獄式環境? 在/etc下進行chroot不是一個好的想法,對於很多黑客高手etc裡面的文件足夠提有用的信息。應該生成一個單獨的監獄環境,將文件拷貝到這個環境就可以了。 Sendmail #這個 daemon 否訪的數據是否在一個普通目錄下? 不是,Sendmail訪問數個不同的目錄和文件。比如/var/spool/mqueue和/var/mail還有/etc/mail下的一些文件,除此以外還有用戶目錄下的一些文件。 #是否可以拷貝文件其他地方或者周期性的使用cron替代? 理論上是可以的,但是似乎帶來的工作量大於我們所想象的。其中比如用戶目錄下的。forward文件或者其他文件。似乎在實際中做到不太現實。 #是否能夠謹慎在這些指定文件目錄中生成一個監獄式環境? 首先,我們應該在mail目錄那裡進行jail限制,那麼我們失去在spool的寫權限,那麼我們應該jail整個/var,這樣導致其他問題。所以無論如何是否建立mirror目錄都不太理想。所以我不推薦對sendmail使用chroot. 雖然我確定sendmail是可以被chroot的,我見過chroot過的Qmail,但是那些是專業做LINUX安全系統的公司為自己軟件,要求考慮周詳。初學者不推薦做這樣的試驗。 * 2.2 對 trss, lsof 和 ldd 簡介 truss 如果你 man truss,你能看到truss是一個跟蹤系統calls和signals的工具。系統calls包括庫文件和反問數據文件。Truss一個很好工具測量哪些文件被使用。使用truss,很簡單,敲如truss按照提示使用它。 lsof lsof 是另外一個工具看到那些文件被daemon使用。通過lsof你能看到哪些daemons正在運行。還會提示哪些端口等等很多信息。可以從www.sunfreeware.com下載,或者通過FTP到ftp://vic.cc.purdue.edu/pub/tools/unix/lsof 獲取。 ldd ldd 是一個工具幫助你找出哪些庫文件被程序使用。ldd的是list dynamicdependencies的縮寫。使用ldd能夠給你一個list哪些庫文件應當拷貝到監獄環境中。 * 2.3 查找所依賴的數據文件 在2.1中已經介紹過我們應當首先找出所有daemon使用的文件。有些是直接可以找到的,有些必須新建立一個監獄環境。以上的三個例子中兩個是完全可行的。(Eudora Qpopper和SUN RPCBIND)並且在前段時間在安全上漏洞一直很多。在這裡簡介如何為它們做到chroot. Eudora Qpopper /var/mail/* (監獄內部) 以下在/etc下文件應當周期性的拷貝 hosts.allow hosts.deny netconfig nsswitch.conf passwd resolv.conf services shadow Sun RPCBIND 以下在/etc下文件應當周期性的拷貝 hosts netconfig nsswitch.conf resolv.conf services 時間區文件 /usr/local/zoneinfo 或者 /usr/share/zoneinfo和一個 tmp 目錄。 * 2.4 策略性的建立數據文件 當你有一個列表哪些文件是被daemon運行時用到的時候,那麼我們開始考慮建立一個什麼樣的監獄?是否使用周期性系統拷貝,還是在本身數據文件目錄上建立監獄管制?當然絕對不應該在本身系統,比如/etc外面做監獄管制,那麼等於沒有建立任何管制。如果你在紙上圈圈畫畫,看哪些文件是屬於系統,哪些應當包含在監獄管制內的,這樣你將有一個很好的框架文件系統之間關系圖案。設計好的監獄框架是我們做好安全系統的第一步。 * 2.5 查找所使用的Library(庫)文件 所有軟件往往不僅僅