Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Введение
В этом документе представлен обзор шагов, необходимых для настройки изоляции пула приложений и рабочих процессов для серверов IIS 7.0 и выше. Изоляция пула приложений подразумевает защиту данных, необходимых для доступа к данным WAS (локальный системный процесс IIS). Примером этих данных являются пароли пула приложений. С другой стороны, изоляция рабочего процесса подразумевает защиту данных, к которым необходимо предоставить доступ посредством удостоверения пула приложений. Примером этих данных является пароль анонимной учетной записи пользователя.
Предпосылки
Чтобы упростить этот процесс, предоставляются два фрагмента кода:
- Создайте новый поставщик шифрования RSA в machine.config.
- Задайте имя поставщика по умолчанию в machine.config.
В последнем разделе предварительных требований описано, как настроить четыре учетные записи пользователей, которые будут использоваться в последующих разделах.
Создание нового приложения поставщика шифрования RSA
Откройте Блокнот Windows и создайте файл в каталоге на ваше усмотрение с именем createProvider.cs, содержащий следующий код C#.
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class createProvider { public static void Main(string[] args) { String keyContainerName = args[0]; String description = args[1]; String providerName = args[2]; System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); System.Configuration.ProviderSettings settings = new System.Configuration.ProviderSettings(providerName, "System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); settings.Parameters["description"] = description; settings.Parameters["keyContainerName"] = keyContainerName; settings.Parameters["cspProviderName"] = String.Empty; settings.Parameters["useMachineContainer"] = "true"; settings.Parameters["useOAEP"] = "false"; settings.Parameters["name"] = providerName; ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection ("configProtectedData"); pcSection.Providers.Add(settings); machineConfig.Save(); } } }
Затем запустите командную строку с повышенными привилегиями:
- Щелкните меню Пуск.
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
В окне командной строки перейдите к расположению, где вы сохранили файл createProvider.cs и выполните следующую команду, чтобы скомпилировать код:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs
Теперь этот шаг завершен.
Создание приложения для изменения поставщика по умолчанию
Откройте Блокнот Windows и создайте файл в каталоге по вашему выбору с именем setProvider.cs, содержащий следующий код C#:
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class setProvider { public static void Main(string[] args) { String provider = args[0]; // example: DataProtectionConfigurationProvider System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection("configProtectedData"); string oldEncryptionProviderName = pcSection.DefaultProvider; Console.WriteLine("The default provider is currently: " + oldEncryptionProviderName); Console.WriteLine("Changing the default provider to: " + provider); pcSection.DefaultProvider = provider; machineConfig.Save(); } } }
Затем запустите командную строку с повышенными привилегиями:
- Щелкните меню Пуск.
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
В окне командной строки перейдите в расположение, где вы сохранили файл setProvider.cs и выполните следующую команду, чтобы скомпилировать код.
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs
Теперь этот шаг завершен.
Создание учетных записей пользователей
На этом шаге мы создадим четыре новых учетных записей пользователей, которые будут использоваться в этом документе.
Чтобы начать, откройте окно командной оболочки, работающее под правами администратора, выполнив следующие действия.
- Щелкните меню Пуск.
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне выполните следующие команды:
net user /add AppPoolIdentity1 password1
net user /add AppPoolIdentity2 password2
net user /add AnonymousAccount1 password3
net user /add AnonymousAccount2 password
Теперь этот шаг завершен.
Изоляция пула приложений
СЛУЖБА IIS имеет процесс с именем WAS, который выполняется в контексте LOCALSYSTEM и является единственным процессом, который требует доступа к паролям пула приложений. В этой задаче мы:
- Создайте новый ключ RSA (iisWasKey), к которому имеют доступ только LOCALSYSTEM и администраторы. Этот ключ будет использоваться для шифрования паролей каждого пула приложений.
- Создайте два пула приложений.
- Настройте каждый из этих пулов приложений для запуска под разными удостоверениями и шифрования паролей с помощью iisWasKey.
- Ограничьте разрешения файловой системы NTFS для файлов ключей, чтобы получить доступ только к системе и администраторам.
Создание нового ключа RSA
- Щелкните меню Пуск.
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне перейдите к месту сохранения createProvider.exe и выполните следующую команду:
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS
Убедитесь, что эти изменения произошли правильно.
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config
Откройте блокнот Windows и проверьте наличие строк в разделе для нового поставщика:
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
<providers>
<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/>
<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/>
<add name="Rsa_WAS" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="RsaKeyForWAS" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
</providers>
</configProtectedData>
Шифрование паролей пула приложений
По умолчанию при шифровании свойства IIS использует defaultProvider для шифрования, определенного в machine.config. Значением по умолчанию для этого является RsaProtectedConfigurationProvider.
На этом шаге мы используем приложение setProvider.exe, созданное ранее, чтобы изменить поставщика на iisWasKey, а затем использовать диспетчер IIS для изменения паролей:
- Щелкните меню Пуск.
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне перейдите к месту сохранения setProvider.exe и выполните следующую команду:
setProvider.exe Rsa_WAS
Поставщик по умолчанию Rsa_WAS успешно изменен.
Создание пулов приложений
На этом шаге мы создадим два новых пула приложений, изолированных друг от друга. Для этого запустите диспетчер IIS:
Нажмите кнопку "Пуск" и введите "INetMgr.exe" и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить ", чтобы повысить уровень разрешений).
Нажмите кнопку рядом + с именем компьютера в разделе "Подключения ".
Щелкните Пулы приложений.
Выберите задачу в правом заголовке "Добавить пул приложений".
Введите имя AppPool1, а затем нажмите кнопку ОК , как показано ниже.
Повторите предыдущие шаги, но на этот раз используйте имя AppPool2.
Обратите внимание, что идентификатор как для AppPool1, так и для AppPool2 — это NetworkService. Мы изменим это на учетные записи, созданные ранее, щелкнув правой кнопкой мыши AppPool1 и выбрав Дополнительные параметры
В разделе " Модель процесса":
Нажмите кнопку справа от слов Identity.
В окне Идентификатор пула приложений выберите переключатель "Пользовательская учетная запись" и нажмите кнопку "Задать...".
Введите следующее имя пользователя и пароль в диалоговом окне "Задать учетные данные ".
имя пользователя: AppPoolIdentity1
пароль: password1
Теперь значение Идентификатор должно отображаться как показано ниже:
Нажмите кнопку ОК, чтобы сохранить изменения.
Повторите предыдущий шаг для AppPool2 и имя пользователя AppPoolIdentity2 и пароль password2.
В диспетчере IIS отображаются следующие элементы (в основном удостоверения пулов приложений изменены):
Проверьте изменения с помощью Блокнота Windows и откройте
%SystemRoot%\System32\Inetsrv\applicationHost.config
файл. Перейдите к разделу applicationPools , и вы увидите, что мы зашифровали пароли пула приложений с помощью ключа Rsa_WAS, как это необходимо:password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAAUkBfhWFbUHIt/qtlo+P7CiZC10r9H0DGBvAl U2mhiOxMoHXX6Dz0S8TQjKx2YTKvuE8y+SBUWrEs3JYzXKOkY45Q9z6E/3BFvru5oR9uzbjInASKF/83N N1tIEsoorQWmUOjnL4XM9RNzpqkY6TgyC3CyPUGN9fR7li5+AUupHHfgVPMzcLHfCsoq+ri+X6IbEnJdu cUEAYBn1P9F/Zxk=:enc]" /> password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAEbQEa/sAmyLbryAR0hD3voip2+0RfzM44sXPekp I2H7HYLzta55NfLcG8vSPHhasahKVgO4wcIcT03CLSn+5koWvAaIRdeClhXWK/X8ZQPFooOpyhOqT0TEP5v jB+DXAKgq0RC6ufHFtrHMy0U69ew7/49YXEcrkF+o8OJZ1K+EkgA3J2ikHKxW0pFBU0tFvLCjt2/UXypfNI 0hYPe2syk=:enc]" />
Блокировка поставщиков шифрования
По умолчанию IIS_IUSRS получает доступ на чтение к ключам при их создании. Однако для удаления этого доступа можно использовать средство ASPNET_REGIIS. Для этого выполните следующие команды из командной строки с повышенными привилегиями:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS
Это лишило IIS_IUSRS (группу удостоверений пула приложений) возможности чтения iisWasKey, предназначенного только для администраторов и системы LOCALSYSTEM.
Изоляция рабочего процесса
В этом разделе описывается настройка изоляции рабочего процесса путем создания двух новых сайтов, которые являются частью разных пулов приложений и имеют разные анонимные удостоверения проверки подлинности. Затем мы создадим новый поставщик RSA для каждого пула приложений для шифрования анонимных паролей.
Создание новых сайтов
В этом разделе мы создадим два новых сайта и добавим каждый сайт в созданный ранее пул приложений. Чтобы начать, откройте командную оболочку, запущенную под правами администратора, выполнив следующие действия:
Щелкните меню Пуск.
Щелкните правой кнопкой мыши командную строку.
Выберите "Запуск от имени администратора".
В командном окне перейдите к каталогу wwwroot с помощью следующей команды:
cd /d %SystemDrive%\inetpub\wwwroot
Создайте новый каталог с именем "один" и каталог "два" с помощью следующих команд:
mkdir one
mkdir two
Создайте базовый файлDefault.htm в каталогах "один" и "два", которые содержат следующий КОД HTML:
<html><body>Hello from site X</body></html>
Примечание.
Замените "X" на "один" или "два" в зависимости от расположения каталога файла.
Теперь используйте диспетчер IIS для создания двух сайтов:
Нажмите кнопку "Пуск", введите INetMgr.exe и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить " для повышения разрешений).
+ Нажмите кнопку рядом с именем компьютера в разделе "Подключения".
Щелкните правой кнопкой мыши сайт в представлении дерева в разделе "Подключения" , а затем выберите "Добавить веб-сайт".
Чтобы создать сайт, используйте следующие сведения:
Имя веб-сайта: один
Пул приложений: AppPool1
Физический путь: {location of your inetpub directory}\wwwroot\one
Порт: 81Это должно выглядеть следующим образом после завершения.
Нажмите кнопку OK, чтобы сохранить изменения.
Повторите предыдущие два шага, но на этот раз используйте следующие сведения для второго сайта:
Имя веб-сайта: Два
Пул приложений: AppPool2
Физический путь: {location of your inetpub directory}\wwwroot\two
Порт: 82
Теперь вы создали два новых сайта с именем One и Two и добавили их в пулы приложений AppPool1 и AppPool2.
URL-адреса для тестирования сайтов:
-
http://localhost:81
для сайта One -
http://localhost:82
для сайта Two
Создание новых поставщиков для каждого пула приложений
В этом разделе мы создадим новый поставщик RSA для каждого пула приложений:
Щелкните меню "Пуск".
Щелкните правой кнопкой мыши командную строку.
Выберите "Запуск от имени администратора".
В окне командной строки перейдите к месту сохранения createProvider.exe и выполните следующую команду:
createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1 createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
Настройка анонимной учетной записи для сайта One
В окне командной строки с повышенными привилегиями выполните следующую команду:
setProvider.exe Rsa_app1
Вернитесь в диспетчер IIS и дважды щелкните сайт One.
Дважды щелкните элемент аутентификация в разделе названия функции.
Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи " справа, где откроется диалоговое окно "Изменить анонимные учетные данные проверки подлинности ".
Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать ".
Введите имя пользователя AnonymousAccount1 и пароль пароля3 и нажмите кнопку "ОК".
Откроется следующее диалоговое окно:
Нажмите кнопку ОК , чтобы сохранить изменения.
Настройка анонимной учетной записи для двух сайтов
В окне командной строки с повышенными привилегиями выполните следующую команду:
setProvider.exe Rsa_app2
- Вернитесь в диспетчер IIS и дважды щелкните сайт Two.
- Дважды щелкните элемент Аутентификация под заголовком названия функции.
- Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи " справа, в котором откроется диалоговое окно "Изменитьанонимные учетные данные ".
- Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать".
- Введите имя пользователя AnonymousAccount2 и пароль пароля4 и нажмите кнопку "ОК".
- Нажмите кнопку ОК, чтобы сохранить изменения.
Сброс поставщика шифрования до значения по умолчанию
- Вернитесь в окно командной строки с повышенными привилегиями и выполните следующую команду:
setProvider.exe RsaProtectedConfigurationProvider
Примечание.
Это изменение гарантирует, что все будущие свойства, которые будут зашифрованы, используют поставщика шифрования по умолчанию.
Проверка изменений
Убедитесь, что произошло то, что мы хотели. Откройте файл %SystemRoot%\System32\Inetsrv\applicationHost.config
с помощью Windows Блокнота.
Обратите внимание, что пароль для AppPool1 и AppPool2 по-прежнему защищён ключом Rsa_Was.
Обратите внимание, что пароль для AnonymousAccount1 также защищен с помощью ключа Rsa_app1 :
password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
Наконец, обратите внимание, что пароль AnonymousAccount2 также защищен с помощью ключа Rsa_app2 :
password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
Блокировка поставщиков шифрования
Обеспечьте безопасность доступа к файлам с нашими ключами, как было сделано ранее. Выполните следующие команды из командной строки с повышенными привилегиями:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr App1Key IIS_IUSRS
aspnet_regiis.exe -pa App1Key AppPoolIdentity1
aspnet_regiis.exe -pr App2Key IIS_IUSRS
aspnet_regiis.exe -pa App2Key AppPoolIdentity2
Эти команды удалили возможность IIS_IUSRS считывать ключи и добавили только удостоверение того пула приложений, которому требуется разрешение на доступ к ключам.
Тестирование сайтов
Теперь протестируйте сайты:
http://localhost:81
http://localhost:82
Все должно продолжать работать, как это было раньше.
Сводка
В итоге мы выполнили следующие задачи для защиты параметров пула приложений:
- Создано два пула приложений
- Были созданы две локальные учетные записи пользователей и они были настроены в качестве удостоверений пула приложений.
- Мы создали ключ шифрования администрирования и использовали его для защиты всех удостоверений пула приложений.
- Мы использовали ASPNET_REGIIS для удаления доступа группы IIS_IUSRS (группы удостоверений пула приложений) к ключу.
Эти задачи эффективно гарантируют, что только администраторы и системные учетные записи могут считывать пароли для пулов приложений. Таким образом, если приложения в пуле приложений пытались получить пароли для своего пула приложений или любого другого, попытка не увенчается успехом.
Чтобы изолировать параметры рабочего процесса, мы:
- Создана новая анонимная учетная запись
- Мы создали новый поставщик для пула приложений
- Мы зашифровали пароль анонимной проверки подлинности с помощью ключа пула приложений
- Мы удалили доступ к анонимному поставщику проверки подлинности для IIS_IUSRS и предоставили доступ только к удостоверению пула приложений.
Фактически это гарантирует, что удостоверение пула приложений может расшифровать анонимный пароль, к которому он принадлежит, и никто другой.