RHEL系列网站环境SELinux的设置

  1. 端口的设置
  2. 文件安全上下文类型的修改
  3. 布尔值的修改

​ 在搭建如LAMP或者LNMP等环境时,往往大家会设置selinux为宽容或者关闭状态,如使用setenforce 0或者编辑/etc/selinux/config等文件。出于安全考虑,这是不太好的,当然这很方便。

​ 需要注意的是,本文使用的semanage命令来自于软件policycoreutils-python-utils,同时,配置方式及命令也不止本文一种。

端口的设置

​ 在SELinux中,当时用非默认端口访问服务器时,服务器上的SELinux会认为从这个端口来的流量不是某个类型的,从而无法访问对应类型的进程。

  • 查看方式

    semanage port -l |grep http
    #查看SELinux认为的http相关的默认端口设置
  • 配置方式

    semanage port  -a -t http_port_t -p 82 tcp
    #将非默认端口82加入到http的端口类型中,从而让SELinux认为从82端口进来的流量是http流量,可以使用httpd类型的进程。实际上,如果不这样设置,而贸然将httpd或者nginx的监听端口改为82,则相应程序无法启动。

端口类型的查看:netstat -anZ

进程类型的查看:ps -efZ

文件安全上下文类型的修改

​ SELinux在targeted策略,enforcing模式下,强制进程只能访问与之相同类型的文件,并且记录到日志。

​ 通常情况下,创建的文件是无法被httpd等直接访问的,原因就是创建的文件安全上下文类型不匹配。

  • 查看方式

    ls  -Z  /var/www/html/index.html
  • 修改方式

    semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    #这样修改了/var/www/html文件夹的默认安全上下文类型,并且之后在文件夹中生成或者创建的文件,都将是这个类型。但此时尚未完全修改完毕。
    restorecon -Rv /var/www/html
    #将/var/www/html及其子文件安全上下文类型全部恢复默认。

通常情况下,做到此处,网站首页已经基本可以访问。

布尔值的修改

​ 但是,由于SELinux对程序功能的限制,此时,可能网站程序在调用时,仍然不能完成初始化,如Discuz!文件不可写(排除掉本身文件不可写)、wordpress提示手动创建文件等。

​ 这里的原因多数是因为SELinux限制了httpd或者Nginx程序的访问,通过日志查看audit2why < /var/log/audit/audit.log日志显示php-fpm访问受限

​ 发现如下提示:

Allow access by executing:
#setsebool -P httpd_unified 1

​ 可以看出,日志已经给出了解决办法,就是将httpd_unified的布尔值设置为开启。当然,个人偏好使用如下方式。

  • 查看方式

    semanage boolean -l |grep http
    semanage boolean -l -C 查看个人配置的布尔值
  • 配置方式

    semanage boolean -m --on httpd_unified

​ 此时,web服务器应该是可以正常使用的。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1096485692@qq.com