当前位置: 技术问答>linux和unix
(在线等)问个关于切换getid和getuid的问题
来源: 互联网 发布时间:2016-10-20
本文导语: #include #include #include #include int main() { uid_t uid ,euid; uid = getuid() ; printf("%dn",uid); euid = geteuid(); printf("%dn",euid); //printf("my uid :%un",getuid()); //.........uid ...... //printf("my euid :%un",geteuid())...
#include
#include
#include
#include
int main()
{
uid_t uid ,euid;
uid = getuid() ;
printf("%dn",uid);
euid = geteuid();
printf("%dn",euid);
//printf("my uid :%un",getuid()); //.........uid ......
//printf("my euid :%un",geteuid()); //.........euid
if(setreuid(euid, uid)) //.....id
perror("setreuid");
printf("after exchange..........n");
printf("%dn",uid);
printf("%dn",euid);
//printf("after setreuid uid :%un",getuid());
//printf("afer sertreuid euid :%un",geteuid());
//system("/sbin/iptables -L"); //..iptables -L..
system("/var/www/cgi-bin/test.sh"); //.....root.......
return 0;
}
run_id的信息为:
-rwsr-xr-x 1 test root 12204 Nov 25 21:11 run_id
我在root用户下编译这个程序生成run_id.然后执行 chown test run_id和chmod u+x run_id命令,之后切换到test用户执行,可是执行结果是
501
501
after exchange..........
501
501
我想问下为什么会这样的结果,哪里弄错了呢??
|
lz 你交换之后,显示的仍然是之前的那个变量,而不是重新获取的uid、euid 。。
|
我认为你是想测试saved-set-uid。但是LZ给出的信息不匹配。
这个操作:
在root用户下编译这个程序生成run_id.然后执行 chown test run_id和chmod u+x run_id命令
不能得出:
-rwsr-xr-x 1 test root
这里缺少了chmod u+s run_id
首先,可执行文件没有suid标志时,execXXX()后的进程,它的uid与euid是一致的。
如果,有suid标志时,execXXX()后的进程,uid保持不变,euid等于可执行文件的拥有者,之后saved-set-uid等于euid,也就是等于可执行文件的拥有者。
看LZ的案例,可执行文件的拥有者,经过chown命令后是test,又是用test帐号执行。显然是没效果了。
应该换个用户执行吧,与拥有者不同的。