Share via


Дело об ошибке FrontPage

В очередной статье из серии "Дело об..." от Марка Руссиновича (Mark Russinovich) мы поговорим об ошибке, вызванной некорректным наследованием прав в Windows.

Представляем вам первую публикацию из серии "Дело об" от стороннего автора. За последние два месяца мы получили множество великолепных статей с расследованиями, но для первого раза мы выбрали это, написанное Троем Вольбринком (Troy Wolbrink), корпоративным веб-мастером.

Трой столкнулся с проблемами со своим сервером и вместо того, перезагрузить его, переустановить его или звонить в Microsoft Product Support Services, где, несомненно, ему бы посоветовали эти же шаги, он использовал базовые техники для решения проблем, на что ему понадобилось несколько минут. В благодарность за детальную статью со скриншотами я послал Трою подписанною копию книги Windows Internals.

В свой доклад Case of the Unexplained..., который я озвучил на TechEd/IT в июне, я включил несколько новых дел. Даже если вы видели мой доклад с ноябрьского TechEd/ITForum, рекомендую вам ознакомиться и с этим, поскольку вы сможете узнать много нового.

Итак, слово Трею.
Недавно я перевел свой сайт с общего хостинга на выделенный сервер. Некоторые части моего сайта использовали FrontPage Server Extensions (FPSE), например, страницы, которые собирали данные и сохраняли их в лог.

frontpage1

Я установил FPSE, используя аплет установки и удаление программ, а потом сделал все, чтобы настроить его с помощью IIS. Но по какой-то причине я не мог правильно настроить FPSE, чтобы моя форма сбора данных работала. Сообщение об ошибке в браузере было абсолютно непонятным.

frontpage2

Я изучил на предмет возможных проблем логи из Event Log сервера, но ничего не нашел.

В мои планы входила замена данного сайта на соответствующий, созданный на ASP.NET и SQL Server, так что я не видел причин, чтобы становится гуру по FPSE для того, чтобы решить одну эту проблему. Но так как другие приоритеты в течение уже нескольких лет мне мешали перейти на ASP.NET, у меня не было другого выбора, кроме как провести расследование. Я как раз недавно смотрел "The Case of the Unexplained…", и решил запустить Process Monitor на своем сервере - возможно, я бы увидел источник проблемы. Я исключил из логов некоторые процессы, которые очевидно, что не могли иметь никакого отношения к моей проблеме. Это удалило много мусора. Так как моя страница называется TntWebLog.htm, а логи пишутся в файл TntWebLog.csv, то я настроил программу так, чтобы она подсвечивала любые события, в пути которых содержится TntWebLog.

Чтобы повторно вызвать появление проблемы я запустил браузер и попытался снова заполнить форму, после чего я прекратил захват событий в Process Monitor. После этого я пролистал список в поиске выделенных строчек. Я удивительно быстро нашел источник проблемы. FPSE пытался создать файл с таким же именем, который уже существовал.

frontpage3

Очевидно, что здесь было что-то не так с правами доступа. Я проверил права доступа к файлу TntWebLog.csv и не нашел в списке учетной записи IUSR_WEBBOARD, которая настроена в IIS для анонимного доступа.

frontpage4

Так что я зашел в расширенные свойства файла и отметил пункт "Allow inheritable permissions from the parent to propagate…", подтвердив свой выбор ОК.

frontpage5

Это действие позволило решить проблемы с безопасностью файла. Я провел тест и убедился, что проблема была решена.

Оглядываясь назад, я могу сказать, что эта проблема произошла из-за того, что я использовал Windows Explorer для перемещения, а не копирования файла. Для подтверждения провел несколько тестов. Когда вы перемещаете файл с помощью Windows Explorer, то Windows Explorer копирует и права доступа, а когда копируете - Windows Explorer создает новый файл, права для которого берет из прав папки. Если бы я изначально копировал этот файл, то проблемы бы этой не было.

Теперь моей первой реакцией будет запустить Process Monitor и посмотреть, что творится в недрах ОС. Удачи в ваших расследованиях!

 

Оригинал записи