Por que recebemos 'cannot open file' usamos XSendFile com / tmp?

1

Estamos atualizando para o Fedora 18. Nós implantamos nosso aplicativo Rails, e ele funciona como esperado, exceto para baixar arquivos zip de relatórios. Funciona no nosso servidor de produção existente (Fedora 15).

Estamos usando XSendFile para enviar os arquivos zip. Não funciona quando os arquivos estão localizados em /tmp , mas funciona em outras circunstâncias.

Detalhes

Os arquivos zip são gerados usando Tempfile.open em Ruby, que cria um arquivo em /tmp por padrão. No entanto, o Apache nos dá um erro 404 e um erro como este em error_log :

[Thu May 02 11:33:18.010388 2013] [:error] [pid ...] (2)No such file or directory: [client ...] xsendfile: cannot open file: /tmp/..., referer: https://...

A primeira coisa que verificamos é a nossa configuração. É isso que temos:

XSendFile on
XSendFilePath /tmp

Isso parece estar correto dado os documentos - /tmp é usado até mesmo no exemplo.

Começamos a tentar diminuir o problema. Nós começamos a forçar o aplicativo Rails a servir outros arquivos, codificando o caminho. Cada vez, nós mudávamos o diretório para XSendFilePath na configuração do Apache e o caminho do arquivo usado no aplicativo Rails.

Resultados:

fails: /tmp/hello.zip
works: /var/www/html/rails_production/current/public/hello.zip
works: /home/capistrano/hello2.zip
fails: /tmp/test-xsendfile/hello3.zip
works: /tmp2/hello4.zip

Nos casos de falha, as permissões foram definidas para 777 apache: apache, o que pareceria bastante liberal. Os casos de trabalho não exigiam essas permissões, no entanto.

Como suspeitamos que o caminho /tmp seja o problema, fizemos /tmp2 com as mesmas permissões e propriedade ( drwxrwxrwt. e root:root ). O contexto do SELinux para /tmp2 foi alterado para ser idêntico usando chcon .

Mesmo com essas alterações, XSendFile funciona com /tmp2 . Isso faz com que o problema pareça ser um problema de configuração do Apache. Podemos resolver isso, mas preferimos não fazer isso.

O que estamos perdendo deixa /tmp2 funcionar, mas não /tmp ?

Versões

  • Apache 2.4.4
  • mod_xsendfile 0.12 (RPM do Fedora 18, não é algo que compilamos)

OBSERVAÇÃO: estamos usando mod_security , mas não está no modo de imposição.

    
por Benjamin Oakes 02.05.2013 / 18:29

0 respostas