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

词汇表

索引

使用特权(任务)

以下任务列表指出了有关在系统上管理和使用特权的逐步说明。

任务
说明
参考
运行命令时使用特权。
涉及列出已指定给您的特权以及在系统上可用的特权。
在站点上使用特权。
涉及指定、删除、添加和调试特权使用。

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

直接将特权指定给用户时,这些特权在每个 shell 中都有效。未直接将特权指定给用户时,用户必须打开一个配置文件 shell。例如,当具有指定特权的命令位于用户权限配置文件列表内的权限配置文件中时,用户必须在配置文件 shell 中执行此命令。

以下任务列表列出了有关查看已指定给您的特权的过程。

任务
说明
参考
查看定义的特权。
列出 Oracle Solaris 特权及其定义。
查看您作为用户在任何 shell 中的特权。
显示直接指定给您的特权。您运行的所有进程都将以这些特权运行。
查看您在某配置文件 shell 中的特权命令。
显示您可以通过指定权限配置文件运行的特权命令。
查看您作为角色在任何 shell 中的特权。
显示您的角色可以通过指定的权限配置文件运行的特权命令。

如何列出系统上的特权

以下过程显示如何查看特权名称和定义。

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

以下过程说明如何确定是否已直接为您指定了特权。


注意

注意 - 不当使用直接指定的特权可能导致无意中破坏安全性。有关讨论,请参见直接指定安全属性时的安全注意事项


  1. 列出您运行的进程可以使用的特权。

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

  2. 在任何 shell 中调用操作并运行命令。

    有效特权集中列出的特权在整个会话中都有效。如果已为您直接指定了除基本特权集之外的特权,则会在有效特权集中列出这些特权。

示例 9-30 确定直接指定给您的特权

如果已经为您直接指定了特权,则基本特权集包含的特权会多于缺省的基本特权集。在此示例中,用户始终能够访问 proc_clock_highres 特权。

% /usr/bin/whoami
jdoe
% ppriv -v $$
1800:   pfksh
flags = <none>
        E: file_link_any,…,proc_clock_highres,proc_session
        I: file_link_any,…,proc_clock_highres,proc_session
        P: file_link_any,…,proc_clock_highres,proc_session
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time
% ppriv -vl proc_clock_highres
        Allows a process to use high resolution timers.

示例 9-31 确定直接指定给角色的特权

角色使用管理 shell 或配置文件 shell。承担角色的用户可以使用此角色的 shell 列出已直接指定给此角色的特权。在以下示例中,已经直接将处理日期和时间程序的特权指定给角色 realtime

% su - realtime
Password: <Type realtime password>
$ /usr/bin/whoami
realtime
$ ppriv -v $$
1600:   pfksh
flags = <none>
        E: file_link_any,…,proc_clock_highres,proc_session,sys_time
        I: file_link_any,…,proc_clock_highres,proc_session,sys_time
        P: file_link_any,…,proc_clock_highres,proc_session,sys_time
        L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time

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

未直接将特权指定给用户时,此用户可通过权限配置文件获取对特权命令的访问权限。必须在配置文件 shell 中执行权限配置文件中的命令。

  1. 确定已指定给您的权限配置文件。
    % profiles
    Audit Review
    Console User
    Suspend To RAM
    Suspend To Disk
    Brightness
    CPU Power Management
    Network Autoconf
    Desktop Print Management
    Network Wifi Info
    Desktop Removable Media User
    Basic Solaris User
    All
  2. 确定您的 Audit Review(审计查看)配置文件权限。
    profiles -l
    Audit Review
    
      solaris.audit.read
      
      /usr/sbin/auditreduce  euid=0
      /usr/sbin/auditstat    euid=0
      /usr/sbin/praudit      euid=0

    通过 Audit Review(审计查看)权限配置文件,您可以使用有效 UID 0 运行 auditreduceauditstatpraudit 命令,并为您指定 solaris.audit.read 授权。

示例 9-32 确定角色的特权命令

在以下示例中,用户将承担指定的角色并列出其中一个权限配置文件中包括的命令。

% roles
devadmin
% su - devadmin
Password: Type devadmin password
$ profiles -l
Device Security
          /usr/bin/kbd        uid=0;gid=sys
          /usr/sbin/add_allocatable    euid=0
          /usr/sbin/add_drv        uid=0
          /usr/sbin/devfsadm        uid=0
          /usr/sbin/eeprom        uid=0
          /usr/sbin/list_devices        euid=0
          /usr/sbin/rem_drv        uid=0
          /usr/sbin/remove_allocatable    euid=0
          /usr/sbin/strace        euid=0
          /usr/sbin/update_drv        uid=0

示例 9-33 运行您的角色中的特权命令

在以下示例中,admin 角色可以更改 useful.script 文件的权限。

% whoami
jdoe
% ls -l useful.script
-rwxr-xr-- 1 elsee eng 262 Apr 2 10:52 useful.script
chgrp admin useful.script
chgrp: useful.script: Not owner
% su - admin
Password: <Type admin password>
$ /usr/bin/whoami
admin
$ chgrp admin useful.script
$ chown admin useful.script
$ ls -l useful.script
-rwxr-xr-- 1 admin admin 262 Apr 2 10:53 useful.script

管理特权(任务列表)

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

以下任务列表列出了有关指定、删除和调试特权以及运行包含特权命令的脚本的过程。

任务
说明
参考
确定进程中的特权。
列出进程的有效特权集、可继承特权集、允许特权集和限制特权集。
确定进程中缺少的特权。
列出成功运行失败进程所需的特权。
为命令添加特权。
在权限配置文件中为命令添加特权。可以为用户或角色指定权限配置文件。然后,用户可以在配置文件 shell 中运行具有指定特权的命令。
为用户或角色指定特权。
扩展用户或角色的可继承特权集。使用此过程时应谨慎。
限制用户的特权。
限制用户的基本特权集。使用此过程时应谨慎。
运行特权 shell 脚本。
为 shell 脚本和 shell 脚本中的命令添加特权。然后,在配置文件 shell 中运行此脚本。

如何确定进程的特权

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

示例 9-34 确定当前 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

示例 9-35 确定可承担的角色的特权

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

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

如何确定程序所需的特权

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

开始之前

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

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

示例 9-36 使用 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 输出中的错误代码后面报告缺少的特权。

示例 9-37 使用 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 zfs_zaccess+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

示例 9-38 更改 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 zfs_zaccess+0x258
chown: system: Not owner

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


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


开始之前

您必须是 root 角色。

  1. /bin/pfsh 或任何其他配置文件 shell 放在脚本的第一行。
    #!/bin/pfsh
    # Copyright (c) 2011 by Oracle
  2. 确定脚本中的命令所需的特权。
    % ppriv -eD script-full-path
  3. 成为具有所需安全属性的管理员。

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

  4. 创建或修改脚本的权限配置文件。

    您需要将 shell 脚本、该脚本中的命令以及所需的安全属性添加到权限配置文件中。有关步骤,请参见如何创建或更改权限配置文件

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

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