Vij*_*man 16 reverse-proxy nginx selinux
我正在使用端口8080上的端口8081和Nginx监听应用程序.代理传递语句如下所示:
$ cat /var/etc/opt/lj/output/services/abc.servicemanager.conf
location /api/abc.servicemanager/1.0 { proxy_pass http://localhost:8081;}
Run Code Online (Sandbox Code Playgroud)
在nginx.conf,我将此文件包含为:
include /etc/nginx/conf.d/services/*.conf;
Run Code Online (Sandbox Code Playgroud)
这/etc/nginx/conf.d/service是一个符号链接:
# ll /etc/nginx/conf.d/
lrwxrwxrwx. 1 root root 39 Dec 10 00:19 services -> ../../../var/etc/opt/lj/output/services
Run Code Online (Sandbox Code Playgroud)
这是一个CentOS 7.0 SELinux Enabled系统.如果我setenforce 0,并使它Permissive,我没有看到任何问题.所以文件在正确的位置,路径没有问题.如果SELinux正在执行,我在审计日志中看到以下内容:
type=AVC msg=audit(1418348761.372:100930): avc: denied { getattr } for pid=3936 comm="nginx" path="/var/etc/opt/lj/output/services/abc.servicemanager.conf" dev="xvda1" ino=11063393 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
Run Code Online (Sandbox Code Playgroud)
我想知道如何启用Nginx来查找conf文件而无需禁用SELinux.
Cri*_*scu 33
值得注意的是SELinux中的初学者,如果您的代理服务在8080上运行,您可以使用以下命令而无需编译策略.
$ sudo setsebool httpd_can_network_connect 1 -P
Run Code Online (Sandbox Code Playgroud)
Vij*_*man 24
阅读audit2allow并使用它来创建一个策略,以允许访问Nginx的被拒绝请求.
第1步涉及运行audit2allow目标nginxlocalconf:
$ sudo grep nginx /var/log/audit/audit.log | \
grep denied | audit2allow -m nginxlocalconf > nginxlocalconf.te
Run Code Online (Sandbox Code Playgroud)
第2步,审核结果:
$ cat nginxlocalconf.te
module nginxlocalconf 1.0;
require {
type httpd_t;
type var_t;
type transproxy_port_t;
class tcp_socket name_connect;
class file { read getattr open };
}
#============= httpd_t ==============
#!!!! This avc can be allowed using the boolean 'httpd_can_network_connect'
allow httpd_t transproxy_port_t:tcp_socket name_connect;
allow httpd_t var_t:file { read getattr open };
Run Code Online (Sandbox Code Playgroud)
查看要激活的步骤:
$ sudo grep nginx /var/log/audit/audit.log | grep denied | \
audit2allow -M nginxlocalconf
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i nginxlocalconf.pp
Run Code Online (Sandbox Code Playgroud)
第3步,主动:
$ sudo semodule -i nginxlocalconf.pp
Run Code Online (Sandbox Code Playgroud)
始终更喜欢更改类型而不是创建自定义策略。在这种情况下,Nginx 将提供该httpd_sys_content_t类型的文件。假设您的文件位于 /var/www 中:
semanage fcontext -a -t httpd_sys_content_t /var/www/*
restorecon -R -v /var/www
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您有另一个端口或自定义端口,请允许:
在 http 中显示允许端口:
semanage port -l | grep http
Run Code Online (Sandbox Code Playgroud)
这是我的本地主机中的输出:
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Run Code Online (Sandbox Code Playgroud)
并允许 8081:
semanage port -a -t http_port_t -p tcp 8081
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20088 次 |
| 最近记录: |