如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Linux和Unix安全编程HOWTODavidA.WheelerCopyright©1999,2000byDavidA.Wheeler本文对在Linux和Unix系统下编写安全程序给出了一组设计和实现的指导原则。这样的程序包括用来浏览远端数据的应用程序、CGI脚本程序、网络服务器和setuid/setgid程序。本文还包含了针对C、C++、Java、Perl、Python和Ada95的特别指导。TableofContents1.导言2.背景知识Unix、Linux与开放源码软件的历史Unix自由软件基金会Linux开放源码软件Linux与Unix的比较安全准则安全程序的类型多疑症是个优点为什么要编写本文档?设计和实现原则的来源文档习语3.Linux和Unix安全特性概要进程进程属性POSIX能力进程创建与操作文件文件系统对象的属性创建时的初始值改变存取控制属性使用存取控制属性文件系统分级结构SystemV的IPC套接字和网络连接信号配额与限制动态连接库审核PAM4.证实所有的输入命令行环境变量有些环境变量是危险的环境变量的存储格式是危险的解决方案--提取和清除文件描述符文件内容CGI输入其它输入字符编码限制合法的输入时间和负载水平5.避免缓存溢出C/C++中的危险C/C++中库的解决方案标准C库的解决方案静态和动态分配缓存strlcpy和strlcatlibmibLibsafe其它库C/C++的编译解决方案其它语言6.程序内部结构与解决方案保证接口的安全特权最小化最小化授予的特权最小化可以使用特权的时间最小化特权有效的时间>最小化获得特权的模块考虑用FSUID来限制特权考虑使用chroot来最小化可用文件避免创建Setuid/Setgid脚本安全地配置并使用安全的缺省值安全地失败避免竞争状态次序问题锁定只信任值得信任的通道使用内部一致性检查代码自我限制资源7.小心对其它资源的调用出口限制调用出口为合法值检查系统调用的所有返回值8.明断地发回信息最小化反馈处理完整的/不响应的输出9.特定语言的问题C/C++PerlPythonShell脚本语言(sh及csh的变种)AdaJava10.专题密码随机数加密算法与协议PAM其它事项11.结论12.参考文献A.历史回顾B.感谢C.关于文档许可D.GNU自由文档许可证(原文)E.关于作者ListofTables4-1.非法UTF-8初始序列Chapter1.导言Awisemanattacksthecityofthemightyandpullsdownthestrongholdinwhichtheytrust.Proverbs21:22(NIV)本文对在Linux和Unix系统下编写安全程序提出了一组设计和实现的指导原则。在本文中,“安全程序”是指一个位于安全区域内的程序,要从不具有与该程序相同访问权限的信息源获取输入数据。这样的程序包括用来浏览远端数据的应用程序、CGI脚本程序、网络服务器和setuid/setgid程序。本文不涉及对操作系统内核本身的修改,虽然这里讨论的许多原则可以应用到操作系统内核上。这些指导原则来源于对许多创建安全程序的“教训”的调查(加上作者的观察),并重新组织成一组更普遍的原则。本文还包含了针对C、C++、Java、Perl、Python和Ada95等一些编程语言的特别指导。本文不包括保证测量、软件工程的步骤和质量保证手段,这些确实很重要,但在其它地方有更为广泛的讨论。保证测量包括测试、仔细检阅、配置管理和正规化方法。对安全问题的保证测量开发进行专门阐述的文献包括CommonCriteria[CC1999]和SystemSecurityEngineeringCapabilityMaturityModel[SSE-CMM1999]。更普遍的软件工程方法或步骤在诸如SoftwareEngineeringInstitute的CapabilityMaturityModelforSoftware(SE-CMM)、ISO9000(以及ISO9001和ISO9001-3)和ISO12207等文献中有详尽的定义。本文不讨论在一个给定的环境下如何配置一个安全的系统(或网络)。很明显这对安全使用一个给定程序是必要的,但已经有太多的其它文献讨论了安全配置。Garfinkel[1996]是一本优秀的有关配置安全的类Unix系统的一般性书籍。其它有关类Unix系统安全的