再谈Unix SUID/SGID程序的安全问题

系统 其他OS
在文章中给我们为了使preserve程序可以写入那个目录,以及使recover程序可以从那里读,这些程序被设置为Unix SUID root。

有时,一个Unix SUID程序与一个系统程序(或库函数)之间的交互作用会产生连程序的编制者也不知道的安全漏洞。一个典型的例子是/usr/lib/preserve程序。它被vi和ex编辑器使用,当用户在写出对文件的改变前被意外与系统中断时,它可以自动制作一个正被编辑的文件的拷贝。

这个保存的(preserve)程序将改变写到在一个专门的目录内的一个临时文件上,然后利用/bin/mail程序发送给用户一个"文件已经被存"的通知。

由于人们可能正在编辑一个私人的或一个机密的文件,被preserve程序(旧版)使用的那个目录不能被一般用户访问。为了使preserve程序可以写入那个目录,以及使recover程序可以从那里读,这些程序被设置为Unix SUID root。 这个preserve程序有三个特点值得注意:

1. 这个程序被设置为Unix SUID root。

2. 该程序以root用户的身份运行/bin/mail程序。

3. 该程序调用system()函数调用mail程序。

由于system()函数调用shell对命令字符串进行语法分析,而shell则使用IFS变量作为其输入字段的分割符。早期的shell版本在被调用是时不将此变量恢复为普通字符集。如果先将IFS设置为"/",然后调用vi程序,继而调用preserve程序,就有可能使usr/lib/preserve程序执行一个在当前目录下的bin程序(/bin/mail被解析为带有参数mail的bin程序)。

如果我们利用前面的演示程序编写一个简单的shell script文件命名为bin,它就有可能通过上面的安全漏洞被执行:
 

  1. # shell script to make an SUID-root  
  2. shell  
  3. #  
  4. chown root parent  
  5. chmod 4755 parent 

Unix SUID到这里,我们就告一段落了。

【编辑推荐】

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

2010-05-06 16:26:02

Unix SUIDSGID

2010-04-15 17:29:32

2010-05-04 17:43:50

Unix系统

2010-05-06 16:40:47

Unix SUID

2010-04-19 15:02:19

Unix操作系统

2010-04-14 12:46:31

2012-11-20 10:47:16

2015-02-13 10:06:20

2014-08-14 15:33:57

2010-12-30 11:58:13

扩展程序应用安全火狐

2019-04-04 11:55:59

2012-06-15 11:18:07

云安全云计算

2012-12-04 16:57:49

2009-05-30 09:36:18

2020-10-30 08:50:25

2016-03-01 11:44:57

2009-07-07 13:29:33

Servlet和JSP

2012-10-09 16:47:19

2013-03-12 09:22:32

2013-01-07 10:34:23

点赞
收藏

51CTO技术栈公众号