解決SELinux阻止Nginx訪問服務


在使用 yum 安裝 nginx 后可能會出現配置完成后卻無法訪問的問題,查看 audit.log 會發現類似於以下的錯誤信息

audit.log

出現此問題的原因是 SELinux 基於最小權限原則默認攔截了 Nginx 的請求,SELinux 是 Linux 的安全子系統,提供更安全的訪問控制,許多運維人員嫌麻煩可能會直接關閉此組件,但是治標不治本,本文演示在啟用 SELinux 基礎上完成對 Nginx 請求的放行。

  1. 首先我們需要確認 SELinux 的運行狀態,當然出現此問題肯定是運行中。
[root@centos-server-02 local]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

臨時關閉 SELinux:setenforce 0
臨時啟動 SELinux:setenforce 1
永久關閉/啟動:修改/etc/sysconfig/selinux后重啟系統

  1. 開啟 HTTP 訪問。
[root@centos-server-01 audit]# setsebool -P httpd_can_network_connect 1
  1. 分析現有日志並生成關聯模塊,執行完此命令可以看到在當前目錄下會生成后綴為*.pp*.te文件,如果該服務器上的服務未被訪問過,此命令執行無效。
[root@centos-server-01 audit]# ausearch -c 'nginx' --raw | audit2allow -M my-nginx
  1. 加載前一步生成的模塊內容
[root@centos-server-01 audit]# semodule -i my-nginx.pp
  1. 執行完成以上命令后即可對 Nginx 進行正常訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM