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.  使用角色和特权(概述)

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

使用 RBAC(任务)

查看和使用 RBAC 缺省值(任务)

查看和使用 RBAC 缺省值(任务列表)

如何查看所有已定义的安全属性

如何查看指定的权限

如何承担角色

如何更改用户的安全属性

如何使用指定给您的管理权限

为站点定制 RBAC(任务)

初次配置 RBAC(任务列表)

如何规划 RBAC 实现

如何创建角色

如何指定角色

如何审计角色

如何创建权限配置文件

如何克隆和修改系统权限配置文件

如何创建授权

如何为传统应用程序添加 RBAC 属性

如何排除 RBAC 和特权指定故障

管理 RBAC(任务)

管理 RBAC(任务列表)

如何更改角色的口令

如何更改角色的安全属性

如何重新排序指定的安全属性

如何将管理员限于显式指定的权限

如何让用户使用自己的口令承担角色

如何将 root 角色更改为用户

使用特权(任务)

如何列出系统上的特权

如何确定已直接指定给您的特权

如何确定您可以运行的特权命令

如何确定进程的特权

如何确定程序所需的特权

如何将扩展的特权策略应用于端口

如何运行具有特权命令的 Shell 脚本

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.  审计(参考信息)

词汇表

索引

为站点定制 RBAC(任务)

RBAC 的初始配置包括创建可以承担特定角色的用户,创建角色并将这些角色指定给相应的用户。

初次配置 RBAC(任务列表)

使用以下任务列表可在站点上规划并初步实现 RBAC。一些任务是按顺序排序的。

任务
说明
参考
1. 规划 RBAC。
涉及检查站点的安全要求,以及确定如何在站点上使用 RBAC。
2. 配置可以承担角色的用户。
为可承担管理角色的可信用户创建登录帐户。
3. 创建角色。
创建角色并将角色分配给用户。
(建议)审计角色操作。
预选包括记录角色操作的审计事件的审计类。
创建权限配置文件。
创建权限配置文件。
修改权限配置文件。
修改权限配置文件中的特权指定。

在权限配置文件中为命令添加特权。

克隆现有权限配置文件。
基于系统权限配置文件创建权限配置文件。

solaris.admin.edit/file 授权添加到权限配置文件。

从权限配置文件中删除授权。

创建授权。
创建授权。

在权限配置文件中使用新授权。

保护传统应用程序的安全。
为传统应用程序启用 set ID 权限。脚本可以包含具有 set ID 的命令。传统应用程序可检查授权(如果适用)。
排除安全属性指定故障。
针对有关指定的安全属性为何不能用于用户、角色或进程的原因进行调试。

如何规划 RBAC 实现

RBAC 可以作为组织管理其信息资源方式的组成部分。进行规划时,需要全面了解 RBAC 功能以及组织的安全要求。


注 - /etc/security/policy.conf 文件中指定缺省权限。


  1. 了解 RBAC 基本概念。

    请阅读基于角色的访问控制(概述)。使用 RBAC 来管理系统与使用常规的 UNIX 管理做法大不相同。要在开始实现之前熟悉 RBAC 概念,请参见第 10 章

  2. 检查安全策略。

    您组织的安全策略应详细说明系统面临的潜在威胁,衡量每种威胁的风险并提供应对这些威胁的策略。通过 RBAC 隔离与安全相关的任务可以作为该策略的一部分。尽管可以按原样使用安装的 RBAC 配置,但可能需要对其进行定制,使其支持您的安全策略。

  3. 确定组织需要 RBAC 的程度。

    根据安全需要,选择如何使用 RBAC,如下所述:

    • root 作为角色-缺省情况下提供该方法。它可以防止任何用户以 root 身份登录。相反,用户必须在承担 root 角色之前通过为他们指定的登录信息进行登录。

    • 独立角色-此方法创建基于提供的权限配置文件的角色。可以根据职责级别、任务范围和任务类型指定角色。例如,System Administrator(系统管理员)角色可以执行超级用户可执行的许多任务,而 Network IPsec Management(网络 IPsec 管理)角色可以管理 IPsec。

      您还可以将安全职责与其他职责分隔开。User Management(用户管理)角色可以创建用户,而 User Security(用户安全)角色可以指定安全属性(如口令、角色和权限配置文件)。但 User Security(用户安全)角色无法创建用户,User Management(用户管理)角色无法将权限配置文件指定给用户。

    • 没有 root 角色-此方法需要您更改系统的缺省配置。在此配置中,知道 root 口令的任何用户都可以登录和修改系统。您无法区分充当超级用户的用户。

  4. 确定适用于组织的角色。

    请查看建议的角色的功能及其缺省权限配置文件。通过缺省的权限配置文件,管理员可以使用单个配置文件配置建议的角色。

    要进一步检查权限配置文件,请执行以下操作之一:

    • 通过使用 getent prof_attr 命令,查看系统上的可用权限配置文件。

    • 在本指南中,请参阅权限配置文件以了解某些典型权限配置文件的摘要。

  5. 确定是否有任何其他角色或权限配置文件适用于组织。

    请在站点上查找可能从受限制访问中受益的其他应用程序或应用程序系列。合适的 RBAC 候选对象包括:影响安全的应用程序、可能导致服务被拒绝的应用程序,或需要对管理员进行特殊培训的应用程序。您可以定制角色和权限配置文件,以处理组织的安全要求。

    1. 确定新任务所需的命令。
    2. 确定适用于此任务的权限配置文件。

      检查现有权限配置文件是否可以处理此任务,或是否需要创建单独的权限配置文件。


      注 - Media Backup(介质备份)或 Media Restore(介质恢复)权限配置文件可提供访问整个根文件系统的权限。因此,这些权限配置文件仅指定给相应的可信用户。或者,您可以选择不指定这些权限配置文件。缺省情况下,仅信任 root 角色可以进行备份和恢复。


    3. 确定适用于此权限配置文件的角色。

      确定是否应将此任务的权限配置文件指定给现有角色,或是否应创建新角色。如果使用现有角色,请检查该角色的原始权限配置文件是否适用于已指定给该角色的用户。对新的权限配置文件进行排序,以便命令能够使用所需的特权执行。有关排序的信息,请参见搜索指定安全属性的顺序

  6. 确定应将哪些用户指定给哪些角色。

    根据 least privilege(最小特权)原则,应将用户指定给适合该用户信任级别的角色。如果禁止用户执行用户无需执行的任务,可以减少潜在的问题。

如何创建角色

可以在本地以及 LDAP 系统信息库中创建角色。

开始之前

要创建角色,您必须是指定有 User Management(用户管理)权限配置文件的管理员。要将安全属性(包括初始口令)指定给角色,您必须是指定有 User Security(用户安全)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限

  1. 要创建角色,请使用 roleadd 命令。

    有关可接受的字符串的限制,请参见 roleadd(1M) 手册页。

    # roleadd [-e expire] [-f inactive] [-s shell] [-m] [-S repository] \
    [-A authorization-list] [-P profile-list] [-K key=value] rolename

    提示 - 当角色的名称反映权限配置文件的名称时,就可以轻松地了解该角色的目的。例如,将 Audit Review(审计查看)权限配置文件指定给 auditreview 角色时,以使得该角色可以读取、过滤和归档审计记录。


    该命令的 RBAC 参数类似于 usermod 命令的参数,如 user_attr(4) 手册页和如何更改用户的安全属性 中的步骤 1 中所述。例如,以下命令可以创建一个本地 User Administrator(用户管理员)角色和一个起始目录。

    # roleadd -c "User Administrator role, local" -s /usr/bin/pfbash \
    -m -K profiles="User Security,User Management"  useradm
    80 blocks
    # ls /export/home/useradm
    local.cshrc     local.login     local.profile
  2. 为该角色创建初始口令。
    # passwd -r files useradm
    Password: <Type useradm password>
    Confirm Password: <Retype useradm password>
    #

    注 - 通常,可以将一种角色帐户指定给多个用户。因此,管理员通常都会创建一个角色口令,并单独为用户提供角色口令。


  3. 要将角色指定给某个用户,请运行 usermod 命令。

    有关过程,请参见如何指定角色示例 9-14

