21.20.5
7 setuid程序
运行setuid的程序,特别是运行setuid到root的程序,很容易导致安全问题。随Linux发布的setuid命令从理论上讲是安全的,不过,过去已经发现了安全漏洞,将来无疑还会发现漏洞。
把setuid问题的数量降到最低的办法,肯定是把setuid程序的数量降到最低。在安装需要执行setuid的软件包之前请三思,并要避免在自己编写的软件中使用setuid功能。虽然Linux发行版本各有不同,但一个Linux发行版本平均有大约35个setuid程序。
setuid shell脚本特别容易造成安全问题。至少在常用的shell下,它们自身就是完全不安全的。shell往往是高度可定制的,这使得要欺骗它们相当容易。虽然为了执行脚本而产生的一个shell未必会读取该用户的shell配置文件,但根据当前目录的内容或调用脚本的方式不同,这个shell可能受到用户环境的影响。
没有一条规则说setuid程序必须以root权限运行。如果您需要做的一切就是限制对某个特殊文件或数据库的访问,那么您可以在passwd文件中添加一个伪用户,passwd文件存在的唯一理由就是拥有受限制的资源。请遵循标准的伪用户约定:使用小的UID,在口令域中放一个星号,令这个伪用户的主目录为让这个伪用户的主目录为/dev/null。
您可以在调用mount命令时使用-o nosuid选项,在个别文件系统上禁止setuid和setgid的执行。比较好的想法是,把这个选项用在包含用户主目录的目录上,或者在安装从不太可信的管理域来的文件系统时使用。
周期性地扫描硬盘寻找新的setuid程序是有用处的。攻破系统安全的黑客有时会创建一个私人setuid shell或实用程序来帮助他再次拜访系统。从21.20.810节开始讨论的一些工具能够找出这样的文件,但用find也一样能做得好。例如:
/usr/bin/find / -user root -perm -4000 -print |
/bin/mail -s "Setuid root files" netadmin
将把所有setuid root文件的列表邮寄给“netadmin”用户。






