Вы находитесь на странице: 1из 98

№8(9) август 2003

подписной индекс 81655


журнал для cистемных администраторов,
вебмастеров и программистов

Восстановление данных
с лазерных дисков
Новые средства
ОС FreeBSD 5
Эффективная почтовая
система на базе Exim
NETFILTER
Пингвин
с одного пинка
NetBSD:
установка и настройка
Переполнение буфера
в Windows NT/2000/XP
оглавление

АДМИНИСТРИРОВАНИЕ СЕТИ

Восстановление данных NETFILTER


с лазерных дисков Владимир Мешков
Крис Касперски ubob@mail.ru 64
kk@sendmail.ru 4
Протокол V.90
Мониторинг Windows-серверов Денис Колисниченко
с помощью Nagios dhsilabs@mail.ru 70
Часть2
Андрей Бешков
tigrisha@sysadmins.ru 12 БЕЗОПАСНОСТЬ

Пингвин с одного пинка Переполнение буфера


Сергей Яремчук в Windows NT/2000/XP
grinder@ua.fm 24 Станислав Гошко
bigafroelephaut@mail.ru 74
OpenBSD. Первые шаги
Денис Назаров ПРОГРАММИРОВАНИЕ
pheonix@sysattack.com 28
Регулярные выражения
NetBSD: установка и настройка и поиск текста в Perl
Андрей Бешков Владислав Гошко
tigrisha@sysadmins.ru 34 synthetic@inbox.ru 78

Эффективная почтовая система ОБРАЗОВАНИЕ


на базе Exim
Денис Мысенко
duster@duster.ru 40 Могущество кодов Рида-Соломона,
или Информация, воскресшая из пепла
Крис Касперски
Новые средства OC FreeBSD 5 kk@sendmail.ru 88
Всеволод Стахов
CEBKA@smtp.ru 46
BUGTRAQ 2, 62, 69
HARDWARE

Плохое электропитание,
или «Грабли» с UPS
Павел Закляков
amdk7@mail.ru 52

WWW.SAMAG.RU
№8(9), август 2003 1
bugtraq

Раскрытие опознавательной Межсайтовый скриптинг


информации в “aMSN” в Microsoft Outlook Web Access
Уязвимость раскрытия опознавательной информации Несколько уязвимостей обнаружено в Microsoft Outlook
обнаружена в «aMSN» – в Linux версии MSN Messenger. Web Access (OWA). Удаленный пользователь может
Локальный пользователь может определить Hotmail-па- обойти настройки фильтрования, чтобы выполнить про-
роль целевого пользователя. Локальный пользователь извольный код сценария и получить OWA пароль целе-
может выполнить серию действий, чтобы раскрыть вого пользователя.
Hotmail-пароль целевого пользователя: Удаленный пользователь может послать специаль-
но сформированное HTML email сообщение к целево-
- Open AMSN Messenger and sign in му пользователю, чтобы получить доменное имя целе-
- Go to Tools>Options>Preferences>Applications
- For Browser type in a location other then where the вого пользователя и его пароль.
browser is, and the same for File Manager Способов устранения обнаруженной уязвимости не
- Click Save
- On the main part of AMSN, click on the text to go to the существует в настоящее время.
hotmail inbox

Уязвимость обнаружена в aMSN 0.8


Способов устранения обнаруженной уязвимости не
существует в настоящее время.
Удаленный доступ
в ColdFusion MX Server
Несколько уязвимостей обнаружены в ColdFusion MX
Server. Удаленный пользователь может получить дос-
Просмотр исходного кода туп к серверу в конфигурации по умолчанию.
ColdFusion-страниц в ColdFusion MX В конфигурации по умолчанию Remote Development
Уязвимость раскрытия информации обнаружена в Service (RDS) не требует пароля для авторизации. На
Macromedia’s ColdFusion MX и Macromedia JRun, когда системах, в которых не установлен пароль админист-
он запущен на веб-сервере Apache на Windows-систе- ратора, удаленный пользователь может получить до-
мах. Удаленный пользователь может просматривать ис- ступ к серверу.
ходный код ColdFusion-страниц. Удаленный пользова- Также по умолчанию RDS Java servlet запущен в
тель может добавить кодированный символ пробела контексте учетной записи ColdFusion, с привилегиями
(%20) к концу URL, чтобы просматривать исходный код LocalSystem. Удаленный авторизованный пользова-
«.cfm»-, «.cfc»- или «.cfml»-страниц. Уязвимость рабо- тель может переконфигурировать свойства веб-сай-
тает только в Apache 1.3.x и 2.x на Windows-системах. та, чтобы получить возможность добавлять любые
Уязвимость обнаружена в ColdFusion MX (Standard файлы на сервер.
Edition), MX for J2EE (JRun), Macromedia JRun 4.0 Также сообщается, что когда установлен RDS-па-
Для устранения уязвимости установите обновлен- роль, то пароль передается по сети в открытом виде.
ную версию программы, которую можно скачать отсю- Удаленный пользователь, способный контролировать
да: http://download.macromedia.com/pub/security/mpsb03- сетевой трафик, может получить этот пароль. Также со-
04.zip общается, что не проверяется правильность ASP
SESSION ID.
Способов устранения обнаруженной уязвимости не
существует в настоящее время.

Раскрытие чувствительной информации


в Microsoft Windows 2000
USBH_IoctlGetNodeConnectionDriverKeyName
Уязвимость обнаружена в Microsoft Windows 2000 SP3. Отказ в обслуживании при обращении
Локальный пользователь может раскрыть чувствитель- к DOS устройствам
ные данные из памяти ядра. в Microsoft Internet Explorer
При определенных обстоятельствах вызов Отказ в обслуживании обнаружен в Microsoft Internet
USBH_IoctlGetNodeConnectionDriverKeyName() может Explorer. Удаленный пользователь может завесить бра-
возвратить неинициализированные данные с простран- узер. Сообщается, что когда браузер попытается заг-
ства памяти ядра. Это может привести к раскрытию чув- рузить URL «C:\aux», то он зависнет и перестанет от-
ствительных данных. вечать на дальнейшие запросы.
Уязвимость обнаружена в Microsoft Windows 2000 Уязвимость обнаружена в Microsoft Internet Explorer 6.0
SP3 Для устранения уязвимости скачайте SP4.
Составил Александр Антипов

2
администрирование

ВОССТАНОВЛЕНИЕ ДАННЫХ
С ЛАЗЕРНЫХ ДИСКОВ
…Такой объем информации можно уничтожить в один
миг разве что динамитом, потому что существуют
дублирующие системы, и у скорости обработки есть предел.
Джон Варли
«Нажмите ENTER»

Записываемые и перезаписываемые лазерные диски представляют собой идеальное средство


для резервирования информации умеренных объемов (а всякий администратор обязательно
должен заботиться о периодическом резервировании вверенной ему информации). К сожалению,
никакая работа без ошибок не обходится (что поделаешь, человеку свойственно ошибаться –
errare humanum est, как говорили древние), и ошибочное удаление файлов CD-R/CD-RW дисков,
равно как и непредумышленная очистка последних хотя бы однажды да случается (на самом деле,
как показывает практика, с этим явлением приходится сталкиваться далеко не однажды, особенно
если пользователи самостоятельно резервируют ту или иную информацию на CD-R/CD-RW).
Насколько известно автору, утилит, предназначенных для восстановления информации с лазерных
дисков, до сих пор не разработано (во всяком случае, они не были широко представлены на рынке),
поэтому восстановлением запоротых дисков в подавляющем большинстве случаев приходится
заниматься самостоятельно. О том, как именно это сделать и рассказывает настоящая статья.

КРИС КАСПЕРСКИ
4
администрирование
Восстановление удаленных файлов Поэтому, записывая на диск информацию, предназ-
с CD-R/CD-RW наченную для передачи постороннему лицу, ни в коем
Заявляя о своей поддержке многосессионных дисков, случае не используйте для этой цели болванки, содер-
операционные системы Windows 9x и Windows NT (вплоть жащие конфиденциальные данные. «Удаление» ранее
до W2K включительно) тактично умалчивают о том, что под- записанных на болванку данных на самом деле не унич-
держивают их лишь частично. тожает их!
Каждая сессия – это вполне самостоятельный том (в Просматривая содержимое лазерного диска, полу-
терминологии Windows – «логический диск»), имеющий ченного от приятеля (купленного на радио-рынке, вы-
свою собственную файловую систему и свои собствен- тащенного из мусорной корзины), имеет смысл попы-
ные файлы. Благодаря сквозной нумерации секторов ла- таться заглянуть внутрь предыдущих сессий на пред-
зерного диска, файловая система одной сессии может мет поиска скрытой информации. Как показывает прак-
ссылаться на файлы, физически расположенные в любой тика, очень часто там обнаруживается много интерес-
другой сессии. Для того чтобы с многосессионным дис- ного. Так же вам может потребоваться восстановить
ком было можно работать как с единым томом, файловая ошибочно удаленный файл со своего собственного дис-
система последней сессии должна включать в себя со- ка, а то и воскресить всю «пришибленную» сессию це-
держимое файловых систем всех предыдущих сессий. ликом (некоторые программы записи на CD позволяют
Если этого не сделать, то при просмотре диска штатными пользователю выбирать: следует ли при создании но-
средствами Windows оглавления остальных сессий ока- вой сессии добавлять в нее файловую систему преды-
жутся потерянными, поскольку Windows монтирует лишь дущей или же в новую сессию следует включать только
последнюю сессию диска, а все прочие – игнорирует. Про- новые файлы. Неверный выбор настроек приводит к
граммы «прожига» CD-R/RW по умолчанию добавляют со- утрате содержимого всех предыдущих сессий, но, к сча-
держимое файловой системы предыдущей сессии к пос- стью, эта утрата обратима).
ледующей, однако это еще не означает, что последняя Для восстановления удаленных файлов можно вос-
сессия диска всегда содержит в себе все то, что имеют пользоваться любой программой, умеющей извлекать
предыдущие. содержимое выбранной сессии диска и записывать его
Рассмотрим, например, как осуществляется удале- в ISO-образ. Пусть для определенности это будет Roxio
ние файлов с CD-R/RW. Нет, это не опечатка! Содержи- Easy CD Creator. Позволив приводу «заглотить» вос-
мое дисков CD-R, несмотря на физическую невозмож- станавливаемый диск, в меню «CD» выбираем пункт
ность их перезаписи, в принципе все же уничтожаемо. «CD Information» и после этого на экране отображается
Для имитации удаления файла программы записи диалоговое окно следующего вида:
на CD просто не включают ссылку на уничтожаемый
файл в файловую систему последней сессии1. И хотя
«удаленный» файл все еще присутствует на диске,
«отъедая» часть дискового пространства, при просмот-
ре содержимого диска из-под Windows он уже не ото-
бражается в каталоге. «Какой же тогда смысл несет в
себе удаление файлов с CD-R, если свободная емкость
диска при этом не увеличивается, а даже уменьшает-
ся 2?!» – удивленно спросит иной читатель. На самом
же деле смысл этой операции (если его вообще можно
назвать «смыслом») заключен исключительно в сокры-
тии «удаляемых» файлов от простых пользователей.
Раз удаленные файлы не видны при просмотре со-
держимого диска штатными средствами, то неквали-
фицированному пользователю они формально недо-
ступны. Подчеркиваю: для штатных средств операци-
онной системы Windows недоступны, но те же «Маки»
позволяют монтировать любую сессию диска на отдель-
ный том, благодаря чему при просмотре многосесси-
онных дисков под «Маками» все удаленные файлы сра- Ðèñóíîê 1. Àíàëèç ñîäåðæèìîãî äèñêà íà ïðåäìåò âûÿâëåíèÿ
óäàëåííûõ ôàéëîâ.
зу же «всплывают».
Аналогичным образом обстоят дела и при удалении Как мы и видим, перед нами представлен перечень
информации с CD-RW дисков. Несмотря на теоретичес- всех сессий, имеющихся на диске с указанием номеров,
кую возможность физического уничтожения их содержи- стартовых адресов (в секторах) и длин (в мегабайтах).
мого, подавляющее большинство записывающего софта Давайте попробуем определить, имеются ли на диске
поддерживает лишь функцию очистки всего диска цели- скрытые файлы или нет. Используя команду «dir», вы-
ком, но не в состоянии выборочно удалять отдельные ведем директорию диска и запомним суммарный раз-
файлы. Так что все, сказанное выше о CD-R дисках, в мер всех файлов, которые только «видит» операцион-
равной мере применимо и к CD-RW. ная система:

№8(9), август 2003 5


администрирование
Ëèñòèíã 1. Âûâîä ñîäåðæèìîãî äèñêà íà ýêðàí, íà ñàìîì äåëå
êîâàðíàÿ Windows âûâîäèò ñîäåðæèìîå îäíîé ëèøü ïîñëåäíåé
ñåññèè äèñêà. ×òî ñîäåðæàò âñå îñòàëüíûå – íåèçâåñòíî. Âî
âñÿêîì ñëó÷àå, ïîêà íåèçâåñòíî.
KPNC$G:\>dir
Òîì â óñòðîéñòâå G èìååò ìåòêó 030710_1433
Ñåðèéíûé íîìåð òîìà: 4DD0-BB09
Ñîäåðæèìîå ïàïêè G:\
28.05.2003 05:57 6 283 745 phck31.drf.zip
03.06.2003 05:39 8 085 410 phck31.Âò 03.06.2003.zip
04.06.2003 16:45 7 898 149 phck31.Ñð 04.06.2003.zip
05.06.2003 06:06 6 718 926 phck31.×ò 05.06.2003.zip
03.07.2003 15:51 10 612 230 phck31.×ò 03.07.2003.zip
05.07.2003 06:37 8 946 860 phck31.Ñá 05.07.2003.zip
08.07.2003 12:51 9 009 642 phck31.Âò 08.07.2003.zip
09.07.2003 06:21 9 138 651 phck31.Ñð 09.07.2003.zip
10.07.2003 14:32 9 388 543 phck31.×ò 10.07.2003.zip
9 ôàéëîâ 76 082 156 áàéò
1 ïàïîê 0 áàéò ñâîáîäíî

Ага, совокупный объем 9 файлов, доступных для опера-


ционной системы, составляет всего 72 Мб (760 82 156 байт),
а совокупный объем всех сессий диска – 47,66 + 6,50 + 8,21 +
8,04 + 6,91 + 10,62 + 9,04 + 9,10 + 9,22 + 9,46 = 124,76 Мб,
что на 52 Мб длиннее! (Примечание: поле «Write Sector»,
содержащее длину записанной области диска и равное в Ðèñóíîê 2. Äèàëîãîâîå îêíî èçâëå÷åíèÿ ñåññèè ñ íàñòðîéêàìè
данном случае 255 Мб, для наших целей абсолютно беспо- ïî óìîë÷àíèþ.
лезно, поскольку в записанную область диска входят не Поле «Имя файла», как и следует из его названия, за-
только полезные данные, но и служебные области каждой дает имя образа (по умолчанию «Track»), а «Тип файла» –
сессии, в результате чего полная емкость диска всегда формат. Каким-либо образом «колдовать» над ним бес-
меньше его эффективной емкости, даже если на нем нет полезно, поскольку других форматов бесплатная версия
никаких удаленных файлов). программы все равно не поддерживает и возможность их
В какой именно сессии содержатся удаленные файлы, выбора (точнее, видимость возможности выбора) предо-
сказать невозможно – они могут присутствовать в любой из ставляется пользователю исключительно из соображений
них (или даже в нескольких сессиях сразу). Поэтому в об- этикета и/или вежливости.
щем случае все имеющиеся сессии должны просматриваться А вот настройки, обведенные рамкой «Read Data Track
последовательно. Однако иногда удается найти более ко- Settings», намного более интересны. Окно редактирова-
роткие пути. Применительно к рассматриваемому нами при- ния «Start Block» содержит LBA-адрес первого сектора
меру: давайте попробуем оттолкнуться от того факта, что выбранной сессии, а «Length in Block» – длину сессии в
количество имеющихся на диске сессий на единицу больше секторах и по умолчанию сюда подставляется информа-
числа выведенных командой dir файлов, причем размеры ция, подчерпнутая из TOC. При условии, что TOC не был
девяти последних секций практически совпадают с разме- умышленно искажен с целью защиты диска от копирова-
рами соответствующих им файлов. Первая же сессия дис- ния, этим данным можно верить. Однако как мы увидим в
ка, имеющая размер 48 Мб, не соответствует ни одному из дальнейшем, искажение TOC не редкость и с ним доволь-
видимых файлов. Что же она тогда содержит? А вот сейчас но часто приходится сталкиваться на практике (впрочем,
смонтируем эту сессию на отдельный дисковый том и по- возможности Easy CD Creator по восстановлению треков
смотрим! К сожалению, штатные средства Windows не по- с искаженными адресами даже более чем ограничены, т.к.
зволяют осуществлять такое монтирование непосредствен- он слишком щепетильно проверяет «правильность» на-
но и потому приходится идти обходным путем, записывая чального и конечного адресов, и если TOC говорит, что
выбранную сессию в ISO-образ с последующим копирова- начальный адрес больше конечного, то Easy CD Creator
нием последнего на чистый CD-R/CD-RW диск. Естествен- будет свято верить TOC, причем настолько свято, что все
но, CD-RW диски более практичны для таких эксперимен- попытки убедить его в обратном заранее обречены на
тов, поскольку их можно использовать многократно. Еще провал, так что для работы с защитами лучше подыскать
удобнее Alcohol 120%, динамически монтирующий ISO-об- другую программу, поумнее).
разы на виртуальный CD-ROM, и тем самым экономящий Поле «Block Size» содержит размер пользовательской
кучу времени (но, к сожалению, он не предоставляет воз- части сектора в байтах. Свобода выбора здесь представ-
можности выбора сохраняемых сессий и всегда помещает лена чисто символически, все равно изменить это значе-
в создаваемый им образ содержимое всего диска целиком, ние вы не сможете (да и нужно ли его изменять? ведь
поэтому одного лишь «Алкоголика» для наших эксперимен- «сырых» секторов Easy CD Creator все равно не поддер-
тов будет более чем достаточно). живает, а размер пользовательской части сектора одно-
Возвращаясь к нашим баранам (простите, к Roxio Easy значно определяется типом самого сектора и его измене-
CD Creator), дважды щелкнем мышем по строке «Session 1» ние бессмысленно).
или, предварительно выделив ее курсором, нажмем на Короче говоря, оставив все установки в состоянии,
кнопку «Read Track». На экране немедленно появится диа- предлагаемым по умолчанию, нажимаем кнопочку «со-
логовое окно следующего вида: хранить» и некоторое время ждем, пока выбранная нами

