permissão de soquete centos8 nginx uwsgi negada

permissão de soquete centos8 nginx uwsgi negada

Eu configurei o uwsgi e o nginx para funcionar através do soquete (chmod 777) que está localizado no diretório inicial do usuário, mas o nginx não pode acessar o soquete (13: Permissão negada em error.log). Tentei mover o soquete para /tmp/ com 777 chmod, mas recebi um erro2: 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 desativado

Responder1

Antes de chegar à resposta, você deve fazer todos os esforços para quebrar os maus hábitos de segurança de usar o chmod 777 ou desabilitar o SELinux. Em vez disso, você deve aprender completamente o modelo de permissão do UNIX para sempre saber as permissões corretas e configurar seus serviços para funcionarem com o SELinux para se beneficiar das camadas adicionais de segurança que ele fornece.


Portanto, a razão pela qual seu soquete enterrado no diretório inicial de um usuário não funciona é que umpaias permissões do diretório proíbem o acesso necessário (neste caso, search x). Use namei -l /home/***/.deploy/my.sockpara ver as permissões de todos os diretórios pais de uma vez e corrija aqueles que não permitem permissão de pesquisa (provavelmente é /home/***).

chmod +x /as/needed

Lembre-se também de corrigir as permissões e propriedade no próprio soquete conforme necessário.

Para completar, o motivo pelo qual seu soquete /tmpnão foi encontrado é que o nginx executado como um serviço do sistema não pode acessar o /tmpdiretório do sistema. O Systemd inicia-o com PrivateTmp=trueo que faz com que um diretório privado exclusivo seja criado e /tmpo namespace do nginx seja colocado nesse diretório. É para isso que /tmp/xxx-systemd-private-fooservem todos esses diretórios.

informação relacionada