跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 管理:安全服务 Oracle Solaris 11.1 Information Library (简体中文) |
特权允许用户以管理权限执行特定的任务。特权还可用来限制用户,以便仅允许他们执行许可他们执行的任务。
以下任务列表指出了有关在系统上查看、管理和使用特权的逐步说明。
|
以下过程显示如何查看特权名称和定义。
% 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-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 中执行权限配置文件中的命令。
在以下示例中,为用户指定了多个权限配置文件。系统按顺序读取权限配置文件及其内容。对于除授权以外的所有属性,第一个显式设置的属性值是要使用的值。有关更多信息,请参见搜索指定安全属性的顺序。
% 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-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 进程的父进程中的特权。在下面第二个示例中,列出了特权的全名。输出中的单个字母指代以下特权集:
有效特权集。
可继承特权集。
允许特权集。
限制特权集。
% 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
开始之前
此调试过程必须在命令或进程失败后才有效。
% 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-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 用户可以承担角色 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-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 通信。以下过程可保护其他端口免受获得了此端口的特权的恶意用户访问。
在下面的 /lib/svc/manifest/network/ntp.xml 项中,可能其他进程也使用 net_privaddr、proc_lock_memory 和 sys_time 特权:
privileges='basic,!file_link_any,!proc_info,!proc_session, net_privaddr,proc_lock_memory,sys_time'
删除的特权是为了防止该服务向任何其他进程发送信号或观察其他进程,并防止以创建硬链接的方式来重命名文件。
也就是说,由该服务启动的进程只能绑定到特定的端口 123,而不能绑定到任何其他特权端口。如果黑客可以利用该服务启动其他进程,其子进程也无法绑定到任何其他特权端口。
以下摘录中突出显示的扩展特权策略可防止从该服务访问其他特权端口:
privileges='basic,!file_link_any,!proc_info,!proc_session, {net_privaddr}:123/udp,proc_lock_memory,sys_time'
创建运行需要特权的命令的 shell 脚本时,相应的权限配置文件必须包含具有指定特权的命令。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
#!/bin/pfsh # Copyright (c) 2012 by Oracle
% ppriv -eD script-full-path
有关更多信息,请参见如何使用指定给您的管理权限。
将 shell 脚本、该 shell 脚本中的命令以及所需的安全属性添加到权限配置文件中。有关步骤,请参见如何创建权限配置文件。
为了运行脚本,用户将承担该角色,并在该角色的配置文件 shell 中运行脚本。
要向角色添加权限配置文件,请参见如何更改角色的安全属性。
要将角色指定给用户,请参见如何更改用户的安全属性。