6
администрирование
сессия копируется в ISO-файл. Когда же процесс «транс- как получение несанкционированного доступа к после-
плантации» будет закончен, сформированный образ мож- дней со всеми вытекающими отсюда последствиями (на
но «закатать» на новую болванку тем же Easy CD Creator долгие годы – друзья в полоску и небо в клетку).
(в меню «File» необходимо выбрать пункт «Record CD from Для опытов по восстановлению информации с очищен-
CD image», указав в типе файлов «ISO Image File»), либо ных CD-RW дисков нам потребуется следующее:
запустить «Алкоголика» и смонтировать образ на вирту-  пишущий привод, не слишком дотошно следящий за
альный диск. корректностью содержимого TOC, поддерживающий
Так или иначе, доступ к удаленным файлам будет по- режим RAW DAO и умеющий читать содержимое pre-
лучен, и вы сможете делать с ними все что хотите. (Вни- gap первого трека. Не все модели писцов подходят
мание! При просмотре содержимого «сграбленной» сес- для этой цели, поэтому будьте готовы к тому, что вам
сии всегда учитывайте, что, во-первых, файлы, физичес- придется перепробовать большое количество различ-
ки принадлежащие другим сессиям, из данной сессии ока- ного оборудования (из двух моих рекордеров для вос-
жутся недоступными, в то время как ссылки на них здесь становления очищенных дисков подходит лишь NEC,
могут изобиловать. При обращении к реально несуществу- а PHILIPS на это, увы, не способен);
ющему файлу будет выдаваться либо мусор, либо сооб-  продвинутый записывающий soft, позволяющий ма-
щение об ошибке. Как альтернативный вариант – опера- нипулировать служебными областями диска по свое-
ционная система может просто зависнуть. Если это про- му усмотрению. Вы можете использовать Clone CD,
изошло, просто нажмите кнопку выброса диска. Windows CDRWin, Alcohol 120% или любую другую аналогич-
тут же выйдет из ступора и радостно завопит, что «уст- ную утилиту по своему выбору. Однако весь после-
ройство не готово». Во-вторых, в силу сквозной адреса- дующий материал рассчитан исключительно на
ции секторов, каждая «сграбленная» сессия должна за- Clone CD и при переходе на остальные программы
писываться на то же самое место диска, на котором она вы можете столкнуться с теми или иными проблема-
была ранее, в противном случае все ссылки на старто- ми. Если вы не уверены, что сможете справиться с
вые адреса файлов внутри этой сессии окажутся недей- ними самостоятельно – используйте Clone CD, ну а
ствительными. Требуемый результат обычно достигается затем, по мере приобретения профессиональных на-
изменением стартового адреса первого трека. О том, как выков и должного опыта, вы без труда восстановите
это сделать, рассказывается в следующей части статьи, диск любой такой программой;
посвященной восстановлению информации с очищенных  средство для работы с диском на секторном уровне –
CD-RW дисков.) утилита, позволяющая прочесть любой заданный сек-
тор (конечно, при условии, что он вообще читается при-
Восстановление очищенных CD-RW водом) и не пытающаяся пропустить те сектора, в ко-
Существует две принципиально различных методики торых по ее самоуверенному мнению ничего интерес-
очистки CD-RW: быстрая (quick) и полная (full). При быс- ного все равно нет. Копировщики защищенных дисков,
трой очистке диска с него удаляется лишь область TOC, перечисленные выше, для этой цели не подходят, т.к.
в результате чего диск выглядит «пустым», хотя его ос- отказываются читать «бесполезные» с их точки зре-
новное содержимое остается совершенно нетронутым. ния сектора. Может быть, другие копировщики ведут
Напротив, при полной очистке луч лазера «выжигает» себя и иначе – не знаю, не проверял. Вместо этого не-
всю поверхность диска целиком – от первого пита до пос- обходимую для работы утилиту я написал самостоя-
леднего. Естественно, на это требуется время и полная тельно (ее можно скачать с сайта журнала по адресу:
очистка диска может растянуться на добрый десяток http://www.samag.ru/source/k1.zip).
минут, в то время как быстрая спокойно укладывается в
одну-две минуты. Прежде чем начинать экспериментировать, давайте
Восстановление полностью очищенных дисков воз- разберемся, почему после очистки диск перестает читать-
можно только на специальном оборудовании, способном ся. Вопрос не так глуп, каким он кажется, ведь информа-
улавливать даже незначительные изменения отражатель- ция, необходимая для позиционирования головки и поис-
ной способности рефлекторного слоя. Такое оборудова- ка конкретных секторов при быстрой очистке диска оста-
ние подавляющему большинству пользователей, разуме- ется нетронутой! Управляющие данные «размазаны»
ется, недоступно. Однако диски, подвергнувшиеся быст- вдоль всей спиральной дорожки и для чтения диска на
рой очистке, могут быть восстановленны и на штатном секторном уровне TOC, в общем-то, и не нужен. Да, от-
рекордере (правда, не на всех моделях). сутствие TOC значительно усложняет анализ геометрии
Мы не будем касаться этической стороны проблемы диска и для определения количества треков/сессий дис-
и для простоты предположим, что вы хотите реаними- ка в общем случае привод должен прочитать весь этот
ровать свой собственный непредумышленно очищен- диск целиком. Но при восстановлении информации фак-
ный CD-RW диск, или условимся считать всех читате- тор времени играет второстепенную роль и им можно пол-
лей сотрудниками КГБ, которым поручили восстановить ностью пренебречь.
информацию с диска, добытого бесстрашными советс- Тем не менее при попытке чтения любого из секторов
кими разведчиками у американских шпионов. Отметим очищенного диска привод с неизменным упорством воз-
лишь то, что восстановление конфиденциальной инфор- вращает ошибку. Почему? Очень просто, это «защита»
мации с чужих CD-RW может быть классифицировано от чтения заведомо некорректной информации. Еще ни

№8(9), август 2003 7


администрирование
один из всех знакомых мне приводов не мог читать сек- Процедура восстановления состоит из трех частей:
тора за пределами Lead-Out области (собственно, на про- подготовки исходного образа трека с нормальным pre-gap;
граммном уровне содержимое Lead-in/Lead-out областей увеличения pre-gap до размеров целого диска и записи
недоступно тоже). Тем не менее эта невозможность от- исправленного образа на восстанавливаемый диск. Пер-
нюдь не концептуального уровня и удаление из микро- вые два этапа достаточно выполнить всего один раз, т.к.
программы привода «лишних» проверок позволят прочи- полученный образ (далее мы будем называть его «лечеб-
тать такой диск на ура. Нет, не подумайте! Призывать вас ным») может использоваться для всех дисков (читай: для
к дизассемблированию прошивок я не собираюсь. Дело всех дисков той же самой емкости, по понятным сообра-
это сложное, трудоемкое, да к тому же небезопасное. Не- жениям вы не сможете корректно восстановить 23-минут-
верно хакнутая прошивка может ко всем чертям угробить рый диск с помощью образа, предназначенного для 80-
привод без малейшей надежды на его восстановление. минутного диска и, соответственно, наоборот).
Нет, уж лучше мы пойдем другим путем! Для начала возьмем чистый CD-RW диск («чистый»
Идея восстановления информации, предлагаемая ав- не в смысле «ни разу не записанный», а очищенный быс-
тором, в общих чертах сводится к записи на диск фиктив- трой или полной очисткой, так же для этих целей подой-
ного TOC, адреса Lead-in и Lead-out областей которого дет и CD-R). Используя любую утилиту для штатного «про-
указывают на первый и последний сектор диска соответ- жига», запишем на него один крошечный файл, «веся-
ственно, а стартовый адрес первого трека аккурат совпа- щий» не более 500 Кб (более тяжелый файл просто не
дает с концом pre-gap области, которая по стандарту дол- уместится в запланированные 300 секторов). Выполнять
жна занимать не менее 150 секторов (или 2 секунд в пе- финализацию диска не нужно.
ресчете на абсолютные адреса). После этой нехитрой опе- Запустим Clone CD (Alcohol 120%) и снимем образ
рации привод будет читать оригинальное содержимое очи- диска. Спустя минуту-другую на винчестере образуют-
щенного диска как миленький, конечно, при том условии, ся два файла: file name.img и file name.ccd (если вы по-
что мы ухитримся настроить пишущий софт так, чтобы просили Clone CD сохранять так же и субканальную ин-
он, записав фиктивный TOC, никоим образом не пытался формацию, образуется третий файл – file name.sub,
интерпретировать подсунутые ему указатели на Leadin/ однако субканальная информация в данном случае бу-
LeadOut области как указание «выжечь» всю поверхность дет только мешать, потому опцию «чтение субканалов
диска целиком. из треков с данными» лучше всего отключить или же
Проверка показывает, что Clone CD вообще не запи- просто удалить file name.sub с диска; также нам не ну-
сывает такой TOC на диск, ругаясь на несоответствие раз- жен «Cue-Sheet», который Clone CD предлагает созда-
меров диска и образа файла. Alcohol 120% выполняет нашу вать для совместимости с другими программами, конк-
просьбу без лишних препирательств, но совсем не так, как ретно – с CDRWin).
мы хотели! Забив весь восстанавливаемый диск непонят- Открыв file name.ccd-файл любым текстовым редак-
но откуда взятым мусором, он авторитетно сообщает, что тором, найдем в нем следующие строки (ключевые слова
в процессе записи произошли ошибки и, возможно, вам для поиска «Point=0xa2» и «Point=0x01»):
следует убедиться в исправности оборудования.
Хорошо, зайдем с другой стороны. Запишем на диск Ëèñòèíã 2. Îðèãèíàëüíûé ñòàðòîâûé àäðåñ Lead-Out (ñëåâà)
è ñòàðòîâûé àäðåñ ïåðâîãî òðåêà äèñêà (ñïðàâà).
один реальный трек, занимающий минимально возмож-
ное количество секторов (по стандарту – 300, но неко- [Entry 2] [Entry 3]
Session=1 Session=1
торые приводы вполне удовлетворяются и меньшими Point=0xa2 Point=0x01
значениями), но расширим его pre-gap с двух секунд на… ADR=0x01 ADR=0x01
Control=0x04 Control=0x04
весь диск! В результате мы потеряем лишь 300 после- TrackNo=0 TrackNo=0
дних секторов, но получим доступ ко всему остальному AMin=0 AMin=0
ASec=0 ASec=0
содержимому. Учитывая, что на диске этих секторов на- AFrame=0 AFrame=0
считывается немногим более 300 тысяч, нетрудно под- ALBA=-150 ALBA=-150
Zero=0 Zero=0
считать, что процент успешно восстановленной инфор- PMin=0 PMin=0
мации составляет по меньшей мере 99,999% емкости PSec=29 PSec=1
PFrame=33 PFrame=0
всего диска, да и то лишь при том условии, что исход- PLBA=2058 PLBA=0
ный диск был забит целиком, что в живой природе прак-
тически никогда не наблюдается. Если же это вас не Изменим поля PMin:PSec:PFrame, принадлежащие
удовлетворяет – разрабатывайте свой собственный Point=0xa2 так, чтобы они указывали на самый конец дис-
софт, корректно записывающий фиктивный TOC, но ни- ка (0xa2 – это как раз Lead-Out и есть). Измененный Lead-
чего не делающий сверх этого (Lead-in область все рав- Out может выглядеть, например, так: 74:30:00. Адрес
но записывает сам привод, ну а без Lead-out при акку- Lead-Out следует выбирать с тем расчетом, чтобы меж-
ратном обращении с диском в принципе можно и обой- ду ним и внешней кромкой диска оставался по меньшей
тись, главное – пытаться прочитать сектора, находящи- мере 30-секундный зазор. Еще лучше, если ширина Lead-
еся за пределами диска, иначе поведение привода ста- Out составит полторы минуты или около того. Однако в
нет трудно предсказуемым). Мне же это делать лень – с этом случае будут неизбежно теряться последние треки
восстановлением полностью забитых дисков я еще не восстанавливаемого диска (если, конечно, вам действи-
сталкивался. Во всяком случае пока… тельно требуется их восстановить).

8
администрирование
К содержимому полей PMin:PSec:PFrame, принадлежа- увеличение pre-gap первого трека – не самая лучшая идея,
щих Point=0x01 (стартовый адрес первого трека), необхо- т.к. не все приводы способны читать такой «жирный» pre-
димо добавить ту же самую величину, которую вы добави- gap. С точки зрения совместимости было бы лучше уве-
ли к соответствующим полям Lead-Out. Отредактирован- личивать pre-gap второго трека, однако при этом первый
ный вариант может выглядеть, например, так: 74:01:42. трек придется располагать в самом начале диска и его
(74:30:00 /* новый адрес Lead-out */ – 00:29:33 /* старый тело неизбежно затрет восстанавливаемые сектора. И
Lead-Out */ + 00:01:00 /* старый стартовый адрес первого хотя это не такая уж большая проблема (в первых секто-
трека */ = 74:01:42 /* новый стартовый адрес */). Короче го- рах диска все равно ничего ценного нет), к такой мере
воря, новая версия ccd-файла должна выглядеть так: без особой необходимости все же лучше не прибегать.
На крайний случай действуйте так: запишите на диск две
Ëèñòèíã 3. Êëþ÷åâîé ôðàãìåíò «ðåàíèìàòîðà» 75-ìèíóòíûõ сессии и вместо стартового адреса Point номер 0x01 ме-
CD-RW äèñêîâ.
няйте стартовый адрес Point номер 0x02 (он будет нахо-
[Entry 2] [Entry 3] диться в разделе session=2).
Session=1 Session=1
… … Теперь наскоро очистим наш подопытный диск и до
PMin=74 PMin=74 отвала забьем его какими-нибудь файлами (предпочти-
PSec=30 PSec=01
PFrame=00 PFrame=42 тельнее всего использовать текстовики, т.к. в этом слу-
чае будет сразу видно: извлекается ли с восстановленно-
Вообще-то, для приличия следовало бы скорректировать го диска мусор или полезная информация). Записав фай-
и поля PLBA (LBA-адрес связан с абсолютным адресом сле- лы на диск, тут же выполним его быструю очистку.
дующим соотношением: LBA = ((Min∗60) + Sec)∗75 + Frame, Убедившись, что диск действительно очищен и его со-
однако текущие версии работают исключительно с абсо- держимое уже недоступно, запустим Clone CD и запишем
лютными адресами и LBA-адреса игнорируют. Теперь все только что созданный нами «лечебный» образ. Запись
что находится между концом Lead-in области и началом должна проводиться в режиме DAO, иначе ничего хоро-
первого сектора и будет называться pre-gap. При «про- шего у вас не получится (поэтому прежде чем восстанав-
жиге» диска область pre-gap остается нетронутой и поз- ливать сколь-нибудь ценный диск на еще неизвестном вам
же может быть прочитана на секторном уровне (а это как приводе, попробуйте потренироваться на «кошках» – дис-
раз то, что нам нужно!). Сказать по чести, чрезмерное ке, не содержащем ничего интересного).

№8(9), август 2003 9


администрирование
Вот наконец мы держим в руках свежевосстановлен- потому и риск ее затирания минимален (если, конечно,
ный диск. Но действительно ли он восстановлен? А вот схватиться вовремя, а не тогда, когда весь диск пере-
сейчас и убедимся! Вставляем «воскресшего из пепла» в записан до отказа). Восстановление одно-сессионных
привод NEC и с замиранием сердца пробуем прочитать дисков с затертой файловой системой – намного бо-
один из наугад взятых секторов из середины диска (на- лее трудная, но все-таки разрешимая задача. Во-пер-
чальные сектора обычно содержат нули, потом файло- вых, этих файловых систем на типовом диске целых две:
вую систему, и их очень легко принять за бессмысленный ISO-9660 и Joliet, правда, в силу их близкого географи-
мусор). О чудо! Оригинальное содержимое очищенного ческого положения при затирании диска они обычно гиб-
диска читается как ни в чем не бывало! Правда, при по- нут обе. Во-вторых, указанные файловые системы не
пытке прочесть оглавление диска средствами операци- поддерживают фрагментации и всякий файл, записан-
онной системы привод может впасть в глухую задумчи- ный на лазерный диск, представляет собой единый ин-
вость, граничащую с полным зависанием (ведь старто- формационный блок. Все что нужно для его восстанов-
вый адрес первого трека расположен не в начале диска, ления – определить точку входа и длину. Точка входа в
а совсем в другом месте), но это все ерунда! Главное, что файл всегда совпадает с началом сектора, а подавляю-
на секторном уровне диск все-таки доступен, пускай и не щее большинство типов файлов позволяют однозначно
на всех приводах. Так, в частности, ASUS вообще отка- идентифицировать свой заголовок по уникальной сиг-
зывается читать такой диск, возвращая ошибку, а PHILIPS натуре (в частности, для zip-файлов характерна следу-
читает один мусор (к счастью, этот мусор можно восста- ющая последовательность: 50 4B 03 04). Конец файла,
новить, – достаточно просто на битовом уровне выпол- правда, определяется уже не так однозначно и един-
нить EFM-перекодировку с более «правильной» позиции. ственная зацепка – структура самого восстанавливае-
Поскольку возможных позиций всего 14, перебор обеща- мого файла. Впрочем, большинство приложений доволь-
ет не затягиваться на длительное время. Тем не менее но лояльно относится к «мусору» в хвосте файла и пото-
лучше не извращаться, а просто приобрести более каче- му точностью определения его длины с погрешностью в
ственный привод). один сектор на практике оказывается вполне достаточ-
Остается лишь привести диск в состояние, пригод- ной. Поскольку файлы располагаются на диске вплот-
ное для переваривания операционной системой (что тол- ную, без «зазоров», конечный сектор всякого файла на-
ку в работе с диском на низком уровне?). Последова- дежно вычисляется путем вычитания единицы из стар-
тельно читая все сектора диска один за одним, мы бу- тового сектора следующего за ним файла.
дем собирать их в один img-файл, для определенности Вообще же говоря, техника восстановления лазерных
именуемый recover.img. Сектора, которые не удалось дисков намного проще и незатейливее искусства враче-
прочитать даже с нескольких попыток, мы будем просто вания их прямых коллег – дискет и жестких дисков. Прав-
пропускать. Теперь скопируем «лечебный» ccd-файл в да, поговорку «семь раз отмерь – один раз отрежь» еще
recover.ccd и вернем стартовый адрес первого трека на никто не отменял, и одна из пренеприятнейших особен-
прежнее место. Запишем сформированный образ дис- ностей работы с CD-RW как раз и состоит в том, что вы
ка на новую болванку и… (если все сделано правильно) не можете гарантированно управлять процессом проис-
любой привод должен читать ее правильно. Сеанс де- ходящей записи. Дискеты и жесткие диски в этом смыс-
монстрационного восстановления окончен, и мы, ма- ле полностью прозрачны: что вы пишите, то вы и полу-
лость освоившись с этой технологией, можем принимать- чаете. Перезаписываемые же носители, напротив, пред-
ся за вещи куда как более серьезные. Например, откро- ставляют собой «черный ящик», и вы никогда не можете
ем собственную компании по восстановлению очищен- быть уверенными в том, что данный конкретный привод
ных дисков. Шутка! Хотя… почему бы и нет? будет правильно интерпретировать отдаваемые ему ко-
Хорошо, а как быть, если очищенный диск был много- манды (увы, восстановление CD-RW дисков никак не впи-
сессионным? Ведь описанные выше приемы рассчитаны сывается в рамки стандарта, а все нестандартные махи-
на работу лишь с одной сессией! На самом деле можно нации могут интерпретироваться приводом неоднознач-
восстановить и многосессионный диск. Это лишь чуть-чуть но). Единственное, что остается посоветовать – не пус-
труднее. Но, чтобы это сделать, мы должны предваритель- кайте все на самотек, а бесконечно экспериментируйте,
но познакомиться с остальными полями TOC. А это уже экспериментируйте и еще раз экспериментируйте, на-
тема следующей статьи! капливая бесценный опыт, который вам когда-то очень
Постойте, а если после очистки диска на него что- пригодится.
то писалось – возможно ли тогда его восстановление
1
или нет? Разумеется, непосредственно затертые мес- Правда, это умение даровано не всем программам,
та утеряны безвозвратно, но остальную часть инфор- вот Roxio Easy CD Creator оно даровано, а, например,
мации по-прежнему можно спасти. Если диск до очист- Stomp Record Now! – нет.
2
ки был многосессионным, то нам даже не придется кор- Уменьшение свободного пространства объясняется
петь над восстановлением файловой системы, т.к. фай- тем, что каждая открываемая сессия требует для своего
ловая система каждой последующей сессии обычно размещения определенного места, однако если удалению
дублирует предыдущую («обычно» это в смысле «за одних файлов сопутствует запись других, то открывать
исключением удаленных файлов») и последняя сессия новую сессию все равно приходится и в этом случае, на-
диска оказывается достаточно далеко от его начала, а кладные расходы на удаление отсутствуют.

10
администрирование

АНДРЕЙ БЕШКОВ

12
администрирование
Первая часть этой статьи (см. июльский номер журнала)  статус каждого принтера
рассказывала об одной из нескольких методик настройки  общее количество заданий в очереди
Nagios для слежения за серверами под управлением семей-  количество заданий в очереди каждого принтера
ства операционных систем Windows. Для достижения наших  общее количество выполненных заданий
целей на контролируемую машину устанавливалась про-  количество заданий, выполненных каждым принтером
грамма NSClient, а данные собирались с помощью модуля  список IP-адресов или пользователей, создававших за-
check_nt. Сегодня мы изучим второй способ мониторинга. дания
Для получения необходимых данных мы будем использовать  количество и размер заданий, отправленных каждым
SNMP (Simple Network Management Protocol). Большинство пользователем
знаний, приобретенных после прочтения этой статьи, мож-  таблица интерфейсов подключения к локальной сети
но будет применить для настройки не только систем мони-  статус каждого из этих интерфейсов
торинга на основе Nagios. Понимание принципов работы  количество, размер, вид пакетов, прошедших через
SNMP и практические навыки обращения с Windows в этом каждый интерфейс
аспекте позволят передать нужные нам данные другим сис-  общий размер оперативной памяти
темам мониторинга, работающим с SNMP. Например, это  размер свободной оперативной памяти
могут быть mrtg, OpenNMS, Dec PolyCenter Network Manager,
HP Open View, IBM AIX NetView/600 и любые другие програм- Количество доступной информации впечатляет. Самой
мы, обладающие подобной функциональностью. приятной изюминкой в реализации SNMP является тот
На данный момент SNMP является самым популярным факт, что все сложности по взаимодействию с реальным
протоколом управления и мониторинга сетей. Первона- оборудованием ложатся на плечи агента, который, в свою
чально он разрабатывался для работы с маршрутизато- очередь, предоставляет стандартный интерфейс доступа
рами, но постепенно стал использоваться и во многих к данным оборудования. Таким образом, менеджер мо-
других устройствах. Сейчас его реализации можно встре- жет легко общаться с агентами, созданными разными про-
тить в сетевых коммутаторах, серверах печати, межсете- изводителями оборудования. Для того чтобы агент мог
вых экранах и прочих видах сетевого оборудования. правильно описать оборудование, в которое он встроен,
Давайте разберемся с принципами работы этого про- а менеджер – понять, о чем идет речь, они должны оба
токола. Внутри каждого из устройств, которыми можно опираться на одну и ту же модель подконтрольного ре-
управлять, находится программное обеспечение для ра- сурса. Данные модели хранятся в базе данных управляю-
боты с SNMP, называемое агентом. В свою очередь, про- щей информации – MIB (Management Information Base),
грамма, работающая на станции управления сетью, на- которая полностью описывает список доступных харак-
зывается менеджером. Агент выступает посредником теристик ресурса. Пользуясь ею, менеджер может узнать,
между внутренними структурами управляемого объекта какие сведения агент способен предоставить, что они
и менеджером. Обычно взаимодействие происходит по означают и какими свойствами аппаратуры можно управ-
инициативе менеджера и выглядит следующим образом. лять. Повсеместно MIB принято представлять в виде дре-
Менеджер отправляет запрос агенту. Тот его обрабаты- вовидной структуры. Определенные части этого дерева
вает, собирает данные и отправляет их назад. В некото- являются обязательными для всех реализаций SNMP.
рых случаях агент может самостоятельно инициировать  System – обобщенные данные о системе (имя, время
обмен данными. Обычно у агента должен быть список работы с момента последней перезагрузки).
важных событий, о наступлении которых он обязан опо-  Interfaces – данные о сетевых интерфейсах (статус, ко-
вестить менеджера. Затем менеджер по своему усмотре- личество, типы, размер пакетов).
нию выполняет какие-либо действия в ответ на оповеще-  At (Address translation table) – таблица трансляции ад-
ние. Например, такими событиями могут быть выход из ресов. Уже не используется. Поддерживается только
строя какого-либо компонента внутри наблюдаемого ради совместимости со старыми версиями.
объекта, аварийная перезагрузка, вызванная потерей  TCP – данные протокола TCP (количество соединений,
питания или любая другая критическая ситуация. Проце- получено и отправлено пакетов, количество ошибок).
дура оповещения в терминах протокола SNMP называет-  ICMP – данные протокола обмена управляющими со-
ся отправкой ловушки (SNMP Trap). общениями ICMP (количество сообщений получено и
Для того чтобы менеджер мог управлять самыми раз- отправлено, количество ошибок и их виды).
ными видами оборудования, фирмы-производители со-  EGP – протокол обмена информацией о состоянии мар-
здали стандартную абстрактную модель, позволяющую шрутизации (получено и отправлено пакетов, количе-
получить доступ к внутренним данным оборудования. В ство ошибок).
модель включается минимум данных, необходимых для  UDP – данные протокола UDP (получено и отправлено
управления и контроля. Например, модель сетевого сер- датаграмм, количество ошибок).
вера печати может содержать в себе следующие данные:  SNMP – статистика работы одноименного протокола
 время работы с момента последней перезагрузки (количество входящих и исходящих пакетов, обрабо-
 загрузка процессора тано запросов, ошибки).
 количество портов принтера  IP – данные о функционировании этого протокола (ко-
 статус каждого порта личество пакетов получено и отправлено, количество
 количество подключенных принтеров ошибок и их разновидности).

№8(9), август 2003 13


администрирование
В то же время производитель оборудования может .iso.3.dod.1.mgmt.1.1.sysUpTime
встраивать внутрь этого дерева свои собственные под-
деревья. Чаще всего они называются private. С помощью Выглядит странно, но от этого значение строки не меня-
такого встраивания реализуется возможность получить ется. В любом случае агент конвертирует его в числовое
доступ к функциям и данным, характерным только для представление. Таким образом, мы получаем уникальную
этого оборудования. Для примера посмотрим на стандар- комбинацию чисел, однозначно идентифицирующую объект,
тный образец данных, используемых агентом SNMP, ра- находящийся в любой ветви дерева. В дальнейшем такую
ботающим на машине win2000rus. комбинацию мы будем называть OID (Object identifier) или,
говоря русским языком, «Идентификатор объекта».
В связи с тем, что префикс iso.org.dod.internet.mgmt.mib2
встречается почти в каждом OID, большинство людей во-
обще перестало его писать. Подразумевается наличие это-
го префикса, поэтому очень часто можно встретить такой
вид записи:

system.sysUpTime

Несмотря на то что в каждой ветви дерева может на-


ходиться несколько экземпляров объектов, в некоторых
находится только один. В этом случае все зависит от це-
лесообразности. Например, нет смысла держать внутри
ветви system.sysUpTime два экземпляра объекта, пото-
му что время работы системы может быть только одно.
В случае если экземпляр объекта один, ему присваива-
ется номер «0». Доступ к его данным можно получить,
обратившись к нему либо как system.sysUpTime, либо
system.sysUpTime.0.

Например, для того чтобы узнать время работы системы с


момента последней перезагрузки, нужно пройти через ветку: Примером хранения нескольких экземпляров объекта
являются ветви:
.iso.org.dod.internet.mgmt.mib2.system.sysUpTime  interfaces.ifTable.ifEntry.ifType – тип сетевой карты;
 interfaces.ifTable.ifEntry.ifIndex – уникальный ключ;
Буквенная запись используется для удобства восприя-  interfaces.ifTable.ifEntry.ifMtu – максимальный размер
тия информации человеком, менеджеры и агенты опериру- пакета данных.
ют числами. Соответственно, каждая часть пути имеет свой
числовой идентификатор. Внутри этих ветвей хранятся данные о сетевых картах,
 iso – 1  mgmt – 2 установленных на нашей машине. Подветвь interfaces обла-
 org – 3  mib2 – 1 дает очень интересной конструкцией. Объект .inter-
 dod – 6  system – 1 faces.ifNumber содержит в себе цифру «2», это говорит нам,
 internet – 1  sysUpTime – 3 что в системе установлены две сетевые карты. Внутри вет-
ви interfaces.ifTable.ifEntry находится массив данных сетевых
Это значит, что тот же самый путь выражается как интерфейсов. По сути дела это хэш-массив. В некоторых
.1.3.6.1.2.1.1.3. Если у вас сегодня плохое настроение, то книгах он еще называется ассоциативным массивом. Ветвь
можно использовать подобное смешанное написание: interfaces.ifTable.ifEntry.ifIndex объявляет два ключа с уникаль-

14
администрирование
ными цифровыми идентификаторами. В дальнейшем эти GetNextRequest, то внутри должна быть та строка сообще-
ключи используются для того, чтобы не путать между собой ства Read-Only, которая запрограммирована в агенте.
экземпляры объектов внутри каждой нижележащей ветви. Если же происходит попытка передать агенту на выпол-
Таким образом, получается, что ко второй сетевой карте нение команду SetRequest, то для начала проверяется тип
относятся следующие экземпляры объектов: изменяемого объекта MIB. Тип должен быть read-write. И
только затем происходит проверка переданной менедже-
interfaces.ifTable.ifEntry.ifType.16777219 ром строки сообщества на совпадение со строкой Read-
interfaces.ifTable.ifEntry.ifIndex.16777219
interfaces.ifTable.ifEntry.ifMtu.16777219 Write. Внесение изменений происходит, только если обе
проверки завершились с положительным результатом.
Ну а к первой сетевой карте относятся соответственно: В большинстве реализаций строка сообщества Trap
применения не нашла. Первоначально она задумывалась
interfaces.ifTable.ifEntry.ifType.1 как вспомогательное средство для облегчения процеду-
interfaces.ifTable.ifEntry.ifIndex.1
interfaces.ifTable.ifEntry.ifMtu.1 ры сортировки внутри менеджера ловушек от разных ви-
дов агентов. Но, как показал опыт реальной эксплуата-
Разобравшись с форматом дерева, перейдем к опе- ции протокола, необходимость в таких ухищрениях воз-
рациям, которые можно выполнять с помощью SNMP. никает очень редко.
 GetRequest – самая распространенная операция. По- SNMP работает на основе протокола UDP и для обще-
зволяет получить содержимое объекта из MIB. Обыч- ния с сетью использует порт номер 162. Использование
но в разных статьях сокращается до Get. UDP в качестве основы означает, что данные передаются
 GetNextRequest – операция получения следующего эк- без установления соединения. Это дает возможность су-
земпляра из таблицы. Представим себе такую ситуа- щественно уменьшить требования к сетевой инфраструк-
цию. В нашем маршрутизаторе есть некоторое количе- туре и накладные расходы на передачу данных. Пакеты
ство портов. Мы хотим узнать, какие из них активны в SNMP могут передаваться не только с помощью UDP, но
данный момент. С помощью GetRequest читаем данные и поверх ATM, Ethernet, IPX.
первого экземпляра внутри ветви. Но вся проблема в Одной из основных проблем с безопасностью протокола
том, что мы не знаем, сколько еще экземпляров оста- SNMP являются имена сообществ, установленные изгото-
лось внутри. Вот тут-то нам пригодится GetNextRequest. вителем оборудования по умолчанию. Многие производи-
С помощью этой операции мы проходим по всему спис- тели используют в качестве имен всех перечисленных сооб-
ку объектов. Как только нам встречается первый объект ществ слово «public». Многие администраторы после уста-
из другой ветки, операция прекращается. Сокращен- новки оборудования напрочь забывают о необходимости
ное название звучит как GetNext. сменить имена сообществ. В таком случае любой более или
 SetRequest – судя по названию, каждый может догадать- менее осведомленный о протоколе SNMP злоумышленник
ся, что эта команда служит для внесения данных в MIB. может получить доступ к важным функциям оборудования.
Часто о ней говорят просто как о команде Set. Вторая большая проблема состоит в том, что пакеты прото-
 GetResponse – выполняется агентом в ответ на коман- кола SNMP передаются через сеть открытым текстом. По-
ды GetRequest, GetNextRequest, SetRequest. Если это лучается, что узнать нужные строки сообществ не так уж и
ответ на первые две, то внутрь будут вложены запро- сложно. Подобное плачевное состояние с безопасностью
шенные данные; ну а если на третью, то внутри будет протокола породило довольно забавную шутку. По мнению
подтверждение об успешном выполнении. Самые рас- сетевых острословов, SNMP расшифровывается как «Se-
пространенные устные названия для этой команды – curity Not My Problem». Положение существенно улучшилось
Reply или Response. с введением второй версии протокола SNMP. Для противо-
 Trap – содержит внутри себя специальный OID, пока- действия злоумышленникам используются Symmetric Privacy
зывающий, что это ловушка, а также информацию о Protocol (SPP), призванный защитить от прослушивания, и
том, какой MIB-объект установил ловушку и данные авторизация на основе Digest Authentication Protocol (DAP).
этого объекта. Тут и сокращать-то нечего, поэтому на- Ну а до тех пор пока SNMP v.2 не стал повсеместным стан-
звание никогда не искажается. дартом, мы будем защищаться тем, что постараемся везде,
где только возможно, перестать использовать команду
Следующее интересное для нас понятие – «Имена Со- SetRequest. Нам для проведения мониторинга совершенно
обществ» (Community Names). Они являются своеобразным нет необходимости ее применять. Таким образом, никто не
эквивалентом паролей и используются для того, чтобы раз- сможет внести изменения в данные, находящиеся внутри
граничить, какие приказы агенту может отдавать тот или оборудования. Еще одним способом борьбы со злоумыш-
иной менеджер. Каждая из пяти перечисленных ранее опе- ленниками должно стать запрещение пропускать пакеты
раций должна содержать в себе правильное имя сообще- протокола SNMP из Интернета во внутреннюю сеть. Также
ства, иначе она не будет выполнена. Если агент настроен необходимо жестко ограничить круг IP-адресов менеджеров,
соответствующим образом, то в результате запроса с оши- которым позволено обращаться к агентам, находящимся
бочной строкой сообщества менеджеру будет отправлена внутри нашего оборудования. Если после прочтения этого
ловушка с жалобой на попытку ошибочной аутентификации. краткого курса вам все еще непонятны какие-либо момен-
Строки сообществ бывают трех видов Read-Only, Read-Write ты теории работы SNMP, значит стоит почитать список час-
и Trap. Если менеджер передает агенту команды GetRequest, то задаваемых вопросов. Сделать это можно, передав лю-

№8(9), август 2003 15


администрирование
бой поисковой машине запрос snmp faq. В случае если та- После нажатия кнопок «ОК» и «Далее» наблюдаем за
кой помощи окажется недостаточно, стоит обратиться к до- процедурой инсталляции. По завершению оной посмот-
кументации, описывающей протокол. Лучшим источником рим список служб, работающих на этой машине. «Служ-
таких сведений являются RFC 1156, 1213, 1157, 1146, 2571, ба SNMP» должна быть запущена. Исходя из того факта,
2574. Покончив с кратким обзором основ SNMP, перейдем что эта машина никогда не будет выступать в роли ме-
к практическому применению полученных знаний. неджера, и соответственно, ловушки ей слать никто не
Для того чтобы на машине win2000rus заработала будет, сначала останавливаем, а затем и вовсе отключа-
служба SNMP, нужно установить добавочные системные ем сервис «Служба ловушек SNMP».
компоненты. Давайте пройдемся по цепочке меню Пуск →
Настройка → Панель управления. Дважды кликнем пик-
тограмму «Установка и удаление программ». В открыв-
шемся окне жмем кнопку «Добавление и удаление ком-
понентов Windows».

Затем начинаем редактировать свойства службы


SNMP. Сообщество Read-Only из public переименовыва-
ем в «QWEmn90», а сообщество Read-Write, скажем, в
«Zxasd098».

Ставим галочку напротив «Средства управления и


наблюдения».

Заменив значения по умолчанию такими сложными для


запоминания и случайного угадывания именами, мы по-
вышаем безопасность использования SNMP. Честно гово-
ря, сообщество Read-Write надежнее всего вообще отклю-
Нажимаем кнопку «Состав» и обязательно убеждаем- чить удалением соответствующего имени из списка. В спи-
ся, что «Протокол SNMP» тоже помечен галочкой. сок узлов, от которых можно принимать пакеты SNMP, до-
бавляем адрес нашего сервера Nagios и самой Windows-
машины, тем самым выполняя еще один реверанс в сторо-
ну безопасности. Помня, что жизнь под Windows – это цепь
постоянных перезагрузок, перезапускаем службу SNMP,
для того чтобы изменения в настройках вступили в силу.
Закончив с предварительным конфигурированием, по-
беспокоимся о своем удобстве. Установим на Windows-
машину браузер SNMP. Интерфейс командной строки –
это хорошо, но все же графическими средствами бродить
по веткам SNMP гораздо приятнее.
Для использования под Windows можно взять стандар-
тного агента MS SMS Netmon на сайте производителя:

16
администрирование
http://www.microsoft.com/smsmgmt/. Я буду использовать На экране должно отобразиться что-то подобное сним-
утилиту по имени GetIf версии 2.2, полученную тут: http:// ку, приведенному на следующей странице. Давайте раз-
www.wtcs.org/snmp4tpc/FILES/Tools/SNMP/getif/getif-2.2.zip. беремся, что мы видим. Самое верхнее поле содержит
Она умеет делать много полезных вещей, но самое глав- символьную нотацию OID, чуть ниже располагается циф-
ное – отлично работает с SNMP. У всех желающих есть воз- ровая форма записи того же самого. Еще ниже находит-
можность там же взять более современную версию 2.3. Хотя ся дерево MIB. Справа от дерева – 4 информационных
лично мне она не очень нравится из-за изменений в интер- поля, описывающих выбранный объект. Среди них – тип
фейсе. В процессе инсталляции жмем несколько раз кноп- объекта (Type); доступ, разрешаемый к объекту (Access);
ку «Next». Не прошло и минуты, как мы стали счастливыми список значений, которые может принимать объект
обладателями SNMP-браузера. Для Unix-систем взять бра- (Enums). Например, для OID, описывающего состояние
узер можно здесь: http://snmpbrowser.sourceforge.net/. сетевых интерфейсов:
В дальнейшем все инструкции приводятся для работы
с GetIf. Впрочем, остальные версии браузеров SNMP дол- .iso.org.dod.internet.mgmt.mib-2 ↵
.IfTable.IfTable.IfEntry.IfOperStatus
жны быть очень похожи в обращении. Запустим браузер
первый раз и начнем заполнение полей, необходимых для доступны значения «up», «down», «testing». Затем идет
выполнения SNMP-команд. В поле «Host Name» пишем ад- статус объекта (Status) – является ли объект обязатель-
рес либо имя нашей Windows-машины. Затем в поля «Read ным или нет. Еще ниже находится область, в которой вы-
commuinty» и «Write community» вносим «QWEmn90» и водится подробное разъяснение значения данных выбран-
«Zxasd098». Нажимаем кнопку «Start». Если все пустые ного объекта. Хочу заметить, что, по моему мнению, это
строки заполнились данными, а не надписями «error» или одна из самых полезных возможностей, предоставляемых
«none», и получилось что-то подобное рисунку, значит браузером. Даже в символьной записи не всегда понят-
SNMP работает исправно. но, данные о какой функциональности устройства предо-
Теперь обратимся к вкладке MBrowser, ради возмож- ставляет та или иная ветвь дерева. Опускаясь еще не-
ностей которой все это, собственно, и затевалось. Для много вниз, видим окно, в котором отображаются резуль-
того чтобы получить данные, хранящиеся в какой-либо таты запросов, выполненных по нажатию клавиши «Walk».
подветви, нужно дважды кликнуть на корневом элементе Это и есть содержимое объектов, находящихся в выбран-
«iso». Возьмем, к примеру, OID: ной подветви. Ниже всех находится группа полей ввода,
обеспечивающая возможность изменения данных, нахо-
.iso.org.dod.internet.mgmt.mib-2.system.sysContact дящихся внутри выбранного объекта. Впрочем, есть воз-
можность редактировать и любой другой объект, к кото-
содержащий описание системы. Пройдя через всю иерар- рому есть доступ Read-Write. Для этого нужно изменить
хию к нужной точке внутри дерева, нажимаем кнопку «Walk». OID, установленный по умолчанию в строке редактиро-

№8(9), август 2003 17


администрирование

вания. После того как все необходимые данные введены чтобы данные счетчиков производительности (performance
в поле редактирования, жмем кнопку «Set» и смотрим на counters), о которых шла речь в первой части этой статьи,
результат. Отсюда следует вывод, что мы можем не толь- были доступны нам через SNMP. Добиться подобного
ко просматривать данные, но и довольно легко редакти- приятного эффекта можно с помощью программы, назы-
ровать их. Спору нет, все возможности, предоставленные ваемой SNMP4W2K. Для Windows NT, соответственно, она
нам программой GetIf, очень даже полезны, но кое-что все будет называться SNMP4NT. Все семейство вышеописан-
же нужно улучшить. Например, расширить базу MIB, ко- ных программ распространяется в двух вариантах. Бес-
торую она использует, потому что в комплекте MIB, по- платная стандартная версия называется SNMP4W2K-STD
ставляемом по умолчанию, не хватает многих жизненно и SNMP4NT-STD. Соответственно, платная версия зовет-
важных OID. Берем архив необходимых нам MIB здесь: ся SNMP4W2K-PLUS и SNMP4NT-PLUS. В связи с паде-
http://www.wtcs.org/snmp4tpc/FILES/Tools/SNMP/getif/ нием спроса на саму Windows NT, а затем и на платную
GETIF-MIBS.ZIP. Распаковываем его во временную дирек- версию SNMP4NT-PLUS, автор недавно выложил ее в сво-
торию, затем все файлы с расширением .mib копируем в бодный доступ. Нынче вне зависимости от толщины ко-
папку, где у нас установлена программа GetIf. Обычно это шелька ее могут скачать все желающие. Разница между
C:/Program Files/GetIf 2.2/Mibs/. После копирования уда- версиями состоит в размерах базы MIB и стоимости 50$
ляем файл .index, содержащий внутри себя список фай- за одну лицензию. Бесплатная версия, кроме большого
лов, в которых находятся MIB. Запускаем Getif, файл .index количества стандартных счетчиков, содержит еще и счет-
будет создан заново и заполнен новым списком MIB-фай- чики следующих сервисов Windows:
лов автоматически. Посмотрев на вкладку MBrowser, осоз-  Print Services
наем, сколько полезного добавилось в нашу базу. Если  SMTP Services
же такое обилие вас пугает, то можно ограничиться копи-  NNTP Services
рованием только следующих:
Платная версия добавляет возможность работать со
Mib_ii счетчиками, в которых содержатся данные следующих
MIB_II_TRANSMISSION
RFC_BASE_MINIMUM служб:
PRIVATE_ENTERPRISES/Microsoft_win2k
PRIVATE_ENTERPRISES/Microsoft_Apps
 SQL Server 2000
 Exchange Server 2000
Порыскав несколько минут по дереву, находим OID,  ISA Server
содержащий данные о загрузке процессора.  Media Services
 Active Directory
.iso.org.dod.internet.mgmt.mib-2 ↵
.host.hrDevice.hrProcessorTable.hrProcessorEntry ↵
 IIS Global Services
.hrProcessorLoad
Лично мне хватает данных, предоставляемых стан-
К сожалению, данные, предоставляемые Windows для дартной версией, поэтому я буду использовать именно
доступа через SNMP, все еще слишком скудны. Хотелось ее. Скачиваем отсюда: http://www.wtcs.org/snmp4tpc/
бы иметь более информативную картину процессов, про- FILES/SNMP4W2K/STD/SNMP4W2K-STD.zip дистрибутив
исходящих внутри подопытной машины. Очень хочется, SNMP4W2K. Подробнее ознакомиться с теорией функ-

18
администрирование
ционирования пакета, почитать список часто задавае- хотите работать с данными сервиса или программы, до-
мых вопросов и взять версию для Window NT можно на ступными только через SNMP4W2K, то вам нужно сна-
сайте автора: http://www.wtcs.org/snmp4tpc/. Ну а сейчас чала установить саму программу и только затем ста-
давайте кратко разберемся с вопросами «почему» и «как вить SNMP4W2K. Яркий пример такого подхода – служ-
это работает». ба IIS. Если она установлена после SNMP4W2K, то со-
вокупность OID, дающих доступ к ее внутренним дан-
ным, работать не будет, потому что SNMP4W2K в мо-
мент инсталляции не нашел на машине службу IIS, а
значит решил, что захламлять машину лишними MIB не
стоит. Если же поступить наоборот – сначала устано-
вить IIS, а затем SNMP4W2K, то все будет работать как
положено. За решением этой проблемы можно увлека-
тельно потерять не один час рабочего времени. Вот
такой вот образец чрезмерной самостоятельности про-
граммы SNMP4W2K.
Так как на моей машине нет сервисов вроде WINS,
SMTP, DNS, то большинство полезной для наблюдения
информации находится в объектах ветви:

.iso.org.dod.internet.private.enterprises.microsoft ↵
.software.systems.os.windowsNT.performance

Давайте определимся, какие OID мы будем исполь-


зовать для сбора необходимых нам данных. К приме-
ру, загрузку процессора можно узнать с помощью та-
кого OID:
Используя интерфейс расширения агентов SNMP, мы
внедряем в Windows свой нестандартный обработчик .iso.org.dod.internet.private.enterprises.microsoft ↵
.software.systems.os.windowsNT.performance ↵
SNMP perfmib.dll, который, опираясь на базу mib.bin и кон- .cpuprocessorTable.cpuprocessorEntry ↵
фигурацию, сохраненную в файле perfmib.ini, позволяет .cpuPercentProcessorTime
нам получить доступ к объектам производительности.
Соответствие между объектами производительности и К сожалению, процесс использования SNMP не так уж
OID хранится в базе mib.bin. Распаковав дистрибутив, и прост. Для того чтобы увидеть количество занятой вир-
приступим с нетерпением к инсталляции программы туальной памяти, нам придется провести некоторые рас-
SNMP4W2K-STD. Запускаем файл SNMP4W2K-STD.exe. четы. Берем содержимое OID:
Согласившись с условиями лицензии, выбираем дирек-
торию для инсталляции C:\Program Files\SNMP4W2K-STD\. .iso.org.dod.internet.private.enterprises.microsoft ↵
.software.systems.os.windowsNT.performance ↵
Как только полоса копирования файлов перестанет мель- .memmory.memmoryCommitLimit
кать, нам будет предложено две опции «View Readme
File» и «Run Installed Application». Недрогнувшей рукой соответствующее системному счетчику «\Память\Предел
отключаем первую опцию и нажимаем «ОК». После это- выделенной виртуальной памяти», делим его на 100 и
го появится окно командного интерпретатора с несколь- получаем величину, показывающую, сколько байт при-
кими вопросами, которые нужно уточнить. Соглашаясь нимается за 1% памяти. В моем случае получилась ве-
с выбором, предлагаемым по умолчанию, нужно будет личина 3 184 967 байт. Отсюда следует вывод, что на
нажать несколько раз клавишу «Y». Программа инстал- моей машине 1% – это почти 3 мегабайта памяти. По-
ляции самостоятельно внесет изменения в реестр и пе- лучаем данные о количестве израсходованной памяти:
резапустит службу SNMP. Если браузер SNMP работа-
ет, закрываем его. Для того чтобы новые ветви, добав- .iso.org.dod.internet.private.enterprises.microsoft ↵
.software.systems.os.windowsNT.performance ↵
ленные SNMP4W2K, появились в GetIf, нужно скопиро- .memmory.memmoryCommittedBytes
вать MIB-файлы программы SNMP4W2K, находящиеся
в директории C:\Program Files\SNMP4W2K-STD\Mibs\ в соответствующие счетчику «\Память\Байт выделенной
директорию, где лежат базы MIB нашего браузера виртуальной памяти». В моей системе это 53 776 337 байт.
C:\Program Files\Getif 2.2\Mibs\. Снова удаляем файл Делим полученную величину на размер одного процента,
.index и, запустив GetIf, идем любоваться веткой: равного 3 184 967 байт, и получаем 16.88%. Значит, сво-
бодной памяти еще достаточно. Именно такую методику
.iso.org.dod.internet.private.enterprises расчетов мы будем использовать при настройке порогов
критического состояния 90% – 286 647 030 байт и уровня
Все подветви, находящиеся внутри нее, появились предупреждения 80% – 254 797 360 байт для сервиса, с
благодаря SNMP4W2K. Стоит обратить внимание на помощью которого Nagios будет следить за потреблени-
один побочный эффект SNMP4W2K. Например, если вы ем памяти.

№8(9), август 2003 19


администрирование
Следующий ресурс, за которым нужно следить – сво- способом вычисляем размер виртуальной памяти и полу-
бодное место на жестких дисках Windows-машины. К со- чаем 318 439 424 байта. Теперь внимание, подходим к
жалению, мне так и не удалось заставить работать ветки: самому главному. Данные о том, сколько памяти уже из-
расходовано, находятся внутри hrStorageUsed.
.iso.org.dod.internet.private.enterprises.microsoft ↵
.software.systems.os.windowsNT.performance ↵
.pdiskphysicalDiskTable

.iso.org.dod.internet.private.enterprises.microsoft ↵ Так как использованное место измеряется опять же в


.software.systems.os.windowsNT.performance ↵
.ldisklogicalDiskTable блоках, то переводить его в байты особого смысла нет.
Нужного эффекта можно добиться, контролируя процент
отвечающие за физические устройства жестких дисков и использования блоков.
логические тома файловых систем. Но огорчаться по это- Догадаться, как узнать, сколько блоков в 1%, неслож-
му поводу не стоит. Вместо OID, созданных SNMP4W2K, но. Я думаю, вы и сами легко сможете рассчитать для
мы будем использовать стандартную ветвь: диска C:\ порог в 80% и 90% заполнения. Для моей систе-
мы это соответственно 835 367 и 938 788 блоков. При до-
.iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable стижении этих значений Nagios должен будет отправлять
нам предупреждение.
Первым делом обращаемся к ветке: Еще одним из параметров, за которыми стоит следить,
является процент использования файла подкачки. Для этого
.iso.org.dod.internet.mgmt.mib-2.host.hrStorage ↵ нам нужно брать данные из объекта с таким именем:
.hrStorageTable.hrStorageEntry.hrStorageDescr

чтобы узнать, какое из устройств нас интересует. Исполь- .iso.org.dod.internet.private.enterprises.microsoft ↵


.software.systems.os.windowsNT.performance ↵
зуя OID hrStorageDescr, читаем текстовое описание объек- .pagefilepaging-FileTable ↵
тов, содержащихся внутри массива, прикрепленного к .pagefilepaging-FileEntry.pagefilePercentUsage
этой ветке.
Я думаю, выбранных нами объектов достаточно для
надежного мониторинга. По своему усмотрению вы мо-
жете добавить любые другие объекты к этому списку. У
вас, например, могут работать службы, которые на моей
тестовой машине отсутствуют. Благо, количество данных,
Как мы видим, объект номер 1 – это дисковод гибких хранящихся в базе MIB, позволяет собирать очень под-
дисков, а номера 2 и 3, соответственно, C:\ (жесткий диск) робную статистику.
и D:\ (CD-ROM). Также интересен номер 4, представляю- Завершив работу с Windows, переходим к FreeBSD.
щий объект, содержащий данные о количестве доступ- Для получения данных через SNMP Nagios использует
ной виртуальной памяти. Идем по нашему массиву даль- модуль check_snmp. Ну а тот, в свою очередь, опирает-
ше и обращаемся к OID hrStorageAllocationUnits, описы- ся на пакет программ net-snmp, предназначенный для
вающему размер в байтах одного блока памяти каждого работы с протоколом SNMP. Многим из администрато-
из вышеназванных устройств. ров этот пакет известен под старым названием ucd-
snmp. Вы можете использовать либо ucd-snmp, либо net-
snmp. Я же по своей давно укоренившейся привычке
стараюсь использовать новейшее из доступного на дан-
ный момент программного обеспечения. Поэтому, выб-
рав net-snmp, скачиваю самую последнюю версию па-
Как видим, размер блока для диска C:\ равен 2 048 бай- кета отсюда: http://net-snmp.sourceforge.net/. На момент
там, а для виртуальной памяти соответствует 65 536 байт. написания статьи это была версия 5.0.8. Распаковываю
Теперь нужно узнать общий размер памяти каждого из архив исходного кода и начинаю установку.
перечисленных устройств, используя OID hrStorageSize.
# tar zxvf net-snmp-5.0.8.tar.gz

После того как я запустил скрипт configure, на экране


появилось несколько вопросов, на которые обязательно
нужно дать ответ.
Стоит отметить, что размер считается в блоках, о ко-
торых мы говорили ранее. Значит, чтобы узнать размер # ./configure
Defaul version of SNMP to use (3): 3
диска C:\ в байтах, умножаем hrStorageAllocationUnits.2 на # Âåðñèÿ ïðîòîêîëà SNMP, êîòîðóþ íàäëåæèò èñïîëüçîâàòü
hrStorageSize.2 и в результате всех этих вычислений по- # ïî óìîë÷àíèþ äëÿ âñåõ çàïðîñîâ.
# Ìîæíî íàïèñàòü 1, 2c, 3. ß, êàê âñåãäà, âûáðàë ñàìóþ íîâóþ.
лучаем цифру, примерно равную 2 гигабайтам. Таким же

20
администрирование
System contact infomation root@: tigrisha@sysadmins.ru наша FreeBSD-машина не будет принимать входящие
# Àäðåñ ëèöà, îòâåòñòâåííîãî çà ðàáîòó SNMP. Ìîæíî ïèñàòü
# ÷òî óãîäíî. SNMP-запросы. Для того чтобы создавать исходящие зап-
росы, его функциональность тоже не требуется. Опира-
System Location (Unknown): home
# Ãåîãðàôè÷åñêîå ìåñòîïîëîæåíèå ýòîé ìàøèíû. Ñíîâà ìîæíî ясь на эти умозаключения, сначала останавливаем, а за-
# ïèñàòü âñå, ÷òî ïðèäåò â ãîëîâó. тем и полностью отключаем демона snmpd. Для отключе-
Location to write log file /var/log/snmpd.log: ↵ ния нужно снять атрибут выполнения со скрипта /usr/local/
/var/log/snmpd.log etc/rc.d/snmpd.sh, запускающего демона после каждой
# Ñþäà äåìîí snmpd áóäåò çàïèñûâàòü ôàéëû æóðíàëîâ ñâîåé ðàáîòû
перезагрузки системы.
Location to write persistent information /var/net/snmp: ↵
/var/net/snmp # /usr/local/etc/rc.d/snmpd.sh stop
# À òóò ïîäñèñòåìà SNMP áóäåò õðàíèòü ñâîþ ðàáî÷óþ èíôîðìàöèþ # chmod ugo-x /usr/local/etc/rc.d/snmpd.sh

Убедившись в том, что скрипт configure завершил ра- Я надеюсь, что все помнят: подключаемые модули
боту без ошибок, начинаем сборку. Nagios находятся в пакете nagios-plugins. Я использовал
версию 1.3.0 – beta 3. Несмотря на то, что этот пакет у
# make вас, скорее всего, уже установлен, модуля check_snmp
в директории /usr/local/libexec/, скорее всего, нет. Такой
Затем, задав с помощью команды umask права на все поворот событий встречается довольно часто. А про-
вновь создаваемые файлы, проводим инсталляцию. изошло это потому, что на машину сначала был уста-
новлен nagios-plugins и только затем одна из версий
# umask 022 snmp. Скрипт configure, выполняемый перед компиляци-
# make install
ей модулей, пытаясь удовлетворить все зависимости,
Все выполняемые файлы программ из этого пакета ус- запрашиваемые пакетом, не нашел на вашей машине
танавливаются в /usr/local/bin/. Этот факт желательно за- ни ucd-snmp, ни net-snmp. Значит, нам нужно сконфигу-
помнить, потому что в будущем подобные знания нам очень рировать пакет nagios-plugins заново. После распаковки
пригодятся. По завершении установки в /usr/local/bin по- переходим в каталог с исходными текстами nagios-plugins
явятся следующие утилиты для работы с SNMP: и выполняем следующие команды:
 snmpbulkget  snmpnetstat
 snmpbulkwalk  snmpset # ./configure --prefix=/usr/local/nagios ↵
--with-nagios-user=nagios --with-nagios-grp=nagios
 snmpcheck  snmpstatus # gmake all
 snmpconf  snmptable # gmake install
 snmpdelta  snmptes
 snmpdf  snmptranslate Разобравшись с первоначальной настройкой, присту-
 snmpget  snmptrap пим к изучению того, как это работает. Для сбора данных
 snmpget.old  snmpusm модуль check_snmp использует программу snmpget. Да-
 snmpgetnext  snmpvacm вайте попробуем выполнить из командной строки провер-
 snmpinform  snmpwalk ку времени работы Windows-машины с момента после-
дней перезагрузки.
Не стоит отчаиваться, если процедура инсталляции
по каким-либо причинам у вас не сработает. Net-snmp, #/usr/local/nagios/libexec/check_snmp -H win2000rus ↵
-C QWEmn90 -o system.sysUpTime.0
как и ucd-snmp, можно установить из портов или паке- SNMP problem - No data recieved from host
тов, поставляющихся вместе с FreeBSD. Например, в ди- CMD: /usr/local/bin/snmpget -m ALL -v 1 ↵
-c QWEmn90 win2000rus system.sysUpTime.0
стрибутиве FreeBSD 4.7, на которой работает описыва-
емая система, обе вышеназванных программы можно Получив ошибку, не огорчаемся, а читаем статью даль-
получить с 4 диска, содержащего коллекцию пакетов. ше. Поняв механизмы действия модуля, мы сможем по-
Оба упомянутых пакета находятся внутри ветки Net. Я чинить его самостоятельно. Итак, давайте окунемся с го-
надеюсь, вы умеете самостоятельно устанавливать про- ловой в теорию функционирования модуля check_snmp.
граммы из портов или пакетов. Если брать программы При каждом запуске check_snmp создает дочерний про-
из этой коллекции, то мы можем стать обладателями цесс snmpget, которому передаются следующие парамет-
довольно свежих экземпляров net-snmp версии 5.0.3_2 ры запроса.
или ucd-snmp версии 4.2.5_2. Каким путем пойти, остав-
ляю полностью на ваше усмотрение. Все три способа -v 1
# Âåðñèÿ ïðîòîêîëà. Windows ïîääåðæèâàåò âåðñèè 1 è 2c.
установки проверены мною лично. Могу сказать, что они # Ëó÷øå èñïîëüçîâàòü 2ñ, ïîòîìó ÷òî âåðñèÿ 1 íåáåçîïàñíà.
работают нормально, и наступить на грабли можно толь-
–m ALL
ко при фатальном невезении. # Ïðèêàçûâàåì èñïîëüçîâàòü âñå èìåþùèåñÿ ôàéëû MIB
После инсталляции нужно провести некоторые дей-
–c QWEmn90
ствия, необходимые для более безопасной работы сер- # Èìÿ ñîîáùåñòâà, èñïîëüçóåìîå äëÿ äîñòóïà ê äàííûì.
вера мониторинга. В комплекте обоих вышеперечислен- # Ïîçâîëÿåò òîëüêî ÷òåíèå.
ных программ поставляется демон SNMP. Несмотря на win2000rus
все свои достоинства, этот демон нам не нужен, так как # Èìÿ èëè IP-àäðåñ ìàøèíû, êîòîðîé íóæíî îòïðàâèòü çàïðîñ.

№8(9), август 2003 21


администрирование
OID Найдя нужный фрагмент, заменяем его на вариант для
# Èäåíòèôèêàòîð îáúåêòà, â êîòîðîì íàõîäÿòñÿ èíòåðåñóþùèå
# íàñ äàííûå. своей версии пакета snmp.
Версия net-snmp:
В свою очередь, результаты работы snmpget обраба-
тываются check_snmp и передаются Nagios. Вот тут нас /* create the command line to execute */
command_line = ssprintf
поджидают две ловушки. Проблема первая состоит в (command_line,
том, что формат вызова snmpget зависит от того, из ка- "%s -v2c -m ALL -c %s %s %s",
"/usr/local/bin/snmpwalk",community, ↵
кого пакета производилась установка средств для рабо- server_address, oid);
ты с SNMP.
Рассмотрим различия на примере команды, которая дол- Версия ucd-snmp:
жна получить с удаленной машины время работы системы.
Версия net-snmp: /* create the command line to execute */
command_line = ssprintf
(command_line,
# /usr/local/bin/snmpget -v2c –m ALL ↵ "%s -m ALL -c %s -v2c %s %s",
–c QWEmn90 win2000rus system.sysUpTime.0 "/usr/local/bin/snmpwalk",community, ↵
server_address, oid);
Версия ucd-snmp:
Сохранившись, выходим и запускаем повторно ком-
# /usr/local/bin/snmpget –m ALL –c QWEmn90 ↵ пиляцию, а затем уже и инсталляцию.
-v2c win2000rus system.sysUpTime.0

Выполните обе команды и, в зависимости от версии # gmake all


# gmake install
SNMP-программ, полюбуйтесь на появившиеся ошибки.
Вторая проблема состоит в том, что snmpget упрямо не Теперь пришло время снова проверить работоспособ-
хочет работать с OID, созданными SNMP4W2K и ность модуля check_snmp. Для этого мы попытаемся по-
SNMP4NT. К примеру, попробуйте выполнить два разных лучить многократно упоминаемые ранее данные о загруз-
варианта команды, получающей с удаленной машины ке процессора Windows-машины. Заодно узнаем, насколь-
данные о загрузке процессора. Обратите внимание, OID ко правильно работает OID из коллекции SNMP4W2K:
для краткости записан в цифровом виде.
Версия net-snmp: #/usr/local/nagios/libexec/check_snmp -H win2000rus ↵
-C QWEmn90 -o .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1
SNMP OK - INTEGER: 12
# /usr/local/bin/snmpget -v2c –m ALL ↵
–c QWEmn90 win2000rus .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1
Судя по полученному ответу, модуль наконец-то зара-
Версия ucd-snmp: ботал как положено. Загрузка процессора равна 12%, что,
в общем, очень даже неплохо.
# /usr/local/bin/snmpget –m ALL –c QWEmn90 ↵ Теперь приступим к настройке самого Nagios. Первым
-v2c win2000rus .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1
делом в файле checkcommands.cfg нам нужно определить
Казалось бы, вид ошибок, полученных в ответ на ко- команду check_snmp_oid, которую мы будем использовать
манды, должен повергнуть нас в жесточайшее разочаро- для сбора данных.
вание. Но не тут то было. Вместо snmpget мы станем ис-
пользовать программу snmpwalk, которая гораздо ста- define command{
command_name check_snmp_oid
бильнее работает с нестандартными OID. Итак, переде- command_line $USER1$/check_snmp -H $HOSTADDRESS$ ↵
лываем наши команды и снова радуемся жизни. -o $ARG1$ -C $ARG2$ -w $ARG3$ -c $ARG4$ ↵
-u $ARG5$ -l ""
Версия net-snmp: }

# /usr/local/bin/snmpwalk -v2c –m ALL ↵ Давайте разберемся со значением макросов, переда-


–c QWEmn90 win2000rus .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1
ваемых команде check_snmp.
Версия ucd-snmp:  $USER1$ – путь к директории /usr/local/nagios/libexec/;
 $HOSTADDRESS$ – адрес проверяемой машины;
# /usr/local/bin/snmpwalk –m ALL –c QWEmn90 ↵
-v2c win2000rus .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1
 $ARG1$ – OID, данные которого мы будем читать;
 $ARG2$ – имя сообщества SNMP;
Разобравшись с этими мелкими проблемами, перехо-  $ARG3$ – порог, при достижении которого нужно ге-
дим к работе по исправлению модуля check_snmp. Идем в нерировать предупреждение;
директорию plugins и открываем на редактирование файл  $ARG4$ – порог критического состояния;
исходного кода check_snmp.c. Ищем в нем вот такой фраг-  $ARG5$ – данные, которые необходимо добавить к вы-
мент текста, отвечающий за вызов команды snmp_get: водимому результату. Например, для удобства можно
к результатам запросов о свободной памяти дописы-
/* create the command line to execute */ вать строку «bytes».
command_line = ssprintf
(command_line,
"%s -m ALL -v 1 %s %s %s", Обратите внимание на опцию -l "". Она позволяет за-
PATH_TO_SNMPGET, server_address, community, oid);
менить строку, добавляющую в результате статус snmp-

22
администрирование
запроса. Обычно статус выглядит так «SNMP OK». Мне normal_check_interval 1
retry_check_interval 1
эта строка показалась лишней, поэтому я заменяю ее пу- contact_groups win-admins
стотой. notification_interval 120
notification_period 24x7
В дальнейшем я предполагаю, что вы, прочитав пер- notification_options c,r
вую часть статьи, внесли все необходимые для работы с # Îáðàòèòå âíèìàíèå íà òî, ÷òî ïîðîãè ïðåäóïðåæäåíèÿ è
# êðèòè÷åñêîãî ñîñòîÿíèÿ äëÿ äàííîãî ñåðâèñà ñìûñëà íå
машиной win2000rus данные в файлы hosts.cfg, # èìåþò, ïîýòîìó îòêëþ÷åíû ñ ïîìîøüþ ïóñòûõ êàâû÷åê “”.
hostgroups.cfg, поэтому говорить о них мы не будем. Ра- # Äîïèñûâàòü â ðåçóëüòàò òîæå íè÷åãî íå áóäåì, à çíà÷èò,
# ñíîâà íóæíî èñïîëüçîâàòü “”
зобравшись с определением команд, переходим к описа- check_command check_snmp_oid! ↵
нию тестируемых сервисов. .1.3.6.1.2.1.1.3!QWEmn90!""!""!""
}
# Ñåðâèñ, ïîêàçûâàþùèé äàííûå î ïðîöåíòå èñïîëüçîâàíèÿ # Ïðîöåíò èñïîëüçîâàíèÿ âèðòóàëüíîé ïàìÿòè
# ôàéëà ïîäêà÷êè define service{
define service{ use generic-service
use generic-service host_name win2000rus
host_name win2000rus service_description SNMP Virtual Memory usage
service_description SNMP Page File Usage is_volatile 0
is_volatile 0 check_period 24x7
check_period 24x7 max_check_attempts 3
max_check_attempts 3 normal_check_interval 1
normal_check_interval 1 retry_check_interval 1
retry_check_interval 1 contact_groups win-admins
contact_groups win-admins notification_interval 120
notification_interval 120 notification_period 24x7
notification_period 24x7 notification_options c,r
notification_options c,r check_command
# Ïîðîã ïðåäóïðåæäåíèÿ óñòàíàâëèâàåì íà 80%, à êðèòè÷åñêîå # Ïîðîã ïðåäóïðåæäåíèÿ óñòàíàâëèâàåì
# ñîñòîÿíèå íà 90%. # íà äîñòèæåíèè 80% çàïîëíåíèÿ,
# Îáðàòèòå âíèìàíèå íà çíàê “%”, ïåðåäàâàåìûé â ïîñëåäíåì # ñîîòâåòñòâóþùèõ 25 479 7360 áàéòàì, è êðèòè÷åñêîå ñîñòîÿíèå,
# àðãóìåíòå. Ìû ïðèñîåäèíÿåì ýòîò çíàê ê ðåçóëüòàòàì, # íàñòóïàþùåå ïðè çàïîëíåíèè 90% ïàìÿòè, óñòàíàâëèâàåì
# âîçâðàùàåìûì ïîñëå âûïîëíåíèÿ çàïðîñà. # íà îòìåòêó â 286 647 030 áàéò.
check_command check_snmp_oid! ↵ # Â ðåçóëüòàò, âîçâðàùàåìûé ìîäóëåì, äîáàâëÿåì ñòðîêó “bytes”
.1.3.6.1.4.1.311.1.1.3.1.1.6.1.3!QWEmn90!80!90!% check_snmp_oid!.1.3.6.1.4.1.311.1.1.3.1.1.1.3.0! ↵
} QWEmn90!254797360!286647030!bytes
}
# Äàííûå î çàãðóçêå ïðîöåññîðà, ñîáèðàåìûå
# ÷åðåç SNMP4W2K # Ñêîëüêî ìåñòà èçðàñõîäîâàíî íà äèñêå C:\
define service{ define service{
use generic-service use generic-service
host_name win2000rus host_name win2000rus
service_description SNMP CPU Load service_description SNMP Space used on disk C:\
is_volatile 0 is_volatile 0
check_period 24x7 check_period 24x7
max_check_attempts 3 max_check_attempts 3
normal_check_interval 1 normal_check_interval 1
retry_check_interval 1 retry_check_interval 1
contact_groups win-admins contact_groups win-admins
notification_interval 120 notification_interval 120
notification_period 24x7 notification_period 24x7
notification_options c,r notification_options c,r
check_command check_snmp_oid! ↵ # Ïîðîã ïðåäóïðåæäåíèÿ íàñòóïàåò ïðè ðàñõîäå 80% ïðîñòðàíñòâà
.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1!QWEmn90!80!90!% # äèñêà, ñîîòâåòñòâåííî, 835367 áëîêà. Êðèòè÷åñêîå ñîñòîÿíèå
} # íàñòóïàåò ïðè çàïîëíåíèè 90% ïðîñòðàíñòâà. Äëÿ ìîåé ìàøèíû
# ýòî 938788 áëîêîâ.  îò÷åò, âîçâðàùàåìûé ìîäóëåì,
# Äàííûå î çàãðóçêå ïðîöåññîðà, ñîáèðàåìûå ÷åðåç # äîáàâëÿåì ñòðîêó “blocks”
# ñòàíäàðòíóþ âåòêó .iso.org.dod.internet.mgmt. ↵ check_command check_snmp_oid! ↵
# mib-2.host.hrDevice.hrProcessorTable.hrProcessorEntry. ↵ .1.3.6.1.2.1.25.2.3.1.6.2!QWEmn90!835367!938788!blocks
# hrProcessorLoad }
define service{
use generic-service Теперь, когда с настройкой закончено, заставляем
host_name win2000rus
service_description SNMP hrProcessorLoad Nagios загрузить обновленные файлы конфигурации.
is_volatile 0
check_period 24x7
max_check_attempts 3 # /usr/local/etc/rc.d/nagios
normal_check_interval 1
retry_check_interval 1
contact_groups win-admins Если ошибок не возникло, то немножко радуемся и при-
notification_interval 120 ступаем к созданию критических ситуаций на Windows-
notification_period 24x7
notification_options c,r машине. Проведя полное стрессовое тестирование сис-
check_command check_snmp_oid! ↵ темы, понимаем, что теперь ни один сбой системы не за-
.1.3.6.1.2.1.25.3.3.1.2.2!QWEmn90!80!90!%
} станет нас врасплох. В заключение статьи хотелось бы
сказать, что SNMP4W2K позволяет следить за гораздо
# Âðåìÿ ðàáîòû ñèñòåìû ñ ìîìåíòà
# ïîñëåäíåé ïåðåçàãðóçêè большим набором показателей здоровья сервера и служб,
define service{ работающих под управлением Windows, чем я смог опи-
use generic-service
host_name win2000rus сать в этой статье. Я думаю, после такого продолжитель-
service_description SNMP Up Time ного, но, надеюсь, увлекательного обучения каждый из
is_volatile 0
check_period 24x7 вас сможет воспользоваться всей мощью, предоставляе-
max_check_attempts 3 мой SNMP.

№8(9), август 2003 23


администрирование

ПИНГВИН
С ОДНОГО ПИНКА

Иногда возникает ситуация, когда


необходимо установить дистрибутив
Linux сразу на несколько компьютеров
или часто его переустанавливать.
При этом процесс установки в конце
концов начинает надоедать, и хочется
как-то сократить или автоматизировать
его. Все проще простого: в RedHat,
начиная с версии 5.0, имеется
технология, позволяющая установить
его буквально за пару кликов, при этом
все необходимые переменные будут
выставлены, диск разбит на указанные
разделы и установлены выбранные
пакеты.

СЕРГЕЙ ЯРЕМЧУК
24
администрирование
Все началось с того, что при очередной установке RedHat 9 #part /mnt/win_d --fstype vfat --noformat --onpart hda7
#part /usr/local --fstype ext3 --noformat --onpart hda6
я не обратил внимание на сообщение (см. скриншот), в ко- #part /mnt/other --fstype reiserfs --noformat --onpart hda9
тором были указаны файлы протокола установки и некий #part /home --fstype ext3 --noformat --onpart hda10
#part swap --onpart hda5
файл kickstart.
%packages
@ Administration Tools
@ GNOME Desktop Environment
@ Graphical Internet
@ Graphics
@ Russian Support
@ Sound and Video
@ System Tools
@ Ukrainian Support
@ X Window System
-kernel-pcmcia-cs
galeon
-gtkam
ethereal-gnome
mc
xmms-skins
fonts-KOI8-R-75dpi

Оказалось, что в этом файле расписаны ответы букваль-


но на все вопросы, на которые пришлось отвечать во время
инсталляции «Красной Шапки». Как видите, здесь можно
найти все: системные языки, клавиатурную раскладку, кон-
Если с первым файлом /root/install.log все ясно с пер- фигурацию мыши, графическую подсистему, введенный па-
вого взгляда, в нем содержится список всех установлен- роль root. Дополнительно закомментированы параметры раз-
ных пакетов (как не убирал лишнее, все равно оказалось бивки жесткого диска, забегая немного вперед, скажу, что
много хлама) и ошибки при установке некоторых из этих это сделано специально: при разбивке диска система оста-
пакетов. Приблизительно в таком виде: новится и позволит это сделать вручную. И напоследок ука-
заны сначала все группы приложений, которые можно уста-
Óñòàíîâêà 887 ïàêåòîâ новить, а затем устанавливаемые пакеты, не входящие в
Óñòàíîâêà glibc-common-2.3.2-11.9. выбранные группы или удаленные из них. Как видите, что-
…. бы добавить нужный пакет, достаточно прописать его в файл
Óñòàíîâêà hwdata-0.75-1.
Ôàéë OMF [/usr/local/share/omf/file-roller/file-roller-C.omf] ↵ без номера версии, а убрать можно, добавив знак минус «-»
íå ÿâëÿåòñÿ äîïóñòèìûì ñ òî÷êè çðåíèÿ ScrollKeeper-OMF DTD: ↵ перед пакетом (список всех пакетов можно найти в /RedHat/
/usr/share/xml/scrollkeeper/dtds/scrollkeeper-omf.dtd
Íåâîçìîæíî çàðåãèñòðèðîâàòü ↵ base/comps.xml). Наличие такого файла сразу наводит на
/usr/local/share/omf/file-roller/file-roller-C.omf некоторые мысли, правильность которых я и пошел прове-
Óñòàíîâêà redhat-logos-1.1.12-1
рять на сайт компании RedHat. И действительно, по адресу
И так все 887 пакетов, которые установлены, поэтому http://www.redhat.com/docs/ среди прочих документов на-
после инсталляции можно спокойно просмотреть, что там шлись и искомые: RedHat Linux KickStart HOWTO, датиро-
все-таки наустанавливали и после этого уже не удивлять- ванный аж 1999 годом (самое интересное, что я много
ся, куда все свободное место делось. А вот второй файл раз проходил мимо него) и RedHat Customization Guide.
/root/anaconda-ks.cfg меня удивил и озадачил одновремен- После прочтения которых очень расстроился. Оказалось,
но. Посмотрите сами, что там нашлось: что в «Шапках», начиная с 5 версии, имеется система,
позволяющая быстро установить большое количество
# Kickstart file automatically generated by anaconda. идентичных Linux на основании заранее определенной
install конфигурации, занесенной в файл. При этом, кроме ос-
lang ru_RU.UTF-8 новных предопределенных действий, есть возможность
langsupport --default ru_RU.UTF-8 ru_RU.UTF-8 ru_UA.UTF-8 ↵
uk_UA.UTF-8 выполнить любое количество дополнительных пользова-
keyboard ru_win тельских команд (например, соединиться с Интернетом,
mouse genericwheelps/2 --device psaux
xconfig --card "RIVA128" --videoram 4096 --hsync 30-70 ↵ скачать программу и установить ее или добавить запись
--vsync 50-120 --resolution в конфигурационный файл). И вообще, как вы поняли, при
1024x768 --depth 16 --startxonboot --defaultdesktop gnome
network --device eth0 --bootproto static --ip 192.168.0.4 ↵ частой переустановке или необходимости устанавливать
--netmask 255.255.255.0 --hostname grinder Linux на несколько компьютеров с одинаковой конфигу-
rootpw --iscrypted $1(zf6ola?s$lNcDbUeKI9l&&AKJ06x4S0
firewall --medium --trust=eth0 рацией это, как говорится, «то, что доктор прописал», луч-
authconfig --enableshadow --enablemd5 --enablesmbauth ↵ шего и придумать нельзя.
--smbservers grinder --smbworkgroup Gljuk
timezone Europe/Kiev Как же пользоваться этим файлом? А очень просто:
bootloader --location=mbr сначала переименовываем файл anaconda-ks.cfg в ks.cfg
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed (имя, разыскиваемое по умолчанию) и записываем его
# here so unless you clear all partitions first, this is на дискету. Теперь необходимо загрузиться как обычно и
# not guaranteed to work
#clearpart --linux при появлении приглашения ввести:
#part / --fstype ext3 --onpart hda11
#part /mnt/win_c --fstype vfat --noformat --onpart hda2
#part /mnt/win_e --fstype vfat --noformat --onpart hda8 boot: linux ks=floppy

№8(9), август 2003 25


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

boot: linux ks=hd:fd0/anaconda-ks.cfg

Интересно, что если просто ввести в строке приглашения:

boot: linux ks

То система будет пытаться произвести инсталляцию при


помощи NFS, используя BOOTP и DHCP. То есть попросту
говоря, при постоянной необходимости множественной ус-
тановки RedHat можно не заготавливать кучи CD-дисков,
а создать в сети сервер NFS (Network File System) и брать
все установочные файлы оттуда, находясь вообще неиз-
вестно где, и даже диски при этом не придется менять.
Но это еще не все. Допустим, необходимо установить
дистрибутив на совсем другой компьютер и не хочется
долго возиться, а править файл вручную лень. И не надо
этого делать, так как в RedHat имеется утилита, которая
в удобной графической форме позволяет выставить все
нужные параметры и затем создать нужный файл. Вызы-
вается она очень просто: в командной строке набираем:

redhat-config-kickstart

и вслед за этим появляется окно. Как вы видите на скрин-


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

26
администрирование
Теперь восстановление системы (данные, я надеюсь,
вы и так бэкапите) после сбоев может происходить двумя
способами. Первый – архивация всей системы, что требу-
ет наличия лишнего свободного места как на жестком дис-
ке, так и вдоволь болванок и мощного процессора, иначе
процедура может заметно затянуться.
Второй способ – восстановление при помощи kickstart.
При этом учитывая, что все вновь устанавливаемые про-
граммы находятся в /usr/local, а настройки пользователя в
/home (которые желательно размещать на отдельном раз-
деле жесткого диска), их бэкапим как обычно, а чтобы не
настраивать заново всю систему, то так же сохраняем и
каталог /etc. Остальное переустанавливаем при помощи
kickstart, а затем поверх распаковываем архивы с /usr/local,
/home и /etc (может еще и /var в зависимости от назначе-
ния компьютера), если, конечно, их затронули разрушения.
После этого система будет работать как ни в чем не
бывало. Для форматирования достаточно будет указать
только корневой каталог (если только не повреждены дру-
гие), а остальные разделы примонтируются автоматичес-
ки, т.к. данные уже имеются в старом /etc/fstab. При этом
архивы можно положить в заранее определенное место (и
создавать их вообще автоматически при помощи cron,
предположим, раз в неделю), а в конец kickstart-файла до-
бавить скриптик, реализующий их последующую распаков-
ку. А чтобы файл держать всегда в боевой готовности и не
убирать затем лишнего – при каждом удалении ненужной
программы, входящей в комплект дистрибутива, добавлять
туда соответствующую строчку. Это можно опять же воз-
ложить на плечи скрипта (ручная работа – это вообще не
стиль для Unix).
Например, такого:

#! /bin/sh
for arg in $*; do
rpm -å $1 || åõit $?
echo "- $1 " >> /root/anaconda-ks.cfg && echo ↵
"Ôàéë $1 óñïåøíî óäàëåí, èíôîðìàöèÿ çàíåñåíà ↵
â /root/anaconda-ks.cfg "
shift
done

После делаем его исполняемым (chmod +x), называем


попонятнее: rpm_del (для новичков вообще рекомендую
сделать себе алиасов попонятнее, наподобие FreeBSD, то
есть rpm_del = «rpm -e», rpm_install = «rpm -Uvh» и т. д.) и
перемещаем в каталог, где его найдет переменная $PATH
(/usr/local/bin, например). Теперь из-под root вводим:

# rpm_del mozilla xemacs docbook-style-xsl

После выполнения всех этих пакетов уже не будет, и


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

№8(9), август 2003 27


администрирование

ПЕРВЫЕ ШАГИ

ДЕНИС НАЗАРОВ

28
администрирование
Продолжим наше знакомство с OpenBSD (начало см. в перечитывает файл профиля (например, /root/.profile
июньском номере журнала). Мы остановились на успеш- или /root/.bash_profile и т. д.).
ной установке системы и предложением перезагрузить-
ся, что, собственно говоря, и выполняем. Итак, первая заг- Пароль суперпользователя
рузка уже по традиции для BSD-систем выполняется на Я думаю, не стоит описывать в этой статье, как правиль-
синем фоне, и вы можете видеть, как ядро системы опра- но выбрать пароль, слишком много уже подобных статей,
шивает все устройства, которые находит. Отлично, ядро просто скажу, что пароль As52DjZ921cOx считается нор-
загрузилось, дальше пошел init системы (процесс, кото- мальным для root. Изменить пароль можно уже знакомой
рый запускает все остальные процессы). Мы видим, как командой:
поднимается сетевой интерфейс (в моем случае le1), до-
бавляется маршрут по умолчанию (в большинстве случа- /usr/sbin/passwd
ев надо прописать его в /etc/mygate, я расскажу об этом
файле при конфигурировании сети), запускаются демо- Маленькое дополнение: привыкайте сразу использо-
ны sendmail inetd и sshd. Торжественный момент... вать полные пути к критически важным командам. Исполь-
зуйте, например, «/usr/sbin/su –», а не просто «su –», по-
рой такие мелочи бывают очень важны. Об этом в следу-
ющих статьях.
Волшебная дверь в систему, которая тщательно вы- Проверьте переменную окружения PATH (echo $PATH) –
бирает себе друзей, но если вы станете ее другом – она в ней ни в коем случае не должно быть относительных
сделает все для вас. Твердо и уверенно вводим root, за- путей (начинающихся с «./») и в дальнейшем PATH супер-
тем пароль, который мы указали при инсталляции. пользователя ни за что не должна содержать путь теку-
Первое, о чем стоит позаботиться – проверка наличия щей директории «.».
патчей (исправлений) для вашей системы. Конечно, шанс,
что критические исправления присутствуют, очень мал, Системное время
однако он есть. Итак, нам прямая дорога на http:// Системное время устанавливается с помощью date (1). Если
www.openbsd.org/errata.html. Веб-страница содержит ли- требуется поменять временной пояс системы, то это дела-
стинги всех патчей, доступных для вашей версии систе- ется пересозданием символической ссылки /etc/localtime на
мы и описания к ним. И вообще в дальнейшем, если у вас правильный пояс в директории /usr/share/zoneinfo.
не –CURRENT-система с постоянным обновлением – ре- Примеры установки времени:
комендую регулярно навещать эту страницу. Установить время и дату 22 июля 2003, 18:25 PM:
Зайти как пользователь root вы можете в систему с кон-
соли и используя ssh (1) по сети. Доступ пользователя root # date 200306221825
в систему из сети сложно назвать простой глупостью, это
огромная глупость! Он разрешен по умолчанию лишь для Изменить часовой пояс:
тех случаев, когда система ставится удаленно (как раз все
мои случаи) и других пользователей в системе просто нет. # ln -fs /usr/share/zoneinfo/Asia/Bishkek /etc/localtime
Успешно зайдя в систему под root, вы увидите сообщение
«Don’t login as root, use su» – даже тут система подсказы-
вает, как надо обращаться с ней. Еще одно маленькое НО. Системные демоны
Прежде чем запрещать вход пользователя root по сети, Файл /etc/rc.conf отвечает за процесс загрузки системы. В
обязательно добавьте простого пользователя и занесите нем содержатся опции для разных загружаемых демонов
его в группу «wheel», иначе при удаленном администриро- (например, sshd и sendmail). Администратор должен сде-
вании вы потеряете все шансы вернуть права суперполь- лать копию этого файла в /etc/rc.conf.local и уже в нем вно-
зователя. Кстати, при adduser указание группы «wheel» бес- сить все исправления, которые нужны. Но я так никогда не
полезно! Вручную отредактируйте файл /etc/group, чтобы делаю. Просто привык работать напрямую с /etc/rc.conf.
он выглядел следующим образом: Используя команду hostname (1), вы можете проверить
имя хоста в сети. Можно изменить имя, используя эту же
wheel:*:0:root,myusername команду hostname (1) или изменив имя в файле /etc/
myname и перезапустив систему.
Теперь смело устанавливайте опцию:
Сетевая конфигурация
PermitRootLogin no Самое первое, что надо сделать – это набрать команду
«ifconfig –a» и посмотреть на все сетевые интерфейсы, най-
в файле /etc/ssh/sshd_config и перезапускайте демон денные и отконфигурированные системой. Исправить на-
sshd. Зайдя в систему под добавленным пользовате- стройки можно, отредактировав файл /etc/hostname.interface
лем, вы сможете использовать команды su (1) и sudo (8) (где interface – имя сетевого интерфейса, например, le1) или
для получения привилегий суперпользователя. Исполь- использовать ifconfig (8) для исправления настроек. Прочи-
зуя команду «su», система просто меняет ваш UID на тав страницу мануала hostname.if (5), у вас не останется ни-
0, а используя команду «su –», система дополнительно каких вопросов по формату файла.

№8(9), август 2003 29


администрирование
Если вы собираетесь маршрутизировать пакеты меж-
ду интерфейсами, добавьте опцию:

net.inet.ip.forwarding=1

или

net.inet6.ip.forwarding=1

в файл /etc/sysctl.conf или пересоберите ядро с опцией


GATEWAY. Пакеты не перенаправляются по умолчанию в
соответствии требованиям RFC.

BIND Name Server (DNS)


Если вы используете DNS, то настройки хранятся в фай-
ле /etc/resolv.conf. Он может выглядеть примерно так:

# cat /etc/resolv.conf
lookup file bind
nameserver 127.0.0.1
nameserver 172.16.13.35

Чтобы использовать локальный кэширующий сервер


Вот пример текущего листинга ifconfig –a одного из имен (как раз мой случай) первая строчка nameserver долж-
моих OpenBSD –CURRENT-боксов с GENERIC-ядром. на выглядеть именно так: «nameserver 127.0.0.1». Вы также
Для конфигурирования multicast routing смотрите стра- должны выставить named_flags в файле /etc/rc.conf.local, в
ницу мануала netstat (8) и страницу dhcp (8) для интер- моем случае /etc/rc.conf и создать файл named.boot (в вер-
фейсов DHCP. сии OpenBSD 3.3 используется BIND версии 9.x и файл на-
Проверьте таблицы роутинга командой netstat –rn. зывается named.conf) в соответствии со страницей мануала
Вывод будет примерно таким: named (8). Если же преобразование имен в IP-адреса проис-
ходит слишком долго, проверьте, что демон named запущен.

RPC-based сетевые сервисы


Некоторые сетевые сервисы ориентированы на использо-
вание RPC portmapper, должен быть запущен для их рабо-
ты portmap (8). Эти сервисы включают в себя YP и NFS и
множество других сервисов. Для запуска RPC portmapper
автоматически вы должны прописать директиву:

portmap=YES

в файле /etc/rc.conf.local.

Настройка YP (Yellow Pages)


Рассказывать, что такое YP в деталях я не буду, это от-
дельная тема для статьи, вкратце же можно сказать, что
это подобие Windows Active Directory, где пользователи и
прочая информация хранятся на центральном сервере и
все машины в сети работают с ним. Первое, что надо сде-
лать, – это проверить имя домена YP. Это делается при
Адрес маршрута по умолчанию находится в файле /etc/ помощи команды domainname (1). В случае ошибки отре-
mygate (если файла нет – создайте его вручную, прописав дактируйте файл /etc/defaultdomain и перезапустите систе-
туда нужный IP-адрес). Добавить маршрут вручную помо- му. Осуществить смену defaultdomain без перезапуска си-
жет команда: стемы можно при помощи той же команды domainname (1).
Запустить клиентскую часть YP-сервисов можно просто
route add default xxx.xxx.xxx.xxx запустив ypbind и затем осуществив переход на YP-сервер,
как описано на страницах мануала passwd (5) и group (5).
Для детального анализа конфигурации сетевых интер- Чтобы включить поддержку YP, вы должны добавить линию:
фейсов смотрите файл /etc/netstart, именно в нем нахо-
дятся сценарии запуска сетевой подсистемы. +:*::::::::

30
администрирование
в файл /etc/master.passwd, и это может быть корректно Конечно, очень многое из арсенала OpenBSD нам может и
выполнено при помощи команды vipw (8). В дальнейшем не пригодиться (например, авторизация по Kerberos), но
любые исправления файла /etc/master.passwd осуществ- все же стоит знать, что большинство файлов конфигура-
ляйте только при помощи команды vipw (8), т.к. авториза- ции располагаются в директории /etc. Смело пишем cd /etc
ция в системе опирается сразу на 4 файла. Это /etc/passwd, и редактируем файлы, нужные нам.
/etc/master.passwd, /etc/pwd.db, /etc/spwd.db и vipw (8) ра- Небольшая оговорка. Файл /etc/motd, содержащий
ботает с ними всеми сразу. Всю дополнительную инфор- Message Of The Day, перезаписывается каждый раз при
мацию относительно работы с YP вы можете найти на стра- перезапуске системы, а если вы хотите, чтобы ваше со-
нице мануала yp (8). общение оставалось, как, например, у меня:
Проверьте правильность монтирования дисков систе-
мы, сравнивая содержание файла /etc/fstab и выводы ко-
манд mount (8) и df (1). Например:

Вы должны просто добавить 2 пустые строчки в нача-


ло файла /etc/motd и система не будет трогать его. Мне с
моими пользователями как раз стоит держать файл /etc/
motd без изменений.:

pheonix@princess pheonix$ wc -l /etc/passwd


5006 /etc/passwd

Добавление пользователей
Я немного отвлекся, идем дальше. В OpenBSD имеются
команды user, useradd, userdel, userinfo, usermod, users для
работы с пользователями системы. Нас интересует коман-
да useradd, но разработчики решили не грузить админист-
раторов бесполезным заучиванием опций этой команды и
создали замечательный скрипт /usr/sbin/adduser, который
в интерактивном режиме задаст вам вопросы относитель-
но новых пользователей и добавит их без проблем. Типич-
ная сессия добавления пользователя:

Отредактируйте файл /etc/fstab и используйте коман-


ды mount (8) umount (8) в дальнейшем для работы с дис-
ками. Формат файла /etc/fstab вы можете опять же узнать
из страницы мануала fstab (5).

Concatenated disks (ccd)


Если вы используете Concatenated disks, отредактируйте
файл /etc/ccd.conf и используйте команды:

ccdconfig –U
ccdconfig –C

для удаления и создания ccd общих таблиц файлов. За-


тем вы можете пользоваться mount (8) и umount (8) для
работы с ccd-дисками как с обычными и отредактировать
файл /etc/fstab в случае надобности.
Ну вот, на данном этапе система уже будет сносно ра-
ботать, однако это совсем не дело – оставлять ее в таком
все еще сыром виде. Нам нужна большая гибкость и более
тонкая настройка, например, новые пользователи и т. д.

№8(9), август 2003 31


администрирование
Что примечательно и сразу бросается в глаза? Конечно Дневные, недельные
же проверка файлов авторизации системы. Скрипт ругает- и месячные скрипты
ся на то, что мой пользователь postfix имеет GID (Group Если смотреть в директорию /etc, можно увидеть там скрип-
Identificator), которого нет в системе, однако это требование ты daily, weekly, monthly. Вы можете напрямую редактиро-
почтовой системы Postfix, поэтому не обращаем на это вни- вать эти скрипты, как я, или же делать «правильно», со-
мание. Что еще? Конечно, Login class. OpenBSD поддержи- здав файлы daily.local, weekly.local, monthly.local и внеся в
вает классы пользователей, на которые будут накладывать- них нужные вам исправления. Наверное, уже сложно не
ся те или иные ограничения. Какие именно ограничения есть догадаться, что эти скрипты будут выполняться демоном
в системе, вы можете узнать, используя команду «ulimit –a». cron один раз в день, неделю, месяц. Скрипты генерируют
Например, лимиты для суперпользователя выглядят так: очень полезный отчет о системе. Вот, например, такой:

Все классы определяются в файле /etc/login.conf и про-


читав страницу мануала login.conf (5), вы без труда со- -
здадите или внесете исправления в нужный вам класс.

RC-файлы
Еще раз о них. Проверьте файлы rc.conf, rc.conf.local,
rc.local, rc.securelevel, rc.shutdown и внесите в них все из-
менения, которые вам нужны. Обычно это 5-минутное дело,
однако очень многие вещи завязаны на этих файлах.

Подтяните безопасность
Вы можете еще более обезопасить систему, отредакти-
ровав файл /etc/inetd.conf и выключив в нем такие служ-
бы/демоны, как telnetd (8) и ftpd (8), которые легко заме-
няются более безопасной службой SSH (Secure Shell).

Почтовая система
OpenBSD включает в себя Sendmail MTA, которая настрое-
на только на локальную доставку почты. Это значит, что
посылать письма локальным пользователям вы можете, а
вот принимать почту из сети – нет. Если вы хотите исполь-
зовать Sendmail MTA в дальнейшем, то вам надо отредак-
тировать файл /etc/mail/sendmail.cf и sendmail_flags в файле
/etc/rc.conf.local. Файл /etc/mail/localhost.cf, сгенерированный
из openbsd-localhost.mc как раз и служит только для «ло-
кальной MTA» и используется по умолчанию. Я использую
Postfix MTA на моих боксах, но объяснять почему в этой ста-
тье я не буду. Слишком много разных мнений на эту тему. Я
лишь могу рекомендовать вам, если вы еще не определи-
лись с выбором MTA, использовать Postfix. OpenBSD очень
хорошо с ним дружит.

DHCP-сервер
В случае надобности этого сервиса в вашей сети, я ду-
маю, вы уже догадываетесь, что надо сделать. И высылают его пользователю root на почту. Просмот-
Редактируем файл /etc/rc.conf.local: рев скрипты, вы без проблем разберетесь, как и где они
собирают данную информацию. Отдельная тема для ста-
dhcpd_flags=-q
тьи пакет mtree в OpenBSD. Именно он генерирует отчет
затем файлs /etc/dhcpd.conf и /etc/dhcpd.interfaces и за- о пропущенных и измененных файлах в системе.
пускаем демон dhcpd (8).

32
администрирование
И высылают его пользователю root на почту. Просмот- тья перед вами. Осталось только ввести имя пользовате-
рев скрипты, вы без проблем разберетесь, как и где они ля, пароль и погрузиться в темный, дремучий лес OpenBSD
собирают данную информацию. Отдельная тема для ста- с фонариком в виде журнала «Системный администра-
тьи пакет mtree в OpenBSD. Именно он генерирует отчет тор». В следующей статье я расскажу подробнее о сете-
о пропущенных и измененных файлах в системе. вой подсистеме OpenBSD и о ее тюнинге.
Вот список страниц мануала, которые я рекомендую
Заранее скомпилированное программное вам для прочтения к данной статье:
обеспечение (Packages, упаковки)  chgrp (1)  adduser (8)
Любителям лениво сидеть перед монитором посвящает-  chmod (1)  amd (8)
ся. OpenBSD имеет огромный набор packages на любой  crontab (1)  bootpd (8)
вкус, начиная от системных утилит и демонов, заканчи-  date (1)  ccdconfig (8)
вая пакетами для графической среды X Windows. На вто-  df (1)  chown (8)
ром (обычно) диске дистрибутива как раз и идут файлы в  domainname (1)  config (8)
формате tar.gz, содержащие скомпилированное и порой  hostname (1)  dhclient (8)
уже отконфигурированное ПО. Достаточно лишь исполь-  ls (1)  dhcp (8)
зовать команду pkg_add (1) и пакет уже установлен в ва-  make (1)  dhcpd (8)
шей системе. В системе FreeBSD имеются PORTS, про-  man (1)  dmesg (8)
славившие ее, чем мы хуже? У нас тоже они есть, и еще  netstat (1)  ftpd (8)
сколько! Ставим дистрибутив портов с первого диска или  passwd (1)  ifconfig (8)
же выкачиваем его из сети, используя ftp://ftp.openbsd.org,  pkg_add (1)  inetd (8)
разворачиваем в папке /usr и вуаля! У нас стоят порты.  ssh (1)  kbd (8)
Дальнейшую работу с портами в этой статье описывать  su (1)  lpd (8)
не буду, скажу лишь только:  xdm (1)  mount (8)
 ccd (4)  mtree (8)
cd /usr/ports/packagename;
make install
 aliases (5)  named (8)
 bootptab (5)  netstart (8)
и в большинстве случаев все. Вы обладатель установлен-  crontab (5)  newaliases (8)
ного ПО. Вам стоит прочитать страницы ports (7) packages  exports (5)  portmap (8)
(7) из мануала, и мне не придется краснеть за то, что я  fstab (5)  rbootd (8)
оставил вас в неведении относительно быстрой установ-  group (5)  rc (8)
ки ПО в OpenBSD. Опять же, обратившись к ftp://  hostname.if (5)  rmt (8)
ftp.openbsd.org, вы найдете много интересных вещей. Не  login.conf (5)  route (8)
забывайте, это лишь первые шаги, и мы делаем все, что-  passwd (5)  sudo (8)
бы система «точно работала», но не всегда «лучше рабо-  printcap (5)  telnetd (8)
тала». «Who wanna have, must work»,– как говорят неко-  resolv.conf (5)  umount (8)
торые, так вот и мы с вами будем потихоньку доводить  ssh_config (5)  vipw (8)
нашу работу с системой до совершенства.  hostname (7)  yp (8)
Опять получилось лирическое отступление, доиграла  packages (7)  ypbind (8)
«Enigma – Sadeness», допита четвертая чашка кофе, ста-  ports (7)

№8(9), август 2003 33


администрирование

NetBSD:
УСТАНОВКА И НАСТРОЙКА

Сегодня мы поговорим о NetBSD, которая является одной из разновидностей BSD-систем.


Несмотря на то что она широко распространена среди англоязычных пользователей, в России
о ней почти никто не знает. Эта статья призвана исправить сей досадный недостаток.

АНДРЕЙ БЕШКОВ
34
администрирование
Первая версия NetBSD, появившаяся в 1993 году, называ- манием. Примером миниатюризации может служить сле-
лась NetBSD 0.8. Основывалась она на исходном коде сис- дующая фотография, на которой запечатлен карманный
темы 4.3BSD Lite, разработанной университетом Berkeley, компьютер HP Jordana 720:
и системе 386BSD, которая стала первым вариантом BSD
Unix, способным работать на процессорах Intel 386. В тече-
ние последующих лет система NetBSD впитывала самые
лучшие идеи из всех веток BSD-систем. Многие из этих
идей постепенно трансформировались и улучшались эн-
тузиастами, работающими над развитием NetBSD. Список
приобретенных возможностей довольно длинный, поэто-
му перечислим лишь малую часть из них:
 Управление заданиями
 Быстрая файловая система Berkeley
 Надежный механизм сигналов
 Концепция виртуальной памяти
 Работа с TCP/IP
 Командная оболочка C

Впоследствии многое из того, что было опробовано


или создано на основе BSD, и NetBSD в частности, стало Если внимательно присмотреться к картинке, можно за-
стандартом для всех Unix-систем. Несмотря на свой ма- метить отлично работающий оконный менеджер BlackBox
лый размер, NetBSD является полноценной Unix-системой. и игру XDoom, в которой увлеченно сражается с монстра-
Важнейшими приоритетами в процессе разработки ста- ми владелец этого миниатюрного аппарата. Практически
ли хорошо продуманный, но в то же время простой ди- все приложения, запускаемые на обычных компьютерах,
зайн, отличное качество кода и приверженность стандар- работающих под управлением BSD-систем, будут работать
там. Система в первую очередь задумывалась как среда и на этой машине.
для обучения студентов основам проектирования Unix- Можно посмотреть галерею снимков рабочих столов
систем и полигон для проверки новых идей. Это позволи- пользователей NetBSD по этому адресу: http://www.netbsd.org/
ло легко портировать систему на огромное количество gallery/in-Action/. Я думаю, вас удивит KDE, GNOME и мно-
разнообразнейшего оборудования. Лозунгом системы жество других отлично работающих на этой платформе про-
стала фраза «если внутри этой штуки есть процессор, грамм. Благодаря бинарной совместимости с Linux (Linux
значит, мы будем на нем работать». На данный момент Binary Compatibility), присущей всем BSD- системам, есть воз-
NetBSD отлично чувствует себя более чем на 20 разных можность запросто запустить и успешно использовать бо-
платформах. Давайте кратко пробежимся по их списку: лее 90%программ, скомпилированных для Linux.
 Sun SPARC Приятно осознавать, что в компьютере размером чуть
 Sun 3 больше пивной алюминиевой баночки живет свой собствен-
 Sun 3X ный BSD Unix. Судя по всему, создатели NetBSD крепко
 Digital Alpha (64 бита) усвоили истину, не дающую покоя многим мужчинам –
 Commodore Amiga, MacroSystem DraCo размер имеющегося в распоряжении железа значения не
 Все клоны IBM PC на процессорах I386 имеет. Главное – уметь им пользоваться как следует. Тут
 Acorn RiscPC/A7000, CATS, EBSA-285, Digital Shark, искушенный в Unix читатель должен нахмуриться и выс-
VLSI RC7500 казать мнение, что, дескать, есть системы и поменьше. На-
 ATARI TT030, Falcon, Hades пример, безвременно почивший LRP (Linux Router Project)
 Hewlett-Packard 9000/300 или PicoBSD, помещающиеся на одной дискете. А я триум-
 Hewlett-Packard 9000/400 фально отвечу, что не стоит путать полноценный и бога-
 Apple Power Macintosh тый возможностями Unix с урезанными системами, глав-
 Apple Macintosh ным смыслом возникновения которых была необходимость
 Motorola MVME 86k SBCs создавать нетребовательные к железу платформы для меж-
 NeXT 68k DECstations и DECsystem, созданные на ос- сетевых экранов и маршрутизаторов.
нове Digital MIPS Для того, кто решил работать с NetBSD, на первый
 PC 532 взгляд количество аппаратных платформ, на которые пор-
 Digital VAX тирована система, не имеет особого значения. Но если
 Sharp X680x0 посмотреть с другой стороны на тот же вопрос, оказыва-
ется, что между переносом на другое оборудование и ка-
Среди аппаратного обеспечения, на котором успешно чеством исходного кода есть очень тесная связь. Без от-
выполняет свои задачи NetBSD, есть как большие 64-бит- лично спроектированного, простого для понимания и хо-
ные системы вроде Digital Alpha, так и домашние машины рошо организованного кода поддерживать такое количе-
вроде Atari или клоны IBM PC. В то же время не только ство разношерстного оборудования и разных его комби-
Macintosh, но и карманные компьютеры не обойдены вни- наций абсолютно невозможно.

№8(9), август 2003 35


администрирование
Многие системы в процессе разработки руководству- малый объем. В этой же директории находятся еще 8 дис-
ются принципом «если код работает, значит, он написан ков с пакетами дополнительного программного обеспече-
правильно». NetBSD в отличие от них считает, что такой ния. Они нам пока не нужны, поэтому скачивать их не ста-
ход мыслей неверен. Вместо этого пропагандируется сле- нем. В качестве бонуса можно взять файл i386pkg-cover.pdf,
дующий подход к созданию систем: код не считается ра- содержащий внутри себя картинки обложек для CD-ROM.
ботающим до тех пор, пока не будет полностью проверен По окончании скачивания тем или иным способом за-
на правильность. Кажется странным, что большинство писываем образ на CD-ROM. Я использовал для этого ста-
людей не видят или не хотят понимать этих отличий. ренькую машину с Linux и программу cdrecord. Впрочем,
Опираясь на университетские традиции, сообщество, для Windows-программ, выполняющих данную функцию,
работающее над развитием NetBSD, позиционирует свой тоже вполне достаточно.
проект как свободную систему для профессионалов и эн- В BIOS выставили загрузку с CD-ROM, вставили диск
тузиастов, которую все желающие могут использовать для и перезагрузили компьютер. Как и во всех остальных BSD-
любых целей. Каждому предоставляется свободный дос- системах, вначале видим стандартное меню с таймером.
туп к исходным кодам и бинарным пакетам системы. А Нажимаем клавишу «Enter» или ждем, пока сработает тай-
значит, внесение модификаций и дальнейшее распрост- мер, и загрузка продолжится сама по себе.
ранение системы всячески приветствуется.
На мой взгляд, все вышеперечисленные характеристи-
ки NetBSD делают ее идеальной системой не только для
изучения Unix, но и для многих других начинаний. Одним
из приятных моментов в общении с этой системой являет-
ся то, что для начала работы не нужно покупать дорогосто- В зависимости от скорости процессора на экране в
ящего оборудования, а можно использовать старые PC, Mac разном темпе начинает появляться информация, выводи-
и прочие компьютеры. Это большой плюс для развития ма- мая модулем диагностики и обнаружения оборудования.
лобюджетных исследовательских проектов. Ну а если вам Иногда процесс вывода замирает на 20-40 секунд. Как
нужен Unix, работающий одинаково стабильно на множе- только мы добрались до этапа, изображенного на следу-
стве платформ, то вполне возможно, что NetBSD – ваш ющем снимке, нужно немного подождать. Система заду-
единственный выбор. мывается примерно на минуту и, казалось бы, зависает.
Обсудив все плюсы NetBSD, перейдем от теории к
практике. Ну а чтобы у вас не сложилось впечатления о
предвзятом и однобоком освещении системы, я в процес-
се установки обязательно буду говорить о замеченных не-
достатках.
Начать инсталляцию можно со следующих носителей: Но не стоит беспокоиться и пробовать вмешиваться в
 ftp процесс начальной загрузки. Через минуту-другую все
 гибкий диск снова зашевелится. Программа-загрузчик была занята со-
 CD-ROM зданием файловой системы в оперативной памяти. И вот
 nfs на экране появилось заглавное меню программы sysinst.
 локальная директория На протяжении всего процесса инсталляции мы будем ра-
ботать именно с ней.
Так как статья не задумывалась в качестве исчерпываю-
щего руководства по установке NetBSD, я выбрал CD-ROM
как наиболее простой путь инсталляции. Не будем ослож-
нять себе жизнь возней с загрузочной дискетой, настрой-
кой nfs и прочими изысками. Для того чтобы создать заг-
рузочный CD-ROM, нам нужно скачать iso – образ диска с
любого из зеркальных серверов NetBSD. На момент на-
писания статьи для скачивания была доступна версия
NetBSD 1.6.1. Именно ее мы и будем использовать. Идем
по адресу: http://www.netbsd.org/mirrors/#iso и выбираем
ближайший к нам сервер дистрибутивов. Лично я исполь- Пользуясь появившимся меню, можно выполнить сле-
зовал работающий подозрительно быстро Эстонский сер- дующие действия:
вер ftp://ftp.ee.netbsd.org. Для моего PC предназначается  начать инсталляцию;
дистрибутив, в названии которого содержится имя исполь-  обновить уже установленную систему NetBSD;
зуемого нами процессора i386. Ну а вы, соответственно,  инсталлировать заново имеющееся в системе или до-
должны выбирать дистрибутив для своего процессора. Пе- бавить новое программное обеспечение;
реходим в директорию /pub/NetBSD/iso/1.6.1/ и качаем от-  перезагрузить машину.
туда файл с образом загрузочного диска i386cd.iso разме-
ром в 125 мегабайт. Интересно, как разработчики систе- Если с первыми тремя пунктами все более или менее
мы смогли упаковать полнофункциональный Unix в такой ясно, то необходимость четвертого пункта, позволяюще-

36
администрирование
го перегрузить машину, для меня лично довольно сомни-
тельна. Почему это нельзя сделать с помощью кнопки
«Reset» или, на крайний случай, «Power», мне было непо-
нятно. Впоследствии после консультаций со знающими
людьми было выяснено, для чего именно эта опция необ-
ходима. Оказалось, что нужна она для того, чтобы раз-
монтировать разделы, используемые во время обновле-
ния пакетов с программным обеспечением и добиться
корректного завершения установки.

Точно такого же результата можно достичь, если отка-


заться от DHCP и отвечать на все задаваемые вопросы са-
мостоятельно. DHCP-сервер на основе FreeBSD, работаю-
Например, запуск оболочки командного интерпрета- щий по 192.168.10.2, выделил мне адрес 192.168.10.128. От-
тора /bin/sh. На следующем рисунке мы можем видеть ветив «Yes» на вопрос о том, верно ли проведено конфигу-
результат выполнения команд pwd и ls. Нам предоставле- рирование сетевой карты, я решил проверить, насколько пра-
на самая обычная оболочка, с помощью которой можно вильно она будет после этого работать. Пользуясь меню, о
поработать внутри запущенной сейчас системы и подпра- котором мы говорили ранее, запустил оболочку /bin/sh. За-
вить все, что нужно, если вдруг что-то пойдет не так. Выйти тем с помощью команды ping попытался посмотреть, досту-
из оболочки можно, как обычно, нажав Ctrl+D. пен ли наш DHCP-сервер. Также по совместительству он
является DNS-сервером и шлюзом по умолчанию.

Дальше идет интерфейс для установки временной


зоны. Меню это настолько лаконично, что и писать-то о Как видите, сервер оказался доступен. Окрыленный
нем особенно нечего. Кстати, воспользоваться им для таким успехом, я решил проверить другие протоколы и
изменения данных так и не удалось. Странно, но нажатие для этого воспользовался ftp-сервисом, работающим на
каких угодно клавиш не давало никаких результатов. том же сервере. Авторизовавшись, скачал из домашней
Следом за ним появляется меню настройки сетевых директории пользователя tigrisha файл .cshrc. Убедился,
интерфейсов, отображающее две сетевые карты, установ- что файл появился в локальной файловой системе.
ленные на моей машине.

К примеру, можно выбрать первый адаптер pcn0. За-


тем следует определение типа сетевой среды. Обычно
рекомендуется устанавливать autoselect.

Следующий вопрос позволяет указать, используем ли


мы DHCP для получения сетевых параметров.

Вы можете спросить меня, зачем производились все эти


Если согласиться, то адрес TCP/IP для этого интерфей- странные манипуляции. А я отвечу: просто для эксперимен-
са будет получен автоматически при условии наличия в та. Из чистейшего любопытства и желания проверить, на-
сети DHCP-сервера. Вводим данные о домене и имени сколько гибко работает мини-система, управляющая инстал-
хоста. Я использовал в качестве имен строки «netbsd» и ляцией. Кстати, все настройки, которые мы сейчас опреде-
«unreal.net» соответственно. Так как вокруг меня нет се- лили, можно по окончании инсталляции сохранить как ис-
тей, работающих с протоколом IPv6, я отказался от его ис- пользуемые системой по умолчанию. А это значит, что нам
пользования. И в результате получил вот такую картинку: не придется вносить их руками в конфигурационные файлы

№8(9), август 2003 37


администрирование
после первой перезагрузки системы. Учитывая тот факт, что ством. Инсталляция всех пакетов плюс система X Windows
система вместе с ядром и прочими программами, с которы- займет 290 мегабайт, а без него 200 мегабайт. Следующий
ми мы работали, находится в оперативной памяти, а на же- вопрос, заданный системой, уточняет тип разбиения диска
стком диске еще нет никаких данных, стоит признать ее впе- на файловые системы.
чатляющие возможности. Я предвижу, что в этом месте мно-
гие читатели поморщатся и выскажут свое скептическое
мнение. Дескать, экая невидаль ping и ftp у них работает. А я
им в ответ заявлю, что для сравнения пусть попробуют сде-
лать что-либо подобное во время установки Windows или
Linux. Итак, наигравшись и выяснив потенциальные возмож-
ности системы, возвращаемся в самое первое меню и при-
ступаем к созданию разделов на жестком диске. Для этого
выбираем пункт «Install NetBSD to hard disk».

 Standart – вопрос о размерах и размещении необходимых


файловых систем программа инсталляции решает сама.
 Standart X – размеры и размещение файловых систем
совпадают со стандартным размещением, за исключе-
нием того, что раздел swap увеличивается в два раза.
Также стоит обратить внимание на тот факт, что систе-
ма резервирует место для бинарных файлов X-сервера.
Следующая подсказка повествует о том, что для про- Таким образом, мы получим графический интерфейс на
должения инсталляции нам необходимо создать разделы основе XFree.
на жестком диске. Затем внутри этих разделов разместить  Custom – ручное разбиение файловых систем и опре-
файловые системы нашей операционной системы. И уж деление точек монтирования.
только после этого установить нужные наборы программ-  Use existing – использовать уже имеющиеся файло-
ного обеспечения, называемые почему-то «distribution sets». вые системы. Нужно будет всего лишь указать точки
Согласившись с предлагаемым планом, выбираем целе- монтирования для них.
вой жесткий диск. В моей системе он назывался wd0. По-
следствия выбора не заставляют себя долго ждать. Я выбрал Standart X и получил следующую картину
распределения файловых систем по жесткому диску:

Тут нам разрешают использовать данные о геометрии


жесткого диска, собранные мастером оборудования, или
задать свои. Я использовал данные, определенные мас- Поверив, что все на первый взгляд выглядит нормально,
тером. После этого наступает черед очень опасного вы- решил не пользоваться опцией «Change partitions», вызыва-
бора. Нужно решить, использовать все пространство, до- ющей местный аналог программы fdisk, и выбрал взамен
ступное на этом диске, или только часть из него. Выби- пункт меню «Partitions are ok». На следующем экране систе-
рать использование части стоит в том случае, если на ма интересовалась, не хочу ли я дать имя жесткому диску
диске есть разделы других операционных систем или вы вместо используемого по умолчанию «mydisk». Я решил, что
желаете их создать в дальнейшем. При использовании хочу и назвал его «system». Впрочем, вы можете поступить,
всего пространства данные, ранее находившиеся на этом как вам заблагорассудится, потому что название некритич-
диске, будут уничтожены. но. Затем последовало предупреждение о том, что измене-
ния на жесткий диск пока не записаны и у нас есть после-
дний шанс все отменить. Недрогнувшей рукой выбираем
пункт меню, разрешающий продолжать инсталляцию. Не-
которое время на экране будут мелькать надписи, извеща-
ющие нас о процессах создания и о ходе разметки новых
У меня ничего ценного на этом диске отродясь не води- файловых систем. Нарисовав следующее меню, система
лось, поэтому было решено полностью использовать дос- пытается узнать, что мы хотим использовать в качестве си-
тупное пространство, которое было равно 1023,97 мегабайт. стемной консоли. Выбрать можно один из двух вариантов:
Следует отметить, что NetBSD для исправного функциони-  Normal bootblock – системной консолью служит мони-
рования довольствуется гораздо более скромным простран- тор, подключенный к машине.

38
администрирование
 Serial bootblock – присоединяем системную консоль к постоянством прерывалась сообщениями о фатальной
первому последовательному порту. ошибке в пакете X11-fonts. Хорошо, что установка длится
всего 5 минут. На третьей неудачной попытке были отклю-
Я выбрал Normal bootblock, в ответ система немножко чены все пакеты, связанные с X Windows. И только после это-
пожужжала диском и радостно сообщила о том, что пер- го инсталляция удалась. Либо при скачивании из сети образ
вый этап инсталляции завершен и теперь мне необходи- диска был поврежден, либо у меня плохо работает CD-ROM.
мо выбрать наборы программного обеспечения, которые В голове крутятся мысли о том, что, конечно, хотелось
будут установлены далее. Как обычно, дают выбрать из посмотреть, насколько хорошо работает оконная система,
двух наборов – Full и Custom. Повинуясь своему неуемно- но все же это некритично. Посмотрев на настенные часы,
му любопытству, решил использовать нестандартный на- понимаю, что 3 часа ночи – не самое лучшее время для того,
бор пакетов. На следующем экране слева виден список чтобы разбираться с неполадками. Ложусь спать с твердым
выбранных пакетов, а справа – меню со списком доступ- намерением завтра обязательно победить эту досадную
ных для установки пакетов. Установить или снять помет- ошибку. На следующий день подопытная машина почувство-
ку о выборе можно с помощью клавиши «Enter». вала на своей шкуре все прелести профилактики и техобс-
луживания. После этого была начата новая инсталляция
NetBSD с полным набором пакетов X Window, завершивша-
яся успешно. Судя по всему этот старый CD-ROM нужно
чистить гораздо чаще.
Как только нужные пакеты установились на жесткий
диск, система покажет меню с вопросом, корректно ли у
нас настроена сетевая подсистема и можно ли записать
настройки, использовавшиеся в этом сеансе как настрой-
ки по умолчанию. С радостью соглашаемся и жмем «Yes»:
все-таки редактировать системные файлы с помощью vi –
удовольствие не из самых приятных. После этого наступа-
ет черед установить часовой пояс, в котором находится эта
машина. Для меня это зона EUROPE/Moscow. Выбираем
После того как разберемся с выбором пакетов, систе- ее с помощью клавиши «Enter» и выходим из меню, нажав
ма задаст вопрос о носителе, с которого будет произво- одну за другой клавиши «x» и «Enter». Далее выбираем
диться инсталляция. схему шифрования паролей. Доступны шифры DES и MD5.
В большинстве Unix-подобных систем стандартом де фак-
то является DES. Решено было использовать именно его.
Система спросит, не хотим ли мы проинициализировать
пароль пользователя root. Изъявляем желание и устанавли-
ваем в качестве пароля что-то очень длинное и сложно-за-
поминаемое.
Читаем поздравления, говорящие об удачном заверше-
нии установки, а когда надоест, нажимаем «OK» и снова
Я выбирал CD-ROM, ну а вы можете использовать все, попадаем в самое первое меню инсталляции. Теперь нужно
что душе угодно. В следующем меню определяем, явля- перегрузить машину, наконец-то нам пригодилась загадоч-
ется у нас CD-ROM устройством или директорией. Такой ная опция «Reboot machine».
подход удобен, если CD-ROM примонтирован в нестан- Следующим сюрпризом для нас будет тот факт, что те-
дартное место. перь во время загрузки для отображения сообщений на си-
стемную консоль используется шрифт ярко-зеленого цвета.
Под конец процедуры загрузки демонов шрифт снова ста-
нет белым. Не Unix, а какой то калейдоскоп. Войдя в систе-
му под пользователем root, смотрим состояние сетевых ин-
терфейсов с помощью команды ifconfig –a. Настройки, оп-
Выбрав пункт device, соглашаемся с предлагаемым сис- ределенные в процессе инсталляции, сохранились. Затем
темой вариантом: считать нужный нам CD-ROM устройством настраиваем X Windows с помощью программ xf86config или
cd0. Несмотря на то что в вашей системе маркировка может XF86SETUP. Процесс этот ничем от остальных Unix-систем
отличаться, я думаю, догадаться, что есть что, особого тру- не отличается, поэтому писать о нем не станем. Стоит отме-
да не составит. Указав, где у нас находится CD-ROM, ис- тить, что X Windows запустились сразу же без каких-либо
пользуем пункт меню «Continue» и приказываем продолжать ошибок. А вот с русской локализацией консоли разобраться
установку. Минут 5 любуемся на бегущие по экрану списки так и не удалось. На этом, наверное, стоит завершить нашу
устанавливаемых пакетов. К сожалению, с таким составом совместную экскурсию по системе и пожелать вам успехов
пакетов с первого раза удачно завершить инсталляцию мне в освоении этого варианта Unix. Если отклик на эту статью
не удалось. Начались шаманские танцы с бубном, но, не- будет достаточно сильным, то, наверное, я буду продолжать
смотря на все старания, процедура установки с завидным писать об освоении NetBSD.

№8(9), август 2003 39


администрирование

ЭФФЕКТИВНАЯ ПОЧТОВАЯ
СИСТЕМА НА БАЗЕ

Статья рассматривает создание почтовой системы с использованием Exim MTA версии 4, Exiscan,
SpamAssassin, Dr.Web; системы, защищенной от спама и вирусов, рассчитанную на большое
количество пользователей (сотни пользователей), а также имеющую удобную конфигурацию
в одном файле. В нашем примере в качестве ОС выбрана FreeBSD 4, но не будет никакой разницы
в установке для любой другой ОС семейства UNIX.

ДЕНИС МЫСЕНКО

Почему Exim?
Exim MTA (message transfer agent) является широкофунк- Среди разделов конфигурации:
циональной и высоко-защищенной почтовой системой.  Основной (main), где находятся общие настройки типа име-
Несмотря на монолитность программного кода (все бло- ни сервера, баннера, списка обслуживаемых доменов.
ки находятся в одном процессе), за всю ее историю не  Раздел безопасности (ACL), где находятся правила, на
было обнаружено ни одной серьезной уязвимости, допус- которые проверяется проходящяя через сервер почта.
кающей несанкционированный доступ к серверу, на ко- К примеру, реальность домена отправителя, существо-
тором она работает. Программа распространяется по ли- вание пользователя на другом конце (callout).
цензии GNU, автор – доктор Philip Hazel, The University of  Раздел маршрутизации (routers), где находятся прави-
Cambridge. Официальный сайт Exim – http://www.exim.org. ла выбора маршрута почты, подсказывающие серве-
Последней версией на текущий момент является 4.20, но ру, как найти приемщика корреспонденции. К приме-
мы рассмотрим пример на 4.12, как проверенный авто- ру, доменный принцип (смотреть в DNS), алиасы (смот-
ром статьи. реть в файле алиасов), форварды (смотреть у пользо-
Exim умеет брать пользователей из любого источника – вателя в домашней папке в файле .forward), статичес-
MySQL, OpenLDAP, UNIX и т. д. Вся конфигурация нахо- кое правило (доставлять на указанный сервер).
дится в одном файле и разбита на практически автоном-  Раздел доставки (transport), где находится описание
ные секции, что дает особые удобства и возможности при правил доставки. К примеру, доставка по SMTP, дос-
работе с ней. тавка в файл.

40
администрирование
 Раздел переписывания (rewrite), где находятся прави- Пути:
ла изменения заголовков писем. К примеру, вы може-  BIN_DIRECTORY=/usr/exim/bin – путь к программам Exim;
те перенаправить всю почту одного домена на свой  CONFIGURE_FILE=/usr/exim/configure – путь к файлу
ящик, переписав поле RCPT. конфигурации.

Плюс разделы задания правил попыток пересылки (retry) Маршрутизаторы почты:


и аутентификации. Благодаря существованию Exiscan,  ROUTER_ACCEPT=yes – доставка почты в локальный
Exim нам поможет проверять проходящую через него по- ящик;
чту на наличие вирусов, спама и других «почтовых де-  ROUTER_DNSLOOKUP=yes – доставка почты, исполь-
фектов» еще на этапе SMTP-сессии – это будет происхо- зуя DNS (по записям MX);
дить по завершению команды DATA, в момент, когда уда-  ROUTER_IPLITERAL=yes – доставка почты на IP-ад-
ленный почтовый сервер ждет реакции от Exim. При об- реса (к примеру, postmaster@[10.1.1.1]);
наружении «дефекта» Exim сразу же откажет в получе-  ROUTER_MANUALROUTE=yes – доставка почты на
нии письма и, таким образом, ненужное письмо даже не явно заданный сервер;
успеет попасть в почтовую очередь (что спасает место на  ROUTER_QUERYPROGRAM=yes – доставка почты по
жестких дисках и нервы администратору). информации от внешней программы;
 ROUTER_REDIRECT=yes – перенаправление почты
Компоненты (файлы .forward, база aliases).
Помимо самого Exim 4.12 в предложенной схеме будут
использоваться: Лучше на все поставить «yes», чтобы потом не пере-
 Exiscan – http://duncanthrax.net/exiscan/ – осуществле- собирать, если что-то понадобится.
ние проверки во время SMTP-сессии (патч для Exim). Транспорты:
Наш пример касается версии exiscan 4.12-26 (freeware).  TRANSPORT_APPENDFILE=yes – запись в файл;
 SpamAssassin – http://spamassassin.org/ – анализ по-  TRANSPORT_AUTOREPLY=yes – автоответчик;
чты по заданным правилам на отношение к спаму. За  TRANSPORT_PIPE=yes – доставка через PIPE;
каждое правило назначено число баллов. При дости-  TRANSPORT_SMTP=yes – доставка на SMTP-сервер.
жении указанного количества баллов письмо считает-
ся спамом. Пример правила – большие красные бук- Также на все поставить «yes», чтобы опять же не пе-
вы в тексте письма. Наш пример касается версии ресобирать в будущем.
SpamAssassin 2.50 (freeware). Поиск пользователей:
 Dr.Web – http://www.drweb.ru/ – популярный российс-  LOOKUP_DBM=yes – поиск в Berkeley DB;
кий антивирус от фирмы «Диалог-Наука». Является  LOOKUP_LSEARCH=yes – линейный поиск в файле
коммерческим, цены доступны на сайте. (типа /etc/aliases);
 LOOKUP_LDAP=yes – поиск в OpenLDAP;
Собираем Exim  LOOKUP_MYSQL=yes – поиск в базе MySQL;
Скачиваем Exim 4.12 и exiscan 4.12-26 с официальных  LOOKUP_NIS=yes – поиск в директории NIS;
сайтов, указанных в предыдущем разделе. Распаковыва-  LOOKUP_NISPLUS=yes – поиск в директории NIS+;
ем exiscan в папку с распакованным Exim.  LOOKUP_ORACLE=yes – поиск в базе Oracle;
 LOOKUP_PASSWD=yes – поиск в passwd файлах;
bash-2.05a$ wget ftp://ftp.csx.cam.ac.uk/pub/software/ ↵
email/exim/exim4/exim-4.12.tar.gz
 LOOKUP_PGSQL=yes – поиск в базе PostgreSQL.
bash-2.05a$ tar xzf exim-4.12.tar.gz
bash-2.05a$ cd exim-4.12 SMTP-аутентификаторы:
bash-2.05a$ wget http://duncanthrax.net/exiscan/ ↵
exiscan-4.12-26.tar.gz  AUTH_CRAM_MD5=yes – аутентификация по CRAM-
bash-2.05a$ tar xzf exiscan-4.12-26.tar.gz MD5 (RFC 2195);
 AUTH_PLAINTEXT=yes – открытым текстом – LOGIN-ме-
Применяем патч: ханизм (RFC 2595);
 AUTH_SPA=yes – Microsoft Secure Password Authentication.
bash-2.05a$ patch -l -p1 < exiscan-4.12-26.patch
Выбираем нужные.
Копируем дефолтный файл сборки: Теперь в корне дистрибутива Exim набираем:

bash-2.05a$ cp src/EDITME Local/Makefile bash-2.05a$ make


bash-2.05a$ make install

Редактируем Local/Makefile под свои нужды. Обраща- Все, Exim установлен в /usr/exim/bin. Теперь делаем:
ем внимание на поля:
 EXIM_UID – UID, под которым будет крутиться Exim; bash-2.05a$ rm -f /usr/sbin/sendmail
bash-2.05a$ ln -s /usr/exim/bin/exim /usr/sbin/sendmail
 EXIM_GID – GID, под которым будет крутиться Exim, обыч- bash-2.05a$ sendmail -bd
но GID группы mail;
 SPOOL_DIRECTORY – папка с почтой, обычно /var/mail. Проверяем работу нашего MTA:

№8(9), август 2003 41


администрирование
bash-2.05a$ telnet 0 25 bash-2.05a$ wget ftp://ftp.drweb.ru/pub/unix/4.29.5/ ↵
Connected to 0. drweb-4.29.5-freebsd4.tar.gz
Escape character is '^]'. bash-2.05a$ tar xzf drweb-4.29.5-freebsd4.tar.gz
220 ourmail.duster.ru ESMTP Exim 4.12 ↵ bash-2.05a$ cd drweb-4.29.5-freebsd4
Thu, 17 Jul 2003 16:09:30 +0700 bash-2.05a$ su
su-2.05a# ./install.sh
Отлично, наш быстрый и удобный почтовый сервер ус- Enter destination directory (/opt/drweb is default):
/usr/local/drweb
тановлен.
После чего Dr.Web будет установлен в папку /usr/local/
Собираем и конфигурируем drweb. В работе нам помимо сервера Dr.Web (drwebd) по-
SpamAssassin требуется клиент из папки /usr/local/drweb/clients/drwebdc.
Убийца спама (такой дословный перевод SpamAssassin) Конфигурация Dr.Web находится в файле drweb32.ini.
собирается очень просто: Обратим внимание на следующие поля:
 Key = «/usr/local/drweb/drwebd.key» – файл с лицензи-
bash-2.05a$ wget http://www.mirror.ac.uk/sites/ ↵ онным ключом.
spamassassin.taint.org/spamassassin.org/ ↵
released/Mail-SpamAssassin-2.50.tar.gz  Interfaces = «localhost» – в большинстве случаев нет смыс-
bash-2.05a$ tar xzf Mail-SpamAssassin-2.50.tar.gz ла держать Dr.Web на других интерфейсах, если мы не
bash-2.05a$ cd Mail-SpamAssassin-2.50
bash-2.05a$ ./configure обслуживаем удаленные сервера.
bash-2.05a$ make
bash-2.05a$ su
 User = drweb – нет никакого смысла работать под су-
su-2.05a# make install пер-пользователем, лучше создать пользователя (к
примеру «drweb») и дать только ему и группе админи-
Обращаем внимание на то, что ему потребуются не- страторов права на чтение и запуск из папки /usr/local/
которые Perl-модули, которые вы всегда можете найти в drweb.
архиве CPAN (http://www.cpan.org).  LogScanned = Yes – записывать ли в лог результаты об-
Рекомендую сразу перейти в папку /etc/mail/assassin и работки – конечно, да.
внести некоторые изменения в файлы конфигурации.  EnginePath = «/usr/local/drweb/drweb32.dll»
Создадим файл local.cf, куда внесем следующие  VirusBase = «/usr/local/drweb/*.vdb»
строки:  MoveFilesTo = «/usr/local/drweb/infected.!!!»
whitelist_from *@duster.ru Пути к файлу с движком Dr.Web, вирусным базам и
whitelist_from *@demos.su
папке с инфицированными файлами соответственно. Ме-
Это домены, с которых любая почта не будет считать- нять на свой вкус. Не забывайте лишь дать права создан-
ся спамом. Обязательно пропишите здесь ваших парт- ному пользователю на запись в папку с инфицированны-
неров, дружественные домены и так далее – иначе в бу- ми файлами.
дущем возможны проблемы... Теперь создадим файл
user_prefs.template, куда внесем следующие строки: su-2.05a# chown drweb.wheel /usr/local/drweb
su-2.05a# chmod 550 /usr/local/drweb
su-2.05a# chmod 750 /usr/local/drweb/infected.!!!
score BODY_8BITS 0
score SUBJ_FULL_OF_8BITS 0
score HEADER_8BITS 0 Сам сервер запускается очень просто:
score HTML_COMMENT_8BITS 0
bash-2.05a$ /usr/local/drweb/drwebd
Нам незачем за 8-битные символы считать письмо спа-
мом – ведь как ни странно, многие в России до сих пор Это следует прописать в файл запуска (/etc/rc.local для
составляют электронную корреспонденцию на русском. FreeBSD). Обновленные антивирусные базы следует
В целях безопасности следует завести дополнитель- класть в эту же папку, с дистрибутивом Dr.Web идет скрипт
ного пользователя, допустим spamd. По умолчанию про- для автоматического обновления – update.pl. Его следует
цессом SpamAssassin используется порт 783, но так как прописать в cron, для этого:
мы будем пускать его не под супер-пользователем, сле-
дует взять порт выше 1023, к примеру 1783. su-2.05a# crontab -u root -e
Запускаем SpamAssasin в фоновом режиме:
Вставляем следующую строку:
su-2.05a# /usr/bin/spamd -d -p 1783 -u spamd
0 2 * * * /usr/local/drweb/update/update.pl /usr/local/drweb/
Полный набор ключей вы можете узнать, запустив:
Запуск в 02:00 каждый день, параметр, переданный
su-2.05a# /usr/bin/spamd -h скрипту – это путь к антивирусным базам.

Конфигурируем Exim
Собираем Dr.Web Теперь подробно рассмотрим файл конфигурации /usr/exim/
Скачиваем и распаковываем Dr.Web с официального ftp- configure. Каждая секция, кроме главной, в файле конфи-
сайта: гурации начинается со строки «begin <имя секции>».

42
администрирование
Main section  exiscan_extension_data = pif:vbs:scr:bat – список запре-
 primary_hostname = ourmail.duster.ru – это официаль- щенных расширений.
ное имя нашего сервера, которое будет ставиться в  exiscan_extension_action = reject – что делать? Вари-
заголовки. анты так