CHROOT就是ChangeRoot,也就是改變程式執行時所參考的根目錄位置。
一般的目錄架構:
/
/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的sourcecode,讓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環境中。(manchrootfordetails)
4.在console或是以telnet進入試試。
5.Username/PasswordResolve的考量:
在CHROOT時你可能不希望被CHROOT的使用者(以後簡
稱CHROOTer)能拿到/etc/passwd或是/etc/shadow等檔
案,尤其是有root密碼的。以下有三種情形:
(1)/etc/passwd跟$CHROOT/etc/passwd相同:
這是最差的作法,因為一來被CHROOTer有機會得到root
的encryptedpassword,二來要保持/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(passwordisvalid){
chroot($CHROOT)
exec(shell)
}elselogout()
}
此法的好處是你可以將/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都經過NISBind來取得,不但可以保護住
root的密碼,也省去/etc/passwd跟
$CHROOT/etc/passwd同步管理上的問題。不只是
passwd,連其他如groups,hosts,services,
aliases等等都可以一併解決。
*其他必須考慮的問題:
1.執行檔的同步性:
再更新系統或是更新軟體時,必須考慮到一併更換
$CHROOT目錄下的檔案,尤其如SunOS或是BSD等會用
nlist()來取得KernelInformation的,在更新kernel
時必須更新$CHROOT下的kernel。
2./dev的問題:
一般而言你必須用localloopbackNFS將/devread-
writemount到$CHROOT/dev以使得一般user跟CHROOTer
可以互相write以及解決devices同步性的問題。
3./proc的問題:
在Linux或是SYSV或是4.4BSD的系統上許多程式會去
參考/proc的資料,你必須也將/procmount到
$CHROOT/proc。
4./var的問題:
一般而言/var也是用localloopbackNFSread-write
mount到$CHROOT/var下,以解決spool同步性的問題,
否則你可能必須要修改lpd或是sendmail等daemon,
不然他們是不知道$CHROOT/var下也有spool的存在。
5.Daemon的問題:
你必須修改一些跟使用者相關的Daemon如ftpd,httpd
以使這些daemon能找到正確的userhome。
*CHROOT無法解決的安全問題:
1.不小心或是忘記拿掉SetUid的程式:
CHROOTer還是有機會利用SetUid的程式來取得root的
權限,不過因為你已經將他CHROOT了,所以所能影響到
的只有$CHROOT/目錄以下的檔案,就算他來個
"/bin/rm-rf/"也不怕了。
不過其他root能做的事還是防不了,如利用tcpdump來
竊聽該localnet中的通訊並取得在該localnet上其他
機器的帳號密碼,reboot機器,更改NIS的資料,更改
其他沒有被CHROOT的帳號的密碼藉以取得一般帳號(所
以root不可加入NIS中)等等。
(此時就必須藉由securetty或是login.access或是將
wheelgroup拿出NIS來防止其loginasroot)
2.已載入記憶體中的Daemon:
對於那些一開機就執行的程式如sendmail,httpd,
gopherd,inetd等等,如果這些daemon有hole(如
sendmail),那hacker只要破解這些daemon還是可以取
得root權限。
*結論:
CHROOT可以增進系統的安全性,限制使用者能做的事,
但是CHROOTIsNotEverything,因為還是有其他的
漏洞等著hacker來找出來。
分享到:
相关推荐
Linux中chroot的使用.pdf
使用chroot监狱限制SSH用户访问指定目录.docx
Ansible-ansible-role-ssh-chroot-jail.zip,ansible role-ssh chroot jail configible role:ssh chroot jail config,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
如何通过chroot构建Linux操作系统.txt
php-fpm提供有一个非常重要的功能chroot,它可以把指定的网站完完全全限制在一个目录下,可以对系统和其它虚拟机起到很好的隔离效果,这对系统的安全无疑是加强了不少,下面介绍如何配置。 我们假设域名为...
PRoot, chroot,挂载绑定和没有特权/设置的binfmt_misc 手册PRoot 。插件生成状态
chroot在Ubuntulinux下的配置.pdf
chroot,即 change root directory (更改 root 目录)。...在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。一般会在用户登录前应用 chroot,把用户的访问能力控制在一定
创建和/或进入基本的chroot环境,主要用于测试开发项目。 它没有安装第三方库或应用程序,而只有用于基本功能的一部分标准GNU / POSIX实用程序。 创建后,可以有意或无意中破坏环境,而不会损害实际操作系统。 ...
该实现使用 libguestfs 和相关工具。 限制 脚本修改起来相对简单。 目前,他们支持转换 Debian Squeeze 和 Debian Wheezy。 可以修改甚至替换源列表以适合任何 Linux 发行版。 组件 vz2kvm-clone.sh 将 chroot ...
具体来说,该库提供了一个Chroot上下文管理器,该管理器启用了更多pythonic方法来在chroots中运行代码,而pychroot实用程序的工作方式与终端中的扩展chroot命令非常相似。用法以最简单的形式,该库的用法类似于以下...
linux下可插入验证模块更改用户权限和目录权限的代码,很有参考价值!
bind9配置Chroot
小型脚本,用于挂载和chroot本地系统(使用应急CD或映像)。 该脚本开发为具有最低要求,因此应在非常大的救援系统面板上运行。 随时报告位于以下位置的Github中的任何问题: : 用法 wget --no-check-...
用法注意:在大多数情况下,您可能不需要从头开始创建chroot环境,而应使用的预生成发行版。构建一个chroot包要构建chroot软件包,请以root身份运行build-alpine-chroot.sh脚本: sudo ./build-alpine-chroot.sh解压...
Droot是一个简单的基于chroot的应用程序容器引擎,可使用chroot而不是docker run进行构建,运输和运行。 Droot旨在逃避依赖地狱。 总览 对于应用程序部署过程具有强大的概念,即构建,运输,运行。 但是在很多情况...
清洁chroot经理包装器脚本,用于在Arch Linux下构建软件包时管理buildroot。为什么要使用它?与标准的arch-build脚本相比,Ccm具有几个优点:自动管理chroot中的本地存储库,以便从该本地存储库透明地提取您构建的...
Linux chroot命令 Linux chroot命令用于改变根目录。 chroot(change root)命令把根目录换成指定的目的目录。 、 语法chroot [--help][--version][目的目录][执行指令...] 参数说明: –help 在线帮助。 –version ...
debian bootstrap chroot functions