当前位置:嗨网首页>书籍在线阅读

06-确定进程的边界

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

38.5 确定进程的边界

本节将介绍各种限制程序以控制程序发生安全问题时所造成的损失的方法。

考虑使用能力

Linux能力模型将传统的all-or-nothing UNIX权限模型划分为一个个被称为能力的单元。一个进程能够独立地启用或禁用单个能力。通过只启用进程所需的能力使得程序能够在不拥有完整的root权限的情况下运行。这样就降低了程序发生安全问题时造成损失的可能性。

此外,使用能力和securebits标记可以创建只拥有有限的一组权限但无需属于root的进程(即进程的所有用户ID都不为零)。这样的进程无法使用exec()来重新获取所有能力。在第39章中将会介绍能力和securebits标记。

考虑使用一个chroot监牢

在特定情况下一项有用的安全技术是建立一个chroot监牢来限制程序能够访问的一组目录和文件。(还需确保调用chdir()来将进程的当前工作目录改为监牢中的一个位置。)但chroot监牢不足以限制一个set-user-ID-root程序(参见18.12节)。

除了使用chroot监牢之外还可以使用一个虚拟服务器,它是实现于虚拟内核之上的一个服务器。由于每个虚拟内核与运行于同一硬件上的其他虚拟内核是相互隔离的,因此虚拟服务器比chroot监牢更加安全和灵活。(其他一些现代操作系统还提供了自己的虚拟服务器实现。)Linux上最早的虚拟化实现是User-Mode Linux(UML),它是Linux 2.6内核的标准组成部分。在http://user-mode-linux.sourceforge.net/上可以找到有关UML的更多信息。最新的虚拟内核项目包括Xen(http://www.cl.cam.ac.uk/Research/SRG/netos/xen/)和KVM(http://kvm.qumranet.com/)。