一个Unix SUID程序

系统 其他OS
该程序将一个Unix SUID的进程转变为一个超级用户进程。将此程序编译成可执行目标文件parent ,用另一个简单的程序进行检验.

Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的一个Unix SUID程序,大家一起来学习下吧!希望对大家对Unix操作系统的学习有所帮助。

下面的程序是用来演示Unix文件的Unix SUID,取名为parent.c
 

  1. QUOTE:   
  2. #include 〈stdio.h〉  
  3. #include 〈stdlib.h〉  
  4. #include 〈unistd.h〉  
  5. #include 〈sys/types.h〉  
  6. int  
  7. main(int argc,char **argv)  
  8. {  
  9. int i;  
  10. char **argu;  
  11. uid_t uid;  
  12. uid=geteuid(); //获取调用进程的有效用户ID  
  13. if(argc<2){  
  14. fprintf(stderr,"usage: %s \n",argv[0]);  
  15. exit(0);  
  16. }  
  17. if(setuid(uid)<0){  
  18. fputs("setuid error.\n",stderr);  
  19. exit(1);  
  20. } //将调用进程的实际用户ID设置为有效用户ID  
  21. if((argu=(char**)malloc(argc*sizeof(char*)))==NULL){  
  22. fputs("malloc error.\n",stderr);  
  23. exit(1);  
  24. } //为execvp的参数指针数组分配内存空间  
  25. for(i=0;i argu[argc-1]=(char *)0; //参数指针数组以空指针结尾  
  26. if(execvp(argv[1],argu)<0){  
  27. fputs("exec error.\n",stderr);  
  28. exit(1);  
  29. } //用execvp调用命令行参数指定的程序  
  30. exit(0);  
  31. }  

该程序将一个Unix SUID的进程转变为一个超级用户进程。将此程序编译成可执行目标文件parent ,用另一个简单的程序进行检验

 

  1. int main(void){  
  2. printf("real uid=%d, effective uid=%d\n",getuid(),geteuid());  
  3. exit(0);  

编译为printuids。运行程序得到下列结果:

 

  1. $ ./parent printuids //正常执行,无特权  
  2. real uid=506, effective uid=506 
  3. $ su root  
  4. Password:  
  5. # chown root parent //更改所有者  
  6. # chmod u+s parent //添加SUID  
  7. # exit  
  8. $ ./parent printuidsv real uid=0, effective uid=0 //该进程转变为超级用户进程  
  9.  

 

某一进程一旦转变为超级用户进程,将拥有系统的完全控制权。比如,我们可以这样执行演示程序:
 

  1. $ ./parent useradd hacker  
  2. $ ./parent passwd hacker 

故而,Unix SUID的程序往往伴随着一定的安全问题。在早期的Unix环境中,Unix SUID/SGID的程序调用system()函数就存在着安全性漏洞。

【编辑推荐】

  1. 学习使用自定义Unix系统功能键
  2. 选用Unix系统交换区的指导方针
  3. Unix系统交换区动态设置及其他知识讲解
  4. Unix系统交换区类型大讲堂
  5. Unix系统数据库及通信软件的启停处理
责任编辑:小霞
相关推荐

2010-05-06 16:45:17

Unix SUID

2010-05-06 16:26:02

Unix SUIDSGID

2010-04-15 17:29:32

2012-09-24 11:46:24

IBMdw

2010-05-11 14:30:01

2013-06-13 11:07:52

2015-02-13 10:06:20

2010-04-30 01:17:37

unix锁

2010-04-20 14:43:01

Unix操作系统

2010-05-10 13:21:12

Unix FreeBS

2020-02-22 21:51:43

程序员Microsoft SServerSQL

2021-04-19 11:16:17

小程序微信开发

2020-10-25 08:52:19

Unix操作系统TrueOS

2010-05-10 18:28:11

Unix系统

2011-05-11 10:58:39

iOS

2014-01-06 09:33:32

程序员管理

2009-10-14 09:58:43

VB.NET程序

2010-04-09 11:11:34

Unix操作系统

2020-10-05 21:13:37

程序员技能开发者

2010-04-29 10:31:08

Unix程序
点赞
收藏

51CTO技术栈公众号