Permissões de arquivo sem sentido (Linux, Apache)

1

Eu tenho um problema com as permissões de arquivo que estão me deixando louco. Eu tenho um aplicativo web Perl que se instala, copiando alguns arquivos, criando DB e assim por diante. Tudo funciona bem, exceto por alguns arquivos de imagem. Estas imagens não são acessíveis pelo Apache:

(13) Permission denied: access to /path/to/image.gif denied

Mas, o arquivo é 644. Eu tentei chmod 777, e chown para o usuário do Apache, sem resultados positivos.

E o que me deixa louco: se eu copiar o arquivo, renomear o arquivo antigo e renomear o novo arquivo, ele funciona!

mv image.gif image.gif.bak
cp image.gif.bak image.gif

Os arquivos são idênticos, têm o mesmo tamanho, as mesmas permissões, o mesmo proprietário e o mesmo grupo. Eu posso ver ambos em um visualizador de imagens. Mas, se eu restaurar o arquivo original (remover o "novo" arquivo e renomear o arquivo "antigo" para o nome original), recebo novamente uma "permissão negada":

rm image.gif
mv image.gif.bak image.gif

Esse problema ocorre com todos os arquivos de imagem, mas não com arquivos de texto (estático html, css ...).

O que poderia estar causando esse comportamento estranho?

Estou usando o Apache 2.2.3 no CentOS 5.5. Scripts Perl (Perl 5.8.8) são executados com o Suexec.

    
por ARemesal 09.12.2010 / 14:57

3 respostas

2

Eu suspeito que talvez o SELinux esteja causando problemas? Desative e veja as coisas começarem a funcionar:

su -
/sbin/setenforce 0

Se as coisas funcionarem depois de desativá-lo, tente restorecon e reative o SELinux para ver se talvez os seus contextos do SELinux foram estragados.

    
por 09.12.2010 / 23:08
1

Parece que você tem um problema de permissão devido a

  • Usando suexec , significando que o script CGI e o Apache não podem ser executados sob o mesmo usuário / grupo
  • Não vejo em sua descrição que você verificou o caminho até o arquivo de imagem, não apenas o próprio arquivo

suexec terá o script executado sob o usuário proprietário e grupos do script. O próprio Apache continuará carregando arquivos usando seu próprio usuário / grupo, conforme definido em httpd.conf (ou apache [2] .conf, conf.d /...).

  • Execute um ls -d dos diretórios de caminho até os arquivos de imagens, para garantir que o Apache tenha pelo menos um --x de acesso (sem exibição, mas acesso ao arquivo nomeado).
  • Você pode conceder acesso a um diretório para o Apache alterando o grupo para o grupo Apache (pesquisa Group nos arquivos de configuração) com chgrp apache-group directory e adicionando o x de acesso ao mesmo diretório chmod g+x directory . / li>
por 09.12.2010 / 15:56
0

Você tem tipos mime na configuração do apache para os arquivos de imagem? Você pode fazer o comando ls -l no diretório que você está olhando e cole a saída aqui.

    
por 09.12.2010 / 14:59