跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:安全服务 Oracle Solaris 11 Information Library (简体中文) |
|
直接将特权指定给用户时,这些特权在每个 shell 中都有效。未直接将特权指定给用户时,用户必须打开一个配置文件 shell。例如,当具有指定特权的命令位于用户权限配置文件列表内的权限配置文件中时,用户必须在配置文件 shell 中执行此命令。
|
以下过程显示如何查看特权名称和定义。
% man privileges Standards, Environments, and Macros privileges(5) NAME privileges - process privilege model ... The defined privileges are: PRIV_CONTRACT_EVENT Allow a process to request reliable delivery of events to an event endpoint. Allow a process to include events in the critical event set term of a template which could be generated in volume by the user. ...
此特权格式由开发者使用。
% ppriv -lv | more contract_event Allows a process to request critical events without limitation. Allows a process to request reliable delivery of all events on any event queue. ... win_upgrade_sl Allows a process to set the sensitivity label of a window resource to a sensitivity label that dominates the existing sensitivity label. This privilege is interpreted only if the system is configured with Trusted Extensions.
此特权格式用于通过使用 useradd、roleadd、usermod 和 rolemod 命令将特权指定给用户和角色,以及使用 profiles 命令将特权指定给权限配置文件。
以下过程说明如何确定是否已直接为您指定了特权。
有关过程,请参见如何确定进程的特权。
有效特权集中列出的特权在整个会话中都有效。如果已为您直接指定了除基本特权集之外的特权,则会在有效特权集中列出这些特权。
示例 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 中执行权限配置文件中的命令。
% 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
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 运行 auditreduce、auditstat 和 praudit 命令,并为您指定 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 中运行。以下过程说明了如何指定特权、删除特权以及调试特权使用。
以下任务列表列出了有关指定、删除和调试特权以及运行包含特权命令的脚本的过程。
|
此过程说明如何确定可用于进程的特权。列出内容不包括已经指定给特定命令的特权。
% ppriv pid $ ppriv -v pid
进程号。使用双美元符号 ($$) 将父 shell 的进程号传递给命令。
提供特权名称的详细列表。
示例 9-34 确定当前 shell 中的特权
在以下示例中,列出了用户 shell 进程的父进程中的特权。在下面第二个示例中,列出了特权的全名。输出中的单个字母指代以下特权集:
有效特权集。
可继承特权集。
允许特权集。
限制特权集。
% 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
开始之前
此调试过程必须在命令或进程失败后才有效。
% 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
% 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 用户可以承担角色 objadmin。objadmin 角色拥有 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 脚本时,相应的权限配置文件必须包含具有指定特权的命令。
开始之前
您必须是 root 角色。
#!/bin/pfsh # Copyright (c) 2011 by Oracle
% ppriv -eD script-full-path
有关更多信息,请参见如何获取管理权限。
您需要将 shell 脚本、该脚本中的命令以及所需的安全属性添加到权限配置文件中。有关步骤,请参见如何创建或更改权限配置文件。
为了运行脚本,用户将承担该角色,并在该角色的配置文件 shell 中运行脚本。
要向角色添加权限配置文件,请参见如何更改角色的安全属性。
要将角色指定给用户,请参见示例 9-20。