Somos uma organização de desenvolvimento web e recentemente adotamos o subversion para o nosso sistema de controle de versão. Como executar uma atualização é muito mais rápido do que exportar e copiar os arquivos, os desenvolvedores desejam que o servidor de produção seja uma cópia de trabalho.
A única preocupação que tenho com isso é todos os arquivos .svn espalhados por todo o sistema e o fato de que algum indivíduo empreendedor poderia, potencialmente, ler o conteúdo dos arquivos ali, possivelmente fornecendo a eles informações que preferiríamos que não tivessem. .
Qual é a melhor / mais fácil maneira de impedir que o IIS sirva qualquer conteúdo desses diretórios .svn?
Respostas:
"Não faça dessa maneira" não responde à pergunta.
Na prática, eu gosto de ter uma cópia de trabalho no servidor de produção, porque dessa maneira eu posso fazer alterações rápidas na produção (quem nunca fez isso?) E devolvê-las. Depende de onde você deseja o controle deslizante de segurança / conveniência e em muitos casos, este é um bom lugar.
A solução padrão no Apacheland é deixar os arquivos .svn lá, mas solicitar ao servidor da Web que nunca os sirva. Veja como fazer isso com o IIS 5-7 no Windows 2000-2008.
Baixe e instale o ISAPI_Rewrite - a versão Lite será suficiente para esse fim. Observe os requisitos adicionais do sistema para o Win 2008. Aviso - o instalador do MSI para e inicia o IIS.
Desmarque a caixa "Somente leitura" nas propriedades do arquivo httpd.ini . Se você usou o instalador MSI, existe um atalho para o arquivo httpd.ini no menu Iniciar, em Helicon-> ISAPI_Rewrite
Adicione estas linhas ao httpd.ini :
Diretivas ISAPI_Rewrite no httpd.ini :
Agora, qualquer solicitação para um diretório .svn ou seu conteúdo resultará em um 404 não encontrado do servidor.
fonte
Você pode garantir que nenhuma conta de usuário usada pelo IIS tenha direitos para acessar os diretórios .svn.
Você pode fazer isso manualmente (não recomendado) ou usar algo como o script de exclusão MrJangles acionado para executar após a atualização do SVN ou executar regularmente como uma tarefa agendada:
(observação: eu não testei o acima, você precisará verificar se ele faz o que está tentando antes de confiar na produção; consulte a saída de "icacls / help" para obter mais informações)
(outra observação: "icacls" é um comando do Vista / 2008, nas variantes anteriores do Windows, o comando é "cacls")
fonte
Usando o IIS 7, abra o Gerenciador do IIS, selecione o nó do servidor, clique duas vezes no recurso Mapeamentos de manipulador . Clique na ação Adicionar manipulador gerenciado e configure o manipulador da seguinte maneira:
Agora, qualquer solicitação de arquivos nas pastas de metadados do Subversion denominadas .svn em todos os sites deve retornar isso:
Você pode escolher um tipo de manipulador diferente, se desejar, talvez um manipulador FileNotFound que retorne um código de status 404.
Para o IIS 6 (com o ASP.NET 2 instalado e configurado):
Navegue para Diretório inicial> Configuração> Mapeamento e mapeie a
.svn-base
extensão para%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
. Em machine.config (no qual você pode encontrar%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG
), você pode adicionar o mesmo manipulador acima para a extensão, adicionar o seguinte elemento XML como filho do<httpHandlers>
elemento:Isso impedirá que os visitantes solicitem os arquivos de código-fonte; eles ainda podem solicitar outros arquivos das pastas .svn. Mapeie mais extensões para aspnet_isapi.dll ou faça um mapeamento curinga (afetará o desempenho) e você poderá impedir que mais arquivos sejam solicitados.
fonte
Do ponto de vista da segurança pura, reeducaria seus desenvolvedores.
A facilidade de implantação não é necessariamente uma boa ideia se você sacrifica a segurança.
Você está planejando uma configuração para bloquear o acesso a informações confidenciais. O que acontece se a configuração mudar acidentalmente. O que acontece se um hotFix do IIS cair e mudar o funcionamento da sua configuração. O que acontece se a biblioteca de terceiros que você usa falha e para de funcionar. Posso pensar em vários eventos extremamente prováveis que interromperiam sua configuração e permitiriam o acesso a esses arquivos, que seriam TOTALMENTE MITIGADOS por não ter os arquivos no servidor em primeiro lugar.
Você deve criar um script de implantação que copie os arquivos apropriados de um servidor intermediário. Você pode até montar via SVN para um diretório diferente no Prod.
Para implantar, você pode usar o RoboCopy e o comando / XD para excluir diretórios .svn. Você pode usar a ferramenta de implantação da web da Microsoft e limitar os diretórios com isso. Você pode implantar e executar o acima,
for /r YOURPATH %f in (.svn) do rd /s /q "%f"
se precisar também.Apenas não implante esses diretórios no site de produção.
fonte
Não use subversão. A sério.
A partir dos seus comentários, parece que você está usando a ferramenta errada para o trabalho. O Subversion é uma ótima ferramenta para seus desenvolvedores, mas não é uma ferramenta de implantação / espelhamento. Se seu objetivo é simplesmente copiar arquivos do servidor de teste / teste para o servidor de produção com um mínimo de largura de banda e tempo, sugiro que você use o rsync . Agora, como eu sou um administrador do Unix, pode haver algum equivalente do Windows ao rsync que eu não conheça, então você pode querer fazer alguma pesquisa. No entanto, você pode usar o rsync no Cygwin ou cwrsync .
O Rsync permite espelhar diretórios em um servidor com diretórios em outro. Ele calcula um delta entre os dois servidores e copia apenas as diferenças. Não apenas isso, mas compacta o delta e, opcionalmente, também pode criptografá-lo.
fonte
A melhor prática seria um sistema de implantação automática que exporte e publique após a atualização SVN. Considere Hudson, por exemplo. Existem poucos, mas como não precisamos de um, não estou muito bem informado
Greetz, GHad
fonte
Eu agendo um script em meus servidores de produção que procura .svn e simplesmente exclui os arquivos. Eu não acho que isso funcionará no seu caso.
Se a remoção dos arquivos não for uma opção, você poderá colocar segurança básica nos diretórios por meio do IIS (restrições de senha ou IP). Isso impediria o IIS de fornecer conteúdo a usuários não autorizados.
Boa sorte!
fonte