虽然关闭SElinux后使在运维事情中更加方便,但始终都是要在“方便”和“麻烦”之间做出选择,安全了就自然会变得麻烦,但方便了也不一定是不屈安,但也不一定是安全。如果是处于DMZ区域对外供应做事的linux操作系统关闭SELinux是有一定风险的,如果系统中存在潜在的安全漏洞或攻击,关闭 SELinux 可能会降落系统的安全性。
实沙场景大部分人选择关闭SElinux,从而导致很多人对SElinux的配置方法都已经遗忘了吧?本篇对SElinux的配置做个分享。直接通过一个可能在实际运维事情中用得上的小场景案例来解释全体配置过程,勾起一下你那惨痛的背锅经历。
场景:假设有一台Web做事器,须要运行Nginx和PHP-FPM来供应Web做事,同时须要访问MySQL数据库。为了加强做事器的安全性,须要启用SELinux,并根据须要进行相应的配置。

[root@workhost ~]# sestatus SELinux status: disabled# 或[root@workhost ~]# getenforce Disabled
永久开启SELinux
cat > /etc/selinux/config << EOFSELINUX=enforcingSELINUXTYPE=targetedEOF
重启系统,使变动生效。
把稳:SELinux将在系统启动时自动启用并利用指定的模式。如果之前禁用了SELinux,现在启用它可能会影响系统的行为。
重启后再次查看状态:
[root@workhost ~]# sestatus SELinux status: enabledCurrent mode: enforcing
配置SELinux以许可Nginx和PHP-FPM做事供应Web做事。由于Nginx和PHP-FPM须要绑定到网络端口,须要修正SELinux策略以许可它们实行此操作,为Nginx和PHP-FPM配置SELinux:
[root@workhost ~]# semanage port -a -t http_port_t -p tcp 80[root@workhost ~]# semanage port -a -t http_port_t -p tcp 443
将端口80和443添加到SELinux的http_port_t类型中,以许可Nginx和PHP-FPM做事绑定到这些端口。
配置SELinux以许可MySQL做事访问。由于MySQL做事须要读取和写入数据文件,因此须要修正SELinux策略以许可它实行此操作。可以利用以下命令为MySQL配置SELinux:[root@workhost ~]# semanage port -a -t mysqld_port_t -p tcp 3306
将端口3306添加到SELinux的mysqld_port_t类型中,以许可MySQL做事访问该端口。
配置SELinux以许可Nginx和PHP-FPM做事访问MySQL数据库,修正SELinux策略以许可它们实行此操作:[root@workhost ~]# setsebool -P httpd_can_network_connect_db 1
将SELinux的httpd_can_network_connect_db选项设置为1,以许可Nginx和PHP-FPM做事连接到MySQL数据库。
测试SELinux配置,确保所有做事都可以正常访问并运行[root@workhost ~]# systemctl restart nginx php-fpm
将重新启动Nginx和PHP-FPM做事,并检讨是否涌现任何缺点。
还可以利用以下命令测试MySQL的配置:
[root@workhost ~]# mysql -h 192.168.11.10 -u cmdbuser -p
此命令将连接到MySQL数据库并验证是否可以正常读取和写入数据。
关于php-fpm端口把稳了,默认情形下,PHP-FPM并不该用网络端口来供应做事,而是通过UNIX套接字(Unix socket)来与Nginx进行通信。我的Nginx和PHP-FPM都在同一台做事器上,则不须要为PHP-FPM配置SELinux端口。如果PHP-FPM须要与其他做事器进行通信,例如通过网络连接到一个远程的数据库做事器,那么就须要为PHP-FPM配置SELinux端口以许可它连接到其他做事器的网络端口。在这种情形下,可以利用semanage命令为PHP-FPM配置SELinux端口,就像刚才为MySQL做事做的那样。
末了的总结SELinux的事情机制基于标签(Label)和策略(Policy)。每个进程、文件、目录、套接字等系统资源都被授予一个唯一的标签,这些标签被用来指示该资源的安全级别。策略则定义了哪些进程或用户可以访问或操作哪些资源,并规定了对这些资源的访问权限。
SELinux有三种模式:Enforcing、Permissive和Disabled。
Enforcing模式:是默认模式,也是最安全的模式,它逼迫实行SELinux策略,只许可访问和操作经由授权的资源,对未授权的访问进行谢绝和记录。如果一个进程或用户考试测验访问或操作未授权的资源,它将被谢绝并记录日志。Permissive模式:与Enforcing模式类似,但是它不会谢绝未授权的访问和操作,而是记录日志。这个模式可以用来测试策略,找到须要修正的地方。Disabled模式:禁用SELinux,系统将不会运用SELinux的策略,所有的访问和操作将以传统的Linux权限掌握办法进行。总之,SELinux的事情机制是通过标签和策略来实现逼迫访问掌握的。它的Enforcing模式可以帮助系统保护资源,减少潜在的安全漏洞和攻击。
本文转载于WX"大众年夜众号:不背锅运维(喜好的盆友关注我们):https://mp.weixin.qq.com/s/ceHqfTdJ1NbAAFQjJkiyEQ