暨南大学本科实验报告专用纸
课程名称信息系统安全实验成绩评定
实验项目名称SE Linux指导教师林聪
实验项目编号09实验项目类型验证型
学生姓名李静远学号2015050324
学院 电气信息学院 系专业 信息安全
实验时间年月日 午~月日 午 温度℃湿度
实验目的
1.了解SELinux的安全特性
2.使用SELinux增强系统安全性
实验人数
每组1人
系统环境
Linux
网络环境
交换网络结构
实验工具
——
实验类型
验证型
实验原理
一.传统Linux系统的不足之处
虽然Linux比起Windows来说,它的可靠性、稳定性要好得多,但是Linux的安全模型有它自己的缺点。自主访问控制(基于账号的权限来允许其对文件的访问)是一种方便但不安全的文件系统对象访问控制方法。它从本质上说是基于信任的:信任有访问权限的用户不是恶意的,信任系统管理员知道一个软件包中每个文件的正确权限,信任第三方软件包有到位的强大控制力来安装它们自己,但即便所有这些都做到了,一个软件上的安全漏洞仍然会让系统变得毫无保护。总结Linux操作系统有以下4点不足之处:
(1)存在特权用户root。
任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。
(2)对于文件访问权限的划分不够细。
在Linux系统里,文件的访问权限只有所有者、属组和其他用户这3类划分。
(3)SUID程序的权限升级。
如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。
(4)DAC(Discretionary Access Control)问题。
文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。
对于以上这些的不足,传统权限策略、传统主机访问控制以及防火墙、入侵检测系统都是无能为力的。在这种背景下,对于访问权限大幅强化的SELinux(Security-Enhanced Linux)来说,它的魅力是无穷的。
SELinux通过使用强制访问控制(也叫做MAC)解决了上述问题。
二.SELinux特性
SELinux是由NSA(美国国家安全局)和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。2000年以GNU GPL发布。已经被集成到2.6版的Linux内核中。
SELinux系统比起通常的Linux系统,安全性能要高得多,它通过对于用户、进程、权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。没有SELinux保护的Linux的安全级别和Windows一样,是C2级,但经过SELinux保护的Linux安全级别则可以达到B1级。
「说明」 1985年,美国国防部提出可信计算机系统评测标准TCSEC(习惯上称橘皮书)。TCSEC将系统分成ABCD四类7个安全级别。D级是安全级别最低最低的级别,如MS-DOS就属于D级;C类为自主保护级别;B类为强制保护级别;A类为验证保护级别,包含一个严格的设计,控制和验证过程。UNIX、Windows NT、Linux都只能达到C2级。
下面是SELinux的一些特点。
1.MAC(Mandatory Access Control)-对访问控制彻底化
对于所有的文件、目录、端口等资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的,一般用户没有权限更改。
如将/tmp目录下的所有文件和目录权限设置为0777,这样在没有SELinux保护的情况下,任何人都可以访问/tmp下的内容。而在SELinux环境下,尽管目录权限允许访问/tmp下的内容,但SELinux的安全策略会继续检查你是否可以访问。
2.TE(Type Enforcement)-对于进程只赋予最小权限
TE概念在SELinux里非常重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫domain的标签(可统一称之为目标安全上下文)。domain能够执行的操作是由access vector在策略里定义好的。
如Apache服务守护进程-httpd进程,只能在httpd_t里运行。这个http_t的domain能执行的操作,比如能读被赋予httpd_sys_content_t属性的网页文件内容,被赋予shadow_t属性的密码文件,使用被赋予httpd_port_t的80/tcp端口等。如果在access vector里我们不允许http_t来对http_port_t进行操作的话,Apache服务就不能启动。反过来说,只允许80端口,httpd_t就不能用别的端口;只允许读取被标为httpd_sys_content_t的文件,httpd_t就不能对这些文件进行写操作。
3.domain迁移-防止权限升级
在用户环境里运行服务软件server,假设当前的domain是full_t,也就是说,在shell终端中启动server后,它的进程domain就会默认继承正在运行的shell的full_t,在server遭受攻击后,shell可能会受到波折。通过domain迁移,就可以让server在指定的server_t里运行,在安全上面,这种做法是可取的,它不会影响到full_t。
下面是domain迁移的例子:
domain_auto_trans(full_t, server_exec_t,server_t)
意思就是,当在full_t domain里执行了被标为server_exec_t的文件时,domain从full_t迁移到server_t。
4.RBAC(role base access control)-对于用户只赋予最小的权限
对于用户来说,被划分成一些role,即使是root用户,要是不在sysadm_r里,也还是不能执行sysadm_t管理操作的。因为,哪些role可以执行哪些domain也是在策略里设定的。role也是可以迁移的,但是也只能按策略规定迁移。
三.SELinux控制切换
从Fedora core2(FC2)开始,2.6内核的版本都支持SELinux,文件/etc/selinux/config控制着SELinux的配置,其中配置行如下:
SELINUX有三个可能的值:enforcing、permissive或者disabled。
(1)enforcing 实施被加载的策略,禁止出现违反策略的情况(违反策略不可继续执行)。
(2)permissive 实施被加载的策略,允许出现违反策略的情况(违反策略可以继续执行)。
(3)disabled 关闭SELinux。
SELINUXTYPE指要应用的策略类型,有两种策略:targeted和strict。
(1)targeted 只为主要的网络服务进行保护,受保护的进程有httpd、dhcpd、named、mysqld、squid、winbindd等。该策略可用性好,但是不能对整体进行保护。事实上,即使是targeted策略也不完美。如果在新安装的软件上遇到了问题,可以检查/var/log/messages看看有没有SELinux的错误。
(2)strict 能对整个系统进行保护,但设定复杂。
SELinux策略由TE、RBAC和多级安全MLS组成。通过替换安全服务器,可以支持不同的安全策略。SELinux使用策略配置语言定义安全策略,然后通过checkpolicy编译成二进制形式,存储在文件(如targeted策略/etc/selinux/targeted/policy/policy.20)中,在内核引导时读到内核空间。这意味着安全性策略在每次引导时都会有所不同。
除了在/etc/selinux/config中设定SELinux无效外,在系统启动的时候,也可以通过传递参数selinux给内核来控制它。
编辑/boot/grub/grub.conf文件,在如下所示行后追加selinux=0。
四.SELinux基本操作
SELinux是个经过安全强化的Linux操作系统,实际上,大部分原有的Linux应用软件不用做修改就可以在它上面运行。真正做了特别修改的RPM包只有50多个。像文件系统EXT3都是经过了扩展。对于一些原有的命令也进行了扩展,另外还增加了一些新的命令。
1.文件操作
(1)ls
列出目录内容,命令后使用-Z或者-context参数。
(2)chcon
更改目标安全上下文。
(3)restorecon
恢复目标安全上下文。
(4)fixfiles
更改整个文件系统的文件标签,后面一般跟relabel,对整个系统relabel后,需重启。如果在根目录(“/”)上有.autorelabel空文件,每次系统重启时都调用fixfiles relabel。
(5)star
tar在SELinux下的互换命令,能把文件的标签也一起备份起来。
(6)cp
可以跟-Z –context=CONTEXT,在拷贝文件时,指定目的文件的security context。
2.进程domain
可通过ps -Z命令判断程序在哪个domain内运行。
3.ROLE的确认和变更
(1)id
显示当前用户ID(包括安全上下文)。
使用-Z参数可仅显示用户安全上下文。
(2)newrole
更改用户安全上下文。
4.模式切换
(1)getenforce
得到当前的SELINUX值。
(2)setenforce
更改当前的SELINUX值,后面可以跟enforcing,permissive或者1,0。
(3)sestatus
使用-v参数,会显示更多的当前SELinux状态信息。
五.seedit简介
SELinux Policy Editor(seedit)是一款配置SELinux策略的工具。它由简化策略和工具组件组成,其主要特点是隐藏SELinux的具体细节,简化策略配置,方便策略应用。
带有可视化图形界面(GUI)的seedit如图1所示。
图1 SELinux策略编辑器界面
实验步骤
本练习单人为一组。
首先使用“快照X”恢复Linux系统环境。
一.增强Apache服务安全
从实验原理中已经知道Apache服务进程httpd的安全domain(域)为httpd_t,此域仅能够读被赋予httpd_sys_content_t标签的文件。
步骤一的设计思路是:在启用SELinux前,创建Web服务虚拟目录,并赋予虚拟目录读、写、执行等访问权限,验证页面访问情况;启用SELinux后,在虚拟目录没有httpd_sys_content_t标签的情况下,验证页面访问情况;最后给虚拟目录打上httpd_sys_content_t标签,验证页面访问情况。
(1)在/opt目录下新建目录virdir。
具体命令:mkdir /opt/virdir
(2)编辑http服务配置文件/etc/httpd/conf/httpd.conf,在末尾追加如下内容:
保存文件,重新启动httpd服务。虚拟目录virdir被创建完成。
具体命令:service https restart
(3)在虚拟目录中创建test.php文件,完成功能是读取虚拟目录文件test.txt(若文件不存在,则创建),若读取成功向test.txt文件中写入信息:Hello World!,若执行成功页面显示信息:Write file success!。test.php代码如下。
代码编写完成后,请同实验组主机访问当前主机test.php,如http://当前主机IP/virdir/test.php。页面访问信息为 open file failed 。
查看日志文件/var/log/httpd/error_log,分析产生该结果的原因: apache系统用户对text.php文件无写权限 。
(4)改变虚拟目录(包括目录内文件)的所有者和属组为apache。
操作方法:chown apache:apache / opt/virdir 。
Wirite file success! 。
权限修改完成后重启httpd服务。
请同实验组主机再次访问当前主机test.php。页面访问信息为 write file success 。
(5)查看虚拟目录安全上下文 。
(6)开启SELinux,工作模式:enforcing,策略类型:targeted。
操作方法: vim /etc/selinux/configvi / 。
重启系统。
「注」开启SELinux重启时 ,内核会为文件系统打标签(relabel),这可能会花费若干时间,耐心等待。
(7)请同实验组主机访问当前主机test.php。页面访问信息为 open file failed 。
查看日志文件/var/log/httpd/error_log,分析产生该结果的原因: 。
(8)更改虚拟目录(包括目录内文件)的安全上下文,使其拥有httpd_sys_content_t标签。方法如下:
请同实验组主机再次访问当前主机test.php。页面访问信息为 write file successquit
。
解释上述原因: 。
二.增强Mysql数据库安全
在进行实验操作前使用“快照X”恢复Linux系统环境。
(1)启动mysqld服务。
「注」 默认情况下,mysql管理员用户及密码均为空。
(2)启动mysql客户端(控制台中输入命令:mysql),进入mysql控制台,依次进行如下操作:
通过上述SQL语句,完成在test库中创建testtable1表,并录入了一条信息。
(3)移动目录/var/lib/mysql/test到/opt目录下。
(4)开启SELinux,工作模式:enforcing,策略类型:targeted。重启系统。
(5)为起到实验效果,需通过点击“应用程序”|“附件”|“终端”来启动控制台。启动控制台后移动目录/opt/test到/var/lib/mysql目录下,并查看test、mysql目录安全上下文,二者的安全上下文分别是: 、 。
(6)启动mysql服务。操作test库,尝试添加数据表testtable2,操作是否成功?
(7)更改test(包括目录内文件)目录安全上下文,与mysql目录相同。
操作方法: 。
(8)操作test库,尝试添加数据表testtable2,操作是否成功?
根据实验现象回答问题:
mysql服务进程mysqld的安全domain(域) 。
mysqld安全域对带有 标签的文件具有读写权限。
三.查看策略
在实验用的Linux系统环境中,已经安装了Seedit(SELinux Policy Editor),单击控制面板“桌面”|“管理”,选择执行“SELinux Policy Editor”,弹出Seedit控制面板界面如图1所示。
图1 SELinux策略编辑器界面
双击“Edit Policy”图标,打开“seedit policy editor”面板,单击“Open”按钮打开域httpd_t,此时可以很容易阅读httpd_t域对httpd进程的行为限制。
本文来源:https://www.2haoxitong.net/k/doc/f50a7365cdbff121dd36a32d7375a417866fc1bf.html
文档为doc格式