1.SELinux背景
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux 上最杰出的新安全子系统.NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下.进程只能访问那些在他的任务中所需要文件.SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上.也可以作为其他发行版上容易安装的包得到.
2.SELinux运作方式
SELinux是通过MAC的方式来控管程序,它控制的主体是程序,而目标则是该程序是否读取文件.
主体(Subject):SELinux控制的是主体是程序,也就是process;
目标(Object):主体程序是能存取目标资源,目标通常是文件;
策略(Policy):由于程序与文件都很多,因此,SELinux会依据某些服务来制定基本的存取安全性策略,这些策略内会有详细的规则来指定不同的服务开放某些文件存取.
RHEL6里面提供了两个主要策略,分别是targeted与strict.
策略在/etc/selinux/config里面配置策略.
SELINUXTYPE : Targeted针对网络服务配置比较多,而针对本机限制较少,是默认的策略;strict是完整的SELinux限制,限制方面较为严格.
SELINUX : enforcing 开启selinux
permissive 开启selinux,但不具有selinux的约束性.只会出现警告.
disabled 关闭selinux
3.文本的安全性
我们用httpd服务来做实验.
a.对文件的操作
这个重点看第三列,用冒号隔开的列 . httpd_sys_content_t(其余的都是些身份和角色的信息.不重要.能否访问这个文件.就是看第三列了)
这一列在文件或目录里面称之为类型(type).
b.对进程的操作
这个是进程httpd的进程.同样也是看第三列(用冒号隔开的列) httpd_t .
这一列在进程里面称之为域(domain).
所以.只有进程里面的域(domain)对应到文件或目录的类型(type)才能有权限访问.
# 所以,这样对应selinux的权限范围内就可以访问这个页面了.
那么.我们怎么知道什么域跟什么类型能够对应呢.
例如1:
httpd的域对应什么类型呢.
可以用[root@Alex01 html]# man http_selinux 参看
例如2:
可以通道setroubleshoot工具来才看.
[root@Alex01 html]# yum install setroubleshoot # 首先安装它.
这时,就可以用[root@Alex01 ~]# tail -f /var/log/messages 来查看日志信息了(必须安装setroubleshoot,才会有selinux的日志信息)
现在我把index.html的文本上下文的类型改一下.
改成:
这时去登录这个页面...就会发现无法访问...
在/var/log/messages日志里面就可以看到.(可以用cat /var/log/messages | grep setroubleshoot 来筛选)
看到红色方框里面的东东然后复制出来运行.
[root@Alex01 ~]# sealert -l 29769430-ccd1-40c3-b781-b1c88e60dadd
可以看到这个httpd域对应的文本安全性的类型是httpd_sys_content_t
PS:这个文本类型有有继承关系.子目录或文件继承父目录的文本类型.
4.SELinux命令介绍
[root@Alex01 ~]# getenforce # 参看当前selinux是否开启
[root@Alex01 ~]# setenforce 0 # 设置selinux状态 0 为: permissive , 1为:enforcing
[root@Alex01 ~]# chcon -vt httpd_sys_content_t /var/www/html/index.html # 改变文本安全性
# -t 代表改变类型
# -u代表改变身份
# -r 代表改变较色
# -R 连同目录下面的一起改
[root@Alex01 html]# restorecon -Rv /var/www/html/index.html # 还原selinux . 如果,你修改过文本安全性.现在想还原回来.
# 用这个命令简单了 . 直接还原
[root@Alex01 html]# sestatus # 参数 selinux的状态
5.SELlinux的布尔值
这个布尔值代表进程是否有权限访问这个文件.
例如:
[root@Alex01 alex123]# getsebool -a | grep httpd
on 就表示,有权限访问某个文件,
off 就是不能访问咯..
设置bool值 .
这个比文本上下文的类型还要先判断.
SELinux先判断文件的布尔值--> 文本的上下文类型--> 文件的-rwo------的文件权限.都通过了.才能访问.