示例 9-11 在 LDAP 系统信息库中创建 User Administrator(用户管理员)角色

在以下示例中,管理员站点使用 LDAP 系统信息库。通过运行以下命令,管理员可以在 LDAP 中创建一个 User Administrator(用户管理员)角色。

# roleadd -c "User Administrator role, LDAP" -s /usr/bin/pfbash \
-m -S ldap -K profiles="User Security,User Management"  useradm

示例 9-12 创建角色以实现职责分离

在以下示例中,管理员站点使用 LDAP 系统信息库。通过运行以下命令,管理员可以创建两个角色。usermgt 角色可以创建用户,为其提供起始目录以及执行其他非安全任务。usermgt 角色不能指定口令或其他安全属性。usersec 角色不能创建用户,但可以指定口令以及更改其他安全属性。

# roleadd -c "User Management role, LDAP" -s /usr/bin/pfbash \
-m -S ldap -K profiles="User Management"  usermgt
# roleadd -c "User Security role, LDAP" -s /usr/bin/pfbash \
-m -S ldap -K profiles="User Security"  usersec

示例 9-13 创建 Device and File Security(设备和文件安全)角色

在以下示例中,管理员将为此系统创建 Device and File Security(设备和文件安全)角色:

# roleadd -c "Device and File System Security admin, local" -s /usr/bin/pfbash \
-m -K profiles="Device Security,File System Security"  devflsec

如何指定角色

此过程会将角色指定给用户、重新启动名称高速缓存守护进程,然后说明用户如何承担该角色。

开始之前

您已添加了一个角色并为该角色指定了一个口令,如如何创建角色中所述。

要修改用户的大多数安全属性(包括口令),您必须是指定有 User Security(用户安全)权限配置文件的管理员。要修改用户的审计标志,您必须承担 root 角色。要修改其他属性,您必须是指定有 User Management(用户管理)权限配置文件的管理员。root 角色可修改用户的每个属性。有关更多信息,请参见如何使用指定给您的管理权限

示例 9-14 创建和指定角色以管理加密

在以下示例中,LDAP 网络的管理员创建了一个角色来管理加密框架,并将该角色指定给了 UID 1111

# roleadd -c "Cryptographic Services manager" \
-g 14 -m -u 104 -s /usr/bin/pfksh \
-S ldap -K profiles="Crypto Management" cryptmgt
# passwd cryptmgt
New Password:  <Type cryptmgt password>
Confirm password: <Retype cryptmgt password>
# usermod -u 1111 -R +cryptmgt

具有 UID 1111 的用户将登录,然后承担该角色并显示指定的安全属性。

% su - cryptmgt
Password: <Type cryptmgt password>
Confirm Password: <Retype cryptmgt password>
$ profiles -l
      Crypto Management
          /usr/bin/kmfcfg            euid=0
          /usr/sbin/cryptoadm        euid=0
          /usr/sfw/bin/CA.pl         euid=0
          /usr/sfw/bin/openssl       euid=0
$

有关加密框架的信息,请参见第 11 章。要管理该框架,请参见管理加密框架(任务列表)

如何审计角色

可以审计角色执行的操作。审计记录中包括承担角色的用户的登录名、角色名和角色执行的操作。116:AUE_PFEXEC:execve(2) with pfexec enabled:ps,ex,ua,as 审计事件捕获角色操作。通过预选 asexpsua 类之一,来审计角色操作。

开始之前

