3.5 限制你的程序环境

  传统的限制进程的方法是使用系统调用chroot() 。这个系统调用使得从进程及其任何子进程所引用的其他的 路径变为根路径。对于要使程序运行成功这个调用必须在引用的目录上 拥有执行(搜索)的权限。直到你使用了chdir() 在你的新环境中它才会实际的生效。同时应该注意到如果程序具有超级 用户的权限它很容易的摆脱chroot所设置的环境。它可能靠创建设备节点 来读取内核的内容,对程序在 chroot(8) 外绑定一个调试器, 或者靠其他创造性的方法来完成操作。

  系统调用chroot()的行为可以被 sysctl变量kern.chroot_allow_open_directories 的值在一定程度上控制。当此值为0时,如果有任何目录被打开 chroot()将会返回EPERM并失败。当被置为默认值1,如果 任何目录被打开并且进程已经准备调用 chroot() 那么chroot()将会返回EPERM并失败。对于其他的 值,对打开目录的检查会被完全的忽视。

3.5.1 FreeBSD的jail功能

  Jail的概念在chroot()之上作了延伸,它 靠限制超级用户的权力来创建了一个真正的"虚拟服务器"。一旦一个监 狱被设置好后整个网络必须通过特别的IP地址才能到达,在这里"超级用 户权限"的力量完全的受到限制。

  当在jail中时,所有在内核中使用suser() 调用的超级用户权限的尝试都会失败。然而,一些对suser() 的调用已经被更改为新的接口suser_xxx() 。这个函数对认可或者拒绝被限制的进程去取得超级用户的权 限的行为负责。

  一个在Jail环境中的超级用户进程有以下权力:

  Jail是一个对于在一个安全环境中 运行一个仍有一些缺点的程序非常有用的工具。目前,IPC机制还没有被 更改到suser_xxx以至于像MySQL之类的程序还不 能运行在jail中。在jail中超级用户的存取可能还有非常有限的含义, 但是没有途径能正确的指出"非常有限"意味着什么。

3.5.2 POSIX®.1e 处理能力

  POSIX®已经发布了一个工作草案,增加了事件审计,访问控制列表, 精细特权控制,信息标签和强制访问控制。

  这是一个正在进展中的工作并且是 TrustedBSD项目的重点。一些初始化的工作已经被提交到 FreeBSD-CURRENT(cap_set_proc(3))。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.