实际用户和有效用户

来源:互联网 发布:淘宝店铺怎么开通 编辑:程序博客网 时间:2024/04/28 19:48

每个进程都有非负的整型表示唯一的进程ID。
下面三个是常见的ID:
0 是交换进程,属于系统进程,是内核的一部分,不执行磁盘上的程序,是调度进程
1 是用户进程,永远不会停止,会启动系统,读取系统初始化文件
2 是精灵进程,属于系统进程,虚存系统的请页操作

除了进程ID,每个进程还有其他的符号:
pid:进程ID
ppid:父进程ID
uid:实际用户ID(在root下就是0,普通用户下就是500)
euid:有效用户ID(一般与uid相同)
gid:实际所属组ID
egid:有效所属组ID
uid和gid的情况是一样的,所以下面我们只讨论uid的情景
我们来解释一下实际ID和有效ID(相信用户和所属组已经不用解释了,每个文件的权限里都有):
实际ID:标示你是谁的一个ID;
有效ID:标示你的有效身份是谁,即你有没有权限访问某个东西。
举个形象点的例子:身为一个公民,你的实际ID是你的身份证号,而同时,你又是西安交大的学生,那么你想在交大上课,凭的是什么?凭的是你是交大的学生,那么怎么证明你是交大的学生呢?因为你有一个交大的学生证啊!所以euid表示的是特定场景的身份。

当对SUID位进行设置(只能对可执行文件进行设置),则有效用户ID等于文件所有者的uid,而不是实际用户的ID。即在root和普通用户下都可执行该程序
以下是验证代码:

int i=10;        FILE*fp=fopen("1.log","w");        if(NULL==fp)        {            printf("open error");            return 0;        }        char buf[]="hello";        while(i--)        {            fwrite(buf,1,strlen(buf),fp);        }        printf("pid:%d\nppid:%d\nuid:%d\neuid:%d\n",getpid(),getppid(),getuid(),geteuid());

讲信息写入文件中,然后在root和普通用户下运行代码。
(1)没有suid设置
在root用户下执行
这里写图片描述
成功写入到文件中去,并且uid为0,euid为0

在普通用户下执行
这里写图片描述
显示打开失败,权限不够,因为普通用户是1.log的其他用户,不具有写的权限,所以打开失败。

(2)进行suid设置
在root下执行
这里写图片描述
写入成功

在普通用户下执行
这里写图片描述
成功写入,因为是普通用户,所以uid是500

1 0