ESlinux 为 Nginx 添加额外端口

在启用 SELinux 的情况下, 默认情况下系统会阻止非标准端口的使用。如果你想启用一个非常用端口 (例如 8090), 你需要手动将该端口添加到 SELinux 的白名单中

操作步骤

安装 semanage 命令

如果你遇到 semanage: command not found 错误, 说明你的系统未安装 semanage 工具。你可以根据不同的 CentOS 版本来安装所需的软件包

查找命令对应的软件包名称

[root@123123 ~]# yum provides /usr/sbin/semanage
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
policycoreutils-python-2.5-33.el7.x86_64 : SELinux policy core python utilities
Repo        : base
Matched from:
Filename    : /usr/sbin/semanage

CentOS 7 安装命令

yum install policycoreutils-python

CentOS 8 安装命令

yum install policycoreutils-python-utils

查看 Nginx 启动的用户组

Nginx 启动时会使用以下用户组

user  nginx;

配置文件测试的端口

在 Nginx 配置文件中, 需要设置一些端口来监听, 例如

server {
    listen 8090;             # does not work
    # listen 8080;           # works
    # listen 9090;           # does not work
    # listen 9090 default;   # does not work neighter
    # listen 80;             # works!
    server_name <some IP>;
    ...
}

查看 SELinux HTTP 端口列表

你可以通过以下命令查看当前 SELinux 所允许的 HTTP 端口

semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

添加自定义端口

如果你希望在 SELinux 中启用端口 8090, 可以执行以下命令

semanage port -a -t http_port_t -p tcp 8090

通过以上步骤, 你可以在 SELinux 环境下启用自定义端口, 以便 Nginx 或其他服务能够绑定并使用这些端口。如果没有添加到白名单, SELinux 将阻止应用程序绑定到这些端口。


原文

nginx: no permission to bind port 8090 but it binds to 80 and 8080
How to Fix ‘semanage command’ Not Found Error in CentOS/RHEL

最后更新于 2020-03-13
使用 Hugo 构建
主题 StackJimmy 设计