Права доступу до запису файлів IIS AppPoolIdentity та файлової системи


395

Ось проблема з IIS 7.5 та ASP.NET, яку я досліджував і нікуди не потрапляв. Будь-яка допомога буде дуже вдячна.

Моє запитання: використовуючи ASP.NET в IIS 7.5, як IIS та / або операційна система дозволяють веб-додатку записуватись у папку, наприклад, C:\dumpколи працює під повним довірою? Як це так, що мені не потрібно явно додавати доступ для запису для користувача пулу програм (у цьому випадку ApplicationPoolIdentity)?

Стільки я знаю:

  • У IIS 7.5 типовий ідентифікатор для пулу додатків є ApplicationPoolIdentity .
  • ApplicationPoolIdentity представляє обліковий запис користувача Windows під назвою "IIS APPPOOL \ AppPoolName", який створюється при створенні пулу програм, де AppPoolName - ім'я пулу програм.
  • Користувач "IIS APPPOOL \ AppPoolName" за замовчуванням є членом IIS_IUSRS групи.
  • Якщо ви працюєте в Повному довірі, ваш веб-додаток може записувати в багато областей файлової системи (за винятком папок типу C:\Users,C:\Windows і т.д.). Наприклад, у вашій програмі буде доступ до запису до деяких папок, наприклад C:\dump,.
  • За замовчуванням IIS_IUSRSгрупі не надається доступ для читання чи записуC:\dump (принаймні, не доступ, який можна побачити на вкладці "Безпека" в Провіднику Windows).
  • Якщо ви забороните доступ до запису IIS_IUSRS, ви отримаєте SecurityException при спробі запису в папку (як очікувалося).

Отже, беручи до уваги все, як надається доступ на запис користувачеві "IIS APPPOOL \ AppPoolName"? Процес w3wp.exe працює як цей користувач, тож що дозволяє цьому користувачу писати в папку, до якої, схоже, немає явного доступу?

Зауважте, що я розумію, що це, мабуть, було зроблено задля зручності, оскільки було б дозволити користувачеві отримати доступ до кожної папки, в яку він повинен записатись, якщо ви працюєте в Повному довірі. Якщо ви хочете обмежити цей доступ, ви завжди можете запустити додаток у програмі Medium Trust. Мені цікаво дізнатись про те, як операційна система та / або IIS дозволяє проводити ці записи, навіть не маючи явного доступу до файлової системи.

Відповіді:


403

ApplicationPoolIdentityПрисвоюються членство в Usersгрупі, а також IIS_IUSRSгрупа. На перший погляд це може здатися дещо занепокоєнням, проте Usersгрупа має дещо обмежені права на NTFS.

Наприклад, якщо ви спробуєте створити папку в C:\Windowsпапці, то виявите, що не можете. ApplicationPoolIdentityЩе потрібно , щоб мати можливість читати файли з вікна системних папок (інакше як би ще робочий процес зможе динамічно завантажувати істотно DLL).

Що стосується ваших спостережень щодо можливості писати у вашу c:\dumpпапку. Якщо ви подивитесь дозволи на розширені налаштування безпеки, ви побачите наступне:

введіть тут опис зображення

Дивіться, що Спеціальний дозвіл успадковується від c:\:

введіть тут опис зображення

Ось чому ваш сайт ApplicationPoolIdentityможе читати та записувати в цю папку. Це право успадковується відc:\ накопичувача.

У спільному середовищі, де, можливо, є кілька сотень сайтів, кожен з яких має власний пул додатків та ідентифікатор пулу додатків, ви зберігаєте папки сайту у папці чи томі, який Usersвидалив групу, та дозволи встановлені таким чином, що лише адміністратори та Обліковий запис SYSTEM має доступ (із спадщиною).

Потім ви окремо призначите необхідні дозволи, котрі IIS AppPool\[name]вимагаються кожним із кореневих папок свого сайту.

Ви також повинні переконатися, що з усіх папок, які ви створюєте, де зберігаєте потенційно чутливі файли чи дані, Usersгрупа буде видалена. Ви також повинні переконатися, що будь-які встановлені вами програми не зберігають у них чутливі даніc:\program files\[app name] папках і вони замість цього використовують папки профілю користувачів.

Так, так, на перший погляд схоже, що ApplicationPoolIdentityмає більше прав, ніж слід, але насправді не має більше прав, ніж це диктує членство в групі.

