当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > FreeBSD & Jail

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

Unix/Linux 中的 FreeBSD & Jail


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 31 ::
收藏到网摘: n/a

Jail 命令在FreeBSD 4.0中首次出现。用于“监禁”进程以及其衍生的子进程。而且jail和FreeBSD本身的secure_level合并使用可以显著限制(jail中的)root的能力。
假设某一个应用程序在系统中运行,一段时间之后该应用程序被发现包含有致命的安全漏洞,在通常的系统中,这个应用程序可能已经形成了可利用的漏洞,甚至cracker们已经成功地攻破这一应用并且成为root,控制了系统;但假如该应用程序在jail内运行,即使cracker们已经攻破系统,也无法访问到jail之外系统的其他部分。因为在Jail内,尽管应用程序可以自由活动,却无法获得更多权限,也无法访问Jail外的任何资源。通过实施Jail,在系统管理上面可以做到防范未知漏洞,避免某些不安全应用程序对整个系统的安全构成威胁。 jail通常有两类应用方向: 一、对应用程序的活动能力进行限制。 比如ftp服务器,DNS服务器,这样一些东西,比如wu-ftpd,bind这样一些隔三岔五就会爆出漏洞的“著名”软件放到jail里面会让人更加放心。 二、受控制的主机。 某些时候,需要对外提供有shell的管理性访问,比如作为某公司A,其合作单位B有某项目需要在A的机器上获得shell乃至root权限,这就需要提供受控制的主机,用户可以在jail里面控制几乎所有他需要的资源(除了jail不允许他访问的部分)。 第一类应用并不是非常复杂,实际上这类应用实现方法相对简单,只要在Linux下面玩过chroot就没有什么大问题;第二类应用则有很多有趣的特性,而jail最吸引人的部分也是这些很有趣的特性。 下面从最简单的部分开始: 第一类:限制应用程序活动能力 首先按照通常习惯的方式安装好你想要jail的应用程序,下面我们将会使用pure-ftpd(我不是很熟悉它,只不过顺手拿过来而已,据说还算好用)作为例子。 这个ftpd的安装位置,默认为:/usr/local/sbin;/usr/local/bin;在/etc下面还有一些相关的文件,整个结构感觉不是特别干净,不过它运行需要的东西并不很多,包括 /usr/local/sbin/pure-ftpd , /etc/xxx /etc/xxxx 这样一些文件。 接下来先用ldd看看/usr/local/sbin/pure-ftpd需要的那些运行库: tester# cd /usr/local/sbin tester# ldd pure-ftpd pure-ftpd: libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x2807b000) libpam.so.1 => /usr/lib/libpam.so.1 (0x28094000) libc.so.4 => /usr/lib/libc.so.4 (0x2809d000) 这样我们的工作任务清单上面就多出来这样一些东西了: /usr/lib/...... 使用ldd我们还可以获得其他一些需要放入jail的程序的运行库位置,信息搜集完成之后,我们开始建立jail目录树(这里我们假定jail环境构造在/jail内,当然你也可以选择你喜欢的位置): tester# mkdir -p /jail/usr/ 然后将上面列出的,libcrypt.so.2 等这些文件都复制到对应位置。当然还有我们FreeBSD下非常重要的一个文件ld-elf.so.1,尽管ldd没有给出提示,也还需要复制过去,否则应用程序也跑不起来。这样我们就获得了一个很干净(最小化)的应用程序运行环境jail命令的格式是: jail path hostname ip-number command 下面开始在jail里面运行它: tester# jail /jail jailed.host.name $JAILED_IP_ADDR /usr/local/sbin/pure-ftpd [options] 这里,/jail是你的jail环境的位置,也就是被jail之后,应用程序“以为”自己所在的“/”的位置;jailed.host.name是你打算提供给这个jail环境的主机名,某些情况下,应用程序需要知道这个变量;$JAILED_IP_ADDR是你打算提供ftp服务(如果是其他应用软件,那就是其他服务咯,比如web服务)的那个IP地址,至于/usr/local/sbin/pure-ftpd [options] 则是你打算运行的那个应用程序在jail里面的所在位置以及运行所需的参数。 然后用ps 查看一下进程状态: tester# ps -axf |grep pureftpd 95 ?? IsJ 0:00.92 pure-ftpd (SERVER) (pure-ftpd) 可以看到所有这些pure-ftpd的进程都有一个J,标志这这一程序正在jail下面运行。 这时候可能会有一些管理用的程序无法正常工作,因为这些管理用程序无法找到他们需要访问的那些文件,只要找到这些应用程序需要调用的文件(比如日志文件)的位置,然后制造一个soft link就可以了,通常这些管理程序都可以继续正常运行。 到此为止,一个针对应用程序的jail构造完成。 第二类,构造受控制的主机 在这种情况下面,我们首先需要构造一个当前版本操作系统的完整镜像(下面这个脚本是从FreeBSD 4.6r的man page里面来的,实际上4.5以及之前的man page在构造jail目录树脚本上面都有一定的问题,4.6才纠正过来): tester# cat >>/root/mkjail.sh jailhome=/data/jail cd /usr/src mkdir -p $jailhome make world DESTDIR=$jailhome cd etc make distribution DESTDIR=$jailhome -DNO_MAKEDEV_RUN cd $jailhome/dev sh MAKEDEV jail cd $jailhome ln -sf dev/null kernel ^D tester# sh /root/mkjail.sh 最后在/data/jail下面获得一个完整的根据当前源码树编译得来的jail目录树。 接下来: /* tester# mkdir $jailhome/stand tester# cp /stand/sysinstall $jailhome/stand tester# jail $jailhome jailed.system