LinuxSir.cn,穿越时空的Linuxsir!

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

一个关于进程真实id和有效id的问题

[复制链接]
发表于 2003-8-25 14:36:08 | 显示全部楼层 |阅读模式
程序如下:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4.                                                                                                                                                
  5. int main(void)
  6. {
  7.         printf("Real user ID: %d\n", getuid());
  8.         printf("Effective user ID: %d\n", geteuid());
  9.         printf("Real group ID: %d\n", getgid());
  10.         printf("Effective group ID: %d\n", getegid());
  11.                                                                                                                                                
  12.         exit(EXIT_SUCCESS);
  13. }
复制代码

在普通用户下执行结果是
Real user ID: 500
Effective user ID: 500
Real group ID: 500
Effective group ID: 500
但是经过下述步骤后,
su
passwd
chmod g+s a.out
exit
a.out的有效组id应该是超级用户了,也就是说再次执行的结果应该是Effective group ID: 0,但是我的实际执行结果仍然是
Real user ID: 500
Effective user ID: 500
Real group ID: 500
Effective group ID: 500
这是何原因呢,请各位指教。
发表于 2003-8-25 17:03:43 | 显示全部楼层
g+s以后进程的有效组id是可执行文件的组id,要看到效果可以用其它用户运行程序,或者chgrp一下。
发表于 2003-8-25 23:56:35 | 显示全部楼层
输入who看看自己身份先
 楼主| 发表于 2003-8-26 08:30:54 | 显示全部楼层
我在root用户下的运行结果是
Real user ID: 0
Effective user ID: 0
Real group ID: 0
Effective group ID: 500
在我的用户下(即我编写这个程序的用户)的运行结果是
Real user ID: 500
Effective user ID: 500
Real group ID: 500
Effective group ID: 500
在其他普通用户下的运行结果是
Real user ID: 501
Effective user ID: 501
Real group ID: 501
Effective group ID: 500
能帮我分析一下这些结果吗,谢谢。
发表于 2003-8-26 15:28:58 | 显示全部楼层
结果正确呀,因为你的程序是g+s的,所以其他用户运行程序的时候进程的有效组ID就是这个程序文件的组ID
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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