JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11 开发者安全性指南     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  面向开发者的 Oracle Solaris 安全(概述)

2.  开发特权应用程序

特权应用程序

关于特权

管理员如何指定特权

如何实现特权

允许特权集合

可继承特权集合

有限特权集合

有效特权集合

超级用户与特权模型之间的兼容性

特权类别

使用特权进行编程

特权数据类型

特权接口

setppriv():用于设置特权

用于映射特权的 priv_str_to_set()

特权编码示例

包围在超级用户模型中的特权

包围在最小特权模型中的特权

特权应用程序开发指南

关于授权

3.  编写 PAM 应用程序和服务

4.  编写使用 GSS-API 的应用程序

5.  GSS-API 客户机示例

6.  GSS-API 服务器示例

7.  编写使用 SASL 的应用程序

8.  Oracle Solaris 加密框架介绍

9.  编写用户级加密应用程序和提供者

10.  Oracle Solaris 密钥管理框架介绍

A.  基于 C 的 GSS-API 样例程序

B.  GSS-API 参考

C.  指定 OID

D.  SASL 示例的源代码

E.  SASL 参考表

词汇表

索引

关于特权

特权是授予某个进程的独立权限,允许该进程执行某项不具备该特权就会被 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 特权的完整列表及其说明,请参见 privileges(5) 手册页。


注 - Oracle Solaris 提供区域功能,通过此功能,管理员可以为运行的应用程序设置隔离环境。 请参见 zones(5)。 由于一个区域中的进程无法监视或干扰该区域外系统中的其他活动,因此该进程的所有特权也限于该区域。 但是,如果需要,可以将 PRIV_PROC_ZONE 特权应用于全局区域中需要特权才能在非全局区域中操作的进程。