.htaccess e permissões de linux

1

Eu tenho um código php herdado que estou tentando proteger. No entanto, a remoção de permissões de execução do diretório de upload de arquivos gera um erro de permissão. Aqui está um resumo rápido:

apache aponta para / root / www / (somente usuário no sistema é root)

uploads de imagens são salvos em / files via symlink em / root / www / admin / files (não tenho idéia de porque os arquivos são salvos em /)

Permissões:

drwxrwxrwx  8 root     root      4096 2011-04-06 16:51 root  (root home directory)
drwxr-xr-x  8 www-data www-data     4096 2011-04-01 19:34 www   (folder in /root/)
lrwxrwxrwx  1 root     root        21 2011-03-04 20:32 files -> /files/  (symlink)

 drw-------  4 www-data www-data 61440 2011-04-06 16:12 files   (folder in root directory)
-rwxrwx---  1 www-data www-data      81 2011-04-06 15:56 .htaccess (file in /files/)

Trecho do log de erros do Apache:

[Wed Apr 06 16:58:24 2011] [crit] [client 1.2.3.4] (13)Permission denied: 
/root/www/admin/files/.htaccess pcfg_openfile: unable to check htaccess file,
ensure it is readable, referer: http://example.com



Eu quero mudar as permissões em / files / de 700 para 600. Eu não consigo descobrir o porquê. O htaccess só é lido quando as permissões de execução estão definidas.

    
por Ryre 06.04.2011 / 19:10

3 respostas

3

Eu suspeito que a sua confusão aqui é decorrente de um mal-entendido comum sobre permissões de arquivos semelhantes ao Unix, especificamente: Em um diretório, "executar" não significa "executar".

Suspeito que você esteja tentando garantir que os arquivos enviados para o diretório de upload não possam ser executados, correto? Isso é bom senso comum para fazer. No entanto, sua abordagem é falha: em um diretório, o bit "executar" não significa "permitir que os arquivos sejam executados aqui", mas sim "permitir que os usuários percorram este diretório". Em outras palavras, remover o bit de execução em um diretório para um usuário / grupo / mundo remove a capacidade dos usuários relevantes de acessar qualquer arquivo ou diretório dentro dele - exatamente o que o Apache agora está reclamando que não pode fazer.

Você precisa que o diretório de upload permaneça "executável". Em vez disso, o que você precisa é de umask para garantir que os arquivos enviados não sejam executáveis. (Na verdade, nem isso é necessário, já que os arquivos por padrão não são executáveis no * nix).

    
por 06.04.2011 / 19:26
1

Como o arquivo .htaccess mora dentro de arquivos, ele não pode ser acessado se o usuário atual não tiver permissões de execução em / files. Tente você mesmo como um usuário comum: crie um novo diretório, coloque um arquivo dentro dele e então remova o bit de execução do diretório. Você não deve conseguir acessar o arquivo aqui.

Qual é a razão por trás de querer remover esse bit de execução específico? Não vejo nenhuma vantagem de segurança por trás disso, mas deixe-me saber se estou perdendo alguma coisa.

    
por 06.04.2011 / 19:15
1

Embora seu problema principal esteja resolvido, outra possível solução para o seu problema de não permitir que arquivos enviados sejam executados seria montar / arquivos com noexec. Isso exigiria uma nova partição, no entanto.

    
por 06.04.2011 / 20:09