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

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

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

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

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

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

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

6.  使用基本审计报告工具(任务)

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

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

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

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

使用 RBAC(任务)

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

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

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

如何查看指定的权限

如何承担角色

如何获取管理权限

为站点定制 RBAC(任务)

初次配置 RBAC(任务列表)

如何规划 RBAC 实现

如何创建角色

如何指定角色

如何审计角色

如何创建或更改权限配置文件

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

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

管理 RBAC(任务)

管理 RBAC(任务列表)

如何更改角色的口令

如何更改角色的安全属性

如何更改用户的 RBAC 属性

如何将用户限于桌面应用程序

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

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

如何将 root 角色更改为用户

使用特权(任务)

确定您的特权(任务列表)

如何列出系统上的特权

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

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

管理特权(任务列表)

如何确定进程的特权

如何确定程序所需的特权

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

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

第 4 部分加密服务

11.  加密框架(概述)

12.  加密框架(任务)

13.  密钥管理框架

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

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

15.  使用 PAM

16.  使用 SASL

17.  使用 安全 Shell(任务)

18.  安全 Shell(参考)

第 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. 创建角色。
创建角色并将角色指定给用户
(建议)审计角色操作。
预选包括记录角色操作的审计事件的审计类。
创建或更改权限配置文件。
创建权限配置文件。或修改权限配置文件中的安全属性或补充权限配置文件。

将特权添加到命令中。

确保传统应用程序安全
为传统应用程序启用 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. 成为具有所需安全属性的管理员。

    有关更多信息,请参见如何获取管理权限

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

    该命令的 RBAC 参数如下所示:

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

    角色到期的日期。使用该选项可以创建临时角色。

    -f inactive

    连续两次使用同一角色之间的时间间隔所允许的最大天数。当超出 inactive 值时,无法使用该角色。缺省值为 0,没有失效日期。

    -m

    在缺省位置为 rolename 创建起始目录。

    -s shell

    rolename 的登录 shell。此 shell 必须是配置文件 shell。有关配置文件 shell 的列表,请参见 pfexec(1) 手册页。


    提示 - ls /usr/bin/pf*sh 中一样,您还可以列出系统 /usr/bin 目录中的配置文件 shell。


    -S repository

    filesldap 之一。缺省值为本地文件。

    -A authorization-list

    是一个或多个授权(以逗号分隔)。有关授权的列表,请参见 /etc/security/auth_attr 文件。

    -K key=value

    key=value 对。可以重复该选项。提供以下密钥:audit_flags authsprofilesproject defaultprivlimitprivlock_after_retriesroleauth。有关设置值所需的密钥、密钥值以及授权的信息,请参见 user_attr(4) 手册页。

    rolename

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


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


    例如,以下命令可以创建一个本地 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
  3. 为该角色创建初始口令。
    # passwd -r files useradmPassword: <Type useradm password>
    Confirm Password: <Retype useradm password>
    #

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


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

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

示例 9-7 在 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-8 创建角色以实现职责分离

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

# 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-9 创建 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(用户安全)权限配置文件。只有超级用户才能修改用户的审计标志。要修改其他属性,必须为您指定 User Management(用户管理)权限配置文件。

  1. 成为具有所需安全属性的管理员。

    有关更多信息,请参见如何获取管理权限

  2. 将角色指定给用户。
    usermod [-S repository] [RBAC-arguments] login

    例如,将角色给本地用户。

    # usermod -R +useradm jdoe-local

    有关 usermod 命令的选项的信息,请参见 usermod(1M) 手册页或如何创建角色步骤 2 的介绍。

  3. 要使更改生效,请重新启动名称服务高速缓存守护进程。
    # svcadm restart system/name-service-cache

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

在以下示例中,LDAP 网络的管理员会创建一个角色以管理加密框架,并将该角色指定给 UID 1111。管理员重新启动 nscd 守护进程以使指定生效。

# 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
# svcadm restart system/name-service-cache

具有 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(审计控制)权限配置文件。

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

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

  2. 成为具有所需安全属性的管理员。

    有关更多信息,请参见如何获取管理权限

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

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

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

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

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

如何创建或更改权限配置文件

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

创建新的权限配置文件的最简单方法是复制并修改现有的权限配置文件。

开始之前

要创建或更改权限配置文件,必须为您指定 File Security(文件安全)权限配置文件。

  1. 成为具有所需安全属性的管理员。

    有关更多信息,请参见如何获取管理权限

  2. 通过现有的配置文件创建新的权限配置文件。
    # profiles [-S repository] existing-profile-name

    此时会提示您输入新名称。现有权限配置文件的内容会被复制到新的配置文件中。

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

    添加或删除补充权限配置文件、授权以及其他安全属性,如以下示例中所示。

示例 9-11 通过现有的配置文件创建新的权限配置文件

在以下示例中,管理员在 LDAP 系统信息库中定制 Console User(控制台用户)权限配置文件。

# profiles -S ldap Console User
New name: ExampleCo Console User
ExampleCo Console User >
Description > Manage MyCompany Systems as the Console User
Help > ExCoConsUser.html

管理员设置此权限配置文件的 roleauth 属性。

roleauth=yes

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

在以下示例中,详尽测试后,安全管理员从分配有 SunRayUser 权限配置文件的所有用户中删除基本特权。防止这些用户使用 proc_session 特权。即,这些用户无法检查用户当前会话之外的任何进程。

$ profiles -K defaultpriv=basic,!proc_session SunRayUser

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

在以下示例中,详尽测试后,安全管理员从分配有 SunRayUser 权限配置文件的所有用户中删除限制特权。此删除行为可防止这些用户查看其他用户的进程。

$ profiles -K limitpriv=all,!proc_session SunRayUser

示例 9-14 将特权添加到命令中

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

# 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 和特权指定故障。有关背景的信息,请参见搜索指定安全属性的顺序

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

传统应用程序是一个命令或一组命令。先针对权限配置文件中的每个命令设置安全属性。然后,在角色中包括该权限配置文件。承担该角色的用户便可以运行具有安全属性的传统应用程序。

开始之前

要创建权限配置文件,必须为您指定 Information Security(信息安全)或 Rights Management(权限管理)权限配置文件。要指定权限配置文件,必须为您指定 User Security(用户安全)权限配置文件。

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

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

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

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

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

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

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

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

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

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

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

要检查脚本授权,需要添加一项基于 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. 验证用户或角色的安全指定是否位于在系统上启用的命名服务中。
    2. 重新启动名称服务高速缓存 svc:/system/name-service/cache

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

  2. 确定指定安全属性的位置。

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

    # userattr -v audit_flags jdoe Modifications to the system defaults
    user_attr: fw:no
    # userattr -v auths jdoe Assigned authorizations
    solaris.admin.wusb.read,solaris.device.cdrw,solaris.device.mount.removable,
    solaris.mail.mailq,solaris.profmgr.read,solaris.smf.manage.audit,
    solaris.smf.value.audit
    # userattr -v audit_flags jdoe Modifications to audit preselection mask
    # userattr -v auths jdoe Assigned authorizations
    # userattr -v defaultpriv jdoe Modifications to basic user privileges
    # userattr -v limitpriv jdoe Modifications to limit privileges 
    # userattr -v lock_after_retries jdoe Automatic lockout attribute
    # userattr -v profiles jdoe Assigned rights profiles
    user_attr: Audit Review,Stop
    # userattr roles jdoe Assigned roles
    user_attr : cryptomgt,infosec
  3. 对于所创建的权限配置文件,请验证是否将相应的安全属性指定给命令。

    例如,为能够成功运行,某些命令要求 uid=0,而非 euid=0。一些命令的各个方面都需要授权。

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

      请使用 userattr 命令。

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

        该列表中最早权限配置文件中的属性值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。

        对于特权命令,请检查是否在 defaultpriv 关键字中指定了特权。该指定是对特定命令的特权的补充。

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

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

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

    注 - 一些命令的各个方面都需要授权。最佳做法是指定包括管理命令的权限配置文件,而非直接指定特权。


    查看包括管理命令的权限配置文件。如果存在包括授权的权限配置文件,请将该权限配置文件指定给用户,而不是简单的指定特权。将该权限配置文件放在所有包括该命令的其他权限配置文件之前。

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

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

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

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

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

        权限配置文件列表中最早的值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。

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

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

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

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

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

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

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

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

      权限配置文件列表中最早的值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。