centos8 nginx uwsgi сокет доступ запрещен

centos8 nginx uwsgi сокет доступ запрещен

Я настроил uwsgi и nginx для работы через сокет (chmod 777), который находится в домашнем каталоге пользователя, но nginx не может получить доступ к сокету (13: Permission denied in error.log). Попробовал переместить сокет в /tmp/ с помощью chmod 777, но затем получил ошибку2: No such file or directory

2021/09/21 19:40:16 [crit] 68278#0: *17 connect() to unix:///tmp/my.sock failed (2: No such file or directory) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/my.sock:", host: "****"

2021/09/21 20:10:16 [crit] 517#0: *1 connect() to unix:/home/***/.deploy/my.sock failed (13: Permission denied) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/***/.deploy/my.sock:", host: "***"

PS selinux отключен

решение1

Прежде чем приступить к ответу, вам следует приложить все усилия, чтобы избавиться от вредных привычек безопасности, таких как использование chmod 777 или отключение SELinux. Вместо этого вам следует полностью изучить модель разрешений UNIX, чтобы всегда знать правильные разрешения, и настроить свои службы для работы с SELinux, чтобы воспользоваться дополнительными уровнями безопасности, которые он предоставляет.


Итак, причина, по которой ваш сокет, спрятанный глубоко в домашнем каталоге пользователя, не работает, заключается в том, чтородительразрешения каталога запрещают необходимый доступ (в данном случае поиск x). Используйте namei -l /home/***/.deploy/my.sockдля просмотра разрешений всех родительских каталогов одновременно и исправления тех, которые не разрешают разрешение поиска (скорее всего, это /home/***).

chmod +x /as/needed

Также не забудьте при необходимости исправить разрешения и владельца самого сокета.

Для полноты картины, причина, по которой ваш сокет /tmpне был найден, заключается в том, что nginx, работающий как системная служба, не может получить доступ к системному /tmpкаталогу. Systemd запускает его, PrivateTmp=trueчто приводит к созданию уникального частного каталога и /tmpпространству имен nginx в этом каталоге. Вот для чего /tmp/xxx-systemd-private-fooнужны все эти каталоги.

Связанный контент