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

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

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

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

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

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

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

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

7.  使用自动安全性增强工具(任务)

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

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

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

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

11.  特权(任务)

管理和使用特权(任务列表)

管理特权(任务列表)

管理特权

如何确定进程的特权

如何确定程序所需的特权

如何为命令添加特权

如何将特权指定给用户或角色

如何限制用户或角色的特权

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

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

确定已指定给您的特权

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

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

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

12.  特权(参考)

第 4 部分加密服务

13.  Oracle Solaris 加密框架(概述)

14.  Oracle Solaris 加密框架(任务)

15.  Oracle Solaris 密钥管理框架

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

16.  使用验证服务(任务)

17.  使用 PAM

18.  使用 SASL

19.  使用 Oracle Solaris 安全 Shell(任务)

20.  Oracle Solaris 安全 Shell(参考)

第 6 部分Kerberos 服务

21.  Kerberos 服务介绍

22.  规划 Kerberos 服务

23.  配置 Kerberos 服务(任务)

24.  Kerberos 错误消息和故障排除

25.  管理 Kerberos 主体和策略(任务)

26.  使用 Kerberos 应用程序(任务)

27.  Kerberos 服务(参考)

第 7 部分Oracle Solaris 审计

28.  Oracle Solaris 审计(概述)

29.  规划 Oracle Solaris 审计

30.  管理 Oracle Solaris 审计(任务)

31.  Oracle Solaris 审计(参考)

词汇表

索引

管理特权

管理用户和角色特权的最安全的方法是将特权使用限制在权限配置文件内的命令中。然后,在角色中包括该权限配置文件。此角色会指定给某个用户。当此用户承担指定的角色时,特权命令便可在配置文件 shell 中运行。以下过程说明了如何指定特权、删除特权以及调试特权使用。

如何确定进程的特权

此过程说明如何确定可用于进程的特权。列出内容不包括已经指定给特定命令的特权。

示例 11-1 确定当前 shell 中的特权

在以下示例中,列出了用户 shell 进程的父进程中的特权。在下面第二个示例中,列出了特权的全名。输出中的单个字母指代以下特权集:

E

有效特权集。

I

可继承特权集。

P

允许特权集。

L

限制特权集。

% ppriv $$
1200:   -csh
flags = <none>
        E: basic
        I: basic
        P: basic
        L: all
% ppriv -v $$
1200:   -csh
flags = <none>
        E: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        I: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        P: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time

示例 11-2 确定可承担的角色的特权

角色使用管理 shell 或配置文件 shell。必须承担角色并使用此角色的 shell 列出已直接指定给此角色的特权。在以下示例中,角色 sysadmin 不具有直接指定的特权。

% su - sysadmin
Password: <Type sysadmin password>
$ /usr/ucb/whoami
sysadmin
$ ppriv -v $$
1400:   pfksh
flags = <none>
        E: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        I: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        P: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time

如何确定程序所需的特权

此过程可确定成功运行命令或进程所需的特权。

开始之前

此过程必须在命令或进程已经失败后才有效。

  1. 键入失败的命令作为 ppriv 调试命令的参数。
    % ppriv -eD touch /etc/acct/yearly
    touch[11365]: missing privilege "file_dac_write" 
         (euid = 130, syscall = 224) needed at ufs_direnter_cm+0x27c
    touch: /etc/acct/yearly cannot create
  2. 通过在 /etc/name_to_sysnum 文件中查找 syscall 编号来确定失败的系统调用。
    % grep 224 /etc/name_to_sysnum
    creat64                 224

示例 11-3 使用 truss 命令检查特权使用

truss 命令可以在常规 shell 中调试特权使用。例如,以下命令调试失败的 touch 进程:

% truss -t creat touch /etc/acct/yearly
creat64("/etc/acct/yearly", 0666)            
                       Err#13 EACCES [file_dac_write]
touch: /etc/acct/yearly cannot create

扩展的 /proc 接口在 truss 输出中的错误代码后面报告缺少的特权。

示例 11-4 使用 ppriv 命令在配置文件 Shell 中检查特权使用

ppriv 命令可以在配置文件 shell 中调试特权使用。如果为用户指定了权限配置文件,并且此权限配置文件包括具有特权的命令,则必须在配置文件 shell 中键入这些命令。在常规 shell 中键入特权命令时,这些命令执行时不会使用特权。

