系统管理指南:安全性服务

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

基于角色的访问控制 (Role-based access control, RBAC) 是一种安全功能,用于控制用户访问那些通常仅限于超级用户访问的任务。通过对进程和用户应用安全属性,RBAC 可以在多个管理员之间划分超级用户的功能。进程权利管理通过权限实现。用户权利管理通过 RBAC 实现。

RBAC:超级用户模型的替代项

在传统的 UNIX 系统中,root 用户(也称为超级用户)可执行所有功能。以 root 身份运行的程序或 setuid 程序可执行所有功能。root 用户可以读取和写入任何文件,运行所有程序,以及向任何进程发送中止信号。实际上,任何可成为超级用户的用户都能够修改站点的防火墙,更改审计跟踪,读取机密记录以及关闭整个网络。被非法修改的 setuid 程序可以在系统上执行任何操作。

基于角色的访问控制 (Role-based access control, RBAC) 提供了更为安全的全有或全无型超级用户模型替代项。使用 RBAC,可以在划分更精细的级别上强制执行安全策略。RBAC 使用最低权限的安全原则。最低权限表示用户仅具有执行某项作业所需的权限。普通用户具有足够权限来使用其应用程序、检查其作业状态、列显文件、创建新文件等。超出普通用户功能以外的功能将分为多个权限配置文件。预期要执行需要某些超级用户功能的作业的用户将承担拥有相应权限配置文件的角色。

RBAC 会将超级用户功能收集到权限配置文件中。这些权限配置文件将指定给称为角色的特殊用户帐户。然后,用户可以承担执行需要某些超级用户功能的作业的角色。预定义的权限配置文件是 Solaris 软件附带的。您可以创建角色并指定相应的配置文件。

权限配置文件可以提供广泛的功能。例如,主管理员权限配置文件等效于超级用户。权限配置文件还可以从狭义范围进行定义。例如,Cron 管理权限配置文件可管理 atcron 作业。创建角色时,可以决定是创建具有广泛功能的角色,还是创建具有有限功能的角色,抑或是同时创建这两种角色。

在 RBAC 模型中,超级用户可创建一种或多种角色。这些角色基于权限配置文件。然后,超级用户会将这些角色指定给可以放心委任执行角色任务的用户。这些用户使用其用户名进行登录。登录之后,用户将承担可以运行有限管理命令和图形用户界面 (graphical user interface, GUI) 工具的角色。

由于可以灵活地设置角色,因此可启用各种安全策略。尽管 Solaris 操作系统 (Solaris OS) 没有附带任何角色,但是您可以轻松地配置三种建议的角色。这些角色基于以下同名的权限配置文件:

并不一定要实现这三种角色。角色是一种实现组织安全性需要的功能。可以为各个领域(如安全性、联网或防火墙管理)中具有特殊目的的管理员设置角色。另一种策略是创建一种功能强大的管理员角色和一种高级用户角色。高级用户角色将用于那些允许修复其自身系统的各部分的用户。

超级用户模型可以与 RBAC 模型共存。下表汇总了 RBAC 模型中可能存在的、从超级用户到受限普通用户的各个等级。该表包括可以在两种模型中跟踪的管理操作。有关权限对系统的单独影响的概述,请参见表 8–2

表 8–1 超级用户模型与具有权限的 RBAC 模型

系统上的用户功能 

超级用户模型 

RBAC 模型 

可以成为具有全部超级用户功能的超级用户 

是 

是 

可以使用具有全部用户功能的用户身份登录 

是 

是 

可以成为具有有限功能的超级用户 

否 

是 

可以使用用户身份登录,有时具有超级用户功能 

是,仅使用 setuid 程序

是,使用 setuid 程序和 RBAC

可以使用具有管理功能的用户身份登录,但是没有全部超级用户功能 

否 

是,使用 RBAC 以及直接指定的权限和授权 

可以使用功能少于普通用户的用户身份登录 

否 

是,使用 RBAC 和已删除的权限 

可以跟踪超级用户操作 

是,通过审计 su 命令

是,通过审计配置文件 shell 命令 

另外,如果禁用了 root 用户,则审计跟踪中会出现已经承担 root 角色的用户的名称

Solaris RBAC 元素和基本概念

Solaris OS 中的 RBAC 模型引入了以下元素:

下图说明了各 RBAC 元素如何协同工作。

图 8–1 Solaris RBAC 元素关系

下文对该图形进行了说明。

在 RBAC 中,将角色指定给用户。用户承担某种角色时,便可使用此角色的功能。角色从权限配置文件中获取其功能。权限配置文件可以包含授权、特权命令以及其他补充权限配置文件。特权命令是指那些使用安全属性执行的命令。

下图使用操作员角色、操作员权限配置文件以及打印机管理权限配置文件来说明 RBAC 的各种关系。

图 8–2 Solaris RBAC 元素关系的示例

下文对该图形进行了说明。

操作员角色用于维护打印机以及执行介质备份。此角色会指定给用户 jdoejdoe 通过切换到此角色然后提供角色口令,便可承担此角色。

操作员权限配置文件已指定给操作员角色。操作员权限配置文件包含两个辅助配置文件:打印机管理和介质备份。这些辅助配置文件反映了角色的主要任务。

打印机管理权限配置文件用于管理打印机、打印守护进程和假脱机程序。打印机管理权限配置文件包括三种授权:solaris.admin.printer.readsolaris.admin.printer.deletesolaris.admin.printer.modify。角色和用户可使用这些授权来处理打印机队列中的信息。打印机管理权限配置文件还包括一些具有安全属性的命令,例如 euid=lp/usr/sbin/lpshut 以及 euid=0/usr/ucb/lpq

RBAC 授权

授权是指可以授予角色或用户的单项权利。授权可在用户应用程序级别强制执行策略。可以将授权直接指定给角色或用户。通常,授权包括在权限配置文件中,而角色拥有权限配置文件,并且角色会被指定给用户。有关示例,请参见图 8–2

RBAC 兼容的应用程序可以先检查用户的授权,然后再授予访问应用程序或应用程序内特定操作的权限。此检查取代了传统的 UNIX 应用程序中对 UID=0 的检查。有关授权的更多信息,请参见以下各节:

授权和权限

权限可在内核中强制执行安全策略。授权和权限之间的差别会影响强制执行安全策略的级别。如果没有正确的权限,内核可能会阻止进程执行特权操作。如果没有正确的授权,可能会阻止用户使用特权应用程序或执行特权应用程序内与安全性相关的操作。有关权限的更全面的介绍,请参见权限(概述)

特权应用程序和 RBAC

可以覆盖系统控制的应用程序和命令被视为特权应用程序。可以使用安全属性(如 UID=0)、权限和授权将应用程序变为特权应用程序。

检查 UID 和 GID 的应用程序

在 UNIX 环境中,长期以来都存在检查 root (UID=0) 或其他某个特殊 UID 或 GID 的特权应用程序。使用权限配置文件机制,可以将需要特定 ID 的命令分离出来。您可以将具有执行安全属性的命令放在权限配置文件中,而不是针对任何用户均可访问的命令更改 ID。这样,拥有此权限配置文件的用户或角色不必成为超级用户便可运行程序。

可以指定实际 ID 或有效 ID。指定有效 ID 优先于指定实际 ID。有效 ID 等效于文件权限位中的 setuid 功能,它还可以标识 UID 以进行审计。但是,由于某些 shell 脚本和程序需要 root 的实际 UID,因此也可设置实际 UID。例如,pkgadd 命令需要实际 UID 而不是有效 UID。如果使用有效 ID 不足以运行命令,则需要将此 ID 更改为实际 ID。有关过程,请参见如何创建或更改权限配置文件

检查权限的应用程序

特权应用程序可以检查权限的使用。使用 RBAC 权限配置文件机制,可以指定特定命令的权限。您可以将具有执行安全属性的命令单独放在权限配置文件中,而无需具有使用应用程序或命令的超级用户功能。这样,拥有此权限配置文件的用户或角色便可使用成功执行命令所需的那几种权限来运行此命令。

用于检查权限的命令包括:

要向权限配置文件中添加具有权限的命令,请参见如何创建或更改权限配置文件。要确定特殊配置文件中用于检查权限的命令,请参见确定已指定的权限

检查授权的应用程序

Solaris OS 还提供了用于检查授权的命令。通过定义,root 用户可具有所有授权。因此,root 用户可以运行任何应用程序。用于检查授权的应用程序包括:

要针对授权测试脚本或程序,请参见示例 9–19。要编写需要授权的程序,请参见《Solaris 开发者安全性指南》中的“关于授权”

RBAC 权限配置文件

权限配置文件是指可以指定给角色或用户的系统覆盖值的集合。一个权限配置文件可以包括授权、具有指定安全属性的命令以及其他权限配置文件。权限配置文件信息分放在 prof_attrexec_attr 数据库中。权限配置文件的名称和授权位于 prof_attr 数据库中。权限配置文件名称和具有指定安全属性的命令位于 exec_attr 数据库中。有关权限配置文件的更多信息,请参见以下各节:

RBAC 角色

角色是一种特殊类型的用户帐户,通过此帐户可运行特权应用程序。角色与用户帐户使用相同的常规方式创建。角色具有起始目录、组指定和口令等。权限配置文件和授权可为角色提供管理功能。角色不能从其他角色或其他用户那里继承功能。各角色分配有相应的超级用户功能,因此可以实现更为安全的管理。

用户承担某种角色时,此角色的属性将替换所有用户属性。角色信息存储在 passwdshadowuser_attr 数据库中。可以将角色信息添加到 audit_user 数据库中。有关设置角色的详细信息,请参见以下各节:

可以为多个用户分配一种角色。所有可以承担同一角色的用户都具有同一角色起始目录,在同一环境中运行,并且可访问相同文件。用户可以通过从命令行运行 su 命令并提供角色名称和口令来承担角色,还可以在 Solaris Management Console 工具中承担角色。

角色无法直接进行登录。用户需要首先登录,然后才能承担角色。用户承担一种角色之后,如果不首先退出当前角色,则无法承担其他角色。用户退出此角色之后,便可承担其他角色。

可以通过将 root 用户更改为角色(如如何使 root 用户成为角色中所示),防止匿名 root 进行登录。 如果要审计配置文件 shell 命令 pfexec ,则审计跟踪需要包含登录用户的实际 UID、用户承担的角色以及相应角色执行的操作。要针对角色操作来审计系统或特定用户,请参见如何审计角色

Solaris 软件没有附带任何预定义的角色。

RBAC 中的配置文件 Shell

角色可以通过 Solaris Management Console 启动器或配置文件 shell 来运行特权应用程序。配置文件 shell 是一种特殊的 shell,可用于识别权限配置文件包括的安全属性。当用户运行 su 命令来承担角色时,便会启动配置文件 shell。配置文件 shell 包括 pfshpfcshpfksh。这些 shell 分别对应于 Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh)。

已直接指定有权限配置文件的用户必须调用配置文件 shell 才能运行具有安全属性的命令。有关可用性和安全性的注意事项,请参见直接指定安全属性时的安全注意事项

可以对所有在配置文件 shell 中执行的命令进行审计。有关更多信息,请参见如何审计角色

名称服务范围和 RBAC

名称服务范围是用于了解 RBAC 的一个重要概念。角色的范围可能会限定为单独的主机。或者,此范围还可能包括所有由名称服务(如 NIS、NIS+ 或 LDAP)提供服务的主机。文件 /etc/nsswitch.conf 指定了系统的名称服务范围。遇到第一个匹配项时,查找便会停止。例如,如果某个权限配置文件存在于两个名称服务范围中,则只使用第一个名称服务范围中的各项。如果 files 是第一个匹配项,则角色的范围将限定为本地主机。

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

通常,用户通过角色来获取管理功能。授权和特权命令将分组到一个权限配置文件中,而角色拥有此权限配置文件,并且角色会指定给用户。

还可以直接指定权限配置文件和安全属性:

但是,直接指定的做法并不安全。具有直接指定的权限的用户和角色可能会在内核需要此权限的情况下覆盖安全策略。如果某权限是权限配置文件中某个命令的安全属性,则此权限仅供拥有此权限配置文件的用户用于此命令。不能将此权限用于用户或角色可能运行的其他命令。

由于授权在用户级别执行,因此,与直接指定权限相比,直接指定授权的危险性会较小。但是,用户可使用授权来执行高度安全的任务,如委托设备管理。

直接指定给用户的权限配置文件存在的可用性问题要多于安全性问题。权限配置文件中具有安全属性的命令只能在配置文件 shell 中成功执行。用户必须打开配置文件 shell,然后再键入命令。指定有权限配置文件的角色会自动获取配置文件 shell。因此,命令可在此角色的 shell 中成功执行。

权限配置文件提供了一种可扩展的便捷方法,用于针对特定管理任务将安全特征进行分组。