Science for all





避免创建Setuid/Setgid脚本

避免创建Setuid/Setgid脚本

许多类Unix系统,特别是Linux,简单地忽略脚本的setuid和setgid比特位以避免前面描述过的竞争状态。由于类Unix系统对setuid脚本的支持各不相同,最好在可能的情况下避免在新应用程序中使用setuid脚本。作为特殊情况,Perl包含一个特殊的安排以支持setuid的Perl脚本,所以如果确实需要这种功能,可以接受在Perl中使用setuid和setgid。如果需要在自己的解释器中支持这种功能,可以查看一下Perl的做法。除此之外,一个简单的方法是用一个创建安全环境的小setuid/setgid可执行代码(如清除并设置环境变量)“封装”脚本,然后再调用脚本(使用脚本的完整路径)。要确保脚本不会被攻击者修改!Shell脚本语言还有其它的问题,实际上不应该setuid/setgid;参见下文的特定语言一节。