电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 图形图象-> PHOTOSHOP教程
如何让setuid的shellscript可以使用?_shell教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

[ 这个问题的回答很长,但是这是一个复杂又常问的问题。在此要谢谢 Maarten 
Litmaath 所提供的答案和以下所提到的 "indir" 程式。] 

先假设你所用的 UNIX 是能认得「可执行的 shell script」的变异过的 UNIX 
(如 4.3BSD 或 SunOS)。这类 script 的第一行一定是如以下一般: 

        #!/bin/sh 

这样的 script 就是所谓可执行的 script,因为它和一般可执行的binary 档 
一样有 magic number 做开头。在我们所用的例子中,magic number 为 
#!,OS 会把这行接下来的部份当作这整个 script 的解译程式,其后可能还 
会有一些 option 如: 

        #!/bin/sed -f 

假设这个 script 的名字叫做 foo,并且放在 /bin 下,那么如果你用: 

        foo arg1 arg2 arg3 

那么 OS 实际在执行时会把它看成是: 

        /bin/sed -f foo arg1 arg2 arg3 

有一点不同的是:如果 foo 被设定成 setuid,那么 OS 会把它以第一种格 
式来解释;如果你硬是以第二种格式输入,那么 OS 会以 /bin/sed 的 
permission 为准,而它当然不会是 setuid。 


好吧,那如果我的 shell script 并不是以 #! 做开头,或是我的 OS 根本就 
不认得它呢? 

嗯,如果这个 shell(或是其他的解译程式)试著要去执行它,那么 OS 会传回 
一个错误讯息,表示这个档案不是以合法的 magic number 做开头。收到这个错 
误讯息后,shell 会把这个档案认定成是 shell script,并以另一种方式来执行: 

        /bin/sh shell_script arguments 

但是我们在前面已经看到了,在这样的情形下,被设成为 setuid 的 
shell_script 并不会发生作用。 


那么,设成 setuid 的 shell script 到底有什么安全上的问题呢? 

嗯,假设这个 script 叫做 /etc/shell_script,它的开头是: 

        #!/bin/sh 

现在我们来看看以下的命令会发生什么事: 

        $ cd /tmp 
        $ ln /etc/setuid_script -i 
        $ PATH=. 
        $ -i 

我们可以看出来,以上的最后一个命令会被解释成: 

        #!/bin/sh -i 

而这样的命令会让我们得到一个可以输入命令的 shell,并且会被 setuid 成 
这个  script 的拥有者。 
幸好,这样的安全漏洞可以很轻易地防止,只需要把第一行改成: 

        #!/bin/sh - 

- 这个符号代表著它是整个 option list 的结尾:所以如果再用前述的方法 
的话,-i 就会如本来所期望的被解释成 script 档案的名字。 


然而,还有更严重的问题: 

        $ cd /tmp 
        $ ln /etc/setuid_script temp 
        $ nice -20 temp & 
        $ mv my_script temp 

第三个命令会被解释成: 

        nice -20 /bin/sh - temp 

而因为这个命令的优先权被设得很低,那么第四个命令可能就有机会抢先在 
shell 开启 temp 之前就用 my_script 把 temp 给盖掉!有四种方法 
可以修补这个安全上的漏洞: 

1)  让 OS 用另一个比较安全的方式执行 setuid script。如 System V R4 和 
    4.4BSD 利用 /dev/fd 来把该 script 的 file descriptor 传给解译程式。 

2)  透过一个前端程式来间接解译要执行的 script,以确定在真正的解译程式 
    启动前一切正常。例如,你可以用 comp.sources.unix 中的 indir 程 
    式,那么你的 script 开头就会像这样: 

                #!/bin/indir -u 
                #?/bin/sh /etc/setuid_script 

3)  造一个 binary wrapper:一个真正的 setuid 可执行程式,这个程式的 
    唯一功能就是用来执行 script 中所指定的解译程式,并以该 script 的档 
    名为参数传给解译程式。 

4)  造一个 setuid script server ,并把一些要用到、检查过的 setuid 
    script 存放在 database 中。当成功地被呼叫后,会去执行正确的解译程 
    式及正确的 script。 


现在我们已经能确定所解译到的 script 是正确的,那么还有其他的危险吗? 

很抱歉,当然还有!在使用 shell scipt 的时候,你一定不能忘记要把 PATH 
这个变数很明确地设到正确的路径去。你能够指出这是为什么吗?除此之外, 
还有 IFS 这个变数如果没设好也可能会造成问题。其他的环境变数也可能会形 
成安全上的问题,如 SHELL... 更重要的,你必须要确定在 script 中没有命 
令会让它产生出可下命令的 shell(interactive shell escape)!还有就是, 
umask 可能被设成奇怪的值等等... 

除此之外,你应该要知道 setuid script 会「继承」所有它所用到的命令的 
bug 及安全问题。 

总而言之,你应该知道 setuid shell script 真的是件非常危险的事吧! 
最好还是写 C 程式啦。 

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·粗略看了下领智4.0 RC的模板标签 有感
·Vista之家有奖征名进行中,现金+进口礼物
·站长心中永远的痛
·黑客,网络冒牌执法官!
·一个新人站长的第一次——卖站
·企业即时通讯市场潜力巨大腾讯隔河望金
·我在一家安全网站的工作经历
·莫让培训影响了你的视线
·一位因女友离去而痛苦中的站长
·您是否患有电脑依赖症?

最新文章
·中国网络股周二在纳市整体上涨
·北京全市网吧达1400家 年均收入过百万元
·好莱坞罢工编剧欲绕过影视公司自建网络公司
·IBM在京成立保险行业解决方案演示中心
·XP SP3公测在即 正式版本明年上半年发布
·联想退出数码相机业务
·陈绍鹏:联想公益创投计划的另类思考
·AMD后年推8内核芯片
·2007“中国芯”十佳揭晓
·成都用户分享联想奥运计划


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号