SELinux是什么鬼
SELinux(Security-Enhanced Linux)是一个平安模块,内置于 Linux 内核中,为 Linux 零碎提供了一个额定的平安层。它通过施行强制访问控制(MAC)来限度过程的拜访权限,能够帮忙避免恶意软件和攻击者对系统的攻打。与传统的基于用户/组的访问控制(DAC)不同,SELinux 应用安全策略(如标签和规定)来治理过程、文件、网络端口等资源的拜访权限。这些策略能够依据特定的应用程序或零碎环境进行自定义配置,使系统管理员可能更精密地控制系统的安全性和爱护零碎免受潜在的平安威逼。
大部分都敞开了selinux
据我所理解,尽管SELinux提供了额定的平安保障,但在生产环境中,大部分工程师都是抉择敞开SELinux,包含我也是。这是因为在默认状况下,SELinux所提供的安全策略可能会对某些应用程序或零碎服务的失常运行产生限度或问题,这可能须要进行一些配置调整。因为SELinux自身的复杂性和学习老本,这些调整可能会须要破费较长的工夫来实现,从而影响生产环境的部署和保护效率。
尽管敞开SElinux后使在运维工作中更加不便,但始终都是要在“不便”和“麻烦”之间做出抉择,平安了就天然会变得麻烦,但不便了也不肯定是不平安,但也不肯定是平安。如果是处于DMZ区域对外提供服务的linux操作系统敞开SELinux是有肯定危险的,如果零碎中存在潜在的安全漏洞或攻打,敞开 SELinux 可能会升高零碎的安全性。
实战场景
大部分人抉择敞开SElinux,从而导致很多人对SElinux的配置办法都曾经忘记了吧?本篇对SElinux的配置做个分享。间接通过一个可能在理论运维工作中用得上的小场景案例来阐明整个配置过程,勾起一下你那惨痛的背锅经验。
场景:假如有一台Web服务器,须要运行Nginx和PHP-FPM来提供Web服务,同时须要拜访MySQL数据库。为了增强服务器的安全性,须要启用SELinux,并依据须要进行相应的配置。
- 查看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