Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1316180
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-10 15:58:05

 
管理权限
第11 章• 权限(任务) 229
sysadmin
$ ppriv -v $$
1400: pfksh
flags =
E: file_link_any,proc_exec,proc_fork,proc_info,proc_session
I: file_link_any,proc_exec,proc_fork,proc_info,proc_session
P: file_link_any,proc_exec,proc_fork,proc_info,proc_session
L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,...,sys_time
 如何确定程序所需的权限
此过程确定成功运行命令或进程所需的权限。
命令或进程必须已经失败,才执行此过程。
键入失败的命令作为ppriv 调试命令的参数。
% ppriv -eD touch /etc/acct/yearly
touch[11365]: missing privilege "file_dac_write"
(euid = 130, syscall = 224) needed at ufs_direnter_cm+0x27c
touch: /etc/acct/yearly cannot create
通过在/etc/name_to_sysnum 文件中查找syscall 编号来确定失败的系统调用。
% grep 224 /etc/name_to_sysnum
creat64 224
使用truss 命令检查权限使用
truss 命令可以在常规shell 中调试权限的使用。例如,以下命令调试失败的touch 进程:
% truss -t creat touch /etc/acct/yearly
creat64("/etc/acct/yearly", 0666)
Err#13 EACCES [file_dac_write]
开始之前
1
2
示例11–3
管理权限
230 系统管理指南:安全性服务• 2006 年9 月
touch: /etc/acct/yearly cannot create
扩展的/proc 接口在truss 输出中的错误代码后面报告缺少的权限。
使用ppriv 命令检查配置文件Shell 中的权限使用
ppriv 命令可以在配置文件shell 中调试权限的使用。如果将权限配置文件指定给用户,并且
此权限配置文件包括具有权限的命令,则必须在配置文件shell 中键入这些命令。在常规
shell 中键入特权命令时,这些命令执行时不使用特权。
在此示例中,jdoe 用户可以承担角色objadmin。objadmin 角色拥有对象访问管理配置文
件。使用此权限配置文件,objadmin 角色可以更改不属于objadmin 的文件的权限。
在以下摘录中,jdoe 无法更改useful.script 文件的权限:
jdoe% ls -l useful.script
-rw-r--r-- 1 aloe staff 2303 Mar 11 05:29 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 ufs_setattr+0x258
chown: useful.script: Not owner
当jdoe 承担objadmin 角色时,更改了该文件的权限:
jdoe% su objadmin
Password: <键入objadmin 的口令>
$ ls -l useful.script
-rw-r--r-- 1 aloe staff 2303 Mar 11 05:29 useful.script
$ chown objadmin useful.script
$ ls -l useful.script
-rw-r--r-- 1 objadmin staff 2303 Mar 11 05:29 useful.script
示例11–4
管理权限
第11 章• 权限(任务) 231
$ chgrp admin useful.script
$ ls -l objadmin.script
-rw-r--r-- 1 objadmin admin 2303 Mar 11 05:31 useful.script
更改root 用户拥有的文件
此示例说明防止权限升级的方法。有关说明,请参见第247 页中的“防止权限升级”。此
文件归root 用户所有。由于权限较低的objadmin 角色需要所有权限才能更改文件的拥有
权,因此操作失败。
jdoe% su objadmin
Password: <键入objadmin 的口令>
$ cd /etc; ls -l system
-rw-r--r-- 1 root sys 1883 Mar 20 14:04 system
$ chown objadmin system
chown: system: Not owner
$ ppriv -eD chown objadmin system
chown[11481]: missing privilege "ALL"
(euid = 101, syscall = 16) needed at ufs_setattr+0x258
chown: system: Not owner
 如何为命令添加权限
