Eu tenho uma situação em uma máquina Linux que não consigo explicar.
Algumas informações: Estamos executando o apache com um módulo c / c ++ que encaminha solicitações para nosso aplicativo. Ele faz isso lendo um arquivo .port que especifica uma porta local para enviar as solicitações.
Após a instalação, não é possível conectar-se usando a interface da web. Depois de um pouco de solução de problemas, mostro strace e vejo que os processos do apache não conseguem ler o arquivo .port:
[pid 8105] stat("/tmp/somedir/application.port", 0x7ffff9694470) = -1 EACCES (Permission denied)
Eu verifico as permissões no arquivo:
% ls -l /tmp/somedir/application.port
-rw-r--r--. 1 appuser staff 5 Oct 16 14:10 application.port
Então, qualquer um deveria ser capaz de ler isso, certo?
Verifico quem o processo do apache é executado como:
% ps -ef | grep 8105
appuser 8105 3357 0 15:14 ? 00:00:00 /usr/sbin/httpd
Assim, o processo do apache é executado como o proprietário do arquivo. Isso deve funcionar também, né?
Finalmente, eu faço:
% su - appuser
% stat /tmp/somedir/application.port
File: '/tmp/somedir/application.port'
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 11h/17d Inode: 1400293 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ appuser) Gid: ( 1001/ staff)
Access: 2013-10-16 14:10:03.357679902 +0200
Modify: 2013-10-16 14:10:03.357679902 +0200
Change: 2013-10-16 14:10:03.357679902 +0200
Então, o "appuser" possui o arquivo, executa o servidor web, mas não tem permissão para fazer stat () nele a partir do processo do servidor web?
Alguém tem uma ideia sobre o que poderia estar acontecendo aqui?
Também devo mencionar que esta não é a primeira instalação que fizemos e que as outras funcionam como esperado. Pode ter havido algum toque manual durante a instalação desta máquina em particular, mas ainda não vejo como podemos acabar assim.
Reiniciando processos também não faz nada para mudar o comportamento.
A máquina é uma caixa RHEL 6.