SElinux
概述
SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency) 领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,相当于B1级的军事安全性能。比MS NT的C2等高得多。
SELinux起源于自1980开始的微内核和操作系统安全的研究,这两条研究线路最后形成了一个叫做的分布式信任计算机(Distribute Trusted Mach (DTMach))的项目,它融合了早期研究项目的成果 (LOCK【锁】,它包含一组安全内核类型强制;Trusted Mach【信任计算机】,它将多层安全控制合并到计算机微内核中)。美国国家安全局的研究组织参加了DTMach项目,付出了巨大努力,并且继续参与了大量的后续安全微内核项目。最终,这些工作和努力导致了一个新的项目产生,那就是Flask,它支持更丰富的动态类型的强制机制。
由于不同平台对这这项技术没有广泛使用,NAS认为需要在大量的社团中展示这个技术,以说明它的持久生命力,并收集广泛的使用支持意见。在1999年夏天,NSA开始在Linux内核中实现Flask安全架构,在2000年十二月,NSA发布了这项研究的第一个公共版本,叫做安全增强的Linux。因为是在主流的操作系统中实现的,所以SELinux开始受到Linux社区的注意,SELinux最迟是在2.2.x内核中以一套内核补丁的形式发布的。
随着2001年Linux内核高级会议在加拿大渥太华顺利召开,Linux安全模型(LSM[7])项目开始为Linux内核创建灵活的框架,允许不同的安全扩展添加到Linux中。NSA和SELinux社区是SELinux的主要贡献者,SELinux帮助LSM实现了大量的需求,为了与LSM一起工作,NSA开始修改SELinux使用LSM框架。2002年八月LSM核心特性被集成到Linux内核主线,同时被合并到Linux 2.6内核。2003 年八月,NSA在开源社区的帮助下,完成了SELinux到LSM框架的迁移,至此,SELinux进入Linux 2.6内核主线,SELinux已经成为一种全功能的LSM模块,包括在核心Linux代码集中。
数个Linux发行版开始在2.6内核中不同程度使用SELinux特性,但最主要是靠Red Hat发起的Fedora Core项目才使SELinux具备企业级应用能力,NSA和Red Hat开始联合集成SELinux,将其作为Fedora Core Linux发行版的一部分。在Red Hat参与之前,SELinux总是作为一个附加的软件包,需要专家级任务才能进行集成。Red Hat开始采取行动让SELinux成为主流发行版的一部分,完成了用户空间工具和服务的修改,默认开启增强的安全保护。从Fedora Core 2开始,SELinux和它的
支持基础架构以及工具得到改进。在2005年早些时候,Red Hat发布了它的Enterprise Linux 4(RHEL 4),在这个版本中,SELinux默认就是完全开启的,SELinux和强制访问控制已经进入了主流操作系统和市场。
应用SELinux后,可以减轻恶意攻击或恶意软件带来的灾难,并提供对机密性和完整性有很高要求的信息很高的安全保障。普通Linux安全和传统Unix系统一样,基于自主存取控制方法,即DAC,只要符合规定的权限,如规定的所有者和文件属性等,就可存取资源。在传统的安全机制下,一些通过setuid/setgid的程序就产生了严重安全隐患,甚至一些错误的配置就可引发巨大的漏洞,被轻易攻击。
而SELinux则基于强制存取控制方法,即MAC,透过强制性的安全策略,应用程序或用户必须同时符合DAC及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响其他正常运作的程序和应用,并保持它们的安全系统结构。
DAC和MAC
SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。DAC的核心思想很简单,就是:进程理论上所拥有的权限与执行它的用户的权限相同。
比如,以root用户启动进程,那么该进程就有root用户的权限,在Linux系统上能干任何事情;
MAC(Mandatory Access Control),强制访问控制,即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限;
DAC:
1.自主访问控制
2.主体(Process)的权限Capability决定了它能访问和操作什么ROOT进程可以访问和操作一切!
3.传统(legacy)Linux的安全模式,基于UID/GID/Capability
MAC:
1.强制访问控制
2.系统的Policy决定了主体能操作访问哪些客体
3.即便是ROOT进程,系统Policy配置了你能做什么,你只能做什么,在下MAC模式,ROOT进程和普通进程是无区别对待的。
selinux的操作
chcon 修改安全上下文
chcon -t samba_share_t index.html
httpd 的安全上下文是httpd_sys_content_t
ps auxZ | grep httpd
Z可以查看安全上下文
ls -lZ 可以查看文件的安全上下文
semanage fcontext -l
可以查看安全上下文的配置
selinux 的安全上下文配置
restorecon /var/www/logs/
重新加载 /var/www/logs目录的安全上下文
semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?'
给/web 目录下所有的文件配置安全上下文为httpd_sys_content_t
a
为添加t
指定安全上下文类型
restorecon -Rv .
重新加载当前目录的安全上下文
R
表示递归v
表示显示详细信息
touch /.autorelabel
重启的时候会把系统里的所有文件重新打标安全上下文,重启完之后该文件将会被删除
httpd配置文件中修改了配置文件中的端口号后,启动会失败,因为selinux未打selinux标记
semanage port -a -t http_port_t -p tcp 12345
将12345端口打上selinux标志
semanage port -l | grep 12345
getenforce
获取当前selinux状态
1、Enforcing 强制模式,只有满足selinux的才允许访问
2、Permissive 宽容模式,不满足的,再日志中报错,但是不阻止访问,日志放置在/var/log/audit/audit.log
3、Disable 当前selinux 为关闭
setenforce 0
设置为Permissive
setenforce 1
设置为Enforcing
这两种设置都是临时的,这两种selinux都是开启的
setenforce 不能设置disable
配置文件中修改:
/etc/selinux/config
修改配置文件后,要重启后才生效
SELINUX=disabled 重启后selinux才是关闭状态
disabled 改为enforcing 或者 permissive 时,状态互换,重启操作系统时,会重新打标
semanage boolean -l | grep samba
查看安全上下文的某些权限是否允许
setsebool -P samba_create_home_dirs off
关闭 samba_create_home_dirs
具体设置,要看服务的官方文档要设置哪些