linux中进程的用户管理

时间:2021-11-04 04:57:46

每个进程都拥有真实的用户、组(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)

不变

不变

不变

不变