OracleLinux9 安装 fcgiwrap 并添加 selinux 规则以在 nginx 调用

fcgiwrap在其他系统上一般直接输命令就能安装,但是OracleLinux9会提示找不到软件包。安装成功后,selinux也会阻碍nginx的调用。

原因

OracleLinux9的这个软件包位于默认不启用的developer仓库。

安装fcgiwrap

  1. 编辑配置,将repo启用
bash 复制代码
sudo vi /etc/yum.repos.d/oracle-epel-ol9.repo
sudo dnf update
  1. 成功安装
bash 复制代码
sudo dnf install fcgiwrap

手动配置fcgiwrap服务

安装的fcgiwrap并没有systemd服务,因此需要手动配置

  1. 新建/var/run/nginx目录
bash 复制代码
cd /var/run
sudo mkdir nginx
sudo chown nginx:nginx nginx
  1. 创建fcgiwrap服务(需要先安装nginx)
bash 复制代码
sudo dnf install nginx
sudo nano /etc/systemd/system/fcgiwrap.service

写入如下内容

bash 复制代码
[Unit]
Description=Simple CGI Server
After=network.target

[Service]
ExecStart=/usr/sbin/fcgiwrap -s unix:/run/nginx/fcgiwrap.socket
User=nginx
Group=nginx

[Install]
WantedBy=multi-user.target
  1. 刷新并启动服务,查看运行状态
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start fcgiwrap
sudo systemctl status fcgiwrap
  1. 启动正常后,设置开机启动
bash 复制代码
sudo systemctl enable fcgiwrap

配置nginx CGI

  1. 进入某网站的配置
bash 复制代码
sudo vi /etc/nginx/conf.d/yourweb.conf
  1. 写入cgi配置
css 复制代码
location /cgi-bin/yourcgi {
	include fastcgi_params;
	fastcgi_pass unix:/var/run/nginx/fcgiwrap.socket;
	fastcgi_param SCRIPT_FILENAME /path/to/your/cgi/file;
	# 继续传递其他参数...
}

解决selinux问题

在这一步后,nginx对cgi的访问仍然会被selinux拦截,因此还需要放行访问。请按如下步骤操作

  1. 创建审计规则文件夹
bash 复制代码
sudo mkdir /etc/selinux/audit2allow
cd /etc/selinux/audit2allow
  1. 访问目标cgi路径,被拒绝访问
  2. 查看审计拦截情况
bash 复制代码
sudo cat /var/log/audit/audit.log | grep nginx | grep denied

输出示例如下

bash 复制代码
type=AVC msg=audit(1699720883.997:1431781): avc:  denied  { connectto } for  pid=2205472 comm="nginx" path="/var/run/nginx/fcgiwrap.socket" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:unconfined_service_t:s0 tclass=unix_stream_socket permissive=0
  1. 基于此创建放行规则
bash 复制代码
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M allow_nginx_proxy_fcgiwrap

正常情况下输出:

bash 复制代码
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i allow_nginx_proxy_fcgiwrap.pp
  1. 加载放行规则
bash 复制代码
sudo semodule -i allow_nginx_proxy_fcgiwrap.pp
  1. 检查是否能正常访问cgi,如不行,重复执行2~6直至成功访问。
  2. 大功告成!
相关推荐
讯捷蓝达3 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落5 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
陈希1236 小时前
Nginx 从入门到能扛事:反向代理、负载均衡与 HTTPS 实战
nginx·https·负载均衡
lisanmengmeng6 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮7 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹7 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_7 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_7 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS7 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无忧_wy7 小时前
MoneyPrinterTurbo 自动化视频生成实战指南
运维·人工智能·自动化·音视频