文档介绍:第5章 Linux网络操作系统的安全管理
系统安全
网络安全
安全工具
配置安全可靠的系统
§ 系统安全
Linux系统的安全性是有目共睹的,因为它是一个开放性的操作环境,正是因为代码的开放性,一旦系统有漏洞,则相应的补丁马上出台,在这一章中详细讲解基于Linux操作系统安全管理的方方面面。
§ C1/C2安全级设计框架
TCSEC(TDI)将系统划分为四组(division)七个等级,依次是D;C(C1,C2);B(B1,B2,B3);A(A1),安全级别从左至右逐步提高,各级之间向下兼容,也就是说高级别必须拥有低级别的一切特性。D级的定义最低,简单的说就是没有任何安全性,你可以随便破坏系统而且绝不会有限制。对我们来说,比较重要的是C类的两个级别和B类的两个级别。这些级别的简单描述见表5-1。
事实上,C2类是安全性系统的基本要求,也是绝大部分系统的标准要求,UNIX/Linux类系统也不例外;而真正意义上的安全系统普遍要求达到B级。不过,必须说明的是,操作系统通过B1级认证的并不多,而通过B2级认证的更是稀少。这是因为安全认证是专门机构做的事情,经常会做上几年,因此几乎任何真正的商业系统都不会有时间去做这种认证。
图5-1
§ 身份认证
身份认证是用户进入系统的第一步。在Linux设计框架里面,用户的身份和权限是分开的,每个用户的身份并不影响它对于特定物件的权力——除了超级用户以外。这使得用户身份的认证比较简单,但是也带来了一定的问题,比如随便提升用户权限的问题等等。不过,在这一节里面,让我们首先考虑身份认证系统。
身份认证系统最基本的实现是Linux login程序,不过其他各种应用程序也一样要通过身份认证来确定用户身份。要注意事实上身份认证仅仅是个程序实现,决定用户身份的,是它启动的应用程序的uid,因此Linux下的身份认证其实只是判断用户并且授予它一个合法的uid的过程。而授予uid的过程却是超级用户(或者超级用户进程)作的,事实上授予程序只要愿意,随便怎么做都可以,因此并没有完全统一的办法来实现身份认证。在Linux中传统上采用一些约定俗成的方法来认证用户身份,其中包括最基本的password/shadow体系和PAM体系。在这些体系的基础上,程序可以用系统调用来完成对用户的认证,但是,如果系统进程非要抛开调用,用自己的一套方法进行用户认证,Linux也不会禁止这些。
1. Shadow身份认证体系
最基本的身份认证系统由口令验证构成。用户输入一个口令,与系统进行比较,如果合法,就可以进入系统。显然,最重要的是验证口令与这个用户的预设口令是否相同。当然,口令不是明文进行比较,而是采用下面的结构:
(1)系统记录用户的原始口令,并将其加密保存在系统中,口令原文则被丢弃。
(2)当用户登录系统的时候,输入口令,系统用同样的加密算法将用户输入的口令转换成密文。
(3)比较保存的密文和现在得到的密文,如果相同,允许用户登录系统。
口令加密可以使用一般的对称密匙算法,但是Linux普遍使用类似MD5一类的hash方法。这类算法是不对称的,也就是从密文(或者说校验和)是不可能知道原文的。
尽管如此,如果看到了加密结果,用户仍然可以用穷举的方法来获得密码,因为标准unix口令体系只有8位。如果考虑到大部分人喜欢使用小写字母和很短的密码的话,那么,穷举所有的字符组合构成试探口令,然后执行(2)的步骤,对于比较短的密码是有可能搜索到正确的口令字符串的。
2. PAM身份认证体系
由于这类问题,现代的Linux系统从Sun引入了PAM系统(可插拔认证模块)。必须指出的是,只有在程序编写时选择了PAM库支持的时候,才能使用PAM认证。在这种情况下,程序调用PAM运行库,而运行库则根据当前的PAM系统管理设定来进行具体的认证过程,使得整个认证过程可以添加或者删除特定的功能,从系统核心中分离出来。
PAM认证部分是由一组模块构成的,相互可以堆叠,堆叠的意思就是说,可以连续执行多个模块或者让一个模块多次使用。因此,可以在一个PAM认证过程中使用多种认证模块,后面的认证过程的执行依赖于前面的认证模块结果。另外,还可以随时加入新的模块, 加入之后, PAM客户程序无须重新编译,也无须做任何修改就可以使用这个新模块。
PAM系统的配置文件,按照具体实现,可以分为/etc//目录两种方式。Linux一般使用第二种方式。这种方式下,在/etc/,存放着一些分离的配置文件,每个文件的文件名是这个文件控制的服务(,pop,ftp等等),而文件的内容是这个服务的PAM配置。一般来说,服务类型就是存取该服务的程序的名