8 votes

mod_xsendfile avec des liens symboliques

Je rencontre un problème en utilisant xsendfile avec mon application Rails 3.

J'utilise capistrano pour gérer les déploiements et dans chaque version, il existe un lien symbolique vers le répertoire shared/assets (par exemple, /var/www/site/releases/1234/assets => /var/www/site/shared/assets). Le problème est que XSendFile ne semble pas suivre les liens symboliques. Dans les journaux d'Apache, je vois l'erreur suivante :

The given path was above the root path: xsendfile: unable to find file: /var/www/site/releases/20110406205607/assets/pdfs/2/original/test.pdf

La configuration de XSendFilePath est la suivante

XSendFilePath /var/www/site/shared/assets

Si je change la configuration en :

XSendFilePath /var/www/site/releases

Ensuite, tout fonctionne bien. J'ai donc quelques questions :

1) Existe-t-il un moyen de faire en sorte que le XSendFilePath suive le lien symbolique ?

2) Y a-t-il un risque de sécurité à définir le XSendFilePath sur le répertoire de mes releases ? En d'autres termes, est-ce que j'ouvre l'accès à l'ensemble de ce répertoire ?

7voto

John Shetler Points 56

Est-ce que vous créez le lien en utilisant un after "deploy:finalize_update" tâche similaire à celle-ci :

task :storage_link, :except => { :no_release => true } do
    run "ln -nFs #{deploy_to}/shared/assets #{latest_release}/assets"
end

Cela fait que XSendFilePath voit le lien en tant que /var/www/site/current/assets ce qui le place à l'intérieur du chemin Root.

Assurez-vous également que l'utilisateur qui exécute votre application possède des droits d'écriture sur /var/www/site/shared/assets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X