Игнорирование .svn каталогов под IIS

8

Мы являемся организацией веб-разработки и недавно перешли на использование Subversion для нашей системы контроля версий. Поскольку выполнение обновления выполняется намного быстрее, чем экспорт и копирование файлов, разработчики хотят, чтобы рабочий сервер был рабочей копией.

Единственное, что меня беспокоит, это все файлы .svn, замусоренные по всей системе, и тот факт, что некоторые корпоративные пользователи могли, возможно, прочитать содержимое этих файлов, возможно, предоставив им информацию, которую мы предпочли бы, чтобы они не имели ,

Каков наилучший / самый простой способ запретить IIS обслуживать любой контент из этих каталогов .svn?

cdeszaq
источник
1
Привет. Не могли бы вы уточнить, какую информацию вы хотите иметь в .svn, которая не будет уже доступна в развернутых файлах?
Geo
Какая версия IIS? Если IIS7, вы можете получить модуль перезаписи URL и просто настроить простое правило, чтобы игнорировать каталоги .svn.
MattB
1
@Geo - каталоги .svn содержат текстовые копии файлов в текстовой базе. Поскольку файлы там называются одинаково, только с добавленной .svn-base, люди могут просматривать код в виде простого текста (это классический сайт ASP). Мы бы предпочли, чтобы это не случилось.
cdeszaq
@MattB - сервер IIS6 сейчас, но в конечном итоге переключается на IIS7. Итак, я загляну в модуль перезаписи после переключения, но, к сожалению, сейчас сервер IIS6.
cdeszaq

Ответы:

8

«Не делай так» - не отвечает на вопрос.

Практически мне нравится иметь рабочую копию на рабочем сервере, потому что таким образом я могу быстро вносить изменения в производство (кто никогда не делал этого?) И возвращать их обратно. Это зависит от того, где вы хотите, чтобы ваш слайдер безопасности / удобства и во многих случаях это хорошее место.

Стандартное решение в Apacheland - оставить там файлы .svn, но при этом указать веб-серверу никогда их не обслуживать. Вот как это сделать с IIS 5-7 в Windows 2000-2008.

  1. Скачайте и установите ISAPI_Rewrite - для этого будет достаточно версии Lite. Обратите внимание на дополнительные системные требования для Win 2008. Предупреждение - установщик MSI останавливается и запускает IIS.

  2. Снимите флажок «только для чтения» в свойствах файла httpd.ini . Если вы использовали установщик MSI, therer это ярлык для httpd.ini файла в меню Пуск при Геликон> ISAPI_Rewrite

  3. Добавьте эти строки в httpd.ini :

Директивы ISAPI_Rewrite в httpd.ini :

# Deny access to Subversion working copy administrative
#  directories (.svn) and their contents
RewriteRule .*/\.svn\b.* . [F,I,O]

Теперь любой запрос на каталог .svn или его содержимое приведет к 404 Not Found с сервера.

Натан
источник
Я не заметил, что я установил более старую версию, ISAPI_Rewrite2. Более новая версия, ISAPI_Rewrite3, включает приложение под названием «ISAPI_Rewrite Manager», которое немного облегчает редактирование файла, а в Windows 2008 Server не требовалось перезапускать IIS. Кроме того, я опубликовал это с некоторыми подробностями в своем блоге: n8v.enteuxis.org/2009/11/…
Натан
«Не делай так» - не отвечает на вопрос. в двух словах. Спасибо за решение вопроса напрямую.
Джон Харгроув
5

Вы можете убедиться, что любые учетные записи пользователей, используемые IIS, не имеют прав доступа к каталогам .svn.

Вы можете сделать это вручную (не рекомендуется) или использовать что-то вроде скрипта удаления MrJangles, либо запускаться после обновления SVN, либо регулярно запускаться как запланированная задача:

for /r YOURPATH %f in (.svn) do icacls /deny <name_of_iis_user>:F "%f"

(примечание: я не проверял вышеизложенное, вам нужно проверить, что он делает то, что пытается, прежде чем полагаться на него в рабочей среде, см. вывод "icacls / help" для дополнительной информации)

(еще одно примечание: «icacls» - это команда Vista / 2008, в более ранних вариантах Windows вместо «cacls»)

Дэвид Спиллетт
источник
Это чистый гений!
Ричард Слейтер
5

Используя IIS 7, откройте диспетчер IIS, выберите узел сервера, дважды щелкните функцию сопоставления обработчиков . Щелкните по действию Add Managed Handler и настройте обработчик следующим образом:

  • Путь запроса: * .svn / * (групповое сопоставление для всех файлов во всех папках .svn)
  • Тип: System.Web.HttpForbiddenHandler
  • Имя: Subversion-метаданные (вы можете выбрать другое имя, если хотите)

Теперь любой запрос файлов в папках метаданных Subversion с именем .svn на всех сайтах должен возвращать следующее:

Ошибка сервера в приложении '/'

Этот тип страницы не обслуживается.

Описание. Запрошенный вами тип страницы не обслуживается, поскольку он был явно запрещен. Пожалуйста, просмотрите URL-адрес ниже и убедитесь, что он написан правильно.

Запрашиваемый URL: /.svn/text-base/Default.aspx.svn-base

При желании вы можете выбрать другой тип обработчика, например, обработчик FileNotFound, который будет возвращать код состояния 404.

Для IIS 6 (с установленным и настроенным ASP.NET 2):

