首先聲明:如果不使用SELinux則可以跳過本文章。
在ContOS 7上安裝了Nginx服務(wù),為了項(xiàng)目需要必須修改Nginx的默認(rèn)80端口為8088,修改配置文件后重啟Nginx服務(wù),查看日志報(bào)以下錯(cuò)誤:
[emerg] 9011#0: bind() to 0.0.0.0:8088 failed (13: Permission denied)
權(quán)限被拒絕,開始以為是端口被別的程序占用了,查看活動(dòng)端口然而沒有程序使用此端口,網(wǎng)上搜索說是需要root權(quán)限,可我執(zhí)行的是root用戶啊,這就挺郁悶的,后來(lái)還是給力的google給了答案,是因?yàn)閟elinux默認(rèn)只允許80,81,443,8008,8009,8443,9000用作HTTP端口使用
要查看selinux允許的http端口必須使用semanage命令,下面首先安裝semanage命令工具
在安裝semanage工具之前,我們先安裝一個(gè)tab鍵補(bǔ)齊二級(jí)命令功能工具bash-completion:
yum -y install bash-completion
直接通過yum安裝發(fā)現(xiàn)semanage發(fā)現(xiàn)沒有此包:
# yum install semange
…
NO package semanage available.
那先查找semanage命令是哪個(gè)軟件包提供此命令
# yum provides semanage
或者使用下面的命令:
# yum whatprovides /usr/sbin/semanage
我們發(fā)現(xiàn)需要安裝包policycoreutils-Python才能使用semanage命令
現(xiàn)在我們通過yum安裝此軟件包,可以使用tab補(bǔ)齊:
# yum install policycoreutils-python.x86_64
現(xiàn)在終于可以使用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
好了現(xiàn)在nginx可以使用8088端口了
selinux的日志在/var/log/audit/audit.log
但此文件記錄的信息不夠明顯,很難看出來(lái),我們可以借助audit2why和audit2allow工具查看,這兩個(gè)工具也是policycoreutils-python軟件包提供的。
# audit2why < /var/log/audit/audit.log
收集selinux工具的日志,還有另外一個(gè)工具setroubleshoot,對(duì)應(yīng)的軟件包為setroubleshoot-server