一、问题描述:
当/etc/selinux/conf被要求必须是SELINUX=enforcing,不被允许使用setenforce 0宽松模式
我们启动httpd就会报错:
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
vim /etc/httpd/conf/httpd.conf文件,发现端口是82
二、强制执行(Enforcing)机制
由图可知,SELinux的工作模式有三种,enforcing是最严格的,不匹配就推出。
Linux强制执行(Enforcing)机制是一个非常重要的安全特性,它可以帮助系统管理员强制执行访问控制规则,从而保护系统资源的安全性。
1、什么是Linux强制执行机制
(1)Linux的强制执行机制是安全增强型Linux的一个组成部分,它可以强制执行SELinux策略中定义的访问控制规则,从而保护系统资源的安全性。
(2)如果一个进程想要访问某个资源,例如文件、目录或者端口,这个请求就需要通过SELinux的访问控制规则来验证(只有满足规则的请求才被允许,否则将被拒绝)。
(3)Linux的强制执行机制可以在系统层面强制执行SELinux的访问控制规则,确保系统资源的安全性。
2、Linux强执行机制的应用场景
(1)Linux的强制执行机制通常用于高安全性的系统(例如金融、等敏感领域):
通过使用强制执行机制,系统管理员可以强制执行特定的访问控制规则,从而限制对系统资源的访问。
(2)强制执行机制还可用于强制执行特定的安全策略(例如权限管理、文件保护和日志位置等方面):
这意味着管理员可以通过强制执行机制来保护系统资源中的重要数据和文件,确保他们不被未经授权的人员访问和修改。强制执行机制还可以帮助管理员监视系统活动,例如登录、文件读取和修改等情况。
浏览器访问的网址无非就是看协议、ip/域名、端口,协议是http,ip也设置了,那就从最简单的端口入手,先查 SELinux 允许的端口:
使用semanage port -l | grep http #查 SELinux 允许的端口
3、修改SELinux策略
为了解决这个问题,需要用到semanage命令:
semanage是用于配置SELinux策略某些元素而无需修改或重新编译策略源的工具
3.1 安装semanage命令需要的软件包
1) yum provides semanage #查询仓库中那个软件产生semanage
2) yum -y install policycoreutils-python-utils #由上一个命令可知有semanage命令的软件是policycoreutils-python-utils
3.2 安装setroubleshoot-server软件包
这样才能把SELinux消息发送至/var/log/messages文件中,甚至贴心地推荐适合的semanage语法来解决问题。
注:如果熟练掌握semanage命令的语法,就忽略这一步
1) yum -y install setroubleshoot-server
2) systemctl restart httpd
继续报错就可在/var/log/messages文件查看错误日志了
3)cat /var/log/messages | grep -i setrouble
从日志信息中推断,解决方法是在命令行输入“semanage port -a -t http_port_t -p tcp 82”这个命令
4)semanage port -a -t http_port_t -p tcp 82
5)systemctl restart httpd
systemctl enable httpd
此时应该是成功了
注意:这些方案是在防火墙firewalld被stop服务或者卸载的前提下,不想卸载就设置为可信任:firewall-cmd --set-default-zone=trusted
然后在浏览器输入http://172.25.0.25:82验证效果
没有浏览器就在linux命令行使用curl http://172.25.0.25:82验证效果