首页 > 系统相关 >是不是都把SELinux给忘了?

是不是都把SELinux给忘了?

时间:2023-04-24 09:57:01浏览次数:39  
标签:FPM SELinux 是不是 Nginx 端口 MySQL PHP

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,并根据需要进行相应的配置。

  1. 查看SELinux状态和模式
[root@workhost ~]# sestatus 
SELinux status:                 disabled
# 或
[root@workhost ~]# getenforce 
Disabled
  1. 永久开启SELinux
cat > /etc/selinux/config << EOF
SELINUX=enforcing
SELINUXTYPE=targeted
EOF

重启系统,使更改生效。

注意:SELinux将在系统启动时自动启用并使用指定的模式。如果之前禁用了SELinux,现在启用它可能会影响系统的行为。

重启后再次查看状态:

[root@workhost ~]# sestatus 
SELinux status:                 enabled
Current mode:                   enforcing
  1. 配置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服务绑定到这些端口。

  1. 配置SELinux以允许MySQL服务访问。由于MySQL服务需要读取和写入数据文件,因此需要修改SELinux策略以允许它执行此操作。可以使用以下命令为MySQL配置SELinux:
[root@workhost ~]# semanage port -a -t mysqld_port_t -p tcp 3306

将端口3306添加到SELinux的mysqld_port_t类型中,以允许MySQL服务访问该端口。

  1. 配置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数据库。

  1. 测试SELinux配置,确保所有服务都可以正常访问并运行
[root@workhost ~]# systemctl restart nginx php-fpm

将重新启动Nginx和PHP-FPM服务,并检查是否出现任何错误。

还可以使用以下命令测试MySQL的配置:

[root@workhost ~]# mysql -h 192.168.11.10 -u cmdbuser -p

此命令将连接到MySQL数据库并验证是否可以正常读取和写入数据。

  1. 关于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。

  1. Enforcing模式:是默认模式,也是最安全的模式,它强制执行SELinux策略,只允许访问和操作经过授权的资源,对未授权的访问进行拒绝和记录。如果一个进程或用户尝试访问或操作未授权的资源,它将被拒绝并记录日志。
  2. Permissive模式:与Enforcing模式类似,但是它不会拒绝未授权的访问和操作,而是记录日志。这个模式可以用来测试策略,找到需要修改的地方。
  3. Disabled模式:禁用SELinux,系统将不会应用SELinux的策略,所有的访问和操作将以传统的Linux权限控制方式进行。

总之,SELinux的工作机制是通过标签和策略来实现强制访问控制的。它的Enforcing模式可以帮助系统保护资源,减少潜在的安全漏洞和攻击。

本文转载于WX公众号:不背锅运维(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/ceHqfTdJ1NbAAFQjJkiyEQ

标签:FPM,SELinux,是不是,Nginx,端口,MySQL,PHP
From: https://www.cnblogs.com/ttropsstack/p/17348515.html

相关文章

  • 30 29 | 如何判断一个数据库是不是出问题了?
    我在第25和27篇文章中,和你介绍了主备切换流程。通过这些内容的讲解,你应该已经很清楚了:在一主一备的双M架构里,主备切换只需要把客户端流量切到备库;而在一主多从架构里,主备切换除了要把客户端流量切到备库外,还需要把从库接到新主库上。主备切换有两种场景,一种是主动切换,一种是被动......
  • 如何判断浏览器的请求头是不是结束
    \r\n\r\n好像是结束符packagecom.maple.detail3;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.Prin......
  • 判断是不是手机
    _isMobile(){letflag=navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|WindowsPhone)/i);returnflag;},......
  • 校验输入的是不是正则表单式
    checkCanonical(rule,value,callback){if(value){letisReg=truetry{isReg=eval(value)instanceofRegExp}catch(e){isReg=false}returnisReg}},......
  • 判断字符串是不是正则表达式
    :rules="[{required:true,trigger:'blur',validator:this.checkCanonical},]"checkCanonical(rule,value,callback){if(value){letisReg=truetry{isReg=eval(......
  • 你是不是暴露了?
    作者:袁首京原创文章,转载时请保留此声明,并给出原文连接。如果您是计算机相关从业人员,那么应该经历不止一次网络安全专项检查了,你肯定是收到过信息系统技术检测报告,要求你加强风险监测,确保你提供的系统服务坚实可靠了。没检测到问题还好,检测到问题的话,有些处理起来还是挺麻烦......
  • SELinux权限
    1.DAC和MAC在了解SELinux之前,我们先来了解一下Linux的两种访问控制策略:DAC和MAC1.1LinuxDACDAC,自主访问控制(DiscretionaryAccesscontrol)。系统只提供基本的验证,......
  • Java项目是不是分布式,真有那么重要吗?
    大家好,我是3y啊。大概不知道从什么时候,「微服务」「分布式」这两个词又再次频繁出现在我的视线里。「微服务」「分布式」在我刚毕业的时候还是比较关注的,那时候还入门了......
  • nacos配置中心修改了微服务的配置信息,微服务应用如果想加载最新的配置信息,是不是需要
    1.nacos配置中心修改了微服务的配置信息,微服务应用如果想加载最新的配置信息,是不是需要重新一下微服务应用呢不需要,nacos配置中心可以实现配置的动态刷新,当你修改了配置......
  • Linux查看、修改SELinux的状态
    SELinux(Security-Enhanced ​​Linux​​)是美国国家安全局(NSA)对于强制访问控制的实现,是 ​​linux​​历史上最杰出的新安全子系统。但是我们一般都不用它,因为它管的......