chroot用法詳解 linux

2021-06-16 07:25:07 字數 4255 閱讀 7981

tag:

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) 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來找出來。

使用chroot構建linux沙盒

因為idc上掛了乙個外部 idc許可權一般不外放,之前給乙個登入shell為 bin nologin的使用者建ftp,現在希望更進一步,可以ssh到該目錄中使用git命令進行 管理但不能對其他目錄和系統有許可權。早先知道有個chroot命令,今天用了一下。如 chroot home chroot b...

Linux命令學習chroot和chmode

chroot chang root 1.限制被chroot的使用者所能執行的程式,如setuid的程式,或是會造成 load 的compiler等等。2.防止使用者訪問某些特定檔案,如 etc passwd。3.防止入侵者 bin rm rf 4.提供guest服務以及處罰不乖的使用者。5.增進系統...

Linux命令學習chroot和chmode

chroot chang root 1.限制被chroot的使用者所能執行的程式,如setuid的程式,或是會造成 load 的compiler等等。2.防止使用者訪問某些特定檔案,如 etc passwd。3.防止入侵者 bin rm rf 4.提供guest服務以及處罰不乖的使用者。5.增進系統...