在 Oracle® Solaris 11.2 中确保用户和进程的安全

退出打印视图

更新时间: 2014 年 7 月
 
 

如何使用特权

特权内置在 Oracle Solaris 中。本节说明 Oracle Solaris 如何在设备、资源管理和传统应用程序中使用特权。

进程如何获取特权

进程可以继承特权,或者为其指定特权。进程从其父进程继承特权。登录时,用户的初始可继承特权集合确定该用户的进程可用的特权。用户初始登录的所有子进程都从此特权集合继承。

您还可以直接为程序、用户、角色和特定资源指定特权。当某个程序需要特权时,可以在权限配置文件中将特权指定给该程序的可执行文件。系统会向获许运行程序的用户或角色指定包含该程序的配置文件。登录或打开配置文件 shell 时,如果在配置文件 shell 中键入了程序的可执行文件,则可使用特权运行该程序。例如,拥有 "Object Access Management"(对象访问管理)配置文件的角色可以使用 file_chown 特权运行 chmod 命令,因此可以更改不归该角色所有的文件的所有权。

当某个角色或用户运行已直接指定有附加特权的程序时,该指定特权会添加到此角色或用户的可继承特权集合中。指定有特权的程序的子进程会继承父进程的特权。如果子进程需要的特权比父进程的特权多,则必须直接为子进程指定这些额外特权。

通过编码方式使用特权的程序称为 privilege-aware(可识别特权)的程序。可识别特权的程序可在程序执行过程中启用和禁用特权。要在生产环境中成功执行程序,必须为程序指定其可启用和禁用的特权。在使可识别特权的程序可用之前,仅为程序的可执行文件指定该程序所需的特权。然后测试此程序,了解程序是否能成功执行其任务。您还需要检查程序是否误用了其特权。

有关可识别特权的代码示例,请参见面向开发者的 Oracle Solaris 11 安全性指南 中的第 2  章 开发特权应用程序。要为需要特权的程序指定特权,请参见Example 4–1Example 5–7

特权和设备

在权限模型中由特权保护系统接口,在超级用户模型中这些接口只由文件权限保护。在具有特权的系统中,文件权限太小,因此无法保护这些接口。proc_owner 之类的特权可以覆盖文件权限,然后获得对系统的完全访问权限。

因此,在 Oracle Solaris 中,具有设备目录的所有权不足以打开相应设备。例如,不再自动允许 sys 组的成员打开 /dev/ip 设备。/dev/ip 的文件权限是 0666,但还需要 net_rawaccess 特权才能打开该设备。

因为设备策略由特权控制,在授予设备打开权限方面就有更大的灵活性。可以针对设备策略和驱动程序适当地配置特权要求。您可以配置安装、添加或更新设备驱动程序时的特权要求。

有关更多信息,请参见 add_drv(1M)devfsadm(1M)getdevpolicy(1M)update_drv(1M) 手册页。

特权和资源管理

在 Oracle Solaris 中,project.max-locked-memory 和 zone.max-locked-memory 资源控制可用于限制指定有 PRIV_PROC_LOCK_MEMORY 特权的进程的内存消耗量。此特权允许进程锁定物理内存中的页。

如果将 PRIV_PROC_LOCK_MEMORY 特权指定给某个权限配置文件,则可为具有此特权的进程提供锁定所有内存的功能。作为一项保护措施,请设置资源控制以防止具有该特权的用户锁定所有内存。对于在非全局区域中运行的特权进程,请设置 zone.max-locked-memory 资源控制。对于在系统上运行的特权进程,请创建一个项目,然后设置 project.max-locked-memory 资源控制。有关这些资源控制的信息,请参见在 Oracle Solaris 11.2 中进行资源管理 中的第 6  章 关于资源控制Oracle Solaris Zones 介绍 中的第 2  章 非全局区域配置概述

传统应用程序和特权的使用

为了适应传统应用程序,特权的实现使用超级用户模型和权限模型。内核会自动跟踪 PRIV_AWARE 标志,此标志指示某个程序设计为可使用特权。请考虑不能识别特权的子进程。从父进程继承的所有特权均可在子进程的允许特权集合和有效特权集合中找到。如果子进程将 UID 设置为 0,则其可能不具有完全超级用户权限。进程的有效特权集合和允许特权集合会被限制为子进程限制特权集合中包含的特权。这样,可识别特权的进程的限制特权集合会限制不能识别特权的子进程的超级用户特权。

调试特权使用

Oracle Solaris 提供了用于调试特权问题的工具。ppriv 命令和 truss 命令可提供调试输出。有关示例,请参见 ppriv(1) 手册页。有关示例,请参见排除权限问题。您也可以使用 dtrace 命令。有关更多信息,请参见 dtrace(1M) 手册页和Oracle Solaris 11.2 Dynamic Tracing Guide