要配置审计,您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。要启用或刷新审计服务,您必须是指定有 Audit Control(审计控制)权限配置文件的管理员。root 角色可以执行此过程中的所有任务。有关更多信息,请参见如何使用指定给您的管理权限

  1. 包括审计规划中的角色审计。

    有关规划信息,请参见第 27 章

  2. 预选 asexpsua 类之一。
    • 如果已启用审计服务,请查看预选的类。
      # auditconfig -getflags

      如果预选 asexpsua 类之一,将审计角色操作。否则,请将其中一个类添加到现有类中。

      # auditconfig -setflags existing preselections,as
    • 如果尚未启用审计,请预选一个可用于审计角色操作的类。
      # auditconfig -setflags as

      在该示例中,管理员选择了 as 类。该类包括其他审计事件。要查看一个类中包括的审计事件,请使用 auditrecord 命令,如示例 28-28 中所示。

  3. 启用或刷新审计服务。
    # audit -s

如何创建权限配置文件

当提供的权限配置文件不包含所需的安全属性集合时,您可以创建或更改权限配置文件。要了解有关权限配置文件的更多信息,请参见RBAC 权限配置文件

开始之前

要创建权限配置文件,您必须是指定有 File Security(文件安全)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限

  1. 创建权限配置文件。
    # profiles -p [-S repository] profile-name

    系统会提示您输入说明。

  2. 向权限配置文件添加内容。

    对具有单个值的配置文件属性使用 set 子命令,如 set desc。对具有多个值的属性使用 add 子命令,如 add cmd

    例如,以下命令以交互方式创建如何将新的权限策略指定给所有用户中的定制 PAM 权限配置文件。为便于显示,已将名称缩短。

    # profiles -p -S LDAP "Site PAM LDAP"
    profiles:Site PAM LDAP> set desc="Profile which sets pam_policy=ldap"
    ...LDAP> set pam_policy=ldap
    ...LDAP> commit
    ...LDAP> end
    ...LDAP> exit

示例 9-15 创建 Sun Ray Users(Sun Ray 用户)权限配置文件

在此示例中,管理员在 LDAP 系统信息库中为 Sun Ray 用户创建权限配置文件。管理员已创建了 Basic Solaris User(基本 Solaris 用户)权限配置文件的 Sun Ray 版本,并从 Sun Ray 服务器上的 policy.conf 文件中删除了所有权限配置文件。

# profiles -p -S LDAP "Sun Ray Users"
profiles:Sun Ray Users> set desc="For all users of Sun Rays"
... Ray Users> add profiles="Sun Ray Basic User"
... Ray Users> set defaultpriv="basic,!proc_info"
... Ray Users> set limitpriv="basic,!proc_info"
... Ray Users> end
... Ray Users> exit

管理员验证内容。

# profiles -p "Sun Ray Users"
Found profile in LDAP repository.
profiles:Sun Ray Users> info
        name=Sun Ray Users
        desc=For all users of Sun Rays
        defaultpriv=basic,!proc_info,
        limitpriv=basic,!proc_info,
        profiles=Sun Ray Basic User

示例 9-16 从权限配置文件中删除基本特权

在以下示例中,在详尽测试后,安全管理员从 Sun Ray User(Sun Ray 用户)权限配置文件中删除了另一个基本特权。在示例 9-15 中,管理员已删除了一个特权。权限配置文件已被修改,删除了两个基本特权。指定有此配置文件的用户无法检查其当前会话外部的任何进程,也无法添加其他会话。

$ profiles -p "Sun Ray Users"
profiles:Sun Ray Users> set defaultpriv="basic,!proc_session,!proc_info"
profiles:Sun Ray Users> end
profiles:Sun Ray Users> exit

示例 9-17 从权限配置文件的限制特权集中删除特权

在以下示例中,在详尽测试后,安全管理员从 Sun Ray User(Sun Ray 用户)权限配置文件中删除了两个限制特权。

$ profiles -p "Sun Ray Users"
profiles:Sun Ray Users> set limitpriv="all,!proc_session,!proc_info"
profiles:Sun Ray Users> end
profiles:Sun Ray Users> exit

示例 9-18 创建包含特权命令的权限配置文件

在以下示例中,安全管理员在管理员创建的权限配置文件中添加某应用程序的特权。此应用程序能够识别特权。

