Мы занимаемся веб-разработкой и недавно перешли на использование Subversion для нашей системы контроля версий. Поскольку выполнение обновления происходит намного быстрее, чем экспорт и копирование файлов, разработчики хотят, чтобы производственный сервер был рабочей копией.
Единственное, что меня беспокоит, - это все файлы .svn, разбросанные по всей системе, и тот факт, что какой-то корпоративный человек потенциально может читать содержимое файлов там, возможно, давая им информацию, которую мы предпочли бы, чтобы у них не было .
Каков наилучший / самый простой способ запретить IIS обслуживать любой контент из этих каталогов .svn?
«Не делай так» не отвечает на вопрос.
На практике мне нравится иметь рабочую копию на производственном сервере, потому что таким образом я могу быстро вносить изменения в производственную среду (кто никогда этого не делал?) И возвращать их обратно. Это зависит от того, где вы хотите разместить ползунок безопасности / удобства, и во многих случаях это хорошее место.
Стандартное решение в Apacheland - оставить файлы .svn там, но запретить веб-серверу их обслуживать. Вот как это сделать с IIS 5-7 в Windows 2000-2008.
Загрузить и установить ISAPI_Rewrite - для этого будет достаточно Lite версии. Обратите внимание на дополнительные Системные Требования для Win 2008. Предупреждение- установщик MSI останавливается и запускает IIS.
Снимите флажок "только для чтения" на httpd.ini свойства файла. Если вы использовали установщик MSI, есть ярлык для httpd.ini файл в меню Пуск в Helicon-> ISAPI_Rewrite
Добавьте эти строки в 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 с сервера.
Вы можете убедиться, что любые учетные записи пользователей, используемые 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»)
Используя IIS 7, откройте диспетчер IIS, выберите узел сервера, дважды щелкните значок Сопоставления обработчиков характерная черта. Щелкните действие Добавить управляемый обработчик и настройте обработчик следующим образом:
Теперь любой запрос файлов в папках метаданных 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>
-элемент:
<add verb="*" path="*.svn-base" type="System.Web.HttpForbiddenHandler"/>
Это только помешает посетителям запрашивать файлы исходного кода, они все равно могут запрашивать другие файлы из папок .svn. Сопоставьте больше расширений с aspnet_isapi.dll или сделайте сопоставление с подстановочными знаками (это повлияет на производительность), и вы можете заблокировать запрос дополнительных файлов.
С чистой точки зрения безопасности я бы перевоспитал ваших разработчиков.
Легкость развертывания - не обязательно хорошая идея, если вы жертвуете безопасностью.
Вы планируете конфигурацию для блокировки доступа к конфиденциальной информации. Что будет, если конфигурация случайно изменится. Что произойдет, если IIS hotFix выйдет из строя и изменит работу вашей конфигурации. Что произойдет, если сторонняя библиотека, которую вы используете, выйдет из строя и перестанет работать. Я могу вспомнить несколько крайне вероятных событий, которые нарушат вашу конфигурацию и позволят получить доступ к этим файлам, например ПОЛНОСТЬЮ СМЯГЧЕНИЕ в первую очередь из-за отсутствия файлов на сервере.
Вы должны создать сценарий развертывания, который копирует соответствующие файлы с промежуточного сервера. Вы даже можете перейти через SVN в другой каталог на Prod.
Для развертывания вы можете использовать RoboCopy и команду / XD, чтобы исключить каталоги .svn. Вы можете использовать инструмент веб-развертывания Microsoft и ограничить с его помощью каталоги. Вы можете развернуть и запустить вышеуказанное for /r YOURPATH %f in (.svn) do rd /s /q "%f"
если вам тоже нужно.
Только не развертывайте эти каталоги на рабочем веб-сайте.
Не используйте подрывную деятельность. Шутки в сторону.
Из ваших комментариев видно, что вы используете неправильный инструмент для работы. Subversion - отличный инструмент для ваших разработчиков, но не инструмент развертывания / зеркалирования. Если ваша цель - просто скопировать файлы с промежуточного / тестового сервера на рабочий сервер с минимальной пропускной способностью и временем, то я предлагаю вам использовать rsync. Теперь, поскольку я являюсь администратором Unix, может быть какой-то Windows-эквивалент rsync, о котором я не знаю, так что вы можете провести небольшое исследование. Однако вы можете использовать rsync под Cygwin или cwrsync.
Rsync позволяет зеркалировать каталоги на одном сервере с каталогами на другом. Он вычисляет разницу между двумя серверами и только копирует различия. Не только это, но он сжимает дельту и, при желании, также может ее зашифровать.
Лучшей практикой будет система автоматического развертывания, которая экспортирует и публикует после обновления SVN. Возьмем, к примеру, Хадсона. Их еще несколько, но поскольку он нам не нужен, я не очень хорошо информирован
Greetz, GHad
Я планирую сценарий на своих производственных серверах, который ищет .svn и просто удаляет файлы. Не думаю, что в вашем случае это сработает.
for /r YOURPATH %f in (.svn) do rd /s /q "%f"
Если удаление файлов невозможно, вы можете установить базовую безопасность для каталогов с помощью IIS (пароль или ограничения IP). Это остановит IIS от предоставления контента неавторизованным пользователям.
Удачи!