您的位置:首页 > 其它

设置用户ID的程序调用system危险

2013-06-11 20:37 85 查看
system函数实现调用了fork, exec和waitpid。如果调用system的程序设置了用户ID,那么在fork,exec后的进程,保存了父进程的权限。当一个进程执行某个程序时,如果程序设置来用户ID,那么进程的有效用户ID将被设置为程序文件的实际用户ID,那么进程将拥有该文件拥有者的权限。这个权限在调用system后,被子进程继承来下来。

例如:systest.c

int main(int argc,char *argv[]){
int status;
...
status = system(argv[1]);
...
}


被system函数调用的程序:test.c
int main(){
int status;
if((status = mkdir("/root/rub",S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) == -1){
perror("mkdir error");
exit(-1);
}//需要有超级用户权限
exit(0)
}


$ gcc -o systest systest.c

$gcc -o test test.c

$./systest ./test

mkdir error: Permission denied

$su root //OK后

#chown root systest

$./systest ./test

mkdir error: Permission denied
$chmod u+s systest

$./systest ./test

$ls /root

rub

当一个进程生成另一个进程的时候,一定要保持其最小权限原则,防止权限被不断的复制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