exec执行的程序权限问题

我用c语言封装了一条cat/etc/shadow的命令,设置程序的的suid位并把它的属主设为root,为什么以普通用户执行时,还是不能访问/etc/shadow?难道是exec执行新程序时不继承suid属性吗?
//encapsulation.c
#include
#include
#include
#include
intmain(){
printf("uidis%d\n",getuid());
printf("euidis%d\n",geteuid());
execlp("/bin/sh","sh","-c","echo$UID$EUID;/bin/cat/etc/shadow",(char*)NULL);
return0;
}
➜testgccencapsulation.c-oencapsulation
➜test./encapsulation
uidis1000
euidis1000
/bin/cat:/etc/shadow:Permissiondenied
➜testsudochownroot:rootencapsulation
[sudo]passwordforinovker:
➜test./encapsulation
uidis1000
euidis1000
/bin/cat:/etc/shadow:Permissiondenied
➜testsudochmodu+sencapsulation
➜test./encapsulation
uidis1000
euidis0
/bin/cat:/etc/shadow:Permissiondenied
➜testsudo./encapsulation
uidis0
euidis0
root:!:17655:0:99999:7:::
daemon:*:17647:0:99999:7:::
bin:*:17647:0:99999:7:::
sys:*:17647:0:99999:7:::
sync:*:17647:0:99999:7:::
games:*:17647:0:99999:7:::
man:*:17647:0:99999:7:::
...
蝴蝶不菲
浏览 965回答 2
2回答

猛跑小猪

suid只对二进制可执行程序有效,如果你把编译过后的encapsulation设置了4755权限,那么应该是直接./encapsulation执行有效
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript