JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:安全服务     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

第 2 部分系统、文件和设备安全性

2.  管理计算机安全性(概述)

3.  控制对系统的访问(任务)

4.  病毒扫描服务(任务)

5.  控制对设备的访问(任务)

6.  使用 BART 验证文件完整性(任务)

7.  控制对文件的访问(任务)

第 3 部分角色、权限配置文件和特权

8.  使用角色和特权(概述)

基于角色的访问控制(概述)

RBAC:超级用户模型的替代方法

RBAC 元素和基本概念

特权升级

RBAC 授权

授权和特权

特权应用程序和 RBAC

检查 UID 和 GID 的应用程序

检查特权的应用程序

检查授权的应用程序

RBAC 权限配置文件

RBAC 角色

配置文件 Shell 和 RBAC

名称服务范围和 RBAC

直接指定安全属性时的安全注意事项

直接指定安全属性时的可用性注意事项

特权(概述)

特权保护内核进程

特权说明

具有特权与不具有特权的系统之间的管理差别

特权和系统资源

如何实现特权

进程如何获取特权

指定特权

扩展用户或角色的特权

限制用户或角色的特权

为脚本指定特权

特权和设备

特权和调试

关于此发行版中的 RBAC

9.  使用基于角色的访问控制(任务)

10.  Oracle Solaris 中的安全属性(参考信息)

第 4 部分加密服务

11.  加密框架(概述)

12.  加密框架(任务)

13.  密钥管理框架

第 5 部分验证服务和安全通信

14.  使用可插拔验证模块

15.  使用 安全 Shell

16.  安全 Shell(参考信息)

17.  使用简单验证和安全层

18.  网络服务验证(任务)

第 6 部分Kerberos 服务

19.  Kerberos 服务介绍

20.  规划 Kerberos 服务

21.  配置 Kerberos 服务(任务)

22.  Kerberos 错误消息和故障排除

23.  管理 Kerberos 主体和策略(任务)

24.  使用 Kerberos 应用程序(任务)

25.  Kerberos 服务(参考信息)

第 7 部分在 Oracle Solaris 中审计

26.  审计(概述)

27.  规划审计

28.  管理审计(任务)

29.  审计(参考信息)

词汇表

索引

特权(概述)

进程权限管理允许在命令、用户、角色和系统四个级别上对进程加以限制。Oracle Solaris 通过特权实现进程权限管理。特权可以降低与(在系统中具有完全超级用户功能的)某个用户或某个进程相关的安全风险。特权与 RBAC 相结合,是传统超级用户模型的强大的替代模型。

特权保护内核进程

特权是进程执行某项操作所需的独立权限。权限是在内核中实施的。如果程序在基本特权集界限内运行,则该程序也会在系统安全策略界限内运行。例如,setuid 程序就是在系统安全策略界限外部运行的程序。通过使用特权,程序可以不必调用 setuid

特权以离散方式枚举可在系统上执行的操作种类。程序可以使用可使其成功执行的确切特权运行。例如,对文件进行操控的程序可能需要 file_dac_writefile_flag_set 特权。进程上有了这些特权,就不需要以 root 身份运行该程序了。

以前,系统并未遵循特权模型,而是使用超级用户模型。在超级用户模型中,进程以 root 或用户身份运行。用户进程只能对用户的目录和文件执行操作。root 进程可以在系统上的任何位置创建目录和文件。需要在用户目录外部创建目录的进程将使用 UID=0(即以 root 身份)运行。安全策略依靠 DAC(discretionary access control,自主访问控制)来保护系统文件。设备节点受到 DAC 的保护。例如,组 sys 拥有的设备只能由该 sys 组的成员打开。

但是,setuid 程序、文件权限和管理帐户很容易被误用。setuid 进程获许执行的操作数比该进程完成其运行所需的操作数多。setuid 程序可能会受到来自随后将以无所不能的 root 用户身份运行的侵入者的威胁。同样,能够访问 root 口令的任何用户都可能会危及整个系统的安全。

与之相反,通过特权实施策略的系统允许在用户功能和 root 功能之间划分等级。可以为某个用户授予特权,允许其执行超出一般用户功能的活动,并可对 root 加以限制,使 root 拥有的特权比当前拥有的特权少。借助 RBAC,可以将使用特权运行的命令单独放置在某个权限配置文件中,并将其指定给一个用户或角色。表 8-1 汇总了 RBAC 与特权模型提供的用户功能和超级用户功能之间的等级。

特权模型比超级用户模型具有更好的安全性。已从进程中删除的特权不会被利用。进程特权防止程序或管理帐户获取对所有功能的访问权限。进程特权可为敏感文件提供额外的保护措施,而 DAC 防护功能本身可被用来获取访问权限。

