Я настроил 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
нужны все эти каталоги.