设置用户ID的程序调用system危险
2013-06-11 20:37
85 查看
system函数实现调用了fork, exec和waitpid。如果调用system的程序设置了用户ID,那么在fork,exec后的进程,保存了父进程的权限。当一个进程执行某个程序时,如果程序设置来用户ID,那么进程的有效用户ID将被设置为程序文件的实际用户ID,那么进程将拥有该文件拥有者的权限。这个权限在调用system后,被子进程继承来下来。
例如:systest.c
被system函数调用的程序:test.c
$ 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
当一个进程生成另一个进程的时候,一定要保持其最小权限原则,防止权限被不断的复制。
例如: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
当一个进程生成另一个进程的时候,一定要保持其最小权限原则,防止权限被不断的复制。
相关文章推荐
- 浅析为什么设置用户ID程序中不能直接调用system函数?
- 8_25 设置用户id或组id的程序绝对不能再调用system函数。安全漏洞
- 小程序中关于app.js中用户的调用与获取unionid
- 字符设备驱动之从用户程序中的系统调用到驱动中的具体实现
- linux自动以root登录,并自动启动用户程序的设置方法(适合sysVinit启动机制)
- 在IAR环境下,lpc2478 用户程序的地址及中断向量设置
- RedHat Linux 无法设置用户ID:资源暂时不可用错误解决
- ios用户程序设置 Settings应用程序
- “实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语的区别
- 无死角理解保存设置用户ID,设置用户ID位,有效用户ID,实际用户ID
- Sqlserver中设置某个用户只能访问特定的某个试图(给外部调用)其他的没权限设置
- 无死角理解保存设置用户ID,设置用户ID位,有效用户ID,实际用户ID
- 实际用户ID,有效用户ID与保存设置用户ID
- Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)
- ASP.NET中启用Windows集成验证,怎样在调用System.DirectoryServices下的组件时传递安全上下文,也就是说当前用户凭据,来实现权限管理
- Unix 设置用户ID和文件访问权限
- 设置用户ID与设置用户组ID
- Python调用外部程序——os.system()和subprocess.call
- java中用户退出程序之前设置弹出框…
- Linux 设置程序开机自启动 (命令systemctl 和 chkconfig用法区别比较)