在此示例中,jdoe 用户可以承担角色 objadminobjadmin 角色拥有 Object Access Management(对象访问管理)权限配置文件。使用此权限配置文件,objadmin 角色可以更改不属于 objadmin 的文件的权限。

在以下摘录中,jdoe 无法更改 useful.script 文件的权限:

jdoe% ls -l useful.script
-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script
jdoe% chown objadmin useful.script
chown: useful.script: Not owner
jdoe% ppriv -eD chown objadmin useful.script
chown[11444]: missing privilege "file_chown" 
            (euid = 130, syscall = 16) needed at ufs_setattr+0x258
chown: useful.script: Not owner

jdoe 承担 objadmin 角色时,更改了该文件的权限:

jdoe% su - objadmin
Password: <Type objadmin password>
$ ls -l useful.script
-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script
$ chown objadmin useful.script
$ ls -l useful.script
-rw-r--r--  1 objadmin  staff  2303 Apr 10 10:10 useful.script
$ chgrp admin useful.script
$ ls -l objadmin.script
-rw-r--r--  1 objadmin  admin  2303 Apr 10 10:11 useful.script

示例 11-5 更改 root 用户拥有的文件

此示例说明了防止特权升级的方法。有关讨论,请参见防止特权升级。此文件归 root 用户所有。由于权限较低的 objadmin 角色需要所有特权才能更改文件的所有权,因此操作失败。

jdoe% su - objadmin
Password: <Type objadmin password>
$ cd /etc; ls -l system
-rw-r--r--  1 root  sys   1883 Oct 10 10:20 system
$ chown objadmin system
chown: system: Not owner
$ ppriv -eD chown objadmin system
chown[11481]: missing privilege "ALL" 
     (euid = 101, syscall = 16) needed at ufs_setattr+0x258
chown: system: Not owner

如何为命令添加特权

应在将命令添加到权限配置文件时为该命令添加特权。使用这些特权,具有权限配置文件的角色可以运行管理命令,但不会获得任何其他超级用户功能。

开始之前

命令或程序必须可识别特权。有关更全面的讨论,请参见进程如何获取特权

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 打开 Solaris Management Console GUI。

    有关说明,请参见如何在 Solaris Management Console 中承担角色

  3. 使用 Rights(权限)工具更新相应的配置文件。

    选择要包括的命令。对于每个包括的命令,添加此命令所需的特权。


    注意

    注意 - 在权限配置文件中包括命令并为命令添加特权后,这些命令在配置文件 shell 中运行时会使用这些特权执行。

    配置文件的顺序很重要。配置文件 shell 使用帐户配置文件列表中最早的配置文件中指定的安全属性执行命令或操作。例如,如果 chgrp 命令位于具有特权的 Object Access Management(对象访问管理)权限配置文件中,并且 Object Access Management(对象访问管理)配置文件是包含 chgrp 命令的第一个配置文件,则 chgrp 命令执行时使用在 Object Access Management(对象访问管理)配置文件中指定的特权。


如何将特权指定给用户或角色

您可能始终信任某些具有特定特权的用户。影响系统的一小部分的非常有针对性特权适合指定给用户。有关直接指定特权所涉及内容的讨论,请参见直接指定安全属性时的安全注意事项

用户 jdoe 可通过以下过程使用高精度计时器。

  1. 承担 Primary Administrator(主管理员)角色,或成为超级用户。

    Primary Administrator(主管理员)角色拥有 Primary Administrator(主管理员)配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 "使用 Solaris Management Console(任务)"

  2. 将影响高精度时间的特权添加到用户的初始可继承特权集中。
    $ usermod -K defaultpriv=basic,proc_clock_highres jdoe

    defaultpriv 关键字的值将替换现有的值。因此,对于要保留 basic(基本)特权的用户,必须指定值 basic。在缺省配置中,所有用户都拥有基本特权。

  3. 读取产生的 user_attr 项。
    $ grep jdoe /etc/user_attr
    jdoe::::type=normal;defaultpriv=basic,proc_clock_highres

示例 11-6 创建具有特权的角色来配置系统时间

此示例创建了一个角色,其唯一任务是处理系统上的时间。

