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

支持 RBAC 的数据库

以下四个数据库存储 RBAC 元素的数据:

policy.conf 数据库包含应用于所有用户的授权、权限和权限配置文件。有关更多信息,请参见policy.conf 文件

RBAC 数据库关系

每个 RBAC 数据库都使用 key=value 语法存储属性。此方法可以适应将来的数据库扩展。此外,使用此方法,系统可以在遇到其策略未知的关键字时继续运行。key=value 内容将文件链接起来。四个数据库中的以下链接项说明了 RBAC 数据库协同工作的方式。


示例 10–1 显示 RBAC 数据库连接

在以下示例中,通过为用户 jdoe 指定角色 filemgr,使此用户获取文件系统管理配置文件的功能。

  1. user_attr 数据库的 jdoe 用户项中为用户 jdoe 指定角色 filemgr


    # user_attr - user definition
    
    jdoe::::type=normal;roles=filemgr
    
  2. user_attr 数据库的角色项中为角色 filemgr 指定权限配置文件文件系统管理。


    # user_attr - role definition
    
    filemgr::::profiles=File System Management;type=role

    用户和角色在本地系统上的 passwd shadow 文件中(或者在分布式名称服务的等效数据库中)唯一定义。

  3. 文件系统管理权限配置文件在 prof_attr 数据库中定义。此数据库还为文件系统管理项指定了三组授权。


    # prof_attr - rights profile definitions and assigned authorizations
    
    File System Management:::Manage, mount, share file systems:
    
    help=RtFileSysMngmnt.html;
    
    auths=solaris.admin.fsmgr.*,solaris.admin.diskmgr.*,solaris.admin.volmgr.*
  4. 这些授权在 auth_attr 数据库中定义。


    # auth_attr - authorization definitions
    
    solaris.admin.fsmgr.:::Mounts and Shares::help=AuthFsmgrHeader.html
    
    solaris.admin.fsmgr.read:::View Mounts and Shares::help=AuthFsmgrRead.html
    
    solaris.admin.fsmgr.write:::Mount and Share Files::help=AuthFsmgrWrite.html
  5. exec_attr 数据库中为文件系统管理权限配置文件指定带有安全属性的命令。


    # exec_attr - rights profile names with secured commands
    
    File System Management:suser:cmd:::/usr/sbin/mount:uid=0
    
    File System Management:suser:cmd:::/usr/sbin/dfshares:euid=0
    
    …
    
    File System Management:solaris:cmd:::/usr/sbin/mount:privs=sys_mount
    
    …

RBAC 数据库和名称服务

RBAC 数据库的名称服务范围只能应用于本地主机。此范围还可以包括由 NIS、NIS+ 或 LDAP 之类的名称服务提供服务的所有主机。在 /etc/nsswitch.conf 文件中为每个数据库设置具有优先级的名称服务。

user_attr 数据库

user_attr 数据库包含补充 passwdshadow 数据库的用户和角色信息。user_attr 数据库包含授权、权限配置文件和指定角色之类的扩展用户属性。 user_attr 数据库中的字段以冒号分隔,如下所示:


user:qualifier:res1:res2:attr

这些字段具有以下含义:

user

passwd 数据库中指定的用户或角色的名称。

qualifier:res1:res2

保留这些字段供将来使用。

attr

以分号 (;) 分隔的关键字-值对的可选列表,用于说明将在用户运行命令时应用的安全属性。四个有效关键字为 typeauthsprofilesroles

  • 如果此帐户属于普通用户,则可以将 type 关键字设置为 normal。如果此帐户属于角色,则 typerole

  • auths 关键字指定从 auth_attr 数据库中定义的名称中选择的以逗号分隔的授权名称列表。授权名称可以包括星号 (*) 字符作为通配符。例如,solaris.device.* 表示所有的 Solaris 设备授权。

  • profiles 关键字指定 prof_attr 数据库中排序的逗号分隔权限配置文件名称列表。权限配置文件的排序方式与 UNIX 搜索路径的排序方式类似。列表中包含要执行的命令的第一个配置文件定义将应用于命令的安全属性(如果存在)。

  • 可以通过以逗号分隔的角色名称列表将 roles 关键字指定给用户。请注意,角色在同一 user_attr 数据库中定义。通过将类型值设置为 role 来表示角色。不能将角色指定给其他角色。

以下示例演示了如何在典型的 user_attr 数据库中定义操作员角色。此示例显示了如何将角色指定给用户 jdoe。通过 type 关键字区分角色和用户。


% grep operator /etc/user_attr 

jdoe::::type=normal;roles=operator

operator::::profiles=Operator;type=role

auth_attr 数据库

所有授权都存储在 auth_attr 数据库中。可以将授权指定给用户、角色或权限配置文件。首选方法是将授权放置在权限配置文件中,将配置文件包括在角色的配置文件列表中,然后将角色指定给用户。

auth_attr 数据库中的字段以冒号分隔,如下所示:


authname:res1:res2:short_desc:long_desc:attr

这些字段具有以下含义:

authname

用于以 prefix.[suffix] 格式标识授权的唯一字符串。Solaris OS 的授权使用 solaris 作为前缀。所有其他授权应使用与创建授权的组织的 Internet 域名顺序相反的名称开头的前缀(例如,com.xyzcompany)。后缀指示要授权的内容,通常是功能区域和操作。

authname 由前缀和功能区域组成并以句点结束时,authname 将用作应用程序 GUI 中使用的标题。由两部分组成的 authname 不是实际授权。authname 的值 solaris.printmgr. 便是一个标题示例。

authname 以单字 "grant" 结束时,authname 将用作授予授权。使用授予授权,用户可以将具有相同前缀和功能区域的授权委托给其他用户。authname 的值 solaris.printmgr.grant 便是一个授予授权示例。solaris.printmgr.grant 授予用户将 solaris.printmgr.adminsolaris.printmgr.nobanner 之类的授权委托给其他用户的权限。

res1:res2

保留以供将来使用。

short_desc

授权的短名称。此短名称适于在用户界面中(如 GUI 中的滚动列表中)显示。

long_desc

详细说明。此字段标识授权的目的、使用授权的应用程序以及可能使用授权的用户类型。可以在应用程序的帮助文本中显示详细说明。

attr

以分号 (;) 分隔的关键字-值对的可选列表,用于说明授权属性。可以指定零个或多个关键字。

关键字 help 标识 HTML 形式的帮助文件。可以通过 /usr/lib/help/auths/locale/C 目录中的 index.html 文件访问帮助文件。

以下示例显示了带有一些典型值的 auth_attr 数据库:


% grep printer /etc/security/auth_attr 

solaris.admin.printer.:::Printer Information::help=AuthPrinterHeader.html

solaris.admin.printer.delete:::Delete Printer Information::help=AuthPrinterDelete.html

solaris.admin.printer.modify:::Update Printer Information::help=AuthPrinterModify.html

solaris.admin.printer.read:::View Printer Information::help=AuthPrinterRead.html

请注意,solaris.admin.printer. 被定义为标题,这是因为授权名称以点 (.) 结束。GUI 使用标题组织授权系列。

prof_attr 数据库

prof_attr 数据库存储名称、说明、帮助文件的位置以及指定给权限配置文件的授权。指定给权限配置文件的命令和安全属性存储在 exec_attr 数据库中。有关更多信息,请参见exec_attr 数据库prof_attr 数据库中的字段以冒号分隔,如下所示:


profname:res1:res2:desc:attr

这些字段具有以下含义:

profname

权限配置文件的名称。权限配置文件名称区分大小写。user_attr 数据库也使用此名称指示指定给角色和用户的配置文件。

res1:res2

保留以供将来使用。

desc

详细说明。此字段应介绍权限配置文件的目的,包括有兴趣使用此配置文件的用户类型。详细说明适于在应用程序的帮助文本中显示。

attr

以分号 (;) 分隔的关键字-值对的可选列表,用于说明在执行时应用于对象的安全属性。可以指定零个或多个关键字。两个有效关键字为 helpauths

关键字 help 标识 HTML 形式的帮助文件。可以通过 /usr/lib/help/auths/locale/C 目录中的 index.html 文件访问帮助文件。

关键字 auths 指定从 auth_attr 数据库中定义的那些名称中选择的以逗号分隔的授权名称列表。可以使用星号 (*) 字符作为通配符来指定授权名称。

以下示例显示了两个典型的 prof_attr 数据库项。请注意,打印机管理权限配置文件是操作员权限配置文件的补充权限配置文件。根据显示的需要,另起一行来显示此示例。


% grep 'Printer Management' /etc/security/prof_attr

Printer Management:::         权限配置文件的名称

Manage printers, daemons, spooling: 说明

help=RtPrntAdmin.html;              帮助文件

auths=solaris.admin.printer.read, 授权

solaris.admin.printer.modify,solaris.admin.printer.delete

...

Operator:::                         权限配置文件的名称

Can perform simple administrative tasks: 说明

profiles=Printer Management,  补充权限配置文件

Media Backup,All;

help=RtOperator.html               帮助文件

exec_attr 数据库

exec_attr 数据库定义需要安全属性才能成功运行的命令。这些命令是权限配置文件的一部分。具有安全属性的命令可以由为其指定了此配置文件的角色运行。

exec_attr 数据库中的字段以冒号分隔,如下所示:


name:policy:type:res1:res2:id:attr

这些字段具有以下含义:

profname

权限配置文件的名称。权限配置文件名称区分大小写。该名称指的是 prof_attr 数据库中的配置文件。

policy

与此项相关联的安全策略。目前,susersolaris 是有效项。solaris 策略可识别权限,而 suser 策略则不能。

type

指定的实体类型。目前,唯一有效的实体类型是 cmd(命令)。

res1:res2

保留以供将来使用。

id

标识实体的字符串。命令应该具有全路径或带有通配符 (*) 的路径。要指定参数,请编写具有这些参数的脚本并使 id 指向此脚本。

attr

以分号 (;) 分隔的关键字-值对的可选列表,用于说明将在执行时应用于实体的安全属性。可以指定零个或多个关键字。有效关键字的列表取决于强制执行的策略。

对于 suser 策略,四个有效关键字为 euiduidegidgid

  • euiduid 关键字包含单个用户名或数字用户 ID (user ID, UID)。通过 euid 指定的命令使用提供的 UID 运行,这与在可执行文件上设置 setuid 位类似。通过 uid 指定的命令使用实际 UID 和有效 UID 运行。

  • egidgid 关键字包含单个组名或数字组 ID (group ID, GID)。通过 egid 指定的命令使用提供的 GID 运行,这与在可执行文件上设置 setgid 位类似。通过 gid 指定的命令使用实际 GID 和有效 GID 运行。

对于 solaris 策略,有效关键字为 privs。值由以逗号分隔的权限列表组成。

以下示例显示了 exec_attr 数据库中的一些典型值:


% grep 'File System Management' /etc/security/exec_attr

File System Management:suser:cmd:::/usr/sbin/ff:euid=0

File System Management:solaris:cmd:::/usr/sbin/mount:privs=sys_mount

…

policy.conf 文件

policy.conf 文件提供了向所有用户授予特定权限配置文件、特定授权和特定权限的方法。文件中的相关项由 key=value 对组成:

以下示例显示了 policy.conf 数据库中的一些典型值:


# grep AUTHS /etc/security/policy

AUTHS_GRANTED=solaris.device.cdrw



# grep PROFS /etc/security/policy

PROFS_GRANTED=Basic Solaris User



# grep PRIV /etc/security/policy



#PRIV_DEFAULT=basic

#PRIV_LIMIT=all

有关权限的更多信息,请参见权限(概述)