首先聲明:如果不使用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