当前位置导航:炫浪网>>网络学院>>操作系统>>Linux教程

Chrooting后台服务和系统程序指导


  目录
  
  第一部分: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(库)文件
  
  所有软件往往不仅仅
相关内容
赞助商链接