# profiles -p SiteApp
profiles:SiteApp> set desc="Site application"
profiles:SiteApp> add cmd="/opt/site-app/bin/site-cmd"
profiles:SiteApp:site-cmd> add privs="proc_fork,proc_taskid"
profiles:SiteApp:site-cmd> end
profiles:SiteApp> exit

要进行验证,管理员可以选择 site-cmd

# profiles -p SiteApp "select cmd=/opt/site-app/bin/site-cmd; info;end"
Found profile in files repository.
  id=/opt/site-app/bin/site-cmd
  privs=proc_fork,proc_taskid

另请参见

要排除安全属性分配故障,请参见如何排除 RBAC 和特权指定故障。有关背景的信息,请参见搜索指定安全属性的顺序

如何克隆和修改系统权限配置文件

Oracle Solaris 提供的权限配置文件是只读的。如果所提供的某个权限配置文件的安全属性的集合不足以满足要求,您可以克隆该配置文件并进行修改。例如,您可能希望将 solaris.admin.edit/ path-to-system-file 授权添加到所提供的某个权限配置文件中。

开始之前

要创建或更改权限配置文件,您必须是指定有 File Security(文件安全)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限

  1. 通过现有的配置文件创建新的权限配置文件。
    # profiles -p [-S repository] existing-profile-name
    • 要增强某个现有的权限配置文件,请创建一个新配置文件。

      添加现有权限配置文件作为补充权限配置文件,然后添加增强功能。有关示例,请参见示例 9-19

    • 要删除某个现有权限配置文件中的内容,请克隆该配置文件。

      然后,将其重命名并进行修改。有关示例,请参见示例 9-20

  2. 继续修改新的权限配置文件。

    添加或删除补充权限配置文件、授权以及其他安全属性。

示例 9-19 克隆并增强 Network IPsec Management(网络 IPsec 管理)权限配置文件

在此示例中,管理员将多个 solaris.admin.edit 授权添加到某个站点 IPsec Management(IPsec 管理)权限配置文件中。

管理员验证是否无法修改该 Network IPsec Management(网络 IPsec 管理)权限配置文件。

# profiles -p "Network IPsec Management"
profiles:Network IPsec Management> add auths="solaris.admin.edit/etc/hosts"
Cannot add. Profile cannot be modified

然后,管理员创建包含该 Network IPsec Management(网络 IPsec 管理)配置文件的权限配置文件。

# profiles -p "Total IPsec Mgt"
... IPsec Mgt> set desc="Network IPsec Mgt plus edit authorization"
... IPsec Mgt> add profiles="Network IPsec Management"
... IPsec Mgt> add auths="solaris.admin.edit/etc/hosts"
... IPsec Mgt> add auths="solaris.admin.edit/etc/inet/ipsecinit.conf"
... IPsec Mgt> add auths="solaris.admin.edit/etc/inet/ike/config"
... IPsec Mgt> add auths="solaris.admin.edit/etc/inet/secret/ipseckeys"
... IPsec Mgt> end
... IPsec Mgt> exit

管理员验证内容。

# profiles -p "Total IPsec Mgt" info
        name=Total IPsec Mgt
        desc=Network IPsec Mgt plus edit authorization
        auths=solaris.admin.edit/etc/hosts,
              solaris.admin.edit/etc/inet/ipsecinit.conf,
              solaris.admin.edit/etc/inet/ike/config,
              solaris.admin.edit/etc/inet/secret/ipseckeys
        profiles=Network IPsec Management

示例 9-20 从权限配置文件中克隆和删除安全属性

在此示例中,管理员将管理 VSCAN 服务的属性这一功能与启用和禁用该服务的功能相分离。

首先,管理员列出 Oracle Solaris 提供的权限配置文件的内容。

% profiles -p "VSCAN Management" info
        name=VSCAN Management
        desc=Manage the VSCAN service
        auths=solaris.smf.manage.vscan,solaris.smf.value.vscan,
              solaris.smf.modify.application
        help=RtVscanMngmnt.html

