7.6. 避免创建 Setuid/Setgid 脚本

许多类 Unix 系统,特别是 Linux,会直接忽略脚本的 setuid 和 setgid 位,以避免之前描述的竞争条件。由于类 Unix 系统上对 setuid 脚本的支持各不相同,因此在新应用程序中应尽可能避免使用它们。作为一个特例,Perl 包含一个特殊的设置来支持 setuid Perl 脚本,因此如果您确实需要这种功能,那么在 Perl 中使用 setuid 和 setgid 是可以接受的。如果您需要在您自己的解释器中支持这种功能,请研究 Perl 是如何做到这一点的。否则,一个简单的方法是用一个小的 setuid/setgid 可执行文件“包装”脚本,该可执行文件创建一个安全的环境(例如,清除和设置环境变量),然后调用脚本(使用脚本的完整路径)。确保脚本不能被攻击者更改!Shell 脚本语言还有其他问题,并且真的不应该设置为 setuid/setgid;有关此的更多信息,请参见第 10.4 节