应在将命令添加到权限配置文件时为此命令添加权限。使用这些权限,拥有权限配置文件
的角色可以运行管理命令,但不会获取任何其他超级用户功能。
命令或程序必须可识别权限。有关更全面的介绍,请参见第181 页中的“进程如何获取权
限”。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见第186 页中的“配置
RBAC(任务列表)”。
打开Solaris Management Console GUI。
有关说明,请参见第201 页中的“如何在Solaris Management Console 中承担角色”。
示例11–5
开始之前
1
2
管理权限
232 系统管理指南:安全性服务• 2006 年9 月
使用权限工具更新相应的配置文件。
选择要包括的命令。对于每个包括的命令,添加此命令所需的权限。
注意– 在权限配置文件中添加命令并向命令中添加权限后,这些命令在配置文件shell 中运行
时会使用这些权限执行。
配置文件的顺序很重要。配置文件shell 使用帐户配置文件列表内的最早配置文件中指定的
安全属性执行命令或操作。例如,如果chgrp 命令位于具有权限的对象访问管理权限配置文
件中,并且对象访问管理配置文件是包含chgrp 命令的第一个配置文件,则chgrp 命令执行
时使用在对象访问管理配置文件中指定的权限。
 如何将权限指定给用户或角色
您可能始终信任某些具有特定权限的用户。只有对系统影响非常小的仅有的几个特定权限
才适合指定给用户。有关直接指定权限所涉及内容的介绍,请参见第177 页中的“直接指
定安全属性时的安全注意事项”。
用户jdoe 可以通过以下过程使用高分辨率计时器。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《System
Administration Guide: Basic Administration》中的第2 章,“WorkingWith the Solaris
Management Console (Tasks)”。
将影响高分辨率时间的权限添加到用户的初始可继承权限集。
$ usermod -K defaultpriv=basic,proc_clock_highres jdoe
读取产生的user_attr 项。
$ grep jdoe /etc/user_attr
jdoe::::type=normal;defaultpriv=basic,proc_clock_highres
创建具有权限的角色来配置系统时间
此示例创建了一个角色,其唯一任务是处理系统上的时间。
$ /usr/sadm/bin/smrole -D nisplus:/examplehost/example.domain \
-r primaryadm -l \
add -- -n clockmgr \
-c "Role that sets system time" \
3
1
2
3
示例11–6
管理权限
第11 章• 权限(任务) 233
-F "Clock Manager" \
-s /bin/pfksh \
-u 108 \
-P \
-K defaultpriv=basic,proc_priocntl,sys_cpu_config,
proc_clock_highres,sys_time
-K 行换行以便显示。
如果角色在本地创建,则此角色user_attr 项的显示可能与以下信息类似:
clockmgr:::Role that sets system time:
type=role;defaultpriv=basic,proc_priocntl,sys_cpu_config,
proc_clock_highres,sys_time
 如何限制用户或角色的权限
可以通过减少基本集或减少限制集来限制用户或角色可用的权限。由于此类限制可能产生
预料不到的副作用,因此不是非常必要时不要使用此方法限制用户权限。
注意– 为某个用户修改了基本集或限制集时,应该彻底测试任何用户的功能。
 当基本集少于缺省值时,可阻止用户使用此系统。
 当限制集少于所有权限时,需要使用有效UID=0 运行的进程可能会失败。
