linux异常处理:selinux配置错误导致无法重启
一次linux无法重启异常记录:
当时第一反应就是梳理最近的配置变更,特别是能预知相关的就是selinux配置变更。
原来是误将SELINUXTYPE看成SELINUX后,将其值改为disabled。导致操作系统服务启动,无法进入单用户模式。变更回来之后,一切正常。
解决方法一:
系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,使用上下键选择“kernel ” 一行,按‘e’键进入编辑,在末尾增加“enforcing=0”,按“enter”保存设置并退到上一层,按‘b’键继续引导后正常开机。收到
恢复“/etc/selinux/config”中的配置信息。再按需求修改“SELINUX=disabled”。
解决方法二:
直接更改。
下面就是谈谈selinux。
安全增强型 Linux(Security-Enhanced Linux)
SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
1、SELinux 的作用及权限管理机制
1.1 SELinux 的作用
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELinux)
1.2 DAC
传统的文件权限与帐号关系:自主式存取控制, DAC(Discretionary Access Control, DAC)
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。
只要访问这个资源的进程符合以上的条件就可以被访问。
而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。
这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。
1.3 MAC
以政策规则订定特定程序读取特定文件:委任式存取控制,MAC
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。
- 在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问
- 在 MAC 模式下,还要受进程允许访问目录范围的限制。
【总结理解】
- DAC是以用户为出发点来管理权限的
- MAC是以程序为出发点来管理权限的
- 以前:root--->启动httpd---->httpd可以访问系统任何文件
- 现在:root--->启动httpd---->httpd只能访问/var/www/目录(这是MAC)规则的约束
如果httpd想要访问其他目录,那么必须满足两个条件:DAC的rwx + MAC的规则
2、SELinux 基本概念
2.1 主体(Subject)
可以完全等同于进程。
2.2 目标(Object)
被主体访问的资源。可以是文件、目录、端口、设备等。
注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。
2.3 政策和规则(Policy & Rule)
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。
而哪些进程需要管制、要怎么管制是由政策决定的。
一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在 CentOS 7 系统中,有三套政策,分别是:
- targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
- minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
- mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
政策可以在 /etc/selinux/config 中设定。
【总结以上重要原理】SELinux 是透过 MAC 的方式来控管程序
- 主体 (Subject):SELinux 主要想要管理的就是程序,主体= process;
- 目标 (Object):主体程序将访问的文件,目标=文件;
- 政策 (Policy):由于程序与文件数量庞大,因此 SELinux 依据服务来制订基本的存取安全性政策。这些政策内包含有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。
2.4 安全上下文(Security Context)
主体能不能存取目标除了政策指定之外,主体与目标的安全性文本必须一致才能够顺利存取。
这个安全性文本 (security context) 有点类似文件系统的 rwx !安全性文本的内容与设定是非常重要的!
如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
SELinux 有三种工作模式,分别是:
- enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
- permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
- disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config 中设定。
如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。
需要注意,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文。
SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。
........