若干因素会导致无法评估和正确应用权限。此过程有助于调试所指定的权限为何不能用于用户、角色或进程的问题。其中有多个步骤基于所指定权限的搜索顺序。
开始之前
您必须承担 root 角色。有关详细信息,请参见使用所指定的管理权限。
# 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_attr、auth_attr 及 prof_attr),然后再在 LDAP 中搜索。
nscd 守护进程可以具有很长的生存时间间隔。通过重新启动此守护进程,可使用当前数据更新该命名服务。
# svcadm restart name-service/cache
例如,以下命令指明了为用户 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 的其他所有权限位于角色 cryptomgt 和 infosec 中。要查看这些权限,jdoe 必须承担每个角色,然后列出这些权限。
如果权限未直接指定给用户,请继续以下检查。
授权指定的来源并不重要,因为会为用户累积授权。不过,拼写错误的授权将失败,且不会进行提示。
例如,要成功运行某些命令,需要 uid=0,而非 euid=0。要判断命令或其任何选项是否需要授权,请查看命令的手册页。
该列表中最早的权限配置文件中的属性值是内核中的值。如果该值不正确,请在该权限配置文件中更改该值,或者按正确顺序重新指定配置文件。请参见如何对指定的权限重新排序。
执行的检查与对需要验证权限配置文件执行的检查相同。
如果权限已指定给一个角色,则该用户只有承担该角色才能获取权限。
如果存在,请使用该配置文件。将其作为需要验证权限配置文件或常规权限配置文件指定给用户。将该配置文件放在需要该授权才能成功执行的命令所在的其他所有权限配置文件之前。
将特权指定给需要它的命令,添加所需的授权,将命令和授权置于一个权限配置文件中,然后将该配置文件指定给用户。
必须在配置文件 shell 中执行管理命令。Example 7–1 说明如何测试配置文件 shell。
要降低用户错误的可能性,可尝试以下操作:
指定一个配置文件 shell 作为用户登录 shell。
告知用户在所有特权命令之前加上 pfexec 命令。
提醒用户在配置文件 shell 中运行管理命令。
如果站点使用角色,提醒用户在运行管理命令之前承担相应角色。有关以角色而非用户成功执行命令的示例,请参见Example 7–3。
当特权命令不起作用时,用户可测试 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