然后,管理员创建用于启用和禁用该服务的权限配置文件。

# profiles -p "VSCAN Management"
profiles:VSCAN Management> set name="VSCAN Control"
profiles:VSCAN Control> set desc="Start and stop the VSCAN service"
... VSCAN Control> remove auths="solaris.smf.value.vscan"
... VSCAN Control> remove auths="solaris.smf.modify.application"
... VSCAN Control> end
... VSCAN Control> exit

然后,管理员创建可更改该服务的属性的权限配置文件。

# profiles -p "VSCAN Management"
profiles:VSCAN Management> set name="VSCAN Properties"
profiles:VSCAN Properties> set desc="Modify VSCAN service properties"
... VSCAN Properties> remove auths="solaris.smf.manage.vscan"
... VSCAN Properties> end
... VSCAN Properties> exit

管理员验证新权限配置文件的内容。

# profiles -p "VSCAN Control" info
        name=VSCAN Control
        desc=Start and stop the VSCAN service
        auths=solaris.smf.manage.vscan
# profiles -p "VSCAN Properties" info
        name=VSCAN Properties
        desc=Modify VSCAN service properties
        auths=solaris.smf.value.vscan,solaris.smf.modify.application

另请参见

要排除安全属性分配故障,请参见如何排除 RBAC 和特权指定故障。有关背景的信息,请参见搜索指定安全属性的顺序

如何创建授权

如果所提供的授权未包含您需要的授权,您可以创建授权。有关授权的更多信息,请参见RBAC 授权

开始之前

您已在您要保护的程序中定义并使用了授权。有关说明,请参见 《Oracle Solaris 11 开发者安全性指南》《Oracle Solaris 11 开发者安全性指南》中的"关于授权"

  1. 可选为您的新授权创建帮助文件。

    例如,为使用户能够修改应用程序中数据的授权创建帮助文件。

    # pfedit /docs/helps/NewcoSiteAppModData.html
    <HTML>
    -- Copyright 2012 Newco.  All rights reserved.
    -- NewcoSiteAppModData.html 
    -->
    <HEAD>
         <TITLE>NewCo Modify SiteApp Data Authorization</TITLE>
    </HEAD>
    <BODY>
    The com.newco.siteapp.data.modify authorization authorizes you 
    to modify existing data in the application.
    <p>
    Only authorized accounts are permitted to modify data. 
    Use this authorization with care.
    <p>
    </BODY>
    </HTML>
  2. 创建授权。

    例如,在本地系统上创建 com.newco.siteapp.data.modify 授权。

    # auths add -t "SiteApp Data Modify Authorized" \
    -h /docs/helps/NewcoSiteAppModData.html com.newco.siteapp.data.modify

    现在,您可以将该授权添加到权限配置文件中,并将该配置文件指定给角色或用户。

示例 9-21 向权限配置文件中添加授权

在此示例中,管理员添加了一个授权,站点应用程序将先检查该授权,然后确定是否允许用户运行该应用程序。

创建授权后,安全管理员将 com.newco.siteapp.data.modify 授权添加到现有权限。管理员已创建了示例 9-18 中的配置文件。

# profiles -p "SiteApp"
profiles:SiteApp> add auths="com.newco.siteapp.data.modify"
profiles:SiteApp> end
profiles:SiteApp> exit

为进行验证,管理员列出了该配置文件的内容。

# profiles -p SiteApp
Found profile in files repository.
  id=/opt/site-app/bin/site-cmd
  auths=com.newco.siteapp.data.modify

如何为传统应用程序添加 RBAC 属性

传统应用程序是一个命令或一组命令。安全属性是在指定给某个角色的权限配置文件中为每个命令设置的。承担该角色的用户便可以运行具有安全属性的传统应用程序。

开始之前

