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

词汇表

索引

使用特权(任务)

特权允许用户以管理权限执行特定的任务。特权还可用来限制用户,以便仅允许他们执行许可他们执行的任务。

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

任务
说明
参考
查看定义的特权。
列出 Oracle Solaris 中的特权及其定义。
查看您作为用户在任何 shell 中的特权。
显示直接指定给您的特权。您运行的所有进程都将以这些特权运行。
查看您在某配置文件 shell 中的特权命令。
显示您可以通过指定权限配置文件运行的特权命令。
在对应用程序的攻击成功的情况下,限制攻击者的系统访问权限。
通过向 NTP 端口应用扩展权限策略,保护系统免遭攻击。
确定进程中的特权。
列出进程的有效特权集、可继承特权集、允许特权集和限制特权集。
确定进程中缺少的特权。
列出成功运行失败进程所需的特权。
在对应用程序的攻击成功的情况下,限制攻击者的系统访问权限。
为 NTP 服务创建扩展策略。
为命令添加特权。
在权限配置文件中为命令添加特权。可以为用户或角色指定权限配置文件。然后,用户可以在配置文件 shell 中运行具有指定特权的命令。
为用户或角色指定特权。
扩展用户或角色的可继承特权集。使用此过程时应谨慎。
限制用户的特权。
限制用户的基本特权集。使用此过程时应谨慎。
运行特权 shell 脚本。
为 shell 脚本和 shell 脚本中的命令添加特权。然后,在配置文件 shell 中运行此脚本。

如何列出系统上的特权

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

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

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


注意

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


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

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

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

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

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

在此示例中,直接为用户指定了 proc_clock_highres 特权,因此该特权在用户拥有的每个进程中都可用。

% 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-34 确定直接指定给角色的特权

在以下示例中,已经直接将处理日期和时间程序的特权指定给角色 realtime

% su - realtime
Password: <Type realtime password>
$ 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-35 确定角色的特权命令

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

% 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-36 运行您的角色中的特权命令

在以下示例中,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>
$ chgrp admin useful.script
$ chown admin useful.script
$ ls -l useful.script
-rwxr-xr-- 1 admin admin 262 Apr 2 10:53 useful.script

如何确定进程的特权

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

示例 9-37 确定当前 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-38 确定可承担的角色的特权

在以下示例中,角色 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-39 使用 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-40 使用 ppriv 命令在配置文件 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-41 更改 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

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

用于网络时间协议 (Network Time Protocol, NTP) 的服务使用特权端口 123 进行 udp 通信。以下过程可保护其他端口免受获得了此端口的特权的恶意用户访问。

  1. 读取此端口的缺省服务清单项。

    在下面的 /lib/svc/manifest/network/ntp.xml 项中,可能其他进程也使用 net_privaddrproc_lock_memorysys_time 特权:

    privileges='basic,!file_link_any,!proc_info,!proc_session,
    net_privaddr,proc_lock_memory,sys_time'

    删除的特权是为了防止该服务向任何其他进程发送信号或观察其他进程,并防止以创建硬链接的方式来重命名文件。

    也就是说,由该服务启动的进程只能绑定到特定的端口 123,而不能绑定到任何其他特权端口。如果黑客可以利用该服务启动其他进程,其子进程也无法绑定到任何其他特权端口。

  2. net_privaddr 特权限定于此端口。

    以下摘录中突出显示的扩展特权策略可防止从该服务访问其他特权端口:

    privileges='basic,!file_link_any,!proc_info,!proc_session,
    {net_privaddr}:123/udp,proc_lock_memory,sys_time'

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

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

开始之前

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

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

    有关更多信息,请参见如何使用指定给您的管理权限

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

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

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

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