确定用户基本集和限制集中的权限。
有关过程,请参见第228 页中的“如何确定进程的权限”。
(可选的)从基本集中删除一项权限。
$ usermod -K defaultpriv=basic,!priv-name username
通过删除proc_session 权限,可以防止用户检查其当前会话以外的任何进程。通过删除
file_link_any 权限,可以防止用户生成指向不归其所有的文件的硬链接。
注意– 请勿删除proc_fork 或proc_exec 权限。如果没有这些权限,用户将无法使用系统。
事实上,只能从不对其他进程执行fork() 或exec() 操作的守护进程中删除这两个权限。
1
2
管理权限
234 系统管理指南:安全性服务• 2006 年9 月
(可选的)从限制集中删除一项权限。
$ usermod -K limitpriv=all,!priv-name username
测试username 的功能。
以username 的身份登录,并尝试执行username 必须在系统上执行的任务。
从用户的限制集中删除权限
在以下示例中,防止所有源自jdoe 初始登录的会话使用sys_linkdir 权限。也就是说,即
使在用户运行su 命令之后,也不能生成指向目录的硬链接,并且也不能解除目录链接。
$ usermod -K limitpriv=all,!sys_linkdir jdoe
$ grep jdoe /etc/user_attr
jdoe::::type=normal;defaultpriv=basic;limitpriv=all,!sys_linkdir
从用户的基本集中删除权限
在以下示例中,防止所有源自jdoe 初始登录的会话使用proc_session 权限。也就是说,即
使在用户运行su 命令之后,也不能检查此用户会话以外的任何进程。
$ usermod -K defaultpriv=basic,!proc_session jdoe
$ grep jdoe /etc/user_attr
jdoe::::type=normal;defaultpriv=basic,!proc_session;limitpriv=all
 如何运行具有特权命令的Shell 脚本
注– 创建运行具有继承权限的命令的shell 脚本时,相应的权限配置文件必须包含具有指定
权限的命令。
以/bin/pfsh 或任何其他配置文件shell 作为此脚本的第一行。
#!/bin/pfsh
# Copyright (c) 2003 by Sun Microsystems, Inc.
确定脚本中的命令所需的权限。
% ppriv -eD script-full-path
3
4
示例11–7
示例11–8
1
2
管理权限
第11 章• 权限(任务) 235
打开Solaris Management Console GUI。
有关说明,请参见第201 页中的“如何在Solaris Management Console 中承担角色”。选择
可以创建权限配置文件的角色,如主管理员。
使用权限工具创建或更新相应的配置文件。
选择脚本,并在此权限配置文件中包括需要权限才能运行的shell 脚本中的每个命令。对于
每个包括的命令,添加此命令所需的权限。
注意– 权限配置文件的顺序很重要。配置文件shell 执行配置文件列表中最早的命令实例。例
如,如果chgrp 命令位于对象访问管理权限配置文件中,并且对象访问管理配置文件是包含
chgrp 命令的第一个配置文件,则执行chgrp 命令时使用在对象访问管理配置文件中指定的
权限。
向角色中添加权限配置文件并将此角色指定给用户。
为了执行此配置文件,用户会承担角色并在此角色的配置文件shell 中运行脚本。
确定权限(任务列表)
以下任务列表介绍了有关使用已指定给您的权限的过程。
任务说明参考
以用户的身份在任何shell 中查
看权限
显示已直接指定给您的权限。由您运行的所有进
程都将以这些权限运行。
第236 页中的“如何确定已直接指
定给您的权限”
确定可以使用权限运行的命令将权限指定给权限配置文件中的可执行文件后,
必须在配置文件shell 中键入此可执行文件。
第238 页中的“如何确定可以运行
的特权命令”
确定角色可以使用权限运行的命

承担此角色来确定其可以使用权限运行的命令。第240 页中的“如何确定角色可以
运行的特权命令”
确定已指定的权限
直接将权限指定给用户时,这些权限在每个shell 中都有效。未直接将权限指定给用户时,
则此用户必须打开一个配置文件shell。例如,当具有指定权限的命令位于用户权限配置文
件列表内的权限配置文件中时,此用户必须在配置文件shell 中执行此命令。
 如何确定已直接指定给您的权限
