LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3629|回复: 3

文件的uid,gid,euid,egid是什么关系?

[复制链接]
发表于 2005-7-14 01:50:18 | 显示全部楼层 |阅读模式
我搞不明白uid,gid,euid,guid是怎么个关系,他们保存在什么地方(文件系统中,还是进程的task_struct中).下面是这个问题的来源:

我是一个初学者,正在看一本<linux网络编程>的书,在书的33页,有这样一段话:"有些程序在运行过程中通过系统调用setuid,将进程的uid和gid改成程序所有者的uid和gid(保存在VFS inode中)"
我不明白的是:既然有效gid和uid是保存在VFS inode中,为什么要在运行程序期间用系统调用setuid,不是系统调用setuid改变了VFS inode 中的有效uid和gid吗??


先谢过了.......   
发表于 2005-7-14 09:35:51 | 显示全部楼层
每个用户有一个uid和gid, 这个记录在/etc/passwd, /etc/group里面

每个文件有一个uid, 就是拥有这个文件的用户的uid。

每个用户运行一个程序时是以自己的uid作为身份的,如果这个程序被
设置了stick位,则这个程序以程序拥有者的uid作为身份,程序运行
时的这个身份(uid)就是euid, 表示这个程序以那个用户的身份运行(这样
就拥有那个用户的权限,比如读取属于他的文件)。

所以程序运行时的身份euid一般情况下都是运行这个程序的人的uid,有时
会是这个程序拥有者的uid。

以passwd程序为例,这个程序要写/etc/passwd, /etc/shadow,一般用户
对这些文件是没有写权限的,用户A运行了passwd,这个passwd进程的
euid就是uidA,当要写这两个文件时,passwd调用了setuid(seteuid?),
这样这个passwd进程的euid就是uidRoot了,passwd就可以写那两个文件了,
写完之后euid再切换成uidA.
这个过程就实现了对/etc/passwd, /etc/shadow的受控访问:普通用户只允许
按照passwd程序定义好的方式修改这两个文件。

不知道说清楚了没有,可能有错误,找本Stevens的Advanced Programming
in UNIX Environment来看看吧,有本“System V系统编程”,O'Reilly出版的,
挺好的,至于国内自己人出的这方面的书,那就算了吧。
回复 支持 反对

使用道具 举报

发表于 2005-7-14 12:58:15 | 显示全部楼层
APUE里面有专门讨论这个的,写的很好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-14 23:54:32 | 显示全部楼层
感谢你的回复,其实你说的我都明白,好像我没有说明白,其实我想问的是:uid,gid,euid,guid是怎么个关系,他们保存在什么地方(文件系统中,还是进程的task_struct中),不过还是非常感谢你的回答。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表