点击这里给我发消息 点击这里给我发消息
首页 > 行业资讯 > Mysql>详细内容

如何以jail(8)提升FreeBSD系统安全

添加时间:2010-6-22
    相关阅读: 系统
Tai-hwa Liang
  Multimedia Laboratory, Dept. of Computer Science & Engineering
  Yuan Ze University, Taiwan
  
  
  ?介
  
  由 FreeBSD 4.0 檫始,核心提供了一??似 chroot(2) 的 system call:jail(2);
  和 chroot(2) 不大一?的,便是 jail ?於在其中?行的行程(process)做了更多的
  限制,使得它比 chroot 更唔合被用以?生「限制 root ?限的?行?境」。
  
  何洲「限制 root ?限的?行?境?」???真就是在??境中?行的行程,即使具?
  root 的?限,其所能?系靳其他部份所造成之破?是相?有限的。嘱得更明白一些,?
  一?需要以 root 身份?行的程式(如 sendmail()放在??境中?行,如果哪天
  sendmail 被哞端攻?者透咿 buffer overflow 的方式取得了 root 的?限,但是因?
  呃??境的保罪,使得攻?者所能破?的不外乎是呃??境中(先把呃??境??系靳
  上的一?目?)的儋料,?於??境(目?)以外的?案或行程,攻?者理?上是?有
  揠法做任何更改的(? jail(2) 而言?是如此,但 chroot(2) 就不一定了)。
  
  由此可?,jail 特?唔合用?限制一些需以特??行的咀路服?;以下?以 BIND8
  呃?提供 DNS 服?的程式?例,真明如何韵定 jail 的?境。
  
  如何韵定 jail 的?境
  
  ?肴上,jail(2) 底?也?呼叫 chroot(2) 以改?行程?根目?的起?,因此,韵定
  jail ?境和韵定 chroot ?境概念上差不多,但是得注意下列??:
  
  a. FreeBSD 4.x ? jail ?境的砚置?(device files,也就是 /dev 下面
  那一堆)有特?的晷嫔字可以做出?。
  
  b. 如果行程需要使用 SYSV IPC(如 shared memory、semaphore... 等等),
  ?忘了先使用 "sysctl -w jail.sysvipc_allowed=1"。
  
  c. 每一? jail ?境只能??唯一一? IP address,? BIND ?真,呃彦得
  放?如 127.0.0.1 呃?的位址不去 bind,因此在? /etc/resolv.conf
  ?也得注意一下,本?如果有 nameserver 指向 127.0.0.1 的,都要改掉。
  至於若要在 jail 中?行 inetd ,可以用 -a 的??限定要 bind 的咀路
  位址。
  
  以下步笈以 FreeBSD 4.x ?建的 BIND8 ?例,真明如何建立 jail ?境:
  
  1. 建立 jail 的根目?(呃彦定? /home/bind),之後?目?便?成? jail
  後之行程的根目?:
  
  # mkdir /home/bind
  
  2. 建立基本系靳所需的目?:
  
  # mkdir -p /home/bind/dev
  # mkdir -p /home/bind/bin
  # mkdir -p /home/bind/etc/namedb
  # mkdir -p /home/bind/usr/lib
  # mkdir -p /home/bind/usr/libexec
  # mkdir -p /home/bind/usr/sbin
  # mkdir -p /home/bind/var/log
  # mkdir -p /home/bind/var/run
  
  3. 妖氧/建立必需?案:
  
  # cp /dev/MAKEDEV* /home/bind/dev
  # cp /usr/sbin/syslogd /home/bind/usr/sbin
  # (cd /bin; cp sh \[ ln rm /home/bind/bin)
  # (cd /etc; cp resolv.conf host.conf hosts services group \
  master.passwd localtime syslog.conf /home/bind/etc)
  # touch /home/bind/var/run/utmp
  # touch /home/bind/var/log/messages
  # touch /home/bind/var/log/security
  
  * 其中像 resolv.conf、host.conf、hosts 陪 service 等,都是一
  些咀路程式?行??用到的?案,而因? jail ?境陪「外界」不同,
  syslogd 是分檫跑的,因此呃?也得?? syslogd 的韵定?。
  
  * 基於安全理由,master.passwd 或 group 等?中只能留下必需的?
  目,比方呃? jail ?斤 named 使用,就留下:
  
  bind:*:53:53::0:0:Bind SandBox:/:/sbin/nologin
  
  一行在 master.passwd 中,?以:
  
  # pwd_mkdb -p -d /home/bind/etc /home/bind/etc/master.passwd
  
  重建 passwd 儋料?即可;如此一?,即使攻?者成功侵入 jail ?
  境中,也不能藉由??得到系靳上其他的??儋料。
  
  4. 以 "MAKEDEV jail" 做出唔合 jail ?境的砚置?:
  
  # (cd /home/bind/dev; sh MAKEDEV jail)
  
  5. 妖氧 BIND8 ?行?必需的函式?;之後若其他的程式要放在 jail ??行,
  可先以 ldd ?查?程式需要哪些函式?,再妖氧咿?:
  
  # cp /usr/libexec/ld-elf.so.1 /home/bind/usr/libexec
  # cp /usr/lib/libc.so.4 /home/bind/usr/lib
  
  6. 妖氧 BIND8 ?行?必需的?案(BIND8 韵定??自行妖氧/建立至
  /home/bind/etc/namedb 下):
  
  # cp /usr/sbin/named /home/bind/usr/sbin
  # cp /usr/libexec/named-xfer /home/bind/usr/libexec
  # cp -pR /etc/namedb/* /home/bind/etc/namedb
  
  7. 建立 jail ?境??? /home/bind/etc/rc,用??理一些 jail ?境?
  初始化的?作,比方真?? syslogd 陪 named:
  
  /home/bind/etc/rc ?容(?考 /etc/rc):
  
  #! /bin/sh
  trap : 2
  trap : 3 # shouldn't be needed
  HOME=/
  PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
  export HOME PATH
  if [ ! -h /dev/log ]; then
  ln -sf /var/run/log /dev/log
  fi
  
  rm -f /var/run/log
  syslogd -ss
  
  named -u bind -g bind
  
  exit 0
  
  8. 建立一? /var/run/ndc 的?劫,如此一?管理者可以在 jail 之外透咿
  ndc ?管理 jail 中的 named 行程;?然也可以把下列呃?命令?在
  /etc/rc.local 中,以省去每次檫?後都要重新建立?劫的麻?:
  
  # ln -sf /home/bind/var/run/ndc /var/run/ndc
  
  至此一?可以?行 BIND8 的?境已?韵好了,用以下命令??看 jail
  能不能正常咦鳎?
  
  # /usr/sbin/jail /home/bind my.host.name my.ip.address \
  /bin/sh /etc/rc
  
  如果??铨,用 "ps ax" ???看到?似:
  
  35 ?? Is 0:00.00 adjkerntz -i
  97 ?? Ss 0:00.17 syslogd -s
  103 ?? SsJ 0:00.12 syslogd -ss
  105 ?? SsJ 0:02.49 named -u bind -g bind
  125 ?? Is 0:00.01 inetd -wW
  127 ?? Is 0:00.19 cron
  
  如果第三?中有一? 'J',表示?行程正在某一 jail 中?行;再看看
  /home/bind/var/log/messages,如果?有邋锗?息,表示差不多完成了:
  
  Dec 6 15:42:27 dns named[105]: Ready to answer queries.
  
  最後用 nslookup ?查一下能不能正催查?;如果都正常,可以把前述??
  方式加至 /etc/rc.conf 中:
  
  named_program="/usr/sbin/jail /home/bind my.host my.ip /bin/sh /etc/rc"
  
  注意事?
  
  * 基於系靳安全理由,不同的服???放在不同的 jail 中,以免其中一?服?被攻陷後
  影?到其他在同一 jail 中的服?程式。
  
  * 原?上,一? jail 中的?案愈少,?攻?者的挑?性也愈高,上例?提供 sh、rm 等
  程式,?粹因?作者太?,想用 script ?平後面的?境韵定...。如果有配趣,可以?
  第七步笈的工作用 C ?成一??一的程式(exec()、unlink()、symlink()),?少掉
  bin 下一些不必要的?案。
  
  * jail(2) 底??是?呼叫 chroot(2),因此千孺不要?了?省空殓而用 symbolic link
  的方式「建立」jail 中的?案;如果一定要,?改用 hard link(?需要的?案先妖氧
  到陪 jail 同一?案系靳之下,再以 hard link ?劫至不同的 jail 之中)。比方真:
  
  # ln /home/jail_share/libc.so.4 /home/jail_1/usr/lib
  # ln /home/jail_share/libc.so.4 /home/jail_2/usr/lib
  # ln /home/jail_share/libc.so.4 /home/jail_3/usr/lib
  
  * 由於在 jail ?境中的 log ?是各自?立的,?管理方便起?,可以考??它?
  symbolic link 至 /var/log 下,如:
  
  # ln -s /home/bind/var/log/messages /var/log/bind.log
  
  * 以 4.2-RELEASE ?例,和 jail 相晷的 sysctl 有:
  
  jail.set_hostname_allowed
  jail.socket_unixiproute_only
  jail.sysvipc_allowed
  
  呃些在 jail( 的 manual page 中都有??的解?,?忘了??不同需要更改它?。
  
  * 如果程式有需要存取 /proc,?忘了在咄入 jail 前先? procfs mount 上?:
  
  # mkdir /home/jail_1/proc
  # mount -t procfs proc /home/jail_1/proc
  
  後?
  
  呃? jailed named 的?境已?在我???室的 DNS 上跑咿??月了,用起??啥大
  ?铨;一般而言,只要正催的韵定?陪函式?都妖氧到正催目?下,大部份的程式都可
  以在 jail ?境下正常工作。此外,?於一些有心办展咀路程式(如 BBS)的檫办者,
  可以考? 本文作者:
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册