Классический ASP Олицетворение | Проверка подлинности Windows | Доступ к файлу запрещен IIS 7
У меня есть классический веб-сайт ASP/VBScript (целевая страница - default.asp), который записывает активность доступа пользователя веб-сайта (LOGON_USER) в простой текстовый файл через Scripting.FileSystemObject.
VBScript создает FSO для открытия / создания нового файла в папке "журналы"
64-битная среда Windows 2008 R2
IIS 7.5 -
- Аутентификация - Аутентификация Windows включена. Все остальные аутентификации отключены.
- AppPool работает в режиме Classic PipeLine;
- Разрешить 32-битным приложениям значение true;
- Идентификационные данные NetworkService.
- Загрузить профиль пользователя установлен на false
- ASP: для executeInMta установлено значение false
ACL для папки журналов
- Группа пользователей - чтение и выполнение;
- СИСТЕМА - Полный контроль (Наследуется);
- Администраторы - Полный контроль (Наследуется);
- IIS_IUSRS - Полный контроль;
- Сетевой сервис - полный контроль.
Этот параметр дает мне "800A0046 - Отказано в доступе". Обратите внимание, что проверка подлинности Windows включена. И я сопоставляю значение LOGON_USER со значением в БД, чтобы разрешить пользователю доступ к моему веб-сайту. AppPool имеет значение NT Authority\NetworkService. Несмотря на то, что идентификатор приложения установлен в NetworkService, после того, как пользователь аутентифицируется, доступ к файлам осуществляется через аутентифицированного пользователя (олицетворение). Пример процесса мониторинга активности ниже.
Активность файловой системы монитора процессов
- default.asp - желаемый доступ - SUCCESS - олицетворение: имя домена \ имя пользователя
- logs\log3011.txt - Требуемый доступ - ОТКЛОНЕНО - Олицетворение: имя домена \ имя пользователя
Теперь это ставит меня в ситуацию, когда мне нужно перейти к свойствам безопасности папки 'logs' и предоставить каждому разрешенному пользователю разрешение на чтение / запись. То, что я ищу, так это, поскольку мой пул приложений работает как NetworkService(папка журналов полностью контролируется NetworkService), я хочу, чтобы доступ к папке журналов осуществлялся через сетевую службу, а не для проверки подлинности пользователя через проверку подлинности Windows. Я понимаю, что это ожидаемый результат при использовании проверки подлинности Windows. Тем не менее, я использую Windows Autnetication только для проверки, разрешено ли пользователю доступ к веб-сайту. Мне нужны все остальные действия веб-сайта для использования NT Authority\NetworkService. (Я прошу найти решение, чтобы Классический ASP не выдавал себя за пользователя, прошедшего проверку подлинности Windows, и скорее использовал идентификацию appool - в моем случае networkservice - для доступа к ресурсам)
Это слишком много, чтобы просить? Пожалуйста, направьте меня с соответствующими объяснениями. Спасибо.
2 ответа
Ага. Классический ASP олицетворяет. Не знаю, как обойти это, встроенное в ASP - вы можете найти StackOverflow более осведомленным в этом, так как я бы посоветовал, что это тема программирования.
Желаемая модель обычно упоминается как модель "доверенной подсистемы" в документации "Шаблоны и практики ASP.Net" (много лет назад).
В прошлом я использовал страницу ASP.net для записи, вызываемую через WinHTTP со страницы ASP; использование COM-объекта с указанным идентификатором является другой альтернативой. Вы можете (так же легко) преобразовать страницу в ASP.Net и просто использовать ее с отключенным олицетворением. И затем есть опция "call RevertToSelf()", которая забывает вашу идентификацию потока; вам может понадобиться COM-объект, чтобы сделать это также для вашего потока, из памяти снова.
Изменить: или использовать базу данных, которая работает под другим именем; файловая система только проблематична, потому что она так проста в использовании!
Кроме того, если все пользователи записывают в один и тот же файл, схема "запись в журнал" не работает, когда несколько пользователей одновременно получают к ней доступ, и в лучшем случае это приведет к задержке в этом сценарии.
Если каждому пользователю требуется только запись в свой собственный журнал (и вы надеетесь, что он не нажмет кнопку "Обновить" во время записи, чтобы избежать проблем с параллелизмом), вы можете просто предоставить разрешение на запись этим пользователям в эту папку. Без чтения это немного бесполезно; без фактической атаки на ящик (это Windows Integrated, поэтому вы находитесь в интрасети) им было бы трудно случайно перенаселить имя пользователя и DoS компьютера.
Убедитесь, что для executeteinMTA не установлено значение true. Вы проверяете это в настройках asp на сайте.