Назад | Перейти на главную страницу

uWSGI игнорирует uid, gid и chown-socket

Я пытаюсь использовать uWSGI с nginx. Основная проблема, с которой я столкнулся, заключается в том, что я получаю сообщение «Нет такого файла или каталога» от nginx, пытающегося подключиться к файлу сокета uWSGI.

Когда я использую следующие настройки, я ожидаю, что разрешения файла сокета изменятся. Однако это не так. Он продолжает показывать uwsgi:uwsgi.

Ошибка 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

права доступа к файлам

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;
    }
}

Я тоже пробовал это:

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

и я попробовал это:

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

РЕДАКТИРОВАТЬ

и я попытался переместить файл носка в /var/run/uwsgi/myapp.sock. В этом случае nginx сообщает мне: connect() to unix:/var/run/uwsgi/myapp.sock failed (13: Permission denied) while connecting to upstream

РЕДАКТИРОВАТЬ 2

и просто для kix я попытался использовать порт TCP вместо файла сокета. В этой ситуации я могу использовать curl -XGET http://localhost:8000 и получите правильный ответ HTTP от uwsgi / python. Однако в журнале nginx (при попытке зайти через браузер через nginx я получаю: *1 connect() failed (111: Connection refused) while connecting to upstream Файл nginx настроен так: uwsgi_pass uwsgi://localhost:8000;

Вы не можете поместить сокеты для межпроцессного взаимодействия в /tmp.

RHEL / CentOS 7, Fedora и т. Д. Используют частные / tmp каталоги, что означает, что каждый настроенный для него демон (в данном случае, по крайней мере, nginx) имеет совершенно другой взгляд на /tmp чем любой другой.

Чтобы решить эту проблему, поместите сокет в другой каталог или используйте TCP-соединения.

И не слепо audit2allow вещи, не понимая, что происходит. Скорее всего, вы откроете какую-то дыру в безопасности.