CentOS 7.x 重新启用SELinux,系统无法启动
一、SELinux ( Security-Enhanced Linux)简述
SELinux 是linux 开源社区帮助美国家国安全局开发的一个强制访问控制的安全子系统。SELinux代表安全增强型Linux,它是Linux内核安全模块。默认情况下,在我们用于诸如centOS之类的服务器的大多数Linux发行版中都启用了该功能。它提供了增强的安全性。它使您可以很好地控制所有程序和守护程序的活动,例如与外部程序进行通信或控制是否为特定程序建立外部连接。目的是让各服务进程都受到有效的控制,使其仅获取到本地的资源。
SELinux 的功能:从多方面监控违法行为
- 对服务程序的功能进行限制(SELinux域 限制,有效确保服务程序不能做出出格的事(越权,例如,普通软件,读取操作系统的密码))
- 对文件资源地访问限制(SELinux 安全上下文有效确保文件资源只能被其所属的服务程序进行访问)
二、查看当前SElinux 状态:
1. 查看SElinux详细状态
[root@localhost conf]# sestatus
SELinux status: enabled # 启用
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
2. 查看SELinux 当前运行模式
2.1 SELinux 运行模式
Open the file /etc/selinux/config and change the option SELINUX to disabled
if you open file you would see something like
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced. #强制
# permissive – SELinux prints warnings instead of enforcing. #警告
# disabled – No SELinux policy is loaded. #禁用
# SELINUXTYPE= can take one of these two values:
# targeted – Targeted processes are protected,
# mls – Multi Level Security protection.
SELINUXTYPE=targeted
2.2 查看SElinux
#查看当前SElinux 模式
[root@localhost conf]# getenforce
Enforcing
三、直接由disabled启用SELinux 导致Linux 无法正常启动
报错如下:
根据报错,分析:其autorelabel Service 运行异常,解决办法:
通过Google :
- 先将status 由disabled 调整到permissive 模式
- 重新标记
- 重启服务器
另通过查看当前 /etc/selinux/conf 文件semanage 有如下:
如图所示,错误,是由于权限标记导致系统无法正常启动(系统启动将会产生权限异常的警告)
为此只能进入单用户模式,这个请看:https://blog.youkuaiyun.com/AMimiDou_212/article/details/89152430
先看一下正常SELinux 安全上下文:
解决SELinux 重新启用导致系统无法正常启动:
分析原因:
- SELinux 标记缺失导致出现上述问题;
- SELinux 在禁用模式下,未对conf文件重新标记,导致如上;
解决思路: - 重新刷新SELinux 安全上下文标记 ## touch /.autorelabel
- 修改SELinux 状态到enforcing 强制启用 ## SELINUX=enforcing
- 重新启动服务器 ## reboot
查看config 修改后的安全上下文:
注:.autorelabel 是什么?
- 重启系统时,它会自动重新标记SElinux的文件系统。
- 首次为SELinux标记文件系统时,3.
- 在不同类型的策略之间切换时发生,例如从目标策略更改为严格策略。(由disabled切换到enforcing)
综上所述,SELinux 运行状态导致的系统无法正常先启动,是由于SELinux 直接由disabled 修改为enforcing 运行模式导致。
查看当前系统SELinux 域与安全上下文
查看SELinux 安全上下文:
[root@localhost conf]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Process contexts:
Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context: system_u:system_r:init_t:s0
/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023
File contexts:
Controlling terminal: unconfined_u:object_r:user_devpts_t:s0
/etc/passwd system_u:object_r:passwd_file_t:s0
/etc/shadow system_u:object_r:shadow_t:s0
/bin/bash system_u:object_r:shell_exec_t:s0
/bin/login system_u:object_r:login_exec_t:s0
/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty system_u:object_r:getty_exec_t:s0
/sbin/init system_u:object_r:bin_t:s0 -> system_u:object_r:init_exec_t:s0
/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
sestatus 命令
[root@localhost conf]# sestatus -h
Usage: sestatus [OPTION]
-v Verbose check of process and file contexts. #文件安全上下文
-b Display current state of booleans. #程序域
Without options, show SELinux status.