uWSGI está ignorando uid, gid e chown-socket

1

Estou tentando usar o uWSGI com o nginx. O problema raiz que estou tendo é que eu estou recebendo "Nenhum tal arquivo ou diretório" do nginx tentando se conectar ao arquivo de soquete uWSGI.

Quando uso as configurações a seguir, espero que as permissões do arquivo de soquete sejam alteradas. No entanto, eles não são. Continua mostrando uwsgi:uwsgi .

O erro do nginx é *17 connect() to unix:/tmp/myapp.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.1.122, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/tmp/myapp.sock:", host: "192.168.1.123:81"

myapp.ini (uwsgi)

[uwsgi]
chdir = /var/local/myapp
plugins = python
module = wsgi:app
home = /var/local/virtualenv/myapp
file = main.py
daemonize = /var/log/uwsgi/myapp.log
pidfile = /var/run/uwsgi/myapp.pid
socket = /tmp/%n.sock

chmod-socket = 777
chown-socket = webuser:nginx
uid = webuser
gid = nginx

vacuum = true

permissões de arquivo

srwxrwxrwx.  1 uwsgi uwsgi    0 Jul  3 12:43 myapp.sock

myapp.conf (nginx)

server {
    listen 81;

    access_log /var/log/nginx/myapp_access.log;
    error_log /var/log/nginx/myapp_error.log;

    location / {
        try_files $uri @yourapplication;
    }

    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myapp.sock;
    }
}

Eu também tentei isso:

usermod -a -G nginx uwsgi
usermod -a -G uwsgi nginx
useradd webuser
usermod -a -G nginx webuser
usermod -a -G uwsgi webuser

e eu tentei isso:

grep avc /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

EDITAR

e tentei mover o arquivo de meia para /var/run/uwsgi/myapp.sock . Nesse caso, o nginx me diz: connect() to unix:/var/run/uwsgi/myapp.sock failed (13: Permission denied) while connecting to upstream

EDIT 2

e apenas para o kix, tentei usar a porta TCP em vez de um arquivo de soquete. Nessa situação, posso usar curl -XGET http://localhost:8000 e obter a resposta HTTP adequada do uwsgi / python. No entanto, no log nginx (quando tentei entrar através do navegador através do nginx, recebo: *1 connect() failed (111: Connection refused) while connecting to upstream O arquivo nginx é configurado assim: uwsgi_pass uwsgi://localhost:8000;

    
por 010110110101 03.07.2015 / 19:53

1 resposta

0

Você não pode colocar soquetes para comunicação interprocessual em /tmp .

RHEL / CentOS 7, Fedora, etc., use diretórios privados / tmp , significando que cada daemon configurado para ele (neste caso, pelo menos nginx) tem uma visão completamente diferente de /tmp do que qualquer outro.

Para resolver o problema, coloque o soquete em outro diretório ou use conexões TCP.

E não cegamente audit2allow coisas sem entender o que está acontecendo. Você provavelmente abrirá algum buraco de segurança.

    
por 03.07.2015 / 19:56

Tags