在启用 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