Chinaunix首页 | 论坛 | 博客
  • 博客访问: 854967
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: C/C++

2012-02-15 16:08:03

UID, EUID, SUID, FSUID (2)

linux中进程的用户管理

每个进程都拥有真实的用户、组(uidgid),有效的用户、组(euidegid),保存的设置用户、组(suidsgid),还有linux中专门用于文件存储存取的用户、组idfsuidfsgid对于unix系统没有这两个fields)。现说明进程中每种类型用户的功能:

1)真实的用户、组(uidgid):进程的真正所有者。每当用户在shell终端登录时,都会将登录用户作为登录进程的真正所有者。通过getuid来获得进程的真正用户所有者,修改进程的真正用户所有者可以通过setuidseteuidsetresuidsetreuid

2)有效的用户、组(euidegid):进程的有效用户、组。进程所执行各种操作所允许的权限(process credentials)是依据进程的有效用户来判断的,(在linux系统中(内核2.4以上)又引入了一个新的进程权限管理模型process capabilities,通过process capabilities来确定进程所允许的各种操作[可参看《深入理解linux内核》table 20-3])。通过geteuid来获得进程的有效用户,修改进程的有效用户可以通过setuidseteuidsetresuidsetreuidseteuid

3)文件系统的用户、组(fsuidfsgid):用于进行文件访问的用户、组,这是linux系统中新引入的一类用户、组,对于unix系统文件的访问是通过euid来判断,没有函数获得进程的fsuid,用于修改有效用户的函数都会同时修改fsuid,如果要单独修改fsuid,而不修改euid,可以调用setfsuid

4)保存的设置用户、组(suidsgid):保存的设置用户、组。进程中该类型的用户、组主要的用处是用于还原有效用户,观察到对于非超级用户用于修改有效用户的各个函数setuidseteuidsetresuidsetreuidseteuid普遍有一个前提条件就是如果修改后的有效用户是原先的suid则允许修改,利用这一点,进程可以修改有效用户到一个新用户,然后还原到原来的值(原来的值保存在保存设置的用户)。通过getresuid来获得进程的真实用户、有效用户、保存的设置用户。


setuid(e)

setresuid(r,e,s)

setreuid(r,e)

setfsuid(f)

seteuid(e)

Field

euid=0

euid!=0

euid=0

euid!=0

euid=0

euid!=0

euid=0

euid!=0

euid=0

euid!=0

uid

e

不变

r

r( r必须为原先的uideuidsuid)

r

r( r必须为原先的uideuid)

不变

不变

不变

不变

euid

e

e(e必须为原先的uideuidsuid)

e

e( e必须为原先的uideuidsuid)

e

e(e必须为原先的uideuidsuid)

不变

不变

e

e(e必须为原先的uideuidsuid)

fsuid

e

e(e必须为原先的uideuidsuid)

e

e( e必须为原先的uideuidsuid)

e

e(e必须为原先的uideuidsuid)

f

f(f必须为原先的uideuidsuidfsuid)

e

e(e必须为原先的uideuidsuid)

suid

e

不变

s

s( s必须为原先的uideuidsuid)

e

e(e必须为原先的uideuidsuid)

不变

不变

不变

不变

阅读(2066) | 评论(0) | 转发(0) |
0

上一篇:进程互斥实验

下一篇:异步清理子进程

给主人留下些什么吧!~~