Сайт Романа ПарпалакаЗаметкиЖизньО лицееВоспоминания системного администратора

Воспоминания системного администратора

3 сентября 2011 года

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

Когда я начинал работать, своего компьютера у меня еще не было. Так что меня всё устраивало: после уроков я задерживался часа на два и сидел за компьютером, программировал игру «Жизнь», и даже получал какие-то копейки. У меня был свой ключ от кабинета информатики, и я мог приходить туда на выходных и каникулах.

Эту радужную картину портила необходимость исполнять рабочие обязанности, и она возникала достаточно часто. Дело в том, что в кабинете стояли, мягко говоря, устаревшие компьютеры. Процессоры Пентиум 1 (MMX) с частотой 166 МГц, 16 мегабайт медленной памяти EDO RAM, жесткий диск на два гигабайта, коаксиальная сеть со скоростью 1 мегабит в секунду, дискеты и компакт-диски только на учительском компьютере.

На таких компьютерах со скрипом работала Windows 98. Она легко ломалась, и за желающими напакостить детьми часто приходилось всё переустанавливать. Поэтому мне пришлось изобретать разные способы, облегчающие работу. Об этом соревновании брони и пули я бы и хотел рассказать.

Обычная процедура переустановки была крайне мучительной. Из-за отсутствия дисковода и оптического привода приходилось снимать кожух с компьютеров и либо переставлять оптический привод с учительского компьютера, чтобы загрузиться с загрузочного диска, либо подключать жесткий диск к другому компьютеру, чтобы его отформатировать, скопировать системные файлы и установочные программы.

Мой друг Денис Пономарев рассказал о программе Partition Magic для изменения размеров логических дисков без потери данных. Также она умела скрывать логические разделы. Однажды мы сделали на всех компьютерах скрытые логические диски D: с установщиками программ и драйверами. В целом схема получилась надежнее скрытой папки install. Очень часто дети, ломающие Windows, оставляли DOS работающим. Если они портили папку install, но не удаляли всё с диска C:, я запускал в DOS спрятанный в нескольких местах Partition Magic и получал доступ к диску D:. С тех пор необходимость разбирать компьютеры возникала гораздо реже.

Еще дети часто приносили игры. Сначала я думал, что их можно «задобрить», ничего с играми не делал, предполагая, что дети станут реже ломать Windows. Однако эта политика себя не оправдала, и с играми я стал бороться.

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

Перед тем как рассказать о своем решении этой проблемы, напомню, как запускается Windows 98. Сначала загружается MS-DOS (в версии для Windows 98 это два файла в корне диска: io.sys и command.com). Затем выполняются команды из файла autoexec.bat. После этого автоматически подается команда «win» и загружается собственно Windows.

Казалось бы, через autoexec.bat можно проверять, существует ли в системе оптический привод, и останавливать процесс загрузки. Однако это крайне ненадежный способ. Про autoexec.bat знают все. Его можно либо отредактировать напрямую, либо пропускать некоторые команды в режиме Step by step confirmation, куда можно попасть, удерживая при загрузке клавишу Control и войдя в меню загрузки.

Поэтому я поступил хитрее. Упомянутая выше команда «win» — это запуск файла win.com. В Windows 98 можно подменить этот файл, и при загрузке будет запущена не Windows, а ваша программа. Я решил написать программу, проверяющую наличие оптического привода. Если привода не было, она запускала переименованный win.com, и дальше продолжалась обычная загрузка Windows. Если привод был, она просто зависала (знаменитые FA EB FE). Таким образом, человеку, подключившему оптический привод, должно было казаться, что он неисправен, так как компьютер завис.

Чтобы реализовать эту идею, нужно было решить несколько вопросов. Вопрос первый: где взять com-файл, чтобы подменить win.com. Он решался просто: com-файл можно было получить, переименовав exe-файл. А exe-файл получался в результате компиляции программы на Паскале.

Вопрос второй: как определить, подключен ли оптический привод. Здесь простого решения не было. Я нашел пример кода, который то ли подсчитывает количество логических дисков, то ли проверяет, доступен ли конкретный логический диск. Однако всё упиралось в один неприятный момент: в ходе описанной выше обычной загрузки MS-DOS определяются только жесткие диски и дисководы, оптический привод не определяется.

Мне пришлось включить в autoexec.bat загрузку драйвера для CD-ROM. Из-за этого решение становилось не таким изящным и гораздо менее защищенным, так как опять сводилось к autoexec.bat. Однако, как показала практика, оно сработало на сто процентов. Дети как-то сообщили мне, что оптический привод не работает. Они так и не догадались, что произошло.

(Пока я набирал этот текст, подумал, что загружать драйвер можно было не в autoexec.bat, а в моей программе; тогда я до этого не додумался.)

Нужно отметить, что я позаботился и о собственном удобстве. Программа не зависала, если правильным образом установить клавиши с подсветкой состояния. Кажется, нужно было выключить Num Lock и включить Scroll Lock. В реальном режиме работы процессора получить состояния этих клавиш очень просто — достаточно прочитать содержимое памяти по адресу 0040:0017 и посмотреть на биты 5 и 4.

У меня была еще одна идея — избавиться от Partition Magic в описанной выше схеме со скрытыми разделами на жестком диске и сделать схему неуязвимой. Идея основывалась на следующих соображениях.

В принципе, можно сделать даже меню загрузки, вызываемое нужной комбинацией клавиш Control, Alt, Shift и упоминавшихся выше Num Lock, Scroll Lock и Caps Lock и появляющееся после ввода пароля.

Я начал писать какой-то код на Ассемблере, но так и не довел дело до конца из-за трудностей с отладкой. Замечу, что сейчас с виртуальными машинами проблем с отладкой нет, а сама идея всё еще актуальна: процессоры по-прежнему выполняют код загрузки BIOS и MBR в реальном режиме (как и процессор 8086 тридцать лет назад), и особенности конкретных операционных систем здесь не используются.

Вот такое получилось соревнование брони и пули. Конечно, конкретные знания, приобретенные тогда, безнадежно устарели. Например, уже Windows XP устроена гораздо сложнее. В ней для загрузки не используется MS-DOS. Да и подменить один из загружаемых файлов не получится по соображениям безопасности. Однако приятно вспоминать, что были времена, когда с операционной системой можно было проделывать такие трюки :)

Поделиться

Оставьте свой комментарий

Ваше имя:

Комментарий:

Для выделения используйте следующий код: [i]курсив[/i], [b]жирный[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Ссылку начните с http://. Других команд или HTML-тегов здесь нет.

Сколько будет 52+9?