2010-07-08 7 views
0

Я создаю веб-сайт в IIS 7.5 (с Windows 7), который должен иметь возможность создавать дополнительные веб-сайты. Я написал код, который использует Microsoft.Web.Administration, чтобы создать сайт программно, и это отлично работает, когда я запускаю его как администратора.Как предоставить разрешение на создание веб-сайтов в IIS 7.5?

Теперь я пытаюсь использовать тот же код в контексте моего веб-приложения. Он завершается с ошибкой

Error: Cannot read configuration file due to insufficient permissions

для файла redirection.config (который я понимаю, находится в% WINDIR%/System32/Inetsrv/конфигурации).

Я попытался создать новое приложение для этого конкретного сайта, работающего под идентификатором IIS AppPool [AppPoolName]. Затем я попытался предоставить разрешение на идентификацию для редактирования конфигурации IIS с помощью

ManagementAuthorization.Grant(@"IIS AppPool\MyAppPool", "Default Web Site", false); 

, но я все еще получаю ту же ошибку.

Что еще я должен попробовать?

ответ

1

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

Способ, которым мы подошли, заключался в том, чтобы разделить задачи создания веб-сайта на службу Windows с правильными правами на выполнение этих действий. В этой службе есть удаленная конечная точка (хотя в наши дни вы, вероятно, захотите использовать WCF).

Затем мы создали прокси-сборку, которая подписана и зарегистрирована в GAC (ее также нужно будет маркировать с помощью атрибута APTCA, если вы работаете с полным доверием). Эта сборка передает соответствующие вызовы конечной точке удаленного доступа в службе Windows из веб-приложения/службы администратора.

Это позволяет нам запускать админ-сайт как минимум в привилегии и в режиме частичного доверия. Масштабы того, что можно сделать с помощью задач администрирования сайта, несколько сузится из-за того, что все функции отображаются в приложении для работы с Windows.

Это техника, известная как песочница.

+0

Спасибо: я думал о песочнице, но я надеялся, что существует разумно безопасный подход, включающий меньше работы! –

+0

@samuel - да, это немного странно, когда все это работает в первый раз (заняло около полудня), но результаты того стоят. Кроме того, книга безопасности Доминика Байера в значительной степени отдает вам все это. Стоит покупать только для этой главы: http://www.microsoft.com/learning/en/us/book.aspx?ID=9989&locale=en-us. – Kev

+0

Ну, я только что провел последние 2 часа на песочнице и, похоже, сработал! Это было довольно просто, используя WCF и TopShelf (http://topshelf-project.com) для размещения Windows Service –

0

Я нашел способ сделать это, но мне очень хотелось бы услышать мнение экспертов о том, нужно ли это делать.

Я предоставил разрешения на изменение и запись для учетной записи IIS AppPool \ MyAppPool для% WinDir%/System32/inetsrv/config и трех файлов .config внутри нее.