Доступ до запису до ВСІХ робіт, IUSR, IIS_IUSRS, DefaultAppPool не працює. чому?


10

Добре. Тут ми намагаємося створити веб-сайт Classic ASP на IIS 7.5 в Windows Server 2008 R2. Під коренем веб-сайту є папка з назвою dbc, і вона має файл, який використовується для читання та запису певної інформації під час обробки кожної сторінки.

Проблема полягає в тому, що якщо я надаю дозволи на запис IUSR та дозволи на запис IIS_IUSRS або дозволи на запис DefaultAppPool, або я отримую "Доступ до шляху" E: .. \ websiteroot \ dbc \ filename.txt 'відмовлено "

Але якщо я надаю доступ до кожної запису в цій папці dbc, я не отримую жодної помилки, все здається ідеальним.

Більше інформації: Веб-сайт працює в режимі класичного конвеєра, ввімкнено анонімну автентифікацію (можливо, це єдиний аутентифікацію). І я спробував анонімну автентифікацію за допомогою облікового запису IUSR, а також ідентифікатора пулу програми. У моєму випадку ApplicationPoolIdentity - це особа для автентифікації веб-сайту. Ми використовуємо COM + для файлу вводу / виводу. І Classic ASP Server.CreateObject для екземпляра об'єкта з нього. COM + працює як мережевий сервіс.

Думки? Я не хочу надати письмовий дозвіл ВСІМ. Я щось пропускаю?

РІШЕНО: Ось що я зробив.

Мій веб-сайт з назвою CipherDemo працював під AppPoolIdentity в IIS 7.5, який міг бути розташований Identity IIS AppPool \ CipherDemo. Я використовував ICACLS для надання дозволу на RW у цій папці.

і COM +, який фактично робив файл вводу-виводу, виконувався під ідентифікацією службової мережі. Коли я використовував Монітор процесу для відстеження помилки відхиленого доступу, виявилося, що мережева служба має лише дозвіл на читання у цій папці.

Я використовував ICACLS "ім'я папки" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T, щоб надати доступ для запису в цю папку.

І вирішив це.

Я мав намір, що оскільки веб-сайт працює як CipherDemo Identity, це буде обліковий запис, який буде використовуватися для доступу до файлу через COM +. Але соромно з'ясувати, що COM + все ще працюватиме над власними межами ідентичності.

Відповіді:


5

Під IIS 7.5 (і необов'язково в IIS 7) усі працівники працюють з ідентифікацією пулу додатків: користувач "IIS AppPool * PoolName *".

Надайте доступ цьому користувачеві, а не кожному (вам потрібно буде ввести ім’я у вибраних діалогах ідентичності - воно не відображатиметься у функції пошуку).

На iis.net є дуже корисна сторінка, яка детально висвітлює речі.

Також зверніть увагу: під IIS7 (Server 2008):

  • В розширених налаштуваннях ви встановлюєте ідентифікацію пулу додатків на основі пулу додатків.
  • Немає підтримки GUI, тому вам знадобиться командний рядок для встановлення дозволів ( icacls.exe).

Нарешті, вибір ідентичності SQL Server також не знає про ідентичність пулу додатків: використовуйте CREATE LOGINі CREATE USERспочатку після цього GUI можна використовувати для надання ролей тощо.


@Richard - Так. Дякую за швидку відповідь. Форуми msdn дуже корисні в наші дні. Поверніться назад ... Я пару років переглядаю веб-сайт IIS.net та сервер за замовчуванням. Я використовую ідентифікацію пулу додатків за замовчуванням на моєму сервері IIS 7.5 / Win 2008 R2. Отже, я надав дозволи IIS APPPOOL \ DefaultAppPool Wite у моїй папці 'dbc'. Крім того, я надав IUSR та IIS_IUSRS дозволи на запис у цю папку. Це все ще не спрацює, я даю ВСІЙНІ дозволу на запис. Я знаю, що мені щось не вистачає. Ви можете допомогти?
gmaran23

@ gmaran23: Якщо очевидні кроки не спрацювали, я використовую Монітор процесів, щоб побачити, що саме не вдається (і часто це буде або відкритий файл просить занадто багато доступу, я не зміг правильно встановити ACL, або щось таке інший файл відкритий).
Річард

@Richard - Я виконую операції з читання / запису за допомогою зчитувача файлів в c # за допомогою FileMode.Open, FileAccess.ReadWrite. - Гадаю, ця частина гарна. Щось ще має файл відкритий - я думаю, це може бути виключено, оскільки немає його можливостей. З ACL щось не так. Я перевірю це і опублікую тут. Також спробуємо монітор процесів. Дякую за допомогу :)
gmaran23

@ gmaran23: Якщо він не працює, не припускайте, що ви завжди знаєте, що завжди тестуйте. Я витрачав занадто багато часу протягом багатьох років, тому що знаю, що щось було чи не було правдою - занадто часто я помилявся.
Річард

1
@ gmaran23: Використовуйте інструменти, щоб побачити, що саме відбувається: ви здогадуєтесь і не працюєте над проблемами систематично. (1) Використовуйте Провідник процесів, щоб підтвердити, що файл не відкритий. (2) Використовуйте Монітор процесу, щоб побачити, який доступ запитується та за якою особою (і у вас є потрібний файл). (3) Подвійна перевірка результату №2 проти ACL у файлі (та відкрийте розширені властивості безпеки для отримання повної інформації). (4) Відрегулюйте одне і перейдіть до №1, поки не буде встановлено. Якщо ви все-таки застрягли після декількох ітерацій, розширіть Q з усіма деталями (і будьте конкретні).
Річард

5

Ви можете додати обліковий запис через GUI NTFS, ввівши його безпосередньо. Назва у форматі IIS APPPOOL\<<app pool name>>, напр IIS APPPOOL\DefaultAppPool. (див. цю статтю підтримки Microsoft )

Альтернативне рішення: я використовував обліковий запис "Служба мережі" як користувач пулу програм, що надає йому дозвіл на запис.


Правильно, ця порада хороша, але я це вже зробив. Я використовую за замовчуванням "ApplicationPoolIdentity" для пулу програм. А для папки 'dbc' я вже надав дозволи на запис для IIS AppPool \ DefaultAppPool. Але це все одно не буде працювати, поки я не даю ВСЕГО написати дозвіл.
gmaran23

1

Якщо ви хочете надати дозвіл папки WRITE лише конкретному користувачеві, вам слід також змінити "Анонімний ідентифікатор користувача" сайту на "Конкретний користувач", а не "Ідентифікація пулу програм".

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