在 Oracle® Solaris 11.2 中确保用户和进程的安全

退出打印视图

更新时间: 2014 年 7 月
 
 

如何排除权限指定问题

若干因素会导致无法评估和正确应用权限。此过程有助于调试所指定的权限为何不能用于用户、角色或进程的问题。其中有多个步骤基于所指定权限的搜索顺序

开始之前

您必须承担 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_attrauth_attrprof_attr),然后再在 LDAP 中搜索。

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

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

      # svcadm restart name-service/cache
  2. 通过运行 userattr -v 命令确定为用户指定权限的位置。

    例如,以下命令指明了为用户 jdoe 指定的权限以及指定此分配的位置。无输出表示 jdoe 使用缺省值。

    % userattr -v access_times jdoe
    % userattr -v access_tz jdoe
    % userattr -v auth_profiles jdoe
    % userattr -v defaultpriv jdoe
    % userattr -v limitpriv jdoe
    % userattr -v idlecmd jdoe
    % userattr -v idletime jdoe
    % userattr -v lock_after_retries jdoe
    % userattr -v pam_policy jdoe
    
    % userattr -v auths jdoe Output indicates authorizations from rights profiles
    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 audit_flags jdoe
    user_attr: fw:no Output indicates jdoe is individually assigned audit flags
    # userattr -v profiles jdoe
    user_attr: Audit Review,Stop Output indicates two assigned rights profiles
    # userattr roles jdoe 
    user_attr : cryptomgt,infosec Output indicates two assigned roles

      输出指示 jdoe 已直接分配有审计标志、两个权限配置文件和两个角色。指定的授权来自 policy.conf 文件中的缺省权限配置文件。

    • 由于直接为 jdoe 指定了审计标志,因此将不使用权限配置文件中的审计标志值。

    • 将按顺序评估权限配置文件,首先是 "Audit Review"(审计查看)权限配置文件,然后是 "Stop"(停止)配置文件。

    • 指定给 jdoe 的其他所有权限位于角色 cryptomgtinfosec 中。要查看这些权限,jdoe 必须承担每个角色,然后列出这些权限。

    如果权限未直接指定给用户,请继续以下检查。

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

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

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

    例如,要成功运行某些命令,需要 uid=0,而非 euid=0。要判断命令或其任何选项是否需要授权,请查看命令的手册页。

  5. 检查用户权限配置文件中的权限。
    1. 按顺序检查需要验证权限配置文件列表中的权限。

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

      对于特权命令,检查未使用 defaultprivlimitpriv 关键字删除特权。

    2. 按顺序检查常规权限配置文件列表中的权限。

      执行的检查与对需要验证权限配置文件执行的检查相同。

    3. 如果未列出您搜索的权限,请检查为用户指定的角色。

      如果权限已指定给一个角色,则该用户只有承担该角色才能获取权限。

  6. 检查失败的命令是否需要授权才能成功执行。
    1. 检查现有的权限配置文件是否包含需要的授权。

      如果存在,请使用该配置文件。将其作为需要验证权限配置文件或常规权限配置文件指定给用户。将该配置文件放在需要该授权才能成功执行的命令所在的其他所有权限配置文件之前。

    2. 检查命令的选项是否需要授权。

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

  7. 如果用户仍无法成功执行命令,请确认用户是否在配置文件 shell 中执行该命令。

    必须在配置文件 shell 中执行管理命令。Example 7–1 说明如何测试配置文件 shell。

      要降低用户错误的可能性,可尝试以下操作:

    • 指定一个配置文件 shell 作为用户登录 shell。

    • 告知用户在所有特权命令之前加上 pfexec 命令。

    • 提醒用户在配置文件 shell 中运行管理命令。

    • 如果站点使用角色,提醒用户在运行管理命令之前承担相应角色。有关以角色而非用户成功执行命令的示例,请参见Example 7–3

  8. 如果命令因角色问题而失败,请承担该角色并执行在检查用户权限时执行的相同步骤。
示例 7-1  判断是否使用配置文件 shell

当特权命令不起作用时,用户可测试 PRIV_PFEXEC 标志,然后运行该命令。错误消息可能不会指明该问题为特权问题。

% praudit 20120814200247.20120912213421.example-system
praudit: Cannot associate stdin with 20120814200247.20120912213421.example-system: 
Permission denied

% ppriv $$
107219: bash
flags = <none>
...

% pfbash
# ppriv $$
1072232: bash
flags = PRIV_PFEXEC
...

# praudit 20120814200247.20120912213421.example-system 
/** Command succeeds **/
示例 7-2  确定角色的特权命令

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

% roles
devadmin

% su - devadmin
Password: xxxxxxxx

# profiles -l
Device Security
        ...      
	profiles=Service Configuration
          /usr/sbin/add_drv          uid=0
          /usr/sbin/devfsadm         uid=0
                                     privs=sys_devices,sys_config,
                                           sys_resource,file_owner,
                                           file_chown,file_chown_self,
                                           file_dac_read
          /usr/sbin/eeprom           uid=0
          /usr/bin/kbd 
          /usr/sbin/list_devices     euid=0
          /usr/sbin/rem_drv          uid=0
          /usr/sbin/strace           euid=0
          /usr/sbin/update_drv       uid=0
          /usr/sbin/add_allocatable  euid=0
          /usr/sbin/remove_allocatable   euid=0
Service Configuration
          /usr/sbin/svcadm 
          /usr/sbin/svccfg
示例 7-3  运行您的角色中的特权命令

在以下示例中,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: xxxxxxxx

# chgrp admin useful.script
# chown admin useful.script
# ls -l useful.script
-rwxr-xr-- 1 admin admin 262 Apr 2 10:53 useful.script