跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11 开发者安全性指南 Oracle Solaris 11 Information Library (简体中文) |
特权是授予某个进程的独立权限,允许该进程执行某项不具备该特权就会被 Oracle Solaris 操作系统禁止的操作。 大部分程序不使用特权,因为程序通常在系统安全策略的界限内执行操作。
特权由管理员进行指定。 将根据程序的设计启用特权。 登录或进入某配置文件 shell 时,管理员所具备的特权指定适用于在该 shell 中执行的所有命令。 应用程序运行后,将以编程方式打开或关闭特权。 如果使用 exec(1) 命令启动了一项新程序,则该程序可能可以使用所有可从父进程继承的特权。 但是,该程序不能新增任何特权。
系统管理员负责将特权指定给各个命令。 有关特权分配的更多信息,请参见《Oracle Solaris 管理:安全服务》中的"特权(概述)"。
每项进程具有 4 组特权,这些特权决定了某项进程是否可以使用某个特定的特权:
允许特权集合
可继承特权集合
有限特权集合
有效特权集合
进程可能会使用到的所有特权都必须包含在允许特权集合中。 相反,从来不会用到的特权应从该程序的允许特权集合中排除。
进程启动后,该进程会从其父进程中集成允许特权集合。 通常在登录时或在新的配置文件 shell 中,所有特权都包含在初始的允许特权集合中。 该集合中的特权是由管理员指定的。 每项子进程都可以从该允许特权集合中删除特权,但是子进程无法向允许特权集合中添加其他特权。 作为一个安全事项,您应该将程序从不使用的特权从允许特权集合中删除。 这样,可以通过避免使用指定有误的或继承有误的特权来保护程序。
从允许特权集合中删除的特权也会从有效特权集合中自动删除。
在登录时或在新的配置文件 shell 中,可继承特权集合包含已由管理员指定的特权。 调用 exec(1) 后,这些特权可能会传递到子进程中。 进程应删除不必要的特权来避免将这些特权传递到子进程中。 允许特权集合通常与可继承特权集合相同。 但是,在某些情况下,从可继承特权集合中删除的特权还保留在允许特权集合中。
通过有限特权集合,开发者可控制某个进程可以使用哪些特权或可将那些特权传递到子进程。 子进程和后续进程只能从有限特权集合中获取特权。 执行 setuid(0) 函数时,有限特权集合负责确定允许应用程序使用的特权。 在执行 exec(1) 时,将强制使用有限特权集合。 将 exec(1) 删除后,从有限特权集合中删除特权的操作才会影响其他集合。
进程实际可以使用的特权位于该进程的有效特权集合中。 启动程序时,有效特权集合与允许特权集合是等同的。 然后,有效特权集合既不是允许特权集合的子集也不与其等同。
将有效特权集合减少到基本特权是一个好的做法。 基本特权集合包含核心特权,特权类别对其进行了说明。 将程序不需要的所有特权完全删除。 将所有不需要的基本特权切换为禁用,直到程序需要该进程。 例如,file_dac_read 特权,可以使所有文件被读取。 一个程序可以具备多个读取文件的例程。 程序起初将所有特权关闭,然后会打开 file_dac_read 特权执行相应的读取例程。 这样,开发者就可以确保程序不会执行 file_dac_read 特权执行错误的读取例程。 此做法称为特权包围。 特权编码示例对特权包围进行了演示。
为适应原有应用程序,特权的实施要同时与超级用户和特权模型兼容。 该适应过程是通过使用 PRIV_AWARE 标志实现的,该标志表明程序与特权兼容。 PRIV_AWARE 标志由操作系统自动处理。
请考虑不能识别特权的子进程。 该进程将不具有 PRIV_AWARE 标志。 从父进程继承来的所有特权在允许特权集合和有效特权集合中都是可用的。 如果该子进程将 UID 设置为 0,则该进程的有效特权集合和允许特权集合被限制为有效特权集合中的那些特权。 子进程无法获取超级用户的完整权限。 这样,感知特权进程的有限特权集合将对所有未感知特权的子进程限制超级用户特权。 如果子进程对任何特权集合进行了修改,则该进程的 PRIV_AWARE 标志将设置为 true。
基本特权-基本特权是授予进程(在之前的 Oracle Solaris 发行版中未被授予特权)的特权。 缺省情况下,为每个进程和每个用户都分配了所有基本特权;但是,可以取消这些特权以进一步限制进程。
PRIV_FILE_LINK_ANY-允许进程创建硬链接,指向由某 UID 所有(而非该进程有效 UID 所有)的文件。
PRIV_PROC_INFO-允许进程检查特定进程(查询进程可以将信号发送给这些进程)以外的进程的状态。 没有此特权,就无法检查在 /proc 中不能看到的进程。
PRIV_FILE_READ-允许进程读取文件系统中的对象。
PRIV_FILE_WRITE-允许进程修改文件系统中的对象。
PRIV_NET_ACCESS-允许进程打开 TCP、UDP、SDP 或 SCTP 网络端点。
最初,对于某个程序,应该将基本特权作为集合来指定,而不是分别指定。 此方法将确保指定中包括 Oracle Solaris OS 更新版本中发布的所有基本特权。 但是,在计算程序的所需特权集时,一定要删除不需要的基本特权并添加程序所需的其他特权。 例如,如果程序不适用于 exec(1) 子进程,则应禁用 proc_exec 特权。
文件系统特权。
有关 Oracle Solaris 特权的完整列表及其说明,请参见 privileges(5) 手册页。
注 - Oracle Solaris 提供区域功能,通过此功能,管理员可以为运行的应用程序设置隔离环境。 请参见 zones(5)。 由于一个区域中的进程无法监视或干扰该区域外系统中的其他活动,因此该进程的所有特权也限于该区域。 但是,如果需要,可以将 PRIV_PROC_ZONE 特权应用于全局区域中需要特权才能在非全局区域中操作的进程。