浅析为什么设置用户ID程序中不能直接调用system函数?
来源:互联网 发布:淘宝公益宝贝手机端 编辑:程序博客网 时间:2024/05/20 11:32
设置用户ID程序
本文将以两个简单的小程序为例,说明如果在一个设置用户ID程序中调用system将会发生什么:
代码1
代码块语法遵循标准markdown代码,例如:
#include "apue.h"intmain(int argc,char *argv[]){int status;if(argc < 2){err_quit("commondline argument requied");}if((status=system(argv[1]))<0){err_sys("err system");}pr_exit(status);exit(0);}
使用GCC编译成tsys.o可执行文件。
代码2
#include "apue.h"intmain(void){printf("real uid = %d,effective uid = %d\n",getuid(),geteuid());exit(0);}
将代码2编译成idtest.o。
实验过程:
parallels@ubuntu:~/vimtest/apue$ ./tsys.o ./idtest.oreal uid = 1000,effective uid = 1000normal termination, exit status = 0
修改tsys.o的权限
sudo chown root tsys.osudo chmod u+s tsys.o
parallels@ubuntu:~/vimtest/apue$ ./tsys.o ./idtest.oreal uid = 1000,effective uid = 0normal termination, exit status = 0
虽然已经切换为普通用户,但是tsys.o的有效ID竟然是root。这是一个很大的安全漏洞!原因是,我们在赋予tsys程序的超级用户权限在system中执行了fork和exec后仍被保留下来了。
结论
如果一个进程正以特殊权限设置用户ID或者用户组ID,它又想生成另一个进程执行另一个程序,则它应当直接使用fork和exec。而且在fork和exec之前要改回普通权限。总之,在设置用户ID或者设置组ID的程序中,坚决不应该调用system函数!
阅读全文
0 0
- 浅析为什么设置用户ID程序中不能直接调用system函数?
- 8_25 设置用户id或组id的程序绝对不能再调用system函数。安全漏洞
- 设置用户ID的程序调用system危险
- 用户态程序为什么不能直接访问内核态数据结构
- 为什么说invalidate()不能直接在线程中调用
- 第四周程序三---为什么后面的函数不能调用????????
- 为什么析构函数中不能调用虚函数
- 为什么不能直接调用dealloc而是release
- 线程中更新窗口不能直接调用UpdateData函数
- 线程中更新窗口不能直接调用UpdateData函数
- 线程中更新窗口不能直接调用UpdateData函数
- 线程中更新窗口不能直接调用UpdateData函数
- MFC:线程中更新窗口不能直接调用UpdateData函数
- angularjs表达式中不能直接调用外部的js函数
- 为什么不能在构造函数中调用shared_from_this
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- popen / system的区别/为什么vfork 不能直接return 返回
- Qt中设置系统时间,调用system()函数
- 欢迎使用CSDN-markdown编辑器
- python namedtuple
- 共享元素转场动画Part1————Activity to Activity
- spring的相关配置文件
- 在Win64系统上加载无签名驱动的方法
- 浅析为什么设置用户ID程序中不能直接调用system函数?
- ubutun卸载php拓展
- JSP的一些操作
- Android Architecture Component之LiveData
- 4412手机的安卓系统移植方法
- mongodb dos窗口使用命令行语句
- scanf gets
- mysql explain用法和结果的含义
- tomcat中间卡住