Перейдите в Домашний каталог> Конфигурация> Сопоставление и сопоставьте .svn-baseрасширение с %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll. Затем в machine.config (который вы можете найти %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG) вы можете добавить тот же обработчик, что и выше для расширения, добавить следующий XML-элемент как дочерний элемент <httpHandlers>-element:

<add verb="*" path="*.svn-base" type="System.Web.HttpForbiddenHandler"/>

Это только запретит посетителям запрашивать файлы с исходным кодом, они могут по-прежнему запрашивать другие файлы из папок .svn. Сопоставьте больше расширений с aspnet_isapi.dll или создайте сопоставление с подстановочными знаками (это повлияет на производительность), и вы можете заблокировать запрос большего количества файлов.

Михель ван Остерхаут
источник
4

С точки зрения безопасности я бы переучил ваших разработчиков.

Простота развертывания не обязательно хорошая идея, если вы жертвуете безопасностью.

Вы планируете конфигурацию, чтобы заблокировать доступ к конфиденциальной информации. Что произойдет, если конфигурация случайно изменится. Что произойдет, если исправление IIS выйдет из строя и изменит работу вашей конфигурации. Что произойдет, если сторонняя библиотека, которую вы используете, выйдет из строя и перестанет работать. Я могу подумать о нескольких чрезвычайно вероятных событиях, которые могут нарушить вашу конфигурацию и разрешить доступ к этим файлам, которые будут ПОЛНОСТЬЮ МИТИГИРОВАНЫ из- за отсутствия файлов на сервере.

Вы должны создать сценарий развертывания, который копирует соответствующие файлы с промежуточного сервера. Вы даже можете перейти через SVN в другой каталог на Prod.

Для развертывания вы можете использовать RoboCopy и команду / XD, чтобы исключить каталоги .svn. Вы можете использовать веб-инструмент развертывания Microsoft и ограничить количество каталогов этим. Вы можете развернуть и запустить выше, for /r YOURPATH %f in (.svn) do rd /s /q "%f"если вам нужно тоже.

Только не размещайте эти каталоги на производственном веб-сайте.

Christopher_G_Lewis
источник
1

Не используйте подрывную деятельность. Шутки в сторону.

Из ваших комментариев видно, что вы используете не тот инструмент для работы. Subversion - отличный инструмент для ваших разработчиков, но это не инструмент развертывания / зеркалирования. Если ваша цель - просто скопировать файлы с вашего промежуточного / тестового сервера на рабочий сервер с минимальной пропускной способностью и временем, я предлагаю вам использовать rsync . Теперь, поскольку я являюсь администратором Unix, может быть, для Windows есть какой-то эквивалент rsync, о котором я не знаю, так что вы можете заняться исследованиями. Тем не менее, вы можете использовать rsync под Cygwin или cwrsync .

Rsync позволяет зеркалировать каталоги на одном сервере, а каталоги - на другом. Он вычисляет дельту между двумя серверами и копирует только различия. Кроме того, он сжимает дельту и, при желании, может также шифровать ее.

Swoogan
источник
.... +1 для rsync
Джейсон С
Откомандирован. Основная проблема с попыткой активного скрытия файлов заключается в том, что если установленный вами обработчик или правило перезаписи падает, все файлы внезапно снова открываются. Если ваша рабочая копия находится в тестовой или частной среде развертывания, а затем вам понадобится только большая красная кнопка «опубликовать» (небольшой скрипт), которая выполняет rsyncs из этого расположения на работающий сервер. rsync может быть легко настроен на игнорирование путей / шаблонов файлов и будет загружать большинство изменений в одно мгновение, и это почти так же удобно, как ваши текущие настройки.
SmallClanger
0

Рекомендуется использовать автоматическую систему развертывания, которая экспортирует и публикует информацию после обновления SVN. Рассмотрим Хадсон, например. Еще немного, но так как он нам не нужен, я не очень хорошо проинформирован

Привет, GHad

GHAD
источник
Мы хотим избежать экспорта из-за ряда проблем, таких как пропускная способность и скорость соединения. Обновление затрагивает только те вещи, которые изменились, что резко ограничивает количество вещей, которые передаются через нас, что является для нас важным фактором. Кроме того, мы не хотим, чтобы вещи автоматически обновлялись, поэтому, хотя Хадсон из CC.Net предоставил это, это нам здесь не поможет, потому что мы будем обновлять производство вручную.
cdeszaq
если вы обновляете вручную, почему бы не разместить свой WC в области, не обслуживаемой веб-сервером, и скопировать обновленные файлы из этого каталога в каталог, который обслуживается. Вы получаете преимущество быстрого обновления сети за счет некоторого дискового пространства.
gbjbaanb
0

Я планирую сценарий на моих производственных серверах, который ищет .svn и просто удаляет файлы. Я не думаю, что это будет работать в вашем случае.

for /r YOURPATH %f in (.svn) do rd /s /q "%f"

Если удаление файлов не вариант, вы можете установить базовую безопасность для каталогов через IIS (пароль или ограничения IP). Это остановит IIS от предоставления контента неавторизованным пользователям.

Удачи!

портной
источник
Удаление каталогов .svn не вариант, потому что мы потеряем возможности рабочей копии. Существует ли способ поиска в дереве с помощью сценариев и добавления этих ограничений IIS? Задача сделать это вручную слишком велика и лишает автоматизации, которую обеспечивает Subversion.
cdeszaq
Без сомнения, есть. Я не писал ничего подобного раньше, так что будем надеяться, что кто-то ответит.
Сниппер