以下过程显示如何确定是否已直接为您指定权限。
3
4
5
确定权限(任务列表)
236 系统管理指南:安全性服务• 2006 年9 月
注意– 不当使用直接指定的权限可能导致无意的安全性破坏。有关介绍,请参见第177 页中
的“直接指定安全属性时的安全注意事项”。
列出进程可以使用的权限。
有关过程,请参见第228 页中的“如何确定进程的权限”。
在任何shell 中调用操作并运行命令。
有效集中列出的权限在整个会话中都有效。如果已为您直接指定了除基本集之外的权限,
则会在有效集中列出这些权限。
确定直接指定给您的权限
如果已经为您直接指定权限,则基本集包含的权限会多于缺省基本集。在此示例中,用户
始终能够访问proc_clock_highres 权限。
% /usr/ucb/whoami
jdoe
% ppriv -v $$
1800: pfksh
flags =
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.
确定直接指定给角色的权限
角色使用管理shell 或配置文件shell。承担角色的用户可以使用此角色的shell 列出已直接指
定给此角色的权限。在以下示例中,已经直接将处理日期和时间程序的权限指定给角色
realtime。
% su realtime
1
2
示例11–9
示例11–10
确定已指定的权限
第11 章• 权限(任务) 237
Password: <键入realtime 的口令>
$ /usr/ucb/whoami
realtime
$ ppriv -v $$
1600: pfksh
flags =
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 中执行权限配置文件中的命令。
验证到Solaris Management Console 的用户或角色必须具有solaris.admin.usermgr.read 授
权。基本Solaris 用户权限配置文件包括此授权。
确定已指定给您的权限配置文件。
$ /usr/sadm/bin/smuser list -- -n username -l
Authenticating as user: admin
... Please enter a string value for: password ::
...
User name: username
User ID (UID): 130
Primary group: staff
Secondary groups:
Comment: object mgt jobs
开始之前
1
确定已指定的权限
238 系统管理指南:安全性服务• 2006 年9 月
Login Shell: /bin/sh
Home dir server: system
Home directory: /export/home/username
AutoHome setup: True
Mail server: system
Rights: Object Access Management
Assigned Roles:
找到以"Rights:" 开头的行。
"Rights" 行列出已直接指定给您的权限配置文件的名称。
在exec_attr 数据库中查找权限配置文件的名称。
$ cd /etc/security
$ grep "Object Access Management" exec_attr
Object Access Management:solaris:cmd:::/usr/bin/chgrp:privs=file_chown
Object Access Management:solaris:cmd:::/usr/bin/chown:privs=file_chown
Object Access Management:suser:cmd:::/usr/bin/chgrp:euid=0
Object Access Management:suser:cmd:::/usr/bin/chmod:euid=0
...
具有已添加权限的命令列在solaris 策略项的末尾。
在配置文件shell 中键入需要权限的命令。
在常规shell 中键入这些命令时,它们不会使用权限运行,因而不会成功运行。
% pfsh
$
在配置文件Shell 中运行特权命令
在以下示例中,用户jdoe 不能从其常规shell 中更改文件的组权限。但是,在配置文件shell
中键入命令时,jdoe 可以更改这些权限。
2
3
4
示例11–11
确定已指定的权限
第11 章• 权限(任务) 239
% whoami
jdoe
% ls -l useful.script
-rwxr-xr-- 1 nodoe eng 262 Apr 2 10:52 useful.script
chgrp staff useful.script
chgrp: useful.script: Not owner
% pfksh
$ /usr/ucb/whoami
jdoe
$ chgrp staff useful.script
$ chown jdoe useful.script
$ ls -l useful.script
-rwxr-xr-- 1 jdoe staff 262 Apr 2 10:53 useful.script
 如何确定角色可以运行的特权命令
角色通过包含具有指定权限的命令的权限配置文件来获取特权命令的访问权限。为用户提
供特权命令访问权限的最安全的方法是为用户指定一个角色。承担此角色之后,用户便可
执行所有包括在此角色权限配置文件中的特权命令。
验证到Solaris Management Console 的用户或角色必须具有solaris.admin.usermgr.read 授
权。基本Solaris 用户权限配置文件包括此授权。
确定可以承担的角色。
$ /usr/sadm/bin/smuser list -- -n username -l
Authenticating as user: primadmin
...
User name: username
User ID (UID): 110
开始之前
1
确定已指定的权限
240 系统管理指南:安全性服务• 2006 年9 月
Primary group: staff
Secondary groups:
Comment: Has admin roles
Login Shell: /bin/sh
...
Rights:
Assigned Roles: primadmin, admin
找到以"Assigned Roles:" 开头的行。
"Assigned Roles" 行列出可以承担的角色。
确定角色之一拥有的权限配置文件。
$ /usr/sadm/bin/smuser list -- -n admin -l
Authenticating as user: primadmin
...
User name: admin
User ID (UID): 101
Primary group: sysadmin
Secondary groups:
Comment: system administrator
Login Shell: /bin/pfksh
...
Rights: System Administrator
Assigned Roles:
在"Rights:" 行中找到该角色的权限配置文件的名称。
2
3
4
确定已指定的权限
第11 章• 权限(任务) 241
在prof_attr 数据库中查找权限配置文件。
由于系统管理员配置文件是配置文件的集合,因此需要在系统管理员配置文件中列出这些
配置文件。
$ cd /etc/security
$ grep "System Administrator" prof_attr
System Administrator:::Can perform most non-security administrative
tasks:profiles=Audit Review,Printer Management,Cron Management,
Device Management,File System Management,Mail Management,Maintenance
and Repair,Media Backup,Media Restore,Name Service Management,Network
Management,Object Access Management,Process Management,Software
Installation,User Management,All;help=RtSysAdmin.html
对于每个权限配置文件,在exec_attr 数据库中查找与其相关的权限配置文件。
例如,Network Management 配置文件是System Administrator 配置文件的补充配置文件。
Network Management 配置文件包括一些特权命令。
$ cd /etc/security
$ grep "Network Management" exec_attr
Network Management:solaris:cmd:::/usr/sbin/ifconfig:privs=sys_net_config
Network Management:solaris:cmd:::/usr/sbin/route:privs=sys_net_config
...
这些命令及其指定权限是solaris 策略项的最后两个字段。可以在角色的配置文件shell 中
运行这些命令。
在角色中运行特权命令
当用户承担角色时,其shell 成为配置文件shell。因此,将使用指定给命令的权限来执行这
些命令。在以下示例中,admin 角色可以更改useful.script 文件的权限。
% whoami
jdoe
% ls -l useful.script
-rwxr-xr-- 1 elsee eng 262 Apr 2 10:52 useful.script
5
6
示例11–12
确定已指定的权限
242 系统管理指南:安全性服务• 2006 年9 月
chgrp admin useful.script
chgrp: useful.script: Not owner
% su admin
Password: <键入admin 的口令>
$ /usr/ucb/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
确定已指定的权限
第11 章• 权限(任务) 243
244
权限(参考)
以下是本章中参考信息的列表:
 第245 页中的“用于处理权限的管理命令”
 第246 页中的“包含权限信息的文件”
 第247 页中的“权限和审计”
 第247 页中的“防止权限升级”
 第248 页中的“传统应用程序和权限模型”
