我正在使用 Ubuntu 12.04 (64bit) 做一些关于 Linux 权限的实验。
我创建了以下程序。
#include<stdio.h>
#include <unistd.h>
main(){
printf("euid=%4d uid=%4d egid=%4d gid=%4d\n", geteuid(), getuid(),getegid(),getgid());
system("id");
}
我将其可执行文件设置为 setuid/setgid 文件:
-rws--s--x 1 root root 8638 Apr 28 02:00 pt*
当它从非特权用户运行时,我得到输出:
euid= 0 uid=1001 egid= 0 gid=1001
uid=1001(test1) gid=1001(test1) euid=0(root) egid=0(root) groups=0(root),1001(test1)
我希望在使用 system() 系统调用之后,root 权限会被删除(这就是 shellcode 通常使用 execv() 而不是 system() 的原因),但事实并非如此。
你能解释一下为什么吗?
谢谢你。