É possível que o servidor esteja configurado para usar listas de controle de acesso, que é uma extensão das permissões normais de arquivos Unix ou funções baseadas no SELinux.
Você pode verificar a ACL no diretório como este ...
> getfacl /path/to/your/tmp
Você deve ter algo assim se tudo estiver normal ...
# file: tmp
# owner: apache
# group: apache
user::rw-
group::r--
other::r--
Se você vir linhas como as seguintes ...
user:someotheruser:---
group:someothergroup:---
... você está lidando com um arquivo / dir da ACL. Como você provavelmente pode imaginar, isso permite que você defina direitos para usuários e grupos específicos. Você pode alterá-los (permissões permitindo) com o comando setfacl
. Há também uma variedade de padrões possíveis na ACL no diretório que faria com que novos arquivos fossem criados com permissões inesperadas.
Se isso não for feito para você, você pode estar lidando com segurança baseada em funções no SELinux. Execute o comando getenforce
. Se estiver configurado para aplicar o Apache, só poderá ler arquivos no contexto HTTP.
> /usr/sbin/getenforce
Enforcing
Você precisaria chcon
(alterar contexto) seu diretório tmp ...
> chcon -R -t httpd_sys_content_t /path/to/your/tmp
Aqui está uma boa FAQ do SELinux
Espero que ajude!