有关如何使用权限的信息,请参见第11 章。有关概述信息,请参见第177 页中的“权限
(概述)”。
用于处理权限的管理命令
下表列出了可用于处理权限的命令。
表12–1用于处理权限的命令
目的命令手册页
检查进程权限ppriv -v pid ppriv(1)
设置进程权限ppriv -s spec
列出系统上的权限ppriv -l
列出权限及其说明ppriv -lv priv
调试权限故障ppriv -eD failed-operation
为新的本地用户指定权限useradd useradd(1M)
为现有本地用户添加权限usermod usermod(1M)
为名称服务中的用户指定权限smuser smuser(1M)
12 第1 2 章
245
表12–1 用于处理权限的命令(续)
目的命令手册页
将权限指定给新的本地角色roleadd roleadd(1M)
为现有本地角色添加权限rolemod rolemod(1M)
为名称服务中的角色指定权限smrole smrole(1M)
查看设备策略getdevpolicy getdevpolicy(1M)
设置设备策略devfsadm devfsadm(1M)
在打开的设备上更新设备策略update_drv -p policy driver update_drv(1M)
向设备中添加设备策略add_drv -p policy driver add_drv(1M)
Solaris Management Console GUI 是用于为命令、用户和角色指定权限的首选工具。有关更多
信息,请参见第201 页中的“如何在Solaris Management Console 中承担角色”。
包含权限信息的文件
以下文件包含权限信息。
表12–2包含权限信息的文件
文件和手册页关键字说明
/etc/security/policy.conf
policy.conf(4)
PRIV_DEFAULT 系统的可继承权限集
PRIV_LIMIT 系统的限制权限集
/etc/user_attr
user_attr(4)
用户项或角色项中的defaultpriv 关键字
其值通常在Solaris Management Console GUI 中
设置
用户或角色的可继承权限集
用户项或角色项中的limitpriv 关键字
其值通常在Solaris Management Console GUI 中
设置
用户或角色的限制权限集
/etc/security/exec_attr
exec_attr(4)
命令的配置文件项中的privs 关键字
命令的策略必须是solaris
为权限配置文件中的命令指定
的权限列表
syslog.conf
syslog.conf(4)
调试消息的系统日志文件
在priv.debug 项中设置的路径
权限调试日志
包含权限信息的文件
246 系统管理指南:安全性服务• 2006 年9 月
注– 请勿直接编辑exec_attr 和user_attr 数据库。要管理权限,请使用Solaris Management
Console 或诸如smuser 的命令。有关更多信息,请参见smc(1M) 和smuser(1M) 手册页。有
关过程,请参见第227 页中的“管理权限(任务列表)”。
权限和审计
可以审计权限的使用。当进程使用权限时,将在审计跟踪中记录权限的使用。权限将在其
文本说明中记录。以下审计事件记录权限的使用:
 AUE_SETPPRIV 审计事件-更改权限集时,此事件会生成审计记录。AUE_SETPPRIV 审计事
件位于pm 类中。
 AUE_MODALLOCPRIV 审计事件-从内核外部添加权限时,此审计事件会生成审计记录。
AUE_MODALLOCPRIV 审计事件位于ad 类中。
 AUE_MODDEVPLCY 审计事件-更改设备策略时,此审计事件会生成审计记录。
AUE_MODDEVPLCY 审计事件位于ad 类中。
 AUE_prof_cmd 审计事件-在配置文件shell 中执行命令时,此审计事件会生成审计记录。
AUE_prof_cmd 审计事件位于as 和ua 审计类中。
不会审计基本集中权限的成功使用。尝试使用已从用户基本集中删除的基本权限时会进行
审计。
防止权限升级
Solaris 内核可防止权限升级。权限升级是指某项权限使进程执行的操作多于其原本能够执
行的操作。要防止进程获取的权限超出其应该获得的权限,必须具有完整的权限集才能进
行特定系统修改。例如,只有具有完整权限集的进程才能更改root (UID=0) 拥有的文件或进
程。root 用户不需要权限就能更改root 拥有的文件。但是,非超级用户必须具有所有权限
才能更改root 拥有的文件。
同样,提供设备访问权限的操作需要有效集中的所有权限。
file_chown_self 和proc_owner 权限可进行权限升级。file_chown_self 权限允许进程放弃
其文件。proc_owner 权限允许进程检查不归其拥有的进程。
可通过rstchown 系统变量限制file_chown_self 权限。将rstchown 变量设置为零时,会从
系统和所有用户的初始可继承集中删除file_chown_self 权限。有关rstchown 系统变量的更
多信息,请参见chown(1) 手册页。
file_chown_self 权限以最安全的方式指定给特定命令,放置在配置文件中,并指定给角色
以在配置文件shell 中使用。
proc_owner 权限不足以将进程UID 切换为0。将进程从任何UID 切换为UID=0 需要所有权
限。由于proc_owner 权限授予无限制读取系统上所有文件的权限,因此可以非常安全地将
该权限指定给特定命令,将其放置在配置文件中,指定给角色以在配置文件shell 中使用。
 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~