阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

重启Nginx出现bind() to 0.0.0.0:8088 failed (13: Permission denied)

134次阅读
没有评论

共计 1246 个字符,预计需要花费 4 分钟才能阅读完成。

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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计1246字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中