$ /usr/sadm/bin/smrole -D nisplus:/examplehost/example.domain \
-r primaryadm -l <Type primaryadm password> \
add -- -n clockmgr \
-c "Role that sets system time" \
-F "Clock Manager" \
-s /bin/pfksh \
-u 108 \
-P <Type clockmgr password> \
-K defaultpriv=basic,proc_priocntl,sys_cpu_config,
proc_clock_highres,sys_time

根据显示的需要,-K 行进行了换行。

如果角色是在本地创建的,则此角色的 user_attr 项的显示将类似如下:

clockmgr:::Role that sets system time:
type=role;defaultpriv=basic,proc_priocntl,sys_cpu_config,
proc_clock_highres,sys_time

如何限制用户或角色的特权

可以通过减少基本特权集或减少限制特权集来限制可供用户或角色使用的特权。由于此类限制可能产生预料不到的副作用,因此不是非常必要时不要使用这种方法限制用户的特权。


注意

注意 - 为某个用户修改了基本特权集或限制特权集时,应该彻底测试任何用户的功能。

  • 当基本特权集少于缺省值时,可阻止用户使用系统。

  • 当限制特权集少于所有特权时,需要使用有效 UID=0 运行的进程可能会失败。


  1. 确定用户基本特权集和限制特权集中的特权。

    有关过程,请参见如何确定进程的特权

  2. 可选从基本特权集中删除某个特权。
    $ usermod -K defaultpriv=basic,!priv-name username

    通过删除 proc_session 特权,可以防止用户检查其当前会话以外的任何进程。通过删除 file_link_any 特权,可以防止用户生成指向不归其所有的文件的硬链接。


    注意

    注意 - 请勿删除 proc_forkproc_exec 特权。如果没有这些特权,用户将无法使用系统。事实上,只能从不对其他进程执行 fork()exec() 操作的守护进程中删除这两个特权。


  3. 可选从限制特权集中删除某一项特权。
    $ usermod -K limitpriv=all,!priv-name username
  4. 测试 username 的功能。

    username 身份登录,并尝试执行 username 必须在系统上执行的任务。

示例 11-7 从用户的限制特权集中删除特权

在以下示例中,防止所有源自 jdoe 初始登录的会话使用 sys_linkdir 特权。也就是说,即使在用户运行 su 命令之后,也不能生成指向目录的硬链接,并且也不能解除目录链接。

$ usermod -K limitpriv=all,!sys_linkdir jdoe
$ grep jdoe /etc/user_attr
jdoe::::type=normal;defaultpriv=basic;limitpriv=all,!sys_linkdir

示例 11-8 从用户的基本特权集中删除特权

在以下示例中,防止所有源自 jdoe 初始登录的会话使用 proc_session 特权。也就是说,即使在用户运行 su 命令之后,也不能检查此用户会话以外的任何进程。

$ usermod -K defaultpriv=basic,!proc_session jdoe
$ grep jdoe /etc/user_attr
jdoe::::type=normal;defaultpriv=basic,!proc_session;limitpriv=all

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


注 - 创建运行具有继承特权的命令的 shell 脚本时,相应的权限配置文件必须包含具有指定特权的命令。


  1. /bin/pfsh 或任何其他配置文件 shell 放在脚本的第一行。
    #!/bin/pfsh
    # Copyright (c) 2009, 2011 by Oracle Corporation
  2. 确定脚本中的命令所需的特权。
    % ppriv -eD script-full-path
  3. 打开 Solaris Management Console GUI。

    有关说明,请参见如何在 Solaris Management Console 中承担角色。选择可以创建权限配置文件的角色,如 Primary Administrator(主管理员)。

  4. 使用 Rights(权限)工具创建或更新相应的配置文件。

    选择脚本,并在权限配置文件中包括需要特权才能运行的 shell 脚本中的每个命令。对于每个包括的命令,添加此命令所需的特权。


    注意

    注意 - 权限配置文件的顺序很重要。配置文件 shell 执行配置文件列表中最早的命令实例。例如,如果 chgrp 命令位于 Object Access Management(对象访问管理)权限配置文件中,并且 Object Access Management(对象访问管理)配置文件是包含 chgrp 命令的第一个配置文件,则 chgrp 命令执行时使用在 Object Access Management(对象访问管理)配置文件中指定的特权。


  5. 将权限配置文件添加到某个角色中,并将此角色指定给用户。

    为了执行配置文件,用户将承担该角色,并在该角色的配置文件 shell 中运行脚本。