contOS 7中selinux不允許使用自定義端口

首先聲明:如果不使用selinux則可以跳過本文章

在contOS 7上安裝了nginx服務,爲了項目需要必須修改nginx的默認80端口爲8088,修改配置文件後重啓nginx服務,查看日誌報以下錯誤:

[emerg] 9011#0: bind() to 0.0.0.0:8088 failed (13: Permission denied)

權限被拒絕,開始以爲是端口被別的程序佔用了,查看活動端口然而沒有程序使用此端口,網上搜索說是需要root權限,可我執行的是root用戶啊,這就挺鬱悶的,後來還是給力的google給了答案,是因爲selinux默認只允許80,81,443,8008,8009,8443,9000用作HTTP端口使用

要查看selinux允許的http端口必須使用semanage命令,下面首先安裝semanage命令工具

在安裝semanage工具之前,我們先安裝一個tab鍵補齊二級命令功能工具bash-completion:

yum -y install bash-completion

直接通過yum安裝發現semanage發現沒有此包:

# yum install semange
...
NO package semanage available.

那先查找semanage命令是哪個軟件包提供此命令

# yum provides semanage

或者使用下面的命令:

# yum whatprovides /usr/sbin/semanage

我們發現需要安裝包policycoreutils-python才能使用semanage命令

現在我們通過yum安裝此軟件包,可以使用tab補齊:

# yum install policycoreutils-python.x86_64

現在終於可以使用semanage了,我們先查看下http允許訪問的端口:

# semanage port -l | grep http_port_t

http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

然後我們將需要使用的端口8088加入到端口列表中:

# semanage port -a -t http_port_t -p tcp 8088

# semanage port -l | grep http_port_t

http_port_t                    tcp      8088, 80, 81, 443, 488, 8008, 8009, 8443, 9000

好了現在nginx可以使用8088端口了

selinux的日誌在/var/log/audit/audit.log

但此文件記錄的信息不夠明顯,很難看出來,我們可以藉助audit2why和audit2allow工具查看,這兩個工具也是policycoreutils-python軟件包提供的。

# audit2why < /var/log/audit/audit.log

收集selinux工具的日誌,還有另外一個工具setroubleshoot,對應的軟件包爲setroubleshoot-server











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章