之后,特权可以限制程序和进程,使其仅具备程序所需的功能。此功能称为最小特权原则。在实现最小特权的系统上,捕获某个进程的入侵者只能访问该进程所具有的那些特权,不会破坏其余部分的系统安全。

特权说明

可以根据特权范围对特权进行逻辑分组。

其他逻辑组包括 CONTRACTCPCDTRACEGRAPHICSVIRTWIN

有些特权对系统的影响有限,而有些特权则具有广泛的影响。proc_taskid 特权的定义指明了其有限的影响:

proc_taskid
        Allows a process to assign a new task ID to the calling process.

net_rawaccess 特权的定义指明了其广泛的影响:

net_rawaccess
        Allow a process to have direct access to the network layer.

privileges(5) 手册页提供了每种特权的说明。ppriv -lv 命令将每种特权的说明显示在标准输出中。

具有特权与不具有特权的系统之间的管理差别

具有特权的系统与不具有特权的系统之间存在多处明显差别。下表列出了其中的一些差别。

表 8-2 具有特权的系统与不具有特权的系统之间的明显差别

功能
不具有特权
特权
守护进程
root 身份运行守护进程。
daemon 用户身份运行守护进程。

例如,以下守护进程已指定有相应的特权,并以 daemon 身份运行:lockdrpcbind

日志文件所有权
日志文件由 root 拥有。
现在,日志文件由创建此日志文件的 daemon 拥有。root 用户不拥有此文件。
错误消息
错误消息涉及超级用户。

例如,chroot: not superuser

错误消息反映特权的使用。

例如,chroot 失败的等效错误消息为 chroot: exec failed

setuid 程序
程序使用 setuid 来完成不允许一般用户执行的任务。
许多 setuid 程序都已更改为使用特权运行。

例如,以下命令使用特权:auditikeadmipadmipsecconfpingtraceroutenewtask

文件权限
设备权限由 DAC 控制。例如,sys 组的成员可以打开 /dev/ip
文件权限 (DAC) 不会预测谁可以打开设备。设备通过 DAC 设备策略进行保护。

例如,/dev/ip 文件具有 666 权限,但是该设备只能由具有适当特权的进程打开。原始插槽仍受 DAC 保护。

审计事件
审计 su 命令的使用会涉及许多管理功能。
审计特权的使用会涉及大多数管理功能。pmpsexuaas 审计类包括那些对设备策略和特权使用进行监视的审计事件。
进程
进程受进程的拥有者保护。
进程受特权保护。进程特权和进程标志显示为 /proc/<pid> 目录中的一个新项 priv
调试
不引用核心转储中的任何特权。
核心转储的 ELF 注释部分在 NT_PRPRIVNT_PRPRIVINFO 注释中包含有关进程特权和标志的信息。

ppriv 命令和其他命令显示了大小合适的集的正确数目。这些命令会将位集中的位正确映射到特权名称。

特权和系统资源

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

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

如何实现特权

每个进程都有四个特权集,用于确定进程是否可以使用某个特定的特权。内核会自动计算有效特权集。可以修改初始可继承特权集。通过编码来使用特权的程序可以减小该程序的允许特权集。可以缩小限制特权集

内核可以识别基本特权集。在未修改的系统上,每个用户的初始可继承特权集等同于登录时获取的基本特权集。虽然您不能修改基本特权集,但可以修改用户从基本特权集中继承的特权。

在未修改的系统上,用户登录时的特权集将类似如下:

E (Effective): basic
I (Inheritable): basic
P (Permitted): basic
L (Limit): all

因此,在登录时,所有用户在其可继承特权集、允许特权集和有效特权集中包含了基本特权集。用户的限制特权集等同于区域(全局区域或非全局区域)的缺省特权集。要在用户的有效特权集中加入更多特权,必须为该用户指定一个权限配置文件。此权限配置文件将包含已添加了特权的命令。还可以直接将特权指定给用户或角色,但这种特权指定可能会有风险。有关风险的介绍,请参见直接指定安全属性时的安全注意事项

进程如何获取特权

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

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

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

privilege-aware(特权识别)通过编码使用特权的程序称为可识别特权的程序。可识别特权的程序可在程序执行过程中启用和禁用特权。要在生产环境中成功执行程序,必须为程序指定其可启用和禁用的特权。

有关可识别特权的代码示例,请参见《Oracle Solaris 11 开发者安全性指南》中的第 2  章 "开发特权应用程序"。要为需要特权的程序指定特权,请参见示例 9-18

指定特权

您作为安全管理员应负责指定特权。最佳做法是在权限配置文件中将特权指定给命令。然后,将该权限配置文件指定给角色或用户。

特权还可以直接指定给用户、角色或权限配置文件。如果您信任某些用户能够在其整个会话中会负责地使用某种特权,则可以直接指定该特权。适合直接指定的特权是具有有限影响的特权,如 proc_clock_highres。不适合直接指定的特权是具有广泛影响的特权,如 file_dac_write

还可以拒绝用户或系统的特权。从用户或系统的初始可继承特权集或限制特权集中删除特权时必须小心谨慎。

扩展用户或角色的特权

用户和角色具有可继承特权集。不能扩展限制特权集,因为限制特权集最初包括所有特权。可以针对用户、角色和系统扩展初始可继承特权集。还可以将不在可继承特权集中的特权指定给进程。

您可以通过三种方法扩展提供的特权。

按进程指定特权是最精确的添加特权方法。可以通过向某用户指定某种角色,扩展此用户可执行的特权操作的数目。将为该角色指定包含具有已添加特权的命令的权限配置文件。用户承担角色时,便会获取此角色的配置文件 shell。当在此角色的 shell 中键入权限配置文件中的命令时,将会使用添加的特权来执行这些命令。

还可以将权限配置文件指定给用户而不是用户承担的角色。用户打开配置文件 shell(如 pfksh)时,便可使用特权执行用户权限配置文件中的命令。在常规 shell 中,不使用特权执行命令。特权进程只能在特权 shell 中执行。

扩展用户、角色或系统的初始可继承特权集是一种风险性较高的指定特权方法。可继承特权集中的所有特权都位于允许特权集和有效特权集中。用户或角色在 shell 中键入的所有命令都可以使用直接指定的特权。使用直接指定的特权,用户或角色可以轻松执行可能超出其管理职责范围的操作。

为降低该风险,可将特权指定给用户或角色,以便他们可以一次对一个对象进行操作。可能的对象为网络端口、UID 和文件对象。例如,您可以为用户指定对 /var/core 目录中的文件的 file_dac_read 特权。应用该扩展的策略时,file_dac_read 特权必须包含在用户进程的有效特权集中。如果包含在内,则当将扩展的策略指定给该用户用于该目录对象时,用户可以读取 /var/core 目录中的所有文件。

在某个系统上向初始可继承特权集中添加特权后,登录到此系统的所有用户都会具有更大的基本特权集。通过这种直接指定,系统的所有用户都可以轻松执行可能超出一般用户权限范围的操作。


注 - 不能扩展限制特权集,因为限制特权集最初包括所有特权。


限制用户或角色的特权

通过删除特权,可以防止用户和角色执行特定任务。可以从初始可继承特权集和限制特权集中删除特权。在分配小于缺省特权集的初始可继承特权集或限制特权集之前,应谨慎地测试特权删除操作。通过从初始可继承特权集中删除特权,可以阻止用户登录。如果从限制特权集中删除了特权,传统的 setuid 程序可能会失败,因为该程序所需的特权已被删除。

为脚本指定特权

脚本与命令类似,也是可执行文件。因此,在权限配置文件中,可以为脚本添加特权,就像为命令添加特权一样。当指定有权限配置文件的用户或角色在配置文件 shell 中执行脚本时,将会使用添加的特权来运行该脚本。如果脚本包含需要特权的命令,则具有已添加特权的命令也必须在指定的权限配置文件中。

可识别特权的程序可以按进程限制特权。对于可识别特权的程序,您的工作是仅为可执行文件指定该程序所需的权限。然后测试此程序,了解程序是否能成功执行其任务。您还需要检查程序是否误用了其特权。

特权和设备

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

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

设备策略受特权控制。getdevpolicy 命令可显示每个设备的设备策略。设备配置命令 devfsadm 可安装设备策略。devfsadm 命令可将特权集与 open 绑定以读取或写入设备。有关更多信息,请参见 getdevpolicy(1M)devfsadm(1M) 手册页。

利用设备策略,您可以更加灵活地授予打开设备所需的权限。您可能需要不同于缺省设备策略的特权或更多特权。可以针对设备策略和驱动程序适当地修改特权要求。可以在安装、添加或更新设备驱动程序时修改特权。

add_drvupdate_drv 命令用于修改设备策略项以及驱动程序特定的特权。必须运行具有完全特权集的进程才能更改设备策略。有关更多信息,请参见 add_drv(1M)update_drv(1M) 手册页。

特权和调试

Oracle Solaris 提供了用于调试特权问题的工具。ppriv 命令和 truss 命令可提供调试输出。有关示例,请参见 ppriv(1) 手册页。有关过程,请参见如何确定程序所需的特权。您还可以使用 dtrace 命令。有关更多信息,请参见 dtrace(1M) 手册页。