Заявления AppPool для родительской структуры папок сайта

Контекст ApplicationHost.config

<!-- App Pool -->
<add name="Site - Intranet" autoStart="true" managedRuntimeVersion="v4.0" />
<add name="App - App1" autoStart="true" managedRuntimeVersion="v4.0" />
<add name="App - App2" autoStart="true" managedRuntimeVersion="v2.0" />

<!-- Site -->
<site name="Intranet" id="1" serverAutoStart="true">
    <application path="/" applicationPool="Site - Intranet">
        <virtualDirectory path="/" physicalPath="D:\Web\Sites\Intranet" />
    </application>
    <application path="/Apps/App1" applicationPool="Application - App1">
        <virtualDirectory path="/" physicalPath="D:\Web\Apps\App1" />
    </application>
    <application path="/Apps/App2" applicationPool="Application - App2">
        <virtualDirectory path="/" physicalPath="D:\Web\Apps\App2" />
    </application>
</site>

Как вы можете видеть, у меня есть один сайт с собственным пулом приложений 4.0 CLR и идентификатором, в котором размещаются два отдельных Приложения, каждый со своими пулами приложений и идентификаторами. Все три изолированы в отдельных местах файловой системы.

Разрешения NTFS для учетных записей AppPoolIdentity

Разрешения должны предоставляться каждому AppPoolIdentity в соответствующей папке (например, IIS AppPool\Site - Intranet требуется разрешить чтение/выполнение на D:\Web\Sites\Intranet).

В этот момент приложение App1 не должно читать/выполнять файлы в родительской структуре физической папки сайта. И наоборот, хостинг-сайт Intranet не должен читать/выполнять файлы в структуре физических папок App1. Я понимаю это правильно?

Когда я посещаю дочернее приложение (ex http://intranet/apps/app1), я получаю ошибку сервера, заявляя, что он не может прочитать родительский файл Site web.config из-за недостаточных разрешений.

Если я предоставляю разрешения на чтение/выполнение учетной записи удостоверения личности приложения на родительской структуре физической папки сайта (например, IIS AppPool\App - App1 доступ к D:\Web\Sites\Intranet), проблема устранена.

Вопрос (ы)

  • Почему дочернее приложение должно читать web.config или любые другие файлы с родительского сайта?

    Примечание. Мой родительский сайт web.config уже разбивает дочернее приложение /vdir наследование с помощью метода <location path="." inheritInChildApplications="false">.

  • Учитывая, что эта учетная запись по умолчанию имеет права на запись во многих папках - IIS AppPoolIdentity и права доступа к файловой системе для записи - это не создает безопасности риск? Например, не может ли какое-либо дочернее приложение теперь потенциально записываться в родительскую папку App_Data или в другое место?

Ответ 1

Для # 1 дочерние папки/приложения наследуют настройки web.config своих родительских папок по умолчанию. Я бы предположил, что ASP.NET не проверяет ваш элемент, прежде чем пытаться получить доступ к этим родительским файлам web.config. Имеет смысл для меня, хотя это не то, что вы хотели бы.

Для # 2, не слишком уверен. Если ваш идентификатор пула приложений является членом пользователей (как указано в ответах на ваши ответы), он имеет доступ на чтение к множеству мест, но не слишком много пишет. Я бы не пошел по тому, что говорит там вопрошающий. Не уверен, что ребенок записывает родительские папки. Вы должны иметь возможность блокировать это с соответствующими разрешениями файловой системы (имея в виду все группы, к которым принадлежит ваша идентификатор пула приложений). У меня никогда не было этой конфигурации, поэтому я не уверен.