摘 要: 随着Internet应用的广泛深入,计算机系统的安全问题日益引起人们的高度重视。操作系统是连接计算机硬件与上层软件及用户的桥梁,它的安全性是至关重要的。论文阐述了B2级安全服务器的系统需求,重点对自主访问服务器系统需求和功能描述进行说明,最后还就LINUX系统服务器的安全相关问题进行重点分析,有利于提高LINUX服务器安全性能设计水平。
关键词:LINUX;自主访问控制(DAC);访问控制链表(ACL);服务器安全
1 引言
随着计算机系统在社会各领域的广泛应用,大量的数据和信息将在计算机系统中存放、传输和处理。计算机系统多用户的应用,使得计算机系统安全成为越来越重要的课题。尤其是在使用计算机系统的政府、国防、金融等信息敏感部门,计算机系统的安全显得尤为重要。任何计算机系统敏感信息的泄漏都将带来巨大的损失和灾难性的后果。目前,随着社会信息化的发展,计算机安全问题也日益严重,建立安全防范体系的需求越来越强烈。操作系统是整个计算机信息系统的核心,操作系统安全是整个安全防范体系的基础。信息安全是涉及国家主权的问题,而操作系统安全又是信息安全的重要内容。操作系统安全是计算机系统软件安全的必要条件[1,2]。本文主要探讨了LINUX系统服务器的安全问题。
2 Linux安全服务器的系统需求
此系统开发符合GB 17859中规定的结构化保护级(相当于TCSEC中规定的B2级)功能要求的安全操作系统,其主要功能要求包括:(1)标识与鉴别;(2)自主访问控制;(3)强制访问控制;(4)安全审计;(5)客体重用;(6)最小特权管理;(7)可信路径;(8)隐蔽通道分析;(9)加密卡支持等等。
首先,通过标识与鉴别机构,认证用户的身份,登录进入系统。标识机构用于唯一标识进入系统的每个用户的身份,鉴别机构用于验证用户身份的合法性。一个用户通过输入登录名(Login Name)和口令(Password)进入系统,存取系统的资源。口令必须严格地保护,口令的失密可能导致另一个用户冒名顶替进入系统,访问口令主人资源。在Linux安全服务器中,限制用户只能在一定的安全级范围登录进入系统。用户登录时可选择安全级,若不选择,则系统取该用户的默认安全级;如果用户选择的安全级和默认安全线不在规定的范围之内,则系统拒绝该用户进入系统。
第二,在操作系统中用户建立一个进程,这个进程使用用户的标识和安全级进行存取控制检查,查看是否可以通过MAC和DAC机构。MAC提供客体在主体间共享的控制。与DAC不同的是,MAC由系统管理员管理,DAC由客体的拥有者管理。客体的拥有者可以改变客体的DAC方式,但不能改变客体的MAC方式。TCB根据安全级来实施MAC。系统中的每个主体和客体都具有一个安全级,主体的安全级在登录时赋值,客体的安全级为创建它的主体的安全级。安全级由级别(Classification)和类别(Category)组成。级别是线性关系,如绝密>=机密>=秘密;类别是集合的概念,为偏序关系。
安全级格式表示为:级别:类别1,类别2,??,类别n
对每个客体及用户都分配一个安全级,一个安全级仅包含一个单一的级别,而它的类别集合可能包含任意数目的类别。我们将一个安全级写成一个级别与一个类别表,下面是一个例子:{secret;NATO,NUCLEAR,CKYPTO}
多级安全策略的目的就是防止未被许可的用户能够访问到具有一定密级的信息。在一个安全级中的级别是线性有序的,例如:
unclassfied
如果一个用户具有如下的安全级
{top secret;NATO,NUCLEAR,CRYPTO}
那该用户就能够访问文件F,因为该用户具有比文件F高的级别,并且它的类别集合包括了该文件的所有类别。而具有如下安全级的用户就不能访问该文件:
{top secret;NATO,CRYPTO}
因为它缺少类别NUCLEAR。
第三,由MAC构成的访问隔离防止普通用户存取仅系统管理员才能访问的敏感TCB文件。
第四,进程的特权为用户提供超越系统存取控制的能力。特权管理的思想是将UNIX超级用户的特权划分为一组细粒度的特权。管理员可以灵活地给予某(些)用户执行一系列操作和管理命令的特权,从而减少超级用户操作和管理系统的安全风险;管理员也可以给予某些文件以它所执行操作要求具有的固定特权。
第五,审计机构监视和记录用户和管理员的敏感操作。审计是系统中对所发生的事件进行记录的一种行为,它是安全系统中的一个重要方面。审计为系统进行事故原因的查询、定位、事故发生前的预测、报警以及事故发生之后的实时处理提供详细、可靠的依据或支持。
如上所述,TCB通过建立一系列的安全控制来保证系统的安全性。任何用户都必须通过标识与答别机构(login和passwd),在系统中建立一个进程。然后,这个进程及其产生的后续进程只要通过了MAC和DAC检查,就可以访问系统中的相应客体。任何企图超越MAC和DAC的特权任务都必须通过特权机构的检查。最后,所有敏感操作都是在审计机构的监视下完成的。
3 Linux安全服务器的设计和实现
3.1 系统安全体系结构
这里Linux 级安全服务器将采用FLASK体系结构和Linux组织提供的LSM(Linux Security Module)动态加载技术,通过安全相关模块与系统原有功能的分离,以及实现不同策略的安全模块的动态加载,实现对多安全策略的支持。根掘FLASK系统结构,本系统将分为两个主要部分:
(1) 在原有系统中插入策略执行点。策略执行点一般在主体对客体进行操作前,如果当前的安全策略允许主体对客体进行该操作,则该操作继续进行,一般是调用原有系统中的相关模块来完成:如果当前的安全策略不允许主体对客体进行该操作,则该操作被终止,并返回错误信息。在策略执行点同时对系统操作进行安全审计。策略执行点并不直接对是否允许主体对客体的某种操作进行判定,而是通过hook(钩子)函数调用安全服务器中的相关功能来完成策略判定。
(2) 安全服务器。安全服务器是安全系统的核心部分,负责对安全策略的执行和判定,同时维护系统和主体/客体的安全信息。hook函数是原有系统与安全服务
器之间进行交互的唯一方式。通过动态更改hook函数的指向,可以实现对不同安全策略的调用,实现对多安全策略的支持。通过采用LSM技术,可以实现对安全服务器或其中某个安全策略模块的动态加载。
3.2 ACL机构
ACL机构兼容传统的UNIX保护机构,UNIX文件中权限模式位直接对应为该文件的ACL表的基本项,两者的保护功能完全相同。可以利用getfac1命令来显示文件的ACL表:文件拥有者能够利用setfac1命令在文件的ACL表中增加users(用户)项或groups(用户组)项;也可用该命令删除这些项,也可以删除基本项:还可用该命令来改变文件ACL表中的某一项的权限。
ACL机构能使客体拥有者以单个用户为单位进行授权访问或拒绝访问控制,从而使系统具有更细的存取控制粒度。所有ACL信息的改变都是以一个基本操作方式(系统调用)通过setfacl命令来完成的,这就避免了出现中间非安全状态的可能性。当ACL表增大时,进程的运行速度必然降低,这实际上也就限制了ACL表项数不能太大。
为进一步解释基本ACL,先看看文件初始化ACL表的表项与其模式位的直接对应关系。当一个文件创建时,其权限模式位及其基本ACL表也随之建立。基本ACL.具有四项:user、group、other及mask。文件模式中拥有者的权限总与该文件ACL表user项的权限位相同;文件模式中其它用户的权限位也总与其ACL表中的other项的权限位相同,且两者在ACL中是唯一的。文件基本ACL表中的group和mask项的权限位在初始化时与文件模式中拥有者的同组用户的权限位一样,它们同样也是唯一的。基本ACL表可以通过加入扩展user项和扩展group项来进行扩展。不同用户组可以在扩展group项中指定相应的权限;扩展user项用于指定各用户登录到系统之后对文件所具有的访问权限。
在文件创建时,该文件扩展ACL项是基于其父目录的默认ACL项而获得的。这些目录文件的默认ACL项用于说明当在目录下创建文件时,这些默认ACL项将被加入到新创建的文件ACL表中。
3.3 功能描述
自主存取控制(简称DAC)是根据用户意愿进行信息存取的机制。目前在Linux中存在的DAC机制是传统的文件权限模式,本次开发的目的是在系统中加入ACL机制。利用ACL,用户能够有选择地授予其他用户某些存取权限,来对信息进行保护,防止信息被非法提取。ACL机制在兼容原有的文件权限模式的基础上,使客体拥有者以单个用户/组为单位进行授权访问或拒绝访问控制,从而使系统具有更细致的存取控制粒度,也就是说不是文件属主或者和文件属主不在同一个组里的某些用户可以和其它用户有区别,拥有更多的访问权限。
3.4 DAC部分系统构思
在原有的文件权限模式之上,加入ACL表。使客体拥有者以单个用户/组为单位进行授权访问或拒绝访问控制。原始的文件模式提供文件的基本ACL项(原始的文件模式位user/group/other分别对应ACL表中的ACL_USER_OBJ/ACL_GROUP_OBJ (ACL_MASK)/ACL_OTHER类型的权限位,ACL表项的类型描述详见数据结构部分)。目录客体拥有默认ACL表项,可以继承给在该目录中创建的文件和子目录。
客体拥有自己的ACL表。客体属主和特权用户可以任意修改客体的ACL表。系统对于ACL表是这样存放的:每个不同的文件系统都拥有一个ACL表文件,该文件系统中所有ACL信息的文件的ACL信息都存放在该表文件中。每个文件在文件系统中都有唯一的一个I节点号,根据该I节点号和hash值的余数把该表文件划分成不同的组。
I节点区第一个4个字节,放的是该组已经存放的文件(I节点)个数;第二个4个字节放的是数掘块区的64字节data block的个数;第三个4个字节放的是按I节点号最小的该组的第一个inode number;第4个4个字节放的是I节点号是第三个4个字节中的值的文件在数据块区中的偏移量(offset),该offset以整个ACL表文件为基础。I节点区从第三个4个字节开始每个在数据块区中的文件都占8个字节,前4个是I节点号,后4个是浚文件的偏移量,并且按照I节点号从小到大升序排列整齐。
一个文件可能占多于1个data block的字节数,无论这个文件占多少字节,第一个data block的格式都是这样的:数据块区的第一个4个字节,记录的是该文件一共有多少acl数据个数(ACL项数),每个acl数据一共占4个字节,1个字节的标识类型,2个字节的限定词,1个字节的权限集。文件的acl数据个数是根据用户来增加或者删减的,基本ACL是有4个acl项。第二个4个字节是该文件的I节点号;第三个4个字节,是该文件的第一个acl项。
所有写到磁盘表文件中的文件都至少包含一个不是ACL基本项的项,也就是至少有5个ACL项。主体对客体进行访问时,在DAC检查点通过ACL访问校验算法来控制。
4 结语
本文主要对于浅析LINUX系统服务器的安全相关技术问题展开谈论, 把Linux系统的安全性与一般意义上的操作系统安全性的研究结合起来,以已有成果为基础,探讨进一步完善的操作系统安全特性,以CC标准为准绳,实现高安全可信度的Linux核心安全支持,从而为建立安全的系统软件平台奠定应有的基础。
参考文献:
. 计算机测量与控制, 2007, 15(4).",##隔###