Назад | Перейти на главную страницу

Классическое олицетворение ASP | Проверка подлинности Windows | Доступ к файлам запрещен IIS 7

У меня есть классический веб-сайт ASP / VBScript (целевая страница - default.asp), который записывает активность пользователя веб-сайта (LOGON_USER) в простой текстовый файл через Scripting.FileSystemObject.

VBScript создает FSO для открытия / создания нового файла в папке logs.

64-разрядная среда Windows 2008 R2

IIS 7.5 -

ACL для папки журналов

Этот параметр дает мне «800A0046 - В разрешении отказано». Обратите внимание, что проверка подлинности Windows включена. И я сопоставляю значение LOGON_USER со значением в БД, чтобы разрешить пользователю доступ к моему сайту. AppPool установлен в NT Authority \ NetworkService. Хотя для удостоверения пула приложений установлено значение NetworkService, после аутентификации пользователя доступ к файлам осуществляется через аутентифицированного пользователя (олицетворение). Ниже приведен пример активности монитора процесса.

Активность файловой системы монитора процессов

Теперь это ставит меня в ситуацию, когда мне нужно перейти к свойствам безопасности папки «журналы» и предоставить каждому разрешенному пользователю разрешение на чтение / запись. Я ищу, так как мой пул приложений работает как NetworkService (папка журналов получает полный контроль для NetworkService), я хочу, чтобы к папке журналов был доступ через сетевую службу, а не пользователь, прошедший проверку подлинности с помощью проверки подлинности Windows. Я понимаю, что это ожидаемый результат при использовании аутентификации Windows. Однако я использую аутентификацию Windows только для того, чтобы проверить, разрешен ли пользователю доступ к веб-сайту. Для использования NT Authority \ NetworkService мне нужны все остальные действия на веб-сайте. (Я прошу решения, чтобы остановить классический ASP, олицетворяющий пользователя, прошедшего проверку подлинности Windows, и вместо этого использовать идентификатор appool - networkservice в моем случае - для доступа к ресурсам)

Это слишком много, чтобы просить? Пожалуйста, помогите мне с соответствующими объяснениями. Спасибо.

Ага. Классический ASP олицетворяет. Не знаю, как обойти это, что встроено в ASP - возможно, вы найдете StackOverflow более осведомленным в этом вопросе, поскольку я предлагаю это тема программирования.

Желаемая модель обычно называется моделью «доверенной подсистемы» в документации по шаблонам и методам ASP.Net (год назад).

Раньше я использовал страницу ASP.net для записи, вызываемую через WinHTTP со страницы ASP; Другой альтернативой является использование COM-объекта с указанным собственным идентификатором. Вы можете (так же легко) преобразовать страницу в ASP.Net и просто использовать ее с отключенным олицетворением. А еще есть опция «call RevertToSelf ()», которая забывает вашу идентификацию потока; вам может потребоваться COM-объект, чтобы сделать это и для вашего потока, снова из памяти.

Редактировать: Или используйте базу данных, которая работает как другое удостоверение; проблема только с файловой системой, потому что она настолько проста в использовании!

Кроме того, если все пользователи пишут в один и тот же файл, схема «запись в журнал» не будет жизнеспособной, когда несколько пользователей обращаются к нему одновременно, и в лучшем случае это приведет к задержке в этом сценарии.

Если каждому пользователю нужно только вести запись в свой собственный журнал (и вы надеетесь, что они не нажмут обновление слишком быстро во время записи, чтобы избежать проблем с параллелизмом), вы можете просто предоставить этим пользователям разрешение на запись в эту папку. Без Рида это немного бесполезно; без фактической атаки на компьютер (это Windows, интегрированная, поэтому вы находитесь в интрасети), им будет сложно случайно переполнить имя пользователя и DoS на машине.

Убедитесь, что для параметра executeinMTA не установлено значение true. Вы проверяете это в настройках asp на сайте.