An ApplicationPoolIdentityчленства в групі «S можна досліджувати з допомогою SysInternals Process інструмент Провідник . Знайдіть робочий процес, що працює з ідентифікаційним колом пулу додатків, який вас цікавить (для відображення потрібно буде додати User Nameстовпець до списку стовпців:

введіть тут опис зображення

Наприклад, у мене тут є пул з іменем, в 900300якому є ідентифікація пулу додатків IIS APPPOOL\900300. Клацнувши правою кнопкою миші на властивості процесу та вибравши вкладку Безпека, ми бачимо:

введіть тут опис зображення

Як ми бачимо, IIS APPPOOL\900300є членом Usersгрупи.


@Kev [+1] Я розмістив аналогічне запитання щодо дозволів NTFS щодо ідентифікацій пулу програм тут: stackoverflow.com/questions/11232675/… - Буду вдячний, якщо ви подивитесь.
one.beat.consumer

@ one.beat.consumer - вибачте, я ніколи не бачив вашого коментаря. Ви все ще затрималися з цим питанням?
Кев

@Kev - так, це стає менш проблемою, оскільки мене відкинули на інше лайно, але це все ще не вирішено. якісь думки?
one.beat.consumer

7
Давайте проголосуємо, щоб цей розділ був включений у MSDN. Ніколи не знадобився час, щоб це зрозуміти, тому це чудова допомога (і мені соромно, що я ніколи не знав).
Гримаса відчаю

67
Не ясно, чому ця основна документація Microsoft IIS знаходиться на SO замість MSDN.
Аміт Найду

40
  1. Клацніть правою кнопкою миші на папці.

  2. Клацніть Властивості

  3. Натисніть вкладку безпеки. Ви побачите щось подібне:

введіть тут опис зображення

  1. Натисніть кнопку "Змінити ..." у верхньому екрані. Ви побачите щось подібне:

введіть тут опис зображення

  1. Натисніть кнопку "Додати ..." у верхньому екрані. Ви побачите щось подібне:

введіть тут опис зображення

  1. Натисніть кнопку "Місцеположення ..." у верхньому екрані. Ви побачите щось подібне. Тепер перейдіть до самої вершини цієї структури дерева та виберіть ім’я комп'ютера, а потім натисніть кнопку ОК.

введіть тут опис зображення

  1. Тепер введіть "iis apppool \ your_apppool_name" і натисніть кнопку "Перевірити імена". Якщо apppool існує, ви побачите своє ім'я apppool у текстовому полі з підкресленням. Натисніть кнопку ОК.

введіть тут опис зображення

  1. Установіть / зніміть прапорці, незалежно від доступу, який потрібно надати обліковому запису

  2. Натисніть кнопку Застосувати, а потім ОК.


0

Кожен пул додатків у II створює власну захищену папку користувача з ПОВНИМИ дозволом для читання / запису за замовчуванням під c: \ users. Відкрийте папку "Користувачі" та перегляньте, які там папки пулу додатків, клацніть правою кнопкою миші та перевірте їх права на присвоєний віртуальному обліковому запису пулу додатків. Ви повинні побачити ваш додаток пулу додатків, доданий вже з доступом до читання / запису, призначеного для його кореневих та підпапок.

Таким чином, доступ до типу зберігання файлів робиться автоматично, і ви повинні мати можливість записувати все, що вам подобається, у папки облікових записів користувачів пулів, не змінюючи нічого. Саме тому були створені віртуальні облікові записи для кожного пулу програм.


Це відбувається лише в тому випадку, якщо для параметра "Завантажити профіль користувача" встановлено значення True.
JamesQMurphy

Це правильно, а це означає, що папка користувача AppPool не була б створена, якби це не було правдою? Ось чому вони побудували його таким чином ..... щоб не допустити доступу II і зберігання мотлоху у windows / temp та на всьому жорсткому диску замість керованої захищеної папки саме для цього облікового запису.
Стоклей

0

Я спробував це виправити проблеми доступу до веб-сайту IIS, який проявився як щось подібне у журналах подій → Windows → додаток:

Ім'я журналу: додаток
Джерело: ASP.NET 4.0.30319.0
Дата: 5.01.2012 16:12:33
Ідентифікатор події: 1314
Категорія завдань: Веб-подія
Рівень: Інформація
Ключові слова: Класика
Користувач: Не застосовується
Комп'ютер: SALTIIS01

Опис:
Код події: 4008 
Повідомлення події: Не вдалося авторизувати файл для запиту. 
Час події: 5.01.2012 16:12:33 
Час події (UTC): 6.01.2012 12:12:33 
Ідентифікатор події: 349fcb2ec3c24b16a862f6eb9b23dd6c 
Послідовність подій: 7 
Подія події: 3 
Код деталі події: 0 

Інформація про заявку: 
    Домен програми: / LM / W3SVC / 2 / ROOT / Application / SNCDW-19-129702818025409890 
    Рівень довіри: Повний 
    Віртуальний шлях до програми: / Application / SNCDW 
    Шлях до програми: D: \ Сайти \ WCF \ Застосування \ SNCDW \ 
    Назва машини: SALTIIS01 

Інформація про процес: 
    Ідентифікатор процесу: 1896 
    Назва процесу: w3wp.exe 
    Назва рахунку: iisservice 

Запит інформації: 
    URL-адреса запиту: http: //webservicestest/Application/SNCDW/PC.svc 
    Шлях запиту: /Application/SNCDW/PC.svc 
    Адреса хоста користувача: 10.60.16.79 
    Користувач: js3228 
    Аутентифіковано: Правда 
    Тип аутентифікації: ведіть переговори 
    Назва акаунта теми: iisservice 

Зрештою , я повинен був дати Windows , Everyoneгрупа доступу на читання до цієї папки , щоб змусити його працювати правильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.