日期:2014-05-16  浏览次数:20917 次

ubuntu getuid() 和 geteuid()问题
以下代码在ubuntu上运行结果令我很费解。。。。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>

int main(int argc,char *argv[]) {
struct stat buf;
uid_t euid;
uid_t uid = getuid();
printf("%d\n",uid);
euid = getegid();
printf("%d\n",euid);
if(stat(argv[0],&buf) == -1) {
perror("stat");
exit(1);
}
if(buf.st_mode & S_ISUID) {
printf("setuid\n");
}
else {
printf("没设置。\n");
}
return EXIT_SUCCESS;
}
以下是我的两个用户:jimmy-cao 用户id:1000 组id:1000(这是登录用户)
  jimmy 用户id:1001 组id:1001
然后我依次执行以下命令:
sudo chown root a.out (使可执行文件属于根用户)
sudo chmod u+s a.out
sudo chmod g+s a.out

然后一jimmy登录运行./a.out结果确显示有效用户id是jimmmy-cao的id,(我预想的是根用户id就是0)这是为什么?
结果如下:
1001
1000
setuid




ps:还有个问题chmod o+s为什么没做用?是这一位根本就不能设置为s吗?

------解决方案--------------------
你自己在代码中写错了。
uid_t uid = getuid();//这句换成geteuid才会uid = 0;
euid = getegid(); //这句是有效组ID,,

你使用ll a.out查看下他的属性。 我根据你的结果推测a.out的所属用户是root,,,但是所属组还是jimmy-cao
所以你的getegid的结果是1000

因为sudo chown root a.out只是改变了所属用户
sudo chown root:root a.out改变用户和组