其它事项

程序在使用自己的某些假设之前至少应对它们进行检查(例如在程序的开头)。例如程序依赖于某个给定目录设置的“sticky”位,对它进行一下测试;这样的测试只需要很少的时间,就可以防止出现严重问题。如果担心对每个调用都进行测试会增加执行时间,至少在安装时需要执行测试,或者至少在应用程序启动时执行测试更好一些。

对程序启动、过程启动和可疑的活动编写审计日志。有关值的可能信息包括日期、时间、uid、euid、gid、egid、终端信息、进程ID和命令行的值等。函数syslog(3)对实现审计日志很有帮助。这里存在着一个危险,即用户通过执行大量产生审计记录的事件直到系统耗尽存储记录的资源,可以制造出拒绝服务攻击(或至少停止审计)。对付此威胁的一个方法是对审计记录的记录频率加以限制;如果有“太多”的审计记录产生则有意放慢响应的速度。放慢响应速度可能只应该适用于有攻击者嫌疑的用户,但在很多情况下,单个攻击者可以伪装成潜在的很多用户。

如果存在内建的脚本语言,可能该语言会设置某个对执行脚本的程序有不友好影响的环境变量。要防止出现这样的情况。

如果需要某种复杂的配置语言,要确保该语言有注解字符,并且包含许多有注解的安全范例。通常“#”被用作注解,意味着“本行的剩余部分为注解”。

如果可能的话,不要创建setuid或setgid为root的程序;而让用户作为root登录。

为代码加上签名。这样,其他人可以检查得到的内容是否做过改动。

考虑静态连接安全程序。这样就可以确定安全程序不使用它,从而防止对动态连接库机制的攻击。

在审读代码时,考虑匹配不成立的所有情况。例如,如果有switch语句,如果一个情况都不匹配时会发生什么?如果有“if”语句,如果条件为假时会发生什么?