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

第 10 章 基于角色的访问控制(参考)

本章介绍了有关 RBAC 的参考资料。以下是本章中参考信息的列表:

有关使用 RBAC 的信息,请参见第 9 章,使用基于角色的访问控制(任务)。有关概述信息,请参见基于角色的访问控制(概述)

权限配置文件的内容

本节介绍了一些典型的权限配置文件。权限配置文件可以包括授权、带有安全属性的命令,以及补充权限配置文件。权限配置文件根据功能的强弱从高到低列出。有关如何将权限配置文件分配给站点中角色的建议,请参见如何规划 RBAC 实现

每个权限配置文件都具有关联的帮助文件。帮助文件以 HTML 形式提供,是可自定义的。这些文件驻留在 /usr/lib/help/auths/locale/C 目录中。

主管理员权限配置文件

将主管理员权限配置文件指定给系统上功能最强的角色。拥有主管理员权限配置文件的角色具有超级用户功能。

如有必要,可以为站点自定义帮助文件 RtPriAdmin.html。帮助文件存储在 /usr/lib/help/auths/locale/C 目录中。

另请注意,如果主管理员权限配置文件与站点的安全策略不一致,则可以修改配置文件或者根本就不指定配置文件。但是,需要在一个或多个其他权限配置文件中处理主管理员权限配置文件中的安全功能。然后将这些权限配置文件指定给角色。

表 10–1 主管理员权限配置文件的内容

目的 

内容 

执行所有管理任务 

命令*:uid=0;gid=0

授权solaris.*solaris.grant

帮助文件RtPriAdmin.html

系统管理员权限配置文件

系统管理员权限配置文件适用于系统管理员角色。由于系统管理员不具有主管理员具有的广泛功能,因此不使用通配符。相反,此配置文件是一组不涉及安全性的独立的补充管理权限配置文件。显示其中一个补充权限配置文件中带有安全属性的命令。

请注意,将在补充权限配置文件列表的末尾指定所有权限配置文件。

表 10–2 系统管理员权限配置文件的内容

目的 

内容 

执行大多数非安全性的管理任务 

补充权限配置文件:审计查看、打印机管理、计时程序管理、设备管理、文件系统管理、邮件管理、维护和修复、介质备份、介质恢复、名称服务管理、网络管理、对象访问管理、进程管理、软件安装、用户管理、所有

帮助文件RtSysAdmin.html

补充配置文件之一中的命令 

对象访问管理权限配置文件solaris 策略: /usr/bin/chgrp:privs=file_chown /usr/bin/chmod:privs=file_chown/usr/bin/chown:privs=file_chown /usr/bin/setfacl:privs=file_chown

suser 策略: /usr/bin/chgrp:euid=0/usr/bin/chmod:euid=0/usr/bin/chown:euid=0 /usr/bin/getfacl:euid=0/usr/bin/setfacl:euid=0

操作员权限配置文件

操作员权限配置文件是一个功能较弱的配置文件,提供执行备份和打印机维护的功能。恢复文件的功能与安全性相关更密切。因此,在此配置文件中,缺省值将不包括恢复文件的功能。

表 10–3 操作员权限配置文件的内容

目的 

内容 

执行简单的管理任务 

补充权限配置文件:打印机管理、介质备份、所有

帮助文件RtOperator.html

打印机管理权限配置文件

打印机管理是适用于特定任务区域的典型权限配置文件。此配置文件包括授权和命令。下表显示了部分命令列表。

表 10–4 打印机管理权限配置文件的内容

目的 

内容 

管理打印机、守护进程和假脱机 

授权solaris.admin.printer.deletesolaris.admin.printer.modifysolaris.admin.printer.read

命令/usr/bin/cancel:euid=lp;uid=lp , /usr/bin/lpset:egid=14, /usr/bin/lpstat:euid=0 , /usr/lib/lp/local/lpadmin:uid=lp;gid=8, /usr/lib/lp/lpsched:uid=0 , /usr/sbin/lpadmin:egid=14;uid=lp;gid=8, /usr/sbin/lpfilter:euid=lp;uid=lp, /usr/ucb/lprm:euid=0

帮助文件RtPrntMngmnt.html

基本 Solaris 用户权限配置文件

缺省情况下,会通过 policy.conf 文件将基本 Solaris 用户权限配置文件自动指定给所有用户。此配置文件提供了正常操作中有用的基本授权。请注意,基本 Solaris 用户权限配置文件提供的便利必须与站点的安全要求平衡。需要更严格安全性的站点可能希望从 policy.conf 文件中删除此配置文件。

表 10–5 基本 Solaris 用户权限配置文件的内容

目的 

内容 

自动将权限指定给所有用户 

授权solaris.profmgr.readsolaris.jobs.userssolaris.mail.mailqsolaris.admin.usermgr.readsolaris.admin.logsvc.readsolaris.admin.fsmgr.readsolaris.admin.serialmgr.readsolaris.admin.diskmgr.readsolaris.admin.procmgr.usersolaris.compsys.readsolaris.admin.printer.readsolaris.admin.prodreg.readsolaris.admin.dcmgr.readsolaris.snmp.readsolaris.project.readsolaris.admin.patchmg.readsolaris.network.hosts.readsolaris.compsys.readsolaris.admin.volmgr.read

补充权限配置文件:所有

帮助文件RtDefault.html

所有权限配置文件

所有权限配置文件使用通配符包括所有命令。此配置文件提供了可访问未在其他权限配置文件中显式指定的所有命令的角色。如果没有所有权限配置文件或使用通配符的其他权限配置文件,则角色只能访问显式指定的命令。如此有限的命令集不是很实用。

所有权限配置文件(如果使用)应该是指定的最终权限配置文件。此最后一个位置可确保不会意外覆盖其他权限配置文件中的显式安全属性指定。

表 10–6 所有权限配置文件的内容

目的 

内容 

以用户或角色的身份执行任何命令 

命令: *

帮助文件RtAll.html

权限配置文件的顺序

权限配置文件中的命令按顺序进行解释。第一次出现的命令版本是用于此角色或用户的命令的唯一版本。不同的权限配置文件可以包括相同命令。因此,配置文件列表中权限配置文件的顺序至关重要。应该首先列出具有最多功能的权限配置文件。

权限配置文件在 Solaris Management Console GUI 和 prof_attr 文件中列出。在 Solaris Management Console GUI 中,具有最多功能的权限配置文件应该是指定权限配置文件列表中最顶部的配置文件。在 prof_attr 文件中,具有最多功能的权限配置文件应该是补充配置文件列表中的第一个配置文件。此放置方法可确保带有安全属性的命令列在不带安全属性的相同命令之前。

查看权限配置文件的内容

Solaris Management Console 权限工具提供了一种检查权限配置文件内容的方法。

prof_attrexec_attr 文件提供了划分更细的视图。prof_attr 文件包含在系统上定义的每个权限配置文件的名称。此文件还包括每个配置文件的授权和补充权限配置文件。 exec_attr 文件包含权限配置文件的名称及其带有安全属性的命令。

授权命名和委托

RBAC 授权是可以授予角色或用户的独立权限。在用户获取对应用程序或应用程序内特定操作的访问权限之前,将通过 RBAC 兼容应用程序检查授权。此检查替换了常规 UNIX 应用程序中对 UID=0 的测试。

授权命名约定

授权具有在内部以及文件中使用的名称。例如,solaris.admin.usermgr.pswd 是一个授权的名称。授权具有简短说明,此说明出现在图形用户界面 (graphical user interface, GUI) 中。例如,Change Passwordssolaris.admin.usermgr.pswd 授权的说明。

根据约定,授权名称由顺序颠倒过来的供应商 Internet 名称、主题区域(任何子区域)和功能组成。授权名称的各个部分以点分隔。com.xyzcorp.device.access 便是一个示例。此约定的例外是 Sun Microsystems, Inc. 的授权,它使用前缀 solaris 代替 Internet 名称。使用命名约定,管理员可以用分层方式应用授权。通配符 (*) 可以表示点右侧的所有字符串。

授权粒度示例

可将以下情况视为如何使用授权的示例:操作员角色中的用户可能限于 solaris.admin.usermgr.read 授权,此授权只提供可对用户配置文件的读取访问,不提供写入访问。系统管理员角色自然地具有 solaris.admin.usermgr.readsolaris.admin.usermgr.write 授权,以对用户文件进行更改。但是,如果没有 solaris.admin.usermgr.pswd 授权,系统管理员就不能更改口令。主管理员具有所有这三个授权。

需要 solaris.admin.usermgr.pswd 授权才能在 Solaris Management Console 用户工具中更改口令。使用 smusersmmultiusersmrole 命令中的口令修改选项时也需要此授权。

授权中的授权委托

使用以后缀 grant 结束的授权,用户或角色可将以相同前缀开头的任何指定授权委托给其他用户。

例如,具有授权 solaris.admin.usermgr.grantsolaris.admin.usermgr.read 的角色可将 solaris.admin.usermgr.read 授权委托给其他用户。具有 solaris.admin.usermgr.grantsolaris.admin.usermgr.* 授权的角色可将具有 solaris.admin.usermgr 前缀的任何授权委托给其他用户。

支持 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

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

RBAC 命令

本节列出了用于管理 RBAC 的命令,还提供了一个命令表,其中命令的访问可以由授权控制。

管理 RBAC 的命令

虽然可以手动编辑本地 RBAC 数据库,但是强烈建议不要进行此类编辑。以下命令可用于管理对具有 RBAC 的任务进行访问。

表 10–7 RBAC 管理命令

命令的手册页 

说明 

auths(1)

显示用户的授权。

makedbm(1M)

生成 dbm 文件。

nscd(1M)

名称服务高速缓存守护进程,适用于高速缓存 user_attrprof_attr exec_attr 数据库。使用 svcadm 命令重新启动守护进程。

pam_roles(5)

PAM 的角色帐户管理模块。检查承担角色的授权。

pfexec(1)

由配置文件 shell 使用以执行在 exec_attr 数据库中指定的带有安全属性的命令。

policy.conf(4)

系统安全策略的配置文件。列出授予的授权、授予的权限和其他安全信息。

profiles(1)

显示指定用户的权限配置文件。

roles(1)

显示指定用户可以承担的角色。

roleadd(1M)

向本地系统中添加角色。

roledel(1M)

从本地系统中删除角色。

rolemod(1M)

在本地系统上修改角色的属性。

smattrpop(1M)

将源安全属性数据库合并到目标数据库。用于需要将本地数据库合并到名称服务的情况。还用于未提供转换脚本的升级。

smexec(1M)

管理 exec_attr 数据库中的项。要求验证。

smmultiuser(1M)

管理对用户帐户的批量操作。要求验证。

smprofile(1M)

管理 prof_attr exec_attr 数据库中的权限配置文件。要求验证。

smrole(1M)

管理角色帐户中的角色和用户。要求验证。

smuser(1M)

管理用户项。要求验证。

useradd(1M)

向系统中添加用户帐户。-P 选项将角色指定给用户帐户。

userdel(1M)

从系统中删除用户的登录。

usermod(1M)

修改系统上的用户帐户属性。

要求授权的命令

下表提供了在 Solaris 系统上如何使用授权限制命令选项的示例。有关授权的更多介绍,请参见授权命名和委托

表 10–8 命令和关联的授权

命令的手册页 

授权要求 

at(1)

所有选项所需的 solaris.jobs.userat.allowat.deny 文件都不存在时)

atq(1)

所有选项所需的 solaris.jobs.admin

cdrw(1)

所有选项所需的 solaris.device.cdrw,缺省情况下在 policy.conf 文件中授予

crontab(1)

选项提交作业所需的 solaris.jobs.usercrontab.allow crontab.deny 文件都不存在时)

选项列出或修改其他用户的 crontab 文件所需的 solaris.jobs.admin

allocate(1)

分配设备所需的 solaris.device.allocate(或在 device_allocate 文件中指定的其他授权)

将设备分配给其他用户(-F 选项)所需的 solaris.device.revoke(或在 device_allocate 文件中指定的其他授权)

deallocate(1)

解除其他用户的设备分配所需的 solaris.device.allocate(或在 device_allocate 文件中指定的其他授权)

强制解除指定设备(-F 选项)或所有设备的分配(-I 选项)所需的 solaris.device.revoke(或在 device_allocate 中指定的其他授权)

list_devices(1)

列出其他用户的设备(-U 选项)所需的 solaris.device.revoke

sendmail(1M)

访问邮件子系统功能所需的 solaris.mail;查看邮件队列所需的 solaris.mail.mailq