要创建权限配置文件,您必须是指定有 Information Security(信息安全)或 Rights Management(权限管理)权限配置文件的管理员。要指定权限配置文件,您必须是指定有 User Security(用户安全)权限配置文件的管理员。root 角色可以执行此过程中的所有任务。有关更多信息,请参见如何使用指定给您的管理权限

  1. 向实现传统应用程序的命令添加安全属性。

    向传统应用程序添加安全属性的方式与为任何命令添加安全属性的方式相同。您必须将具有安全属性的命令添加到权限配置文件。对于传统命令,请为命令指定 euid=0uid=0 安全属性。有关该过程的详细信息,请参见如何创建权限配置文件

    1. 为传统应用程序创建新的权限配置文件。

      有关步骤,请参见如何创建权限配置文件

    2. 添加包含所需安全属性的命令。

      有关示例,请参见示例 9-18

  2. 在角色的配置文件列表中加入权限配置文件。

    要为角色指定权限配置文件,请参见示例 9-14

示例 9-22 向脚本中的命令添加安全属性

如果某个脚本中的命令需要设置 setuid 位或 setgid 位才能成功运行,则必须在权限配置文件中为该脚本的可执行脚本命令添加安全属性。然后,将权限配置文件指定给角色,再将该角色指定给用户。当用户承担该角色并执行该脚本时,此命令便会以安全属性运行。

示例 9-23 检查脚本或程序中的授权

要针对授权进行检查,您需要编写一个基于 auths 命令的测试。有关此命令的详细信息,请参见 auths(1) 手册页。

例如,以下行会测试用户是否具有作为 $1 参数提供的授权:

if [ `/usr/bin/auths|/usr/xpg4/bin/grep $1` ]; then
        echo Auth granted
else
        echo Auth denied
fi

要使测试更加完整,必须在测试中包括针对通配符的使用进行检查的逻辑。例如,要测试用户是否具有 solaris.system.date 授权,需要检查以下字符串:

如果您要编写程序,请使用函数 getauthattr() 对授权进行测试。

如何排除 RBAC 和特权指定故障

对于用户或角色的进程为何没有使用指定的安全属性运行,存在以下几种影响因素。此过程可帮助您调试失败的安全属性指定。其中有多个步骤基于搜索指定安全属性的顺序

开始之前

您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限

  1. 验证并重新启动命名服务。
    1. 验证用户或角色的安全指定是否位于在系统上启用的命名服务中。
      # svccfg -s name-service/switch
      svc:/system/name-service/switch> listprop config
      config                      application
      config/value_authorization  astring  solaris.smf.value.name-service.switch
      config/default              astring  files ldap
      config/host                 astring  "files dns mdns ldap"
      config/netgroup             astring  ldap
      config/printer              astring  "user files"

      在此输出中,所有未明确提及的服务均继承缺省值 files ldap。因此,将先在文件中搜索 passwd(以及 user_attr)、auth_attrprof_attr,然后再在 LDAP 中搜索。

    2. 重新启动名称服务高速缓存 svc:/system/name-service/cache

      nscd 守护进程可以具有很长的生存时间间隔。通过重新启动此守护进程,可使用当前数据更新该命名服务。

      # svcadm restart name-service/cache
  2. 确定为用户指定安全属性的位置。

    将安全属性用作 userattr -v 命令的值。例如,以下命令指明了对用户 jdoe 指定的安全属性以及执行指定操作的位置:

    # userattr -v audit_flags jdoe Indicates modified system defaults
    user_attr: fw:no
    # userattr -v auths jdoe Indicates no added auths
    Basic Solaris User :solaris.mail.mailq,solaris.network.autoconf.read,
    solaris.admin.wusb.read
    Console User :solaris.system.shutdown,solaris.device.cdrw,
    solaris.device.mount.removable,solaris.smf.manage.vbiosd,solaris.smf.value.vbiosd
    # userattr -v defaultpriv jdoe Indicates basic user privileges only
    # userattr -v limitpriv jdoe Indicates default limit privileges 
    # userattr -v lock_after_retries jdoe Indicates no automatic lockout
    # userattr -v pam_policy jdoe Assigned per-user PAM policy
    # userattr -v profiles jdoe Indicates assigned rights profiles
    user_attr: Audit Review,Stop
    # userattr roles jdoe Assigned roles
    user_attr : cryptomgt,infosec

    输出指示 jdoe 已直接分配有审计标志、两个权限配置文件和两个角色。因此,权限配置文件中的任何审计标志值都将被忽略。承担某个角色后,该角色中的审计标志将替换用户的审计标志。

  3. 验证指定授权的拼写是否正确。

    授权指定的来源并不重要,因为会为用户累积授权。不过,拼写错误的授权将失败,且不会进行提示。

  4. 对于所创建的权限配置文件,请验证是否将相应的安全属性指定给该配置文件中的命令。

    例如,为能够成功运行,某些命令要求 uid=0,而非 euid=0。此外,一些命令的选项都需要授权。

  5. 如果安全属性对用户不可用,请检查以下各项。
    1. 检查是否将安全属性直接指定给用户。

      使用 userattr 命令,如 步骤 2 中所述。

    2. 如果未直接指定安全属性,请检查直接指定给用户的权限配置文件。
      1. 按顺序检查权限配置文件列表中的安全属性指定。

        该列表中最早的权限配置文件中的属性值是内核中的值。如果该值不正确,请在该权限配置文件中更改该值,或者按正确顺序重新指定配置文件。

        对于特权命令,请检查是通过 defaultpriv 关键字指定了特权,还是通过 limitpriv 关键字删除了特权。

      2. 如果未列出任何属性指定,请检查为用户指定的角色。

        如果属性已指定给一个角色,则该用户只有承担该角色才能获取安全属性。如果属性已指定给多个角色,则列表中最早角色的指定是有效指定。如果该值不正确,请将正确的值指定给列表中的第一个角色,或者按正确顺序重新指定角色。

  6. 如果已将特权直接指定给用户角色,请检查失败的命令是否需要授权才能成功运行。
    1. 检查命令的选项是否要求授权。

      不要直接指定特权,而是将特权指定给需要它的命令,添加所需的授权,将命令和授权置于一个权限配置文件中,然后将该配置文件指定给用户。

    2. 检查是否存在包含所需授权的权限配置文件。

      如果存在,将其指定给用户。将该权限配置文件放在所有包括该命令的其他权限配置文件之前。

  7. 如果一个命令针对某用户持续运行失败,请检查以下项。
    1. 验证用户是否正在配置文件 shell 中执行该命令。

      必须在配置文件 shell 中执行管理命令。要更正用户错误,可以将配置文件 shell 指定为用户的登录 shell。或者,您可以提醒用户在配置文件 shell 中运行管理命令。

    2. 检查直接指定给用户的任何安全属性是否阻碍了该命令的成功运行。

      特别是,检查用户的 defaultprivlimitpriv 属性的值。

    3. 确定包括该命令的权限配置文件或角色。
      1. 按顺序检查权限配置文件列表中包含安全属性的命令。

        权限配置文件列表中最早的值是内核中的值。如果该值不正确,请在该权限配置文件中更改该值,或者按正确顺序重新指定配置文件。

        特别是,检查配置文件的 defaultprivlimitpriv 属性的值。

      2. 如果未列出任何属性指定,请检查为用户指定的角色。

        如果该命令已指定给某角色,则用户只有承担该角色才能获取安全属性。如果属性已指定给多个角色,则列表中最早角色的指定是有效指定。如果值不正确,请将正确的值指定给列表中的第一个角色,或者按正确顺序重新指定角色。

  8. 如果一个命令针对某角色运行失败,请检查以下项。

    管理命令需要特权才能成功运行。一些命令的选项都需要授权。最佳做法是指定包括管理命令的权限配置文件。

    1. 检查直接指定给角色的任何安全属性是否阻碍了该命令的成功运行。

      特别是,检查角色的 defaultprivlimitpriv 属性的值。

    2. 按顺序检查权限配置文件列表中包含安全属性的命令。

      权限配置文件列表中最早的值是内核中的值。如果该值不正确,请在该权限配置文件中更改该值,或者按正确顺序重新指定配置文件。