原始文件上下文为/run/unicorn.sock
tcontext=system_u:object_r:var_run_t:s0
当我启动套接字单元时,如何使文件上下文自动成为 system_u:object_r: httpd_var_run_t :s0 ,以便 nginx 服务器可以连接并写入套接字文件而不会被 SELinux 拒绝。
这是我创建的套接字守护进程/usr/lib/systemd/system/unicorn.socket
[Unit]
Description=unicorn socket
[Socket]
ListenStream=/run/unicorn.sock
[Install]
WantedBy=sockets.target
以及相应的/usr/lib/systemd/system/unicorn.service
[Unit]
Description=unicorn daemon
Requires=unicorn.socket
After=network.target
[Service]
User=ec2-user
Group=ec2-user
WorkingDirectory=/home/ec2-user/product-catalog
ExecStart=/home/ec2-user/product-catalog/venv/bin/gunicorn \
--access-logfile - \
-k uvicorn.workers.UvicornWorker \
--workers 3 \
--bind unix:/run/unicorn.sock \
app:app
[Install]
WantedBy=multi-user.target
我注意到 php-fpm 的套接字文件位于 /run/php-fpm
当 systemd 创建文件和目录时,它使用您的 selinux 策略来分配标签。这意味着第一步是使用有关套接字的信息更新您的 selinux 策略数据库:
给定一个这样的套接字单元:
还有这样的服务单位:
这让我们:
我还必须安装以下 selinux 策略模块:
要安装模块(假设它存储在
nginx_unix_socket.te
):这应该就是您所需要的。我的 nginx 配置中有:
完成后,
curl localhost
成功连接到绑定到的gunicorn服务/run/unicorn.sock
。