Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Мониторинг
Windows-серверов
с помощью Nagios
Неявный самоконтроль
как средство создания
неломаемых защит
Стартовые
скрипты FreeBSD
Настройка
сервера SSH
Python глазами DBA
Каким видится
хороший системный
администратор
оглавление
IRC-сервер СЕТИ
Александр Слободской
info@samag.ru 28 Powerline: Интернет из розетки
Денис Колисниченко
Контроль последовательных dhsilabs@mail.ru 86
портов в Linux
Денис Колисниченко
dhsilabs@mail.ru 32 Планируем переезд сети
Вячеслав Калошин
multik@multik.ru 90
БЕЗОПАСНОСТЬ
WWW.SAMAG.RU
№7(8), июль 2003 1
Две или три недели назад я привезла один
из номеров «Системного администратора»
своему старому знакомому. Жена знакомого
со своей подругой из вполне понятного
женского любопытства тут же выхватили
номер у меня из рук – посмотреть, что же это
за новый журнал, о котором в последнее
время с увлечением говорят их мужья. Спустя
секунду, обе громко заразительно хохотали.
Я в смущении пыталась понять причину столь
неадекватной, на мой взгляд, реакции.
Как оказалось впоследствии, все дело было
в заголовках на обложке. Взгляните
со стороны: «Создаем VPN на основе vtun»,
«LIDS», «Компиляция FreeBSD», «Настройка
Radius-сервера» – думаю, продолжать
не нужно. Для непосвященного
в компьютерные таинства все это звучит
равнозначно китайской грамоте. Поэтому
понять сисадминов, да еще и пообщаться
с ними «на равных» сможет далеко
не каждый. По моему субъективному
ощущению, системный администратор –
это больше, чем профессия. Это стиль жизни.
Это целый мир со своим языком, своей
философией и уже со своими традициями:
каждый год в последнюю пятницу июля
системные администраторы всего мира
отмечают свой профессиональный праздник.
К своему сожалению, я не знаю истории
возникновения этого праздника, но мне
кажется, что день и месяц выбран вполне
в духе сисадминов: можно, не торопясь,
отметить его, выбравшись на природу
или в какое-нибудь уютное место,
одновременно отдохнув и пообщавшись
с коллегами.
Мне лишь остается поздравить всех
«посвященных» от нашей редакции
с профессиональным праздником, пожелать
вам творческих успехов и бесперебойной
работы вверенного «хозяйства»!
Наталья Хвостова
2
календарь событий
Cеминар
12 системных администраторов 25-27 Пятый ежегодный фестиваль
разработчиков и пользователей
ИЮЛЯ и инженеров ИЮЛЯ свободного ПО
Портал SysAdmins.RU (htttp://sysadmins.ru) объявляет о С 25 по 27 июля 2003 года в Калужской области будет
проведении первого в России Семинара системных ад- проходить пятый ежегодный фестиваль разработчиков и
министраторов и инженеров. пользователей свободного программного обеспечения
Данное мероприятие приурочено ко второй годовщине LinuxFest.
проекта SysAdmins.RU и является одной из вех, знаменую- Организатор фестиваля интернет-ресурс Linux.ru.net
щих очередной этап развития проекта. Семинар будет по- приглашает всех желающих посетить этот небольшой
священ проблемам IT, тенденциям рынка IT, рынку труда с праздник свободного ПО, познакомиться с коллегами,
точки зрения IT-специалистов и множеству смежных воп- найти новых единомышленников и просто провести вы-
росов. На семинаре выступят специалисты различных ком- ходные в живописном месте на берегу реки Протвы.
паний, активно работающих на российском и мировом IT- В программе фестиваля: круглые столы по различным
рынке. Тематика выступлений такова, что будет интересна тематикам, конкурсы, общение, активный отдых.
как сугубо техническим специалистам, так и руководите- Самых активных участников сообщества разработчи-
лям IT-подразделений, служб техподдержки, IT-менедже- ков и пользователей Linux ожидают призы от компании
рам разного уровня. В перерывах – кофе и закуски. В нео- ALT Linux и журнала «Системный администратор».
фициальной части – пиво, розыгрыши призов и т. п. Традиционно для участия в фестивале приезжающим
Семинар состоится 12 июля 2003, начнется в 12-00 по необходимо иметь при себе туристическое снаряжение
московскому времени и продлится до 20-00. Семинар бу- (палатка, рюкзак и т. д.) и запас пропитания на все время
дет проводиться в очень уютном и удобном месте – Доме фестиваля.
ветеранов кино (ДВК). Адрес: г. Москва, ул. Нежинская, 5. Подробная карта проезда, FAQ, список участников и
(от м. Киевская на маршрутном такси №7 до остановки прочие подробности – на сайте Linux.ru.net.
«Дом Ветеранов Кино»). Вход на семинар 150 руб. Обязательная регистрация участников производит-
Ознакомиться с подробной программой, зарегистриро- ся на сайте Linux.ru.net в разделе «фестиваль». Орга-
ваться для участия на семинаре и посмотреть карту проез- низационный сбор за участие в фестивале – 100 руб. с
да можно на htttp://SYSM.ru. человека.
ПЕРВЫЙ БРЕСТСКИЙ
ИНТЕРНЕТ-ФОРУМ
14 июня в городе Бресте (Беларусь) прошел первый в рес- Кроме всего прочего, были наглядно продемонстри-
публике региональный интернет-форум. Мероприятие ока- рованы преимущества и модели использования ПК для
залось невероятно популярным благодаря тому, что уча- учебы, работы, творчества и развлечений. В реальном
стники постарались создать для посетителей не столько времени посетители смогли наблюдать за монтажом и
деловую атмосферу, сколько настроение праздника. И обработкой аудио- и видеофрагментов, работой в Интер-
именно поэтому интересно было присутствовать не толь- нете в составе беспроводной сети как в ее обычном виде,
ко специалистам интернет-технологий, но и самым про- с использованием коммутируемого доступа к Интернету,
стым пользователям, делающим свои первые шаги в уди- так и с применением мобильных GPRS-решений.
вительной стране Интернет. Посетители Брестского интернет-форума смогли позна-
Инициаторами и организаторами форума выступили го- комиться и с мобильными технологиями Intel. На стендах
родской портал «Виртуальный Брест» (http://virtual.brest.by) компаний ASBIS и «Успех» демонстрировались ноутбуки
и компьютерный салон «Успех» (http://204040.com). Цель на базе технологии Intel Centrino для мобильных ПК и кар-
интернет-форума заключалась в том, чтобы продемонст- манные компьютеры на основе технологии Intel XScale.
рировать возможности современных цифровых устройств На приглашение принять участие в первом интернет-
и решений для Интернета, и она была с блеском выполне- форуме откликнулось достаточно много участников. В пер-
на в ходе мероприятия. вую очередь, это интернет-проекты и организации города,
Генеральным спонсором интернет-форума стала кор- среди которых – ведущие дизайнерские студии, хостинг-
порация Intel. Ее специалисты продемонстрировали на провайдеры, общественные организации и т. д. И кроме
специально оборудованных стендах преимущества сис- того, не остались в стороне представители ведущего сото-
тем, построенных на основе компьютеров с процессора- вого оператора VELCOM, продемонстрировав преимуще-
ми Intel Pentium 4, в том числе с поддержкой революцион- ства работы мобильного Интернета по системе GPRS.
ной технологии Hyper-Threading. Работа и демонстрации После первой части, в рамках которой проходила выс-
велись в таких областях, как аудиообработка, цифровые тавка цифровых технологий, посетители были приглаше-
фото-, видеосъемка и монтаж, коммуникации (высокоско- ны на интернет-конференцию. В ходе ее были зачитаны
ростной доступ в Интернет), компьютерные игры, работа доклады ведущих специалистов не только города Брес-
с периферийными цифровыми устройствами (принтеры, та, но и республики. Слушатели смогли узнать об особен-
сканеры, фото-, видеокамеры и т. д.). ностях развития и построения сайтов в Беларуси, уточ-
4
репортаж
нить разнообразные вопросы электронной коммерции от- суары. Кроме того, особое внимание привлек розыгрыш до-
носительно национальных стандартов, на примерах раз- менных имен и хостинга от проекта HOSTER.BY. В ходе кон-
ных сайтов увидеть, как нужно и как не не нужно созда- курса, на который отозвались более 30 желающих, были
вать корпоративные решения для Интернета. В конферен- заданы несколько сложных вопросов, и по результатам от-
ции приняли участие специалисты Белорусского портала ветов эти специфические призы были распределены. Пос-
TUT.BY, Государственного Университета им. А.С. Пушки- ле розыгрыша посетители смогли задать свои вопросы док-
на, ведущих интернет-проектов города и т. д. ладчикам и участникам, а также познакомиться и пообщать-
По окончании конференции среди посетителей был про- ся на интересующие их темы.
веден розыгрыш ценных призов, предоставленных участни- Материалы, тезисы и доклады прошедшего интернет-
ками интернет-форума. Счастливчикам были в присутствии форума можно найти на официальном сайте http://
всех вручены современные модемы, оптические мышки, кла- bif.virtualbrest.com.
виатуры, наушники и разнообразные компьютерные аксес- Андрей Кухарчик
КАКИМ ВИДИТСЯ
ХОРОШИЙ
СИСТЕМНЫЙ
АДМИНИСТРАТОР
6
из личного опыта
Хороший системный администратор – как много в этих трех
Нет, я не Господь Бог, словах отзывается в сердце любого начальника. В самом
я всего лишь ваш деле, как распознать хорошего системного администрато-
Системный Администратор...
ра среди претендентов на вакантное место? Ведь что ни
(одно из частых высказываний говори, сисадмин в компании – одно из самых незаметных
сисадминов начальству) лиц и в то же время одно из самых важных. Именно от него
(от них, если их много) зависит, будут ли «бесперебойно
работать» ваши сотрудники, и сможете ли вы гарантировать
хоть какой-то уровень обслуживания своим клиентам.
Не стоит путать сисадмина с «аникейщиком». Если
первый рулит серверами и прочим оборудованием, то вто-
рой заменяет картриджи в принтерах, разбирается с не-
читающимися дисками и обьясняет пользователям, куда
и что надо нажать. (Термин «аникейщик» пошел с тех вре-
мен, когда программа выводила на экран сообщение
«press any key to continue» и пользователи, не находя кноп-
ки «any key» на клавиатуре, звали администратора.)
Я периодически с постоянством маятника бываю по
обе стороны «баррикад» и попытаюсь хоть чуть-чуть раз-
веять заблуждения, бытующие в обоих средах. Конечно,
как начальник я еще слаб, но мало кто аргументированно
сможет упрекнуть меня в том, что я плохой сисадмин.
8
из личного опыта
Пример он должен зайти в этот каталог и попытаться решить
Ваш workgroup-сервер начал «задыхаться». Да-да, ком- проблему выбора: что ему нужно очень, а что не очень;
пания растет, а сервер – нет. Пусть есть сервер PIII-500/ он должен найти место для того, чтобы положить не
256/20+20 stripe. Вы сели, подумали, посмотрели статис- очень нужное. В общем, как миниум, вы полчаса ото-
тику (см. ниже) и решили, что на следующий год компа- рвете у каждого, кто получил это сообщение.
нии нужен 2xPIII-1000/1024/80 raid5. Поглядели по прай-
сам и выяснили, что обойдется он в $5000 (условно). По- А теперь получайте проблемы, которые вы сами себе
шли к боссу. Просунули голову в дверь: «А... эта, Михаил создали:
Иванович, мне тут нужен сервер новый. $5000 стоит. Ну невозможность собрать нормальный бэкап или воз-
эта... старый уже старый, и вообще, он уже не так рабо- можность его собрать с куда большими усилиями;
тает и не справляется». Думаете, это шутка? Нет, так про- вы прививаете пользователю привычку хранить все на
исходило на моих глазах пару раз. Понятно, что потом своей машине. Как вы будете обьяснять боссу, что на
идут жалобы на черcтвость босса и вообще на плохую бухгалтерской машине (кстати, почему-то обычно са-
жизнь сисадминов. мой слабой из парка) пропал из-за поломки диска аван-
Подготовьте графики загрузки сервера хотя бы по совый отчет за прошлый год? И почему этот отчет не
процессору, памяти, сети и дискам. Покажите на них влез в дисковую квоту на живом сервере?
четкую черту, где возможностей сервера уже не будет вы разрушаете структуру защиты сети (если есть, что
хватать. Распишите кратко, чем это грозит в перспек- разрушать). Пользователю будет проще перекинуть
тиве на 2-3 месяца и на полгода. Предложите желатель- файл по аське или открыть диск С: на запись, чем по-
ную конфигурацию и марку сервера и точно так же рас- ложить файл на сервер;
пишите, что изменится после его ввода в эксплуата- вы потеряли возможность проверить этот файл в ав-
цию. Затем подойдете к секретарше и ласково догово- томате антивирусом. Береженого бог бережет.
ритесь, что она устроит так, что босс выделит вам пол-
часа и его никто не будет отвлекать телефонными звон- Не ударяйтесь в другую крайность: не потакайте
ками. Всё. 95% того, что сервер купят или включат в пользователям во всем. Пользователь должен быть как
бюджет следующего квартала. цыпленок под курицей. Хорошо, тепло, сухо и еды вдо-
Не гонитесь за дешевизной. Да, 24-х портовый хаб за воль (говоря другими словами – все работает в удобном
$100 стоит в 10 раз дешевле Cisco2950. Но если вы для него режиме и ему не надо вспоминать ваш телефон
купите и поставите этот хаб в ядре сети из 100 компь- для выяснения вопроса о распечатке цветной диаграммы
ютеров, а на оставшиеся деньги увеличите себе винт на струйном принтере). Но цыпленок одновременно дол-
в машине, то не рассчитывайте оправдаться словами жен знать, что если он высунется из гнезда, то получит
«Михаил Иванович, а что я могу поделать...». Да, са- клювом по лбу. То есть сын секретарши не должен по ве-
мосборный сервер дешевле сервера от HP или IBM. черам ставить новые игры непонятно откуда, и менеджер
Но и работать под нагрузкой он будет во столько же не должен иметь возможности сменить Win2000 на WinXP
раз хуже. Поверьте моему опыту. только потому, что она красивее и вообще она новее и
Собирайте статистику. Статистика – это не только по- дома у него такая. Пользователи должны знать, что им
вод построить красивые графики, но и мощный инст- можно и что нельзя. Для этого придумали такую вещь,
румент прогнозирования проблем и неприятностей. Вы как корпоративный кодекс, даже если корпорация состо-
же сами лучше поймете, почему вон тот хаб не пере- ит из 10 человек.
стает мигать лампочками. В общем, будьте строго добры к пользователям и они
ответят вам тем же.
Самая главная и распространенная ошибка
Поймите, наконец, что не компания работает для вас,
и пользователи – не надоедливые «тупые человеч-
ки», которые отвлекают постоянно. Вы работаете для
компании и для того, чтобы эти «тупые человечки»
работали как можно более продуктивно. Если они
не понимают в компьютерах так же, как вы, то это
не означает, что вы понимаете в их области деятель-
ности так же, как они.
Пример
Рассылка по сети: «Немедленно всем почистить свои ка-
талоги на диске W:, а то удалю все, к чему не прикаса-
лись больше месяца. И вообще, сервер не резиновый и
все такое». Вы, извините, создаете проблемы себе, тор-
мозите работу компании и вообще...
Посмотрите на это со стороны пользователя:
он должен прерваться и осмыcлить сообщение;
10
администрирование
Часть 1
АНДРЕЙ БЕШКОВ
12
администрирование
С момента публикации первой статьи о Nagios прошло примеру, объект «Файл подкачки» содержит внутри
довольно много времени, но вопросы и пожелания все себя набор счетчиков, говорящих о состоянии одного
продолжают приходить. Самый часто встречающийся или нескольких файлов виртуальной памяти, исполь-
вопрос – как настроить слежение за серверами, работа- зуемых системой. Некоторые подсистемы имеют всего
ющими под управлением семейства операционных сис- один экземпляр объекта производительности, другие
тем Windows. В этой статье мы рассмотрим два спосо- же могут иметь несколько. К первому виду относятся
ба, используя которые можно добиться осуществления «Система», «Память», «Сервер». «Жесткий диск» и
наших желаний. Как всегда система, мониторинга Nagios «Процессор», соответственно, ко второму. Согласитесь,
работает под управлением моей любимой системы что жестких дисков в компьютере может быть несколь-
FreeBSD 4.7. Приверженцы Linux, Solaris и других Unix- ко, а значит, внутри системы они должны быть пред-
подобных систем тоже не останутся в стороне. Все опи- ставлены отдельными подсистемами. В то же время
санные ниже приемы с незначительными изменениями оперативная память, вне зависимости от количества
можно с успехом применять и в их системах. чипов, является единым компонентом. А посему иметь
В качестве подопытной системы будет использовать- больше одного экземпляра объекта производительно-
ся русская версия Windows 2000 Professional. Такой вы- сти ей не положено. В случае если подсистема облада-
бор обусловлен тем фактом, что настроить программ- ет несколькими экземплярами объекта, есть возмож-
ное обеспечение для исправной работы с русской вер- ность следить за счетчиками всех экземпляров или за
сией сложнее, чем с аналогичной английской. Придет- одним общим. В зависимости от языка операционной
ся решать проблемы, связанные с локализацией, а зна- системы, объекты и счетчики называются по-разному.
чит, статья получится гораздо полезнее и интереснее. К примеру, посмотрим, как будет называться один и тот
Последовательность действий по настройке программ- же счетчик в локализованных версиях Windows 2000:
ного обеспечения выглядит практически одинаково для
всех версий Windows. Я надеюсь, что никому из вас не
приходит в голову мысль серьезно рассматривать в ка-
честве операционной системы для установки на сер-
вер Windows 3.1, 3.11, 95, 98, ME. Поэтому дальше в этой
статье о них не будет сказано ни слова, соответственно,
вы можете с полным правом считать, что все методы, опи-
санные ниже, работать с ними, скорее всего, не будут. По моему мнению, идеи более глупой, чем подобное
В дальнейшем предполагается, что вы прочитали чрезмерное увлечение локализацией, придумать нельзя.
первую статью, подробно описывающую основы уста- Представьте себе процесс написания программы, ис-
новки и настройки Nagios, либо в февральском номере пользующей в своей работе счетчики. Придется посто-
журнала «Системный администратор», либо на моем янно переделывать программу для каждой новой лока-
сайте http://onix.opennet.ru/. лизованной версии Windows. В дальнейшем все приво-
Покончив с формальностями, приступим к изучению димые примеры будут опираться на русские версии пе-
конструкции и принципов работы подсистемы сбора дан- речисленных операционных систем семейства Windows.
ных о производительности. Такая система встроена в каж- Чтобы закрепить все вышесказанное, давайте рас-
дую версию Windows-системы старше, чем Windows ME. смотрим несколько примеров счетчиков:
Для сбора статистики о своем функционировании
Windows NT, Windows 2000, Windows XP используют \\TIGROID\Ïðîöåññîð(_Total)\% çàãðóæåííîñòè ïðîöåññîðà
объекты производительности. Делать подобные утвер- \\TIGROID\Ïðîöåññîð(0)\% çàãðóæåííîñòè ïðîöåññîðà
ждения о Windows 2003 не буду, потому что потрогать
\\TIGROID\Ïðîöåññîð(1)\% çàãðóæåííîñòè ïðîöåññîðà
ее пока не удалось. Каждый компонент системы в про-
цессе работы генерирует данные о производительнос- Первый компонент – это имя моего домашнего компь-
ти и складывает их в счетчики (performance counters) ютера, на котором я пишу статьи и провожу тестовые ин-
собственного объекта производительности. На самом сталляции. «Процессор» – название объекта. Как вы мог-
деле объект – это абстракция, введенная для облегче- ли бы догадаться, (_Total) – экземпляр, инкапсулирующий
ния понимания материала. Логичнее всего было бы внутри себя данные о производительности всех процес-
представлять объект как группу счетчиков, связанную соров системы. Соответственно, (0) и (1) – экземпляры
с наблюдаемой службой или ресурсом. Чаще всего на- объектов первого и второго процессоров. И наконец, «%
звание объекта совпадает с названием родительского загруженности процессора» – название самого счетчика.
системного компонента. В большинстве случаев объек- В повседневной практике сложилась традиция для крат-
ты производительности соответствуют компонентам кости записывать названия счетчиков без имен компью-
оборудования компьютера – память, процессор, жест- теров. Я считаю, что нам также стоит придерживаться ее.
кие диски. В то же время многие службы и программы Счетчики бывают следующих типов:
могут создавать свои собственные объекты произво- Моментальный – всегда содержит последнее значение
дительности. Иллюстрацией такого утверждения явля- использования ресурса. В качестве разъяснения приво-
ются объекты службы «Обозреватель компьютеров» дим счетчик \Очередь печати(_Total)\Заданий, собираю-
или серверной программы Internet Information Server. К щий данные о количестве заданий в очереди печати.
14
администрирование
Теперь добавляем его в файл hostgroups.cfg, описы- С сайта производителя http://nsclient.ready2run.nl/
вающий группы хостов. download.htmhttp://nsclient.ready2run.nl берем последнюю
версию программы NSClient. Я использовал версию 1.0.7.1.
define hostgroup{ После распаковки дистрибутива должны появиться сле-
hostgroup_name win-servers
alias Windows Servers дующие директории:
contact_groups win-admins
members win2000rus
LinuxBin – исполняемые файлы для Linux;
} UnixSource – исходный код для всех версий Unix;
NTSource – исходный код для всех версий Windows;
Создаем в файле contacts.cfg запись для человека, Win_2k_XP_Bin – исполняемые файлы для Windows 2000
отвечающего за Windows-сервера. и XP;
Win_NT4_Bin – исполняемые файлы для Windows NT.
define contact{
contact_name serge
alias Sergei Petrov Заглянув в директорию NTSource, понимаем – про-
service_notification_period 24x7 грамма написана на Delphi. Впрочем, это обстоятель-
host_notification_period 24x7
service_notification_options w,u,c,r ство никоим образом не мешает нам использовать ее
host_notification_options d,u,r для своих далеко идущих целей. Создаем директорию
service_notification_commands notify-by-email, ↵
notify-by-epager c:\Program Files\NSClient. Затем, в зависимости от ус-
host_notification_commands host-notify-by-email, ↵ тановленной у нас операционной системы, копируем в
host-notify-by-epager
email serge@test.ru нее содержимое либо из директории Win_2k_XP_Bin,
pager 172345885@pager.icq.com либо из Win_NT4_Bin. Пользуясь меню Пуск → Выпол-
}
нить запускаем командный интерпретатор cmd.exe. В
Пожалуйста, убедитесь, что вы внесли группу контак- появившемся окне набираем:
тов win-admins в файл contactgroups.cfg.
> C:\Program Files\NSClient\pNSClient /install
define contactgroup{
contactgroup_name win-admins
alias Windows admins По окончании установки система должна продемонст-
members serge рировать нам подобное окошко:
}
NSClient
Закончив с обязательными действиями, перейдем к об-
суждению первого способа мониторинга. Он состоит в
том, чтобы установить на Windows-машину программу
NSClient, доставшуюся нам в наследство от проекта
NetSaint. Запустившись как сервис, она начнет через каж- Это значит, что программе удалось прописать себя в
дые пять секунд читать содержимое определенных сис- реестре подобающим образом.
темных счетчиков Windows. Полученные величины запи- С помощью программы regedit откроем реестр. Ищем вет-
сываются в круговой буфер, в котором хранятся данные ку \HKEY_LOCAL_MACHINE\SOFTWARE\NSClient\Params.
за последние 24 часа. Занимаясь сбором статистики, про- Внутри расположились параметры password и port.
грамма ожидает входящие соединения от клиентов на Я думаю, предназначение каждого из них очевидно. Ду-
1248-й порт. Для считывания данных и передачи их сер- маю, вы согласитесь с утверждением, что возможность
веру мониторинга будет использоваться программа просматривать статистику должна быть предоставле-
check_nt из стандартной коллекции модулей Nagios. на только программам, запущенным на сервере мони-
Давайте посмотрим, какие именно сведения о функ- торинга. Меняем содержимое параметра “password” на
ционировании подопытного Windows-сервера можно по- что-нибудь длинное и трудноподбираемое, например
лучить с помощью check_nt: «PxRT890mY».
загрузка одного или всех процессоров за последние
24 часа;
наличие свободного места на любом подключенном к
системе жестком диске;
состояние запущенных процессов;
данные об использовании оперативной памяти;
время работы системы с момента последней пере-
загрузки;
состояние запущенных сервисов;
дату изменения любого файла;
данные любого системного счетчика.
Покончив с теорией, перейдем к инсталляции. Теперь любой, кто попытается подключиться для по-
16
администрирование
Memory usage: total:??????? Mb - used: ??????? Mb (???????%) ↵ # Êîìàíäà check_nt_memuse. Ïîêàçûâàåò äàííûå îá èñïîëüçîâàíèè
- free: ??????? Mb (???????%) # ïàìÿòè. Èìååòñÿ â âèäó âèðòóàëüíàÿ ïàìÿòü.
define command{
c:\ - total: ??????? Gb - used: ??????? Gb (???????%) ↵ command_name check_nt_memuse
- free ??????? Gb (???????%) command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
CPU Load (1 min. 12??????? -v MEMUSE -w $ARG1$ -c $ARG2$ -s $ARG3$
}
Смотрится такое сборище вопросов весьма забавно.
Жаль, но для нас такие данные абсолютно бесполезны. # Êîìàíäà check_nt_uptime. Îòîáðàæàåò âðåìÿ ðàáîòû ñèñòåìû
# ñ ìîìåíòà ïîñëåäíåé ïåðåçàãðóçêè
После работы над ошибками, возвратившись в главную define command{
директорию дистрибутива, проводим конфигурирование, command_name check_nt_uptime
command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
сборку и инсталляцию. -v UPTIME -s $ARG1$
}
# cd ..
# ./configure --prefix=/usr/local/nagios ↵
--with-nagios-user=nagios --with-nagios-grp=nagios # Êîìàíäà check_nt_disk_space. Îòîáðàæàåò ðàçìåð ñâîáîäíîãî
# gmake all # ïðîñòðàíñòâà íà ëþáîì æåñòêîì äèñêå ñèñòåìû
# gmake install define command{
command_name check_nt_disk_space
command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
Стоит отметить тот факт, что для компиляции исполь- -v USEDDISKSPACE –l $ARG1$ -w $ARG2$ ↵
зуется gmake вместо стандартной утилиты make. Иначе -c $ARG3$ -s $ARG4$
}
сборка сразу же после старта заканчивается сообщени-
ем о фатальной ошибке:
# Îïèñûâàåì êîìàíäó check_nt_service. Ïîçâîëÿåò ïðîâåðèòü,
# çàïóùåí ëè â ñèñòåìå òîò èëè èíîé ñåðâèñ. Îáðàòèòå âíèìàíèå
Making all in plugins # íà íåîáÿçàòåëüíóþ îïöèþ -d SHOWALL, ïîçâîëÿþùóþ âûâåñòè
“/tmp/nagiosplug-1.3-beta1/plugins/Makefile”, line 760: ↵ # áîëåå ïîäðîáíûå äèàãíîñòè÷åñêèå ñîîáùåíèÿ.
Need an operator define command{
make: fatal errors encountered – cannot continue command_name check_nt_service
*** Error code 1 command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
-v SERVICESTATE -d SHOWALL –l $ARG1$ ↵
По завершению инсталляции приступаем к созданию -s $ARG2$
}
новых команд, пользуясь которыми Nagios будет собирать
данные. Описание всех используемых команд должно
# Ñàìàÿ ïðîñòàÿ èç âñåõ âûøåîïèñàííûõ êîìàíä
располагаться в файле checkcommands.cfg. Формат это- # check_nt_client_version ïîçâîëÿåò óçíàòü âåðñèþ
го файла довольно прост. # ïðîãðàììû NSClient., ðàáîòàþùóþ â ñèñòåìå
define command{
Каждая команда начинается с открывающего тега command_name check_nt_client_version
define command{. Затем с помощью ключевого слова command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
-v CLIENTVERSION –s $ARG1$
command_name определяется имя команды. Следующая }
строка command_line определяет имя модуля, вызывае-
мого для осуществления проверки и параметры, переда- # Êîìàíäà check_nt_file_age äàåò âîçìîæíîñòü ïðîâåðèòü âðåìÿ
ваемые ему процессом Nagios. Особое внимание следу- # ìîäèôèêàöèè ëþáîãî ôàéëà íà ëîêàëüíîé ìàøèíå
define command{
ет обратить на макросы подстановки значений $USER1$, command_name check_nt_file_age
$HOSTADDRESS$, $ARG1$, $ARG2$. command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
-v FILEAGE -l $ARG1$ -w $ARG2$ ↵
Давайте посмотрим, зачем нужен каждый из них: -c $ARG3$ -s $ARG4$
$USER1$ – путь, где нужно искать выполняемые моду- }
ли. В нашем случае он равен /usr/local/nagios/libexec/.
Значение этого макроса определяется в файле # Îïðåäåëÿåì êîìàíäó check_nt_process. Ïðåäîñòàâëÿåò
# ìåõàíèçì, ñ ïîìîùüþ êîòîðîãî ìîæíî óçíàòü, ñóùåñòâóåò ëè
resource.cfg; # â ñèñòåìå òîò èëè èíîé ïðîöåññ. Îáðàòèòå âíèìàíèå
$HOSTADDRESS$ – IP-адрес машины, подвергаемой # íà íåîáÿçàòåëüíóþ îïöèþ -d SHOWALL, ïîçâîëÿþùóþ âûâåñòè
# áîëåå ïîäðîáíûå äèàãíîñòè÷åñêèå ñîîáùåíèÿ î ñîñòîÿíèè
проверке. Задается в определении сервисов внутри # ïðîöåññà.
файла services.cfg; define command{
$ARG1$, $ARG2$ – параметры командной строки, пе- command_name check_nt_process
command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
редаваемые модулю проверки. Чаще всего использу- -v PROCSTATE –d SHOWALL -l $ARG1$ -s $ARG2$
}
ются для задания временных интервалов, порогов пре-
дупреждений и критических состояний.
# Êîìàíäà check_nt_counter äàåò âîçìîæíîñòü ïðîñìîòðåòü
# ñîäåðæèìîå ëþáîãî ñ÷åò÷èêà ïðîèçâîäèòåëüíîñòè, è ïîýòîìó
Завершается определение команды с помощью зак- # ÿâëÿåòñÿ ñàìîé óíèâåðñàëüíîé èç âñåõ îïèñàííûõ êîìàíä.
define command{
рывающего тега }. Итак, приступим к разбору содержи- command_name check_nt_counter
мого файла checkcommands.cfg. command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
-v COUNTER -l $ARG1$ -w $ARG2$ ↵
-c $ARG3$ -s $ARG4$
# Îïðåäåëÿåì êîìàíäó check_nt_cpuload . Èñïîëüçîâàòüñÿ îíà }
# áóäåò äëÿ ñáîðà äàííûõ î çàãðóæåííîñòè ïðîöåññîðà
define command{
command_name check_nt_cpuload После того как с файлом команд покончено, перей-
command_line $USER1$/check_nt -H $HOSTADDRESS$ ↵
-v CPULOAD -l $ARG1$ -s $ARG2$ дем к файлу сервисов. Детально формат этого файла
} рассматривался в первой статье о Nagios. Здесь мы только
18
администрирование
define service{ check_command check_nt_counter! ↵
use generic-service "\Ôàéë ïîäêà÷êè(_Total)\% èñïîëüçîâàíèÿ", ↵
host_name win2000rus "Usage %.2f %%"!80%!90%!PxRT890mY
service_description CPU Load }
is_volatile 0
check_period 24x7
max_check_attempts 3 Стоит отметить тот факт, что названия счетчиков, ис-
normal_check_interval 1
retry_check_interval 1 пользуемых в определении двух последних сервисов, на-
contact_groups win-admins писаны русскими буквами в кодировке cp1251.
notification_interval 120
notification_period 24x7 Если нарушить это требование, то NSClient не смо-
notification_options c,r жет понять, чего мы хотим от него добиться, и будет
# Ïðîáëåìà â òîì, ÷òî â ïðîãðàììå óïðàâëåíèÿ ñåðâèñàìè
# Windows ïîêàçûâàåò ïîëíûå íàçâàíèÿ ñåðâèñîâ, возвращать заведомо неправильные данные. Кодиров-
# ïðåäíàçíà÷åííûå äëÿ ÷åëîâåêà. ка cp1251 используется для записи текстов по умолча-
# Íàì íóæíî íàçâàíèå, êîòîðîå èñïîëüçóåòñÿ äëÿ âíóòðåííèõ íóæä
# Windows. Óçíàòü ýòó òàéíó ìîæíî ëèáî ïîñìîòðåâ âåòâü ðååñòðà: нию всеми русскими Windows-системами.
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services., Вот тут-то нас и поджидает проблема. Дело в том, что в
# ëèáî óñòàíîâèâ áåñïëàòíóþ óòèëèòó 'Service Manager NT',
# äîñòóïíóþ äëÿ ñêà÷èâàíèÿ ïî ñëåäóþùåìó àäðåñó: http://www большинстве Unix-подобных систем для символов русско-
# rnks.informatik.tu-cottbus.de/~fsch/english/nttols.htm го языка используется кодировка KOI8-R. Конечно, можно
# Îáðàòèòå âíèìàíèå íà òîò ôàêò, ÷òî ïî àíàëîãèè ñ ïðîöåññàìè
# èìåíà ñåðâèñîâ òîæå ìîæíî ïåðå÷èñëÿòü ÷åðåç çàïÿòóþ. перенастроить консоль, на которой работаете под cp1251,
check_command check_nt_service!”mssqlserver,vmxposman” но такой подход лично мне кажется неудобным.
}
Поэтому я поступил гораздо проще. Используя FTP,
перенес файл checkcommands.cfg на Windows-машину.
# Ñëåäèì çà êîëè÷åñòâîì çàäàíèé, íàõîäÿùèõñÿ
# â î÷åðåäè ïðèíòåðà. Затем с помощью стандартного редактора «Блокнот» внес
define service{ требуемые изменения. Сохранился, перенес файл обрат-
use generic-service
host_name win2000rus но на Unix-машину и заменил старую копию в /usr/local/
service_description Print Queue nagios/etc/.
is_volatile 0
check_period 24x7 В принципе нужного результата можно добиться раз-
max_check_attempts 3 ными путями. Немного подумав, я решил сделать это дру-
normal_check_interval 1
retry_check_interval 1 гим более простым способом. Набрал все нужные рус-
contact_groups win-admins скоязычные надписи в формате koi8-r. Из пакетов уста-
notification_interval 120
notification_period 24x7 новил несколько программ для конвертирования текстов
notification_options c,r в разные кодировки:
# Èñïîëüçóÿ êîìàíäó check_nt_counter, ìîæíî ïîëó÷èòü äàííûå
# ñ ëþáîãî ñ÷åò÷èêà.  äàííûì ñëó÷àå –
# \Î÷åðåäü ïå÷àòè(_Total)\Çàäàíèé siconv-0.2.1
# Ñòðîêà «%.0f job(s)» óêàçûâàåò ìîäóëþ ïðèìåíèòü ê ðåçóëüòàòó fconv-1.1
# ïðåîáðàçîâàíèå ê òèïó float è âûâåñòè ÷èñëî â ôîðìàòå ru-xcode-1.0
# ñ òî÷íîñòüþ íîëü çíàêîâ ïîñëå çàïÿòîé. ru-dt1489-1.4
# Çàòåì ê ÷èñëó äëÿ íàãëÿäíîñòè äîáàâëÿåòñÿ ñòðîêà «job(s)». ru-mtc-1.3
# Åñëè âàì íåïîíÿòíî, ÷òî ýòî çíà÷èò, – ïîñìîòðèòå
# äîêóìåíòàöèþ ïî ôóíêöèè printf ( ) ÿçûêà Ñ. После тестирования выяснилось, что удобнее всего
# Ïåðåõîä â ñîñòîÿíèå ïðåäóïðåæäåíèÿ ïðîèñõîäèò
# ïðè íàêîïëåíèè 5 çàäàíèé, à êðèòè÷åñêèé ñòàòóñ использовать утилиту ru-mtc.
# íàñòóïàåò, åñëè èõ ñòàíîâèòñÿ 10 è áîëåå. Для конвертирования нужно выполнить такую после-
check_command check_nt_counter! ↵
"\Î÷åðåäü ïå÷àòè(_Total)\Çàäàíèé", ↵ довательность команд:
"%.0f job(s)"!5!10!PxRT890mY
}
# cat checkcommands.cfg | mtc –f koi8 ↵
–t win 1251 > checkcommands.tmp
# mv checkcommands.tmp checkcommands.cfg
# Ïðîâåðÿåì ïðîöåíò èñïîëüçîâàíèÿ ôàéëà ïîäêà÷êè
define service{
use generic-service Теперь осталось только заставить Nagios перечитать
host_name win2000rus
service_description Paging File файлы конфигурации:
is_volatile 0
check_period 24x7
max_check_attempts 3 # /usr/local/etc/rc.d/nagios.sh restart
normal_check_interval 1
retry_check_interval 1
contact_groups win-admins Убедившись в отсутствии ошибок, можно начать ста-
notification_interval 120 вить разные садистские эксперименты по проверке
notification_period 24x7
notification_options c,r того, насколько надежно и оперативно система мони-
# Òóò ìû ñíîâà èñïîëüçóåì check_nt_counter, õîòÿ è íåìíîãî торинга реагирует на критические ситуации, происхо-
# äðóãèì ñïîñîáîì.
# Ñòðîêà «Usage %.2f %%» óêàçûâàåò ìîäóëþ ïðèìåíèòü дящие на Windows-машине. Например, для того чтобы
# ê ðåçóëüòàòó ïðåîáðàçîâàíèå ê òèïó float è âûâåñòè ÷èñëî посмотреть, как работает слежение за очередью прин-
# â ôîðìàòå ñ òî÷íîñòüþ äâà çíàêà ïîñëå çàïÿòîé.
# Çàòåì äëÿ íàãëÿäíîñòè ïðèêëåèâàåì ñïåðåäè ñòðîêó «Usage». тера, можно выключить питание принтера и отправить
# Îáðàòèòå âíèìàíèå íà äâîéíîé çíàê «%» â ñòðîêå несколько заданий на печать. Впрочем, я думаю, вы и
# ôîðìàòèðîâàíèÿ.
# Ñíîâà âñïîìíèâ õîðîøèìè ñëîâàìè ôóíêöèþ printf ( ), сами сможете придумать разные способы создаия кри-
# ïîíèìàåì, ÷òî â ðåçóëüòàòå èç äâóõ ïîëó÷èòñÿ îäèí ñèìâîë «%». тических ситуаций. Наигравшись вдоволь, можно пе-
# Ïåðåõîä â ñîñòîÿíèå ïðåäóïðåæäåíèÿ ïðîèñõîäèò ïðè äîñòèæåíèè
# óðîâíÿ â 80 ïðîöåíòîâ, à êðèòè÷åñêèé ñòàòóñ íàñòóïàåò, реходить ко второму способу мониторинга, который я
# åñëè ôàéë ïîäêà÷êè çàïîëíåí íà 90 è áîëåå ïðîöåíòîâ. опишу в следующей статье.
ДЕНИС ПЕПЛИН
20
администрирование
Знакомство с системой зачастую начинается с ее уста- копировать /etc/defaults/rc.conf в /etc/rc.conf, что без та-
новки и настройки, причем эти два процесса обычно со- кой защиты привело бы к зацикливанию.
вмещены. Для систем Unix настройка сводится к созда- Включение в rc.conf команд нежелательно. Хотя та-
нию текстовых файлов конфигурации. В FreeBSD основ- кой метод и работает, процесс загрузки будет нарушен,
ная работа идет над файлом /etc/rc.conf, который являет- ведь обычно в rc.conf ничего, кроме установки перемен-
ся частью системы стартовых скриптов /etc/rc*. ных не происходит, все действия выполняются позже
Настроить систему после установки можно путем за- стартовыми скриптами. При правильной настройке (ус-
пуска /stand/sysinstall или вручную. Оба способа хороши, тановка переменных) порядок запуска сервисов и уста-
а первый к тому же лишен недостатка большинства про- новки параметров системы определяется не положени-
грамм автоматической настройки: уже заданные парамет- ем строк в rc.conf, которое может быть произвольным, а
ры не перезаписываются, а добавляются в конец файла содержимым скриптов.
/etc/rc.conf, где их можно затем отредактировать под соб- Начиная с FreeBSD 5.x, содержимое это поменялось
ственные нужды или вообще удалить, чтобы вернуться к почти полностью: из NetBSD были заимствованы скрип-
настройкам по умолчанию. ты «нового поколения» /etc/rc.d. После некоторой паузы,
Многие, казалось бы, сложные вещи, которые мо- потребовавшейся на тестирование новых скриптов, ста-
гут поставить новичка в тупик, в FreeBSD делаются рые были убраны. Наиболее важные из оставшихся в /etc
путем добавления пары строк в этот файл. Чтобы не скриптов и файлы конфигурации:
быть голословным, приведу пример настройки шлюза rc – запускается init при загрузке системы.
в Интернет для локальной сети с частными адресами rc.shutdown – запускается init при останове системы.
(192.168.0.0/24) на внутреннем интерфейсе и NAT на rc.subr – часть системы, импортированной из NetBSD.
внешнем, кэширующим DNS-сервером и SSH для уда- rc.firewall – предназначен для настройки ipfw и natd.
ленного управления всем этим хозяйством. Хотя это не rc.conf – содержит настройки системы, переписываю-
самый простой пример, конфигурация умещается все- щие параметры по умолчанию.
го на 11 строчках: rc.conf.local – специфичные для хоста настройки. Если
используется этот файл, rc.conf может быть общим для
sshd_enable="YES" группы хостов.
ifconfig_rl0="inet 123.123.123.2 netmask 0xfffffff0"
ifconfig_rl1="inet 192.168.0.1 netmask 0xffffff00" rc.local – все еще поддерживается для запуска локаль-
hostname="example.com" ных сервисов. Вместо него рекомендуется использо-
defaultrouter="123.123.123.1"
firewall_type="OPEN" вать скрипты /usr/local/etc/rc.d.
firewall_enable="YES"
gateway_enable="YES"
natd_enable="YES" Для редактирования предназначены только скрипт
natd_interface="rl0" rc.firewall и файлы конфигурации. Ситуация, в которой
named_enable="YES
потребовалось бы приспосабливать к своей системе ос-
Такая лаконичность достигается благодаря тому, что тальные скрипты, возникнуть не должна (по крайней мере,
параметры по умолчанию хранятся в /etc/defaults/rc.conf, теоретически). Если она все же возникла – сообщите об
а строки из /etc/rc.conf лишь изменяют и дополняют эти этом разработчикам.
параметры. Редактировать файл с параметрами по Принципиальное отличие скриптов нового поколения –
умолчанию не нужно (это только усложнит последую- поддержка параметров запуска. По сравнению со скрип-
щие обновления), но вот просмотреть его хотя бы раз тами из /usr/local/etc/rc.d список этих параметров суще-
будет полезно. ственно расширен. К минимальному набору (start|stop)
Строки rc.conf означают не что иное, как установку добавились:
переменных Bourne shell (/bin/sh). Когда в процессе заг- restart – последовательно stop и start.
рузки системы init запускает скрипт /etc/rc, одним из reload – перегружает процесс, посылая ему сигнал.
первых его действий становится установка параметров status – показывает статус процесса.
настройки: poll – ждет завершения процесса.
rcvar – показывает соответствующие переменные
if [ -r /etc/defaults/rc.conf ]; then rc.conf.
. /etc/defaults/rc.conf
source_rc_confs
elif [ -r /etc/rc.conf ]; then Параметры status, reload и poll реализуются только в
. /etc/rc.conf
fi том случае, если скрипт запускает какой-либо процесс.
Введение параметров запуска существенно облегча-
В данном случае перезаписыванием параметров по ет задачу запуска и рестарта отдельных сервисов без
умолчанию занимается функция source_rc_confs (рас- перезагрузки всей системы. Конечно, это было возмож-
положенная в /etc/defaults/rc.conf), которая и включает но и раньше, но рекомендация «перегрузиться на вся-
/etc/rc.conf, /etc/rc.conf.local или любые другие файлы кий случай» теперь имеет под собой гораздо меньше
из списка, определенного в переменной rc_conf_files. оснований.
Конструкция эта могла бы быть несколько проще, но ис- Перезагрузка после настройки системы нужна для
пользуемая функция уже содержит «защиту от дурака», того, чтобы проверить правильность внесенных в фай-
поскольку некоторые пользователи считают удобным лы конфигурации изменений. Когда стартовые скрипты
22
администрирование
#!/bin/sh command_interpreter – командный интерпретатор, с по-
#
# PROVIDE: prog мощью которого запускается command.
# REQUIRE: before_prog extra_commands – дополнительные параметры за-
# BEFORE: after_prog
# KEYWORD: FreeBSD пуска.
pidfile – полный путь к файлу PID. Если эта перемен-
. /etc/rc.subr
ная установлена, для проверки процесса использу-
name="prog" ется check_pidfile $pidfile $procname. Иначе, если ус-
rcvar=`set_rcvar`
command="/usr/local/bin/prog" тановлена переменная command, используется
check_process $procname.
load_rc_config $name
run_rc_command "$1" procname – имя процесса для проверки. По умолча-
нию – procname.
Функционально этот скрипт превосходит предыдущий required_dirs – проверка на наличие директории перед
за счет добавления новых параметров (и к тому же, бла- стартом программы.
годаря параметрам rcorder, он «знает свое место»). Ви- required_files – проверка на читаемость файлов.
зуально он делится на четыре части: ключевые слова, required_vars – проверка переменной с помощью
включение /etc/rc.subr, переменные и запуск функций checkyesno.
из включенного rc.subr. Между переменными и запус- ${name}_chdir – каталог, в который нужно войти перед
ком функций rc.subr могут быть включены собственные запуском command, если нет – ${name}_chroot.
функции скрипта. В скрипт могут быть помещены пе- ${name}_chroot – каталог для запуска chroot(8) перед
ременные argument_cmd. Слово argument означает па- запуском command.
раметр запуска. Если запустить любой из стартовых ${name}_flags – эта переменная используется для пе-
скриптов без параметров, он выдаст информацию при- резаписи соответствующей переменной из rc.conf.
мерно в таком виде: ${name}_nice – устанавливает уровень nice(1) перед за-
пуском command.
Usage: /etc/rc.d/prog ↵
[fast|force](start|stop|restart|rcvar|reload|status|poll)
${name}_user – пользователь, под которым запускается
command. Если установлена переменная ${name}_chroot,
используется chroot(8), иначе – su(1).
Параметрами скрипта могут быть start, faststart, ${name}_group – группа для запуска command в chroot.
forcestart, stop, faststop... и соответственно переменная ${name}_groups – разделенный запятыми список групп
argument_cmd на самом деле означает набор start_cmd, для запуска в chroot.
stop_cmd... argument_cmd – перезаписывает действие по умол-
Получить примерное представление о том, какие на чанию.
самом деле используются переменные, поможет следую- argument_precmd – выполняется перед argument_cmd или
щая команда: действием по умолчанию, которое выполняется только в
случае успешного завершения argument_precmd.
$ cat /etc/rc.d/[a-z]* | egrep "^[a-z]+_?[a-z]+=.*$" ↵
| awk -F= '{print $1}' | sort -u | less
argument_postcmd – выполняется, если argument_cmd
или действие по умолчанию успешно выполнены.
Не менее интересен может быть просмотр перемен- sig_stop – сигнал, который посылается процессу для
ных вместе с их значениями: его завершения вместо SIGTERM.
sig_reload – сигнал, который посылается процессу для
$ cat /etc/rc.d/[a-z]* | egrep "^[a-z]+_?[a-z]+=.*$" ↵ перезагрузки вместо SIGHUP.
| sort -u | less
В man rc.subr(8) дано описание всех используемых Префикс fast означает отсутствие проверки запущен-
функций и переменных. ных процессов перед запуском нового и установку пере-
Задаваемые в стартовых скриптах переменные ис- менной rc_fast=YES, а префикс force – установку пере-
пользуются функцией run_rc_command. Вот список этих менной rc_force=YES и игнорирование статуса заверше-
переменных в сокращенном виде: ния argument_precmd.
name – имя скрипта. Указывается в обязательном по- В отличие от локальных скриптов, для работы скрипта
рядке. «нового поколения» в rc.conf должна быть помещена пе-
rcvar – значение переменной, имя которой помещено ременная, имя которой определяется значением rcvar.
в rcvar, берется из rc.conf и проверяется с помощью Кроме того, туда же можно поместить и дополнительные
checkyesno. Истинными считаются значения «YES», переменные, например ${name}_flags.
«TRUE», «ON» или «1». Ложными «NO», «FALSE», В целом с переходом на новые скрипты настройка
«OFF» или «0». системы в rc.conf не изменилась (совместимость остав-
command – полный путь к команде. Переменная не нуж- лена с целью минимизации проблем при обновлении си-
на, если для каждого поддерживаемого параметра стемы). Возможностей по перенастройке системы на
указана переменная argument_cmd. ходу явно прибавилось, и к тому же стартовые скрипты
command_args – опциональные аргументы и/или ди- теперь еще лучше подходят в качестве инструмента изу-
рективы оболочки. чения системы.
НАСТРОЙКА
СЕРВЕРА SSH
ДЕНИС КОЛИСНИЧЕНКО
24
администрирование
Сервис Telnet обеспечивает базовую эмуляцию термина- Программу ssh можно скачать по адресу http://
лов удаленных систем, поддерживающих протокол Telnet www.cs.hut.fi/ssh/. Версия ssh для UNIX распространяется
над протоколом TCP/IP. Обеспечивается эмуляция терми- бесплатно, а за Windows-версию (имеется в виду клиент
налов Digital Equipment Corporation VT 100, Digital для Windows) нужно заплатить.
Equipment Corporation VT 52, TTY. Любые команды, вы- Оболочка ssh незаменима в тех случаях, когда уда-
полняемые с помощью Telnet, обрабатываются telnet-сер- ленно нужно администрировать сервер или когда сервер
вером, а не локальным компьютером. Пользователь лишь не имеет собственного монитора. При использовании
видит результат выполнения этих команд. telnet все данные, которые передаются через telnet-соеди-
Для использования Telnet на удаленном компьюте- нение, доступны в открытом виде. А значит, имена пользо-
ре должен быть установлен telnet-демон. На компьюте- вателей и пароли будут доступны всем, кто прослушива-
ре пользователя нужно установить программу-клиент. ет трафик с помощью анализатора. SSH выполняет шиф-
Практически в каждой операционной системе суще- рование, используя несколько различных алгоритмов,
ствует утилита telnet, которая является клиентом для включая DES и 3DES.
протокола telnet. Программа состоит из демона sshd, который запуска-
Сервис Telnet был и остается одним из самых попу- ется на Linux/UNIX-машине, и клиента ssh, который рас-
лярных способов удаленной регистрации и работы на уда- пространяется как для Linux, так и для Windows. Чтобы
ленной машине. Основным его недостатком является то, установить ssh, возьмите исходные тексты и поместите
что любая информация, в том числе и пароли, передает- их по традиции в каталог /usr/src/. Затем распакуйте ар-
ся в открытом виде без какого-либо кодирования. хив и установите программу, выполнив следующую пос-
SSH (Secure Shell) – программа, позволяющая вам за- ледовательность действий:
регистрироваться на удаленных компьютерах и устано-
вить зашифрованное соединение. Существует также «бе- cd /usr/src/
tar xzf ssh-2.4.0.tar.gz
зопасная» версия telnet – stelnet. cd ssh-2.4.0
SSH использует криптографию открытого ключа для ./configure
make
шифрования соединения между двумя машинами, а так- make install
же для опознавания пользователей. Оболочку ssh можно
использовать для безопасной регистрации на удаленном Чтобы ssh начал работать, необходимо запустить де-
сервере или копировании данных между двумя машина- мон sshd на той машине, к которой предполагается под-
ми, в то же время предотвращая атаки путем присоеди- ключение. Желательно добавить команду запуска в сце-
нения посредине (session hijacking) и обманом сервера нарий загрузки системы для автоматического запуска.
имен (DNS spoffing). Демон sshd работает по 22 порту (см. листинг 1). Если
Оболочка Secure Shell поддерживает следующие ал- не ошибаюсь, ssh невозможно использовать вместе с
горитмы шифрования: xinetd/inetd – его нужно запускать подобно httpd-серверу
BlowFish – это 64-разрядная схема шифрования. Этот в режиме standalone.
алгоритм часто используется для высокоскоростного
шифрования данных больших объемов. Ëèñòèíã 1. Ôðàãìåíò ôàéëà /etc/services
ssh 22/tcp # SSH Remote Login Protocol
Тройной DES (Data Encryption Standard) – стандарт для ssh 22/udp # SSH Remote Login Protocol
шифрования данных. Данный алгоритм довольно ста-
рый, поэтому не рекомендуется его использовать. Обычно с настройкой sshd не возникает никаких не-
Обычно DES используется для шифрования несекрет- приятных моментов. Подробно о настройке sshd пого-
ных данных. ворим чуть позже. Теперь попробуйте зарегистриро-
IDEA (International Data Encryption Algorithm) – между- ваться на этой машине через ssh. Для этого нужно ус-
народный алгоритм шифрования информации. Этот тановить этот же пакет на другую машину под управле-
алгоритм работает со 128-разрядным ключом и поэто- нием Linux/UNIX (или установить Windows-клиент ssh)
му он более защищен, чем BlowFish и DES. и ввести команду:
RSA (Rivest-Shamir-Adelman algorithm) – алгоритм Ри-
веста-Шамира-Адельмана. Представляет собой схему $ ssh hostname.domain
шифрования с открытым и секретным ключами.
ssh запросит вас ввести пароль пользователя. В каче-
При выборе алгоритма шифрования нужно исходить стве имени пользователя для установки соединения бу-
из конфиденциальности информации, которую вам нуж- дет использовано имя текущего пользователя, то есть
но передать. Если информация секретна, лучше исполь- имя, под которым вы сейчас зарегистрированы в сис-
зовать алгоритмы IDEA или RSA. Если же вы просто не теме. В случае если аутентификация пройдет успеш-
хотите передавать данные в открытом виде, используйте но, начнется сеанс связи. Прекратить сеанс можно ком-
алгоритм BlowFish, поскольку он работает значительно бы- бинацией клавиш Ctrl+D. Если вам нужно указать дру-
стрее, чем DES. гое имя пользователя, используйте параметр -l програм-
Оболочка ssh очень эффективна против анализаторов мы ssh:
протоколов, так как она не только шифрует, но и сжимает
трафик перед его передачей на удаленный компьютер. ssh -l user hostname.ru
allowedadress 10.1.1.1 10.1.2.1 10.1.3.1 Следующая директива – это директива Protocol. С по-
мощью этой директивы можно указать в порядке пред-
Это означает, что доступ по ssh может быть выполнен почтения номера поддерживаемых протоколов SSH:
только с машин с адресами 10.1.1.1, 10.1.2.1, 10.1.3.1. Это
оградит ваш компьютер от нежелательных вторжений Protocol 2,1
извне. Программа stelnet во всем полностью аналогична
программе telnet, но она выполняет шифрование трафи- Такое определение директивы означает, что сначала
ка, который передается во время telnet-соединения. сервер будет пытаться установить соединение с клиен-
Демон sshd – это программа-демон для оболочки ssh. том по протоколу SSH версии 2, а потом – по протоколу
Обычно sshd запускается на машине, к которой подклю- SSH версии 1. Можно указать использование только од-
чаются клиенты SSH. Последние версии демона sshd под- ной версии протокола, например: Protocol 1. Директива
держивают две версии протокола SSH: SSH версия 1 и ListenAddress указывает локальный адрес, который дол-
SSH версия 2. жен прослушивать демон.
Директива определяет файлы ключей. Файлами по
Протокол SSH версия 1 умолчанию являются:
У каждого узла есть свой RSA-ключ (обычно 1024 бит),
который используется для идентификации узла. Этот ключ /etc/ssh/ssh_host_key
/etc/ssh/ssh_host_rsa_key
еще называется открытым. Дополнительно при запуске /etc/ssh/ssh_host_dsa_key
демона генерируется еще один RSA-ключ – ключ серве-
ра (обычно 768 бит). Этот ключ создается заново каждый Директива ServerKeyBits определяет разрядность клю-
час и никогда не сохраняется на диске. ча сервера для протокола SSH первой версии. По умол-
Каждый раз при установке соединения с клиентом чанию используется 768-разрядный ключ (768 бит).
демон отправляет ему в ответ свой открытый ключ и Директива LoginGraceTime аналогична опции -g : пре-
ключ сервера. Клиент сравнивает полученный откры- доставляет клиенту дополнительное время, чтобы аутен-
тый ключ со своей базой данных, чтобы проверить, не тифицировать себя. По умолчанию время равно 600 се-
изменился ли он. Затем клиент случайным образом кундам. Если за это время клиент не смог аутентифици-
генерирует 256-разрядное число и кодирует его, исполь- ровать себя, соединение будет прекращено.
зуя одновременно два ключа – открытый ключ и ключ Директива KeyRegenerationInterval аналогична опции -k.
26
администрирование
Òàáëèöà 1. Îïöèè äåìîíà sshd.
PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords no
IRC-CЕРВЕР
АЛЕКСАНДР СЛОБОДСКОЙ
28
администрирование
Итак, вы администрируете небольшую локальную сеть. Так Примечание: если сервер при запуске сразу выпадает в
или иначе пользователям хочется общаться. Такие програм- core, возможно, проблемы с share-библиотеками, тогда нуж-
мы, как lantalk, естественно, не подходят, потому что рассы- но вернуться к компиляции снова:
лают широковещательные пакеты по всей сети, что не есть
хорошо. Выход – установка irc-сервера, который лишен очень [user@server]$ make LDFLAGS=static && make install
многих недостатков и имеет массу преимуществ. Например,
быстрота работы по сравнению с www-чатами – ведь клиен- Теперь, скорее всего, все будет в порядке.
ту не приходится грузить громоздкую страницу, чаще всего Переходим в директорию, которую указали при компи-
наполненную всяческими баннерами; расходование меньше- ляции и видим там несколько файлов:
го количества трафика, что не может не радовать. Суще- ircd – основной бинарный файл.
ствует несколько разновидностей irc-серверов, имеющих не- ircd.conf – файл конфигурации.
кие свои особенности, но похожие друг на друга в целом, ircd.motd – файл, который выдается всем пользователям
например, unreal ircd, bahamut ircd и так далее, но в данном при каждом заходе на irc. Можете изменять и дополнять
обзоре я рассмотрю PTlink ircd как более простой для описа- его нужной информацией или картинкой, например.
ния и использующийся в российской irc-сети – IrcNET.Ru. help.user – файл помощи для простых смертных, выво-
Приступим. Качаем сам сервер с http://www.aldem.net/irc. дится командой /helpsys.
Выберите ли вы бинарный файл или скомпилируете из ис- help.oper – файл помощи для irc-операторов.
ходных кодов, зависит от того, какая операционная система help.admin – файл для irc-администраторов.
на вашем сервере. В статье пойдет речь именно о Unix-вер-
сии. В Unix-версии компилирование должно обязательно про- Файл sendbug необходим в случае падения ircd в core,
ходить под обычным пользователем, то есть у того, у кого id таким образом можно отправить им этот файл для исправ-
больше 0, иначе сервер откажется компилироваться. ления ошибок. Синтаксис: sendbug ircd.core.
Распаковываем архив, заходим в папку и пишем: После запуска и использования irc-сервера в этой же
папке появится пара новых файлов, таких как ircd.pid, в ко-
[user@server]$ ./configure тором находится номер процесса запущенного сервера, и
gline.log, в котором находится список всех gline, которые ста-
Появится экран с описанием изменений и дополнений, вились в сети. (Gline – запрет доступа ко всем серверам сети
начиная с самого старого. Пролистываем описание и нажи- для определенных IP).
маем enter. Теперь нужно выбрать опции сборки сервера. Переходим к составлению конфигурационного файла.
Сначала вас спросят о типе компилятора: выбираем gcc, Все опции пишутся через двоеточие.
если, конечно, вы не являетесь счастливым обладателем В M-line содержится техническая информация о сервере:
экзотической операционной системы типа HP-UX, в этом
случае выбирайте cc. Дальше идут опции компиляции, их M:èìÿ_ñåðâåðà:ip:îïèñàíèå_ñåðâåðà:ñòàíäàðòíûé_ïîðò
можно оставить по умолчанию, так как они автоматически
определяются в зависимости от операционной системы. А-line – отражает информацию об администраторе дан-
Затем выбираем место, где будет лежать папка со всеми ного сервера, эта информация доступна через команду
необходимыми файлами для ircd. /admin на irc-сервере.
Выбираем название бинарного файла. Далее идет оп-
ция – компилировать ли сервер как Hub или как Leaf. (Hub – A:îïèñàíèå:Admin:e-mail
сервер, способный присоединять к себе другие сервера. Leaf
– одиночный сервер, привязанный к хабу, не имеющий воз- Y-line – определяет классы коннектов серверов друг к
можности присоединять сервера). другу, Y-lines нужно оставить без изменений.
Выберите нужный вам тип в зависимости от стоящих Все же некоторое описание необходимо, т.к. оно приго-
перед вами задач. Затем вас спросят, осуществлять ли крип- дится далее при написании C\N-lines.
тование паролей irc-операторов: если нет, то пароли в Класс-1 – определяет соеднинения простых смертных с
O-lines вписываем простым текстом; если да, то пароли не- сервером:
обходимо зашифровать. Для этого необходимо зайти на irc-
сервер и набрать команду /mkpasswd ваш_пароль: получит- Y:1:90:0:250:100000
ся некая последовательность букв и цифр – их и нужно впи-
сать в O-line на место пароля. У вас возникнет вопрос: «Как предпоследний параметр, определяет разрешенное количе-
зайти-то, ведь мы еще не настроили ircd?». Ответ прост: ство коннектов к серверу.
сначала настройте сам сервер, а пароль для O-line можно Класс-30 – коннект Hub to Leaf:
сделать в самом конце, он не критичен для работоспособно-
сти ircd. Далее выбираем число разрешенных соединений к Y:30:180:0:0:3500000
серверу. И последний пункт – выбор типа сети. Компиляция:
Класс-40 – как раз наоборот, Leaf to Hub:
[user@server]$ make && make install
Y:40:90:90:1:3500000
Если все прошло гладко, то сервер готов к использованию.
30
bugtraq
КОНТРОЛЬ
ПОСЛЕДОВАТЕЛЬНЫХ
ПОРТОВ В Linux
ДЕНИС КОЛИСНИЧЕНКО
32
администрирование
Интерфейс RS-232C является одним из самых распрост- Òàáëèöà 2. Êîíòàêòû è ñèãíàëû (25 pin).
раненных способов связи компьютеров и периферийных
устройств. Кто же не помнит старый добрый Norton
Commander и его функцию Связь (Link), позволяющую об-
мениваться файлами двум компьютерам, соединенным
нуль-модемным кабелем? Интерфейс RS-232C подразу-
мевает наличие двух типов оборудования:
Терминального (DTE);
Связывающего (DCE).
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h> Ðèñ. 2. Âûâîä ïðîãðàììû.
#include <stdlib.h>
#include <unistd.h> Примечание. Обе программы нужно запускать от име-
#include <stdio.h>
#include <signal.h> ни пользователя root (пользователя с UID = 0). Все ваши
вопросы присылайте по адресу dhsilabs@mail.ru.
34
безопасность
НЕЯВНЫЙ САМОКОНТРОЛЬ
КАК СРЕДСТВО СОЗДАНИЯ
НЕЛОМАЕМЫХ ЗАЩИТ
КРИС КАСПЕРСКИ
36
безопасность
Основная ошибка подавляющего большинства разработ- та контрольной суммы: напичкивать его антиотладочны-
чиков защитных механизмов состоит в том, что они дают ми приемами, реализовать его на базе собственных вир-
явно понять хакеру, что защита еще не взломана. Если туальных машин (то есть интерпретаторов), некоторые из
защита сообщает «неверный ключевой файл (пароль)», них, например, Стрелку Пирса, достаточно трудно про-
то хакер ищет тот код, который ее выводит и анализирует анализировать. Но если такие меры и остановят взлом-
условия, которые приводят к передаче управления на дан- щика, то ненадолго.
ную ветку программы. Если защита в случае неудачной
аутентификации блокирует некоторые элементы управ- Техника неявного контроля
ления и/или пункты меню, хакер либо снимает такую бло- Ошибка традиционного подхода заключается в его пред-
кировку «в лоб», либо устанавливает точки останова (в сказуемости. Любая явная проверка чего бы то ни было
просторечии называемые «бряками») на API-функции, по- независимо от ее алгоритма – это зацепка! Если хакер
средством которых такое блокирование может быть осу- локализует защитный код, то все – пиши пропало. Един-
ществлено (как правило, это EnableWindows), после чего ственный надежный способ отвадить его от взлома –
он опять-таки оказывается в непосредственной близости «размазать» защитный код по всей программе с таким
от защитного механизма, который ничего не стоит про- расчетом, чтобы нейтрализовать защиту без полного
анализировать и взломать. Даже если защита не выво- анализа всей программы целиком – было заведомо не-
дит никаких ругательств на экран, а просто молчаливо возможным. К сожалению, существующие методики
выходит из программы, то хакер либо ставит точку оста- «размазывания» либо многократно усложняют реализа-
нова на функцию exit, либо тупо трассирует программу и, цию программы, либо крайне неэффективны. Некоторые
дождавшись момента передачи управления на exit, ана- программисты вставляют в программу большое количе-
лизирует один или несколько последующих условных пе- ство вызовов одной и той же защитной функции, иду-
реходов в цепи управления – какой-то из них непосред- щих из различных мест, наивно полагая тем самым, что
ственно связан с защитой! хакер будет искать и анализировать их все. Да как бы не
В некоторых защитных механизмах используется кон- так! Хакер ищет ту самую защитную функцию и правит
троль целостности программного кода на предмет выяв- ее. К тому же, зная смещение вызываемой функции,
ления его изменений. Теперь, если хакер подправит не- найти и отследить ее вызовы можно без труда! Даже если
сколько байтиков в программе, защита немедленно об- встраивать защитную функцию непосредственно в мес-
наружит это и взбунтуется. «Святая простота!» – восклик- то ее вызова, хакер сможет найти все такие места ту-
нет хакер и отключит самоконтроль защиты, действуя тем пым поиском по сигнатуре. Пусть оптимизирующие ком-
же самым способом, что описан выше. По наблюдениям пиляторы несколько меняют тело inline-функций с уче-
автора, типичный самоконтроль выявляется и нейтрали- том контекста конкретного вызова, эти изменения не-
зуется за несколько минут. Наиболее сильный алгоритм принципиальны. Реализовать же несколько десятков раз-
защиты: использовать контрольную сумму критических личных защитных функций слишком накладно, да и фан-
участков защитного механизма для динамической рас- тазии у разработчика не хватит, и хакер, обнаружив и
шифровки некоторых веток программы, которые ломают- проанализировав пару-тройку защитных функций, на-
ся уже не за минуты, а за часы (в редчайших случаях – столько проникнется «духом» и ходом мысли разработ-
дни). Алгоритм взлома выглядит приблизительно так: чика, что все остальные найдет без труда.
подсмотрев контрольную сумму в оригинальной про- Между тем существует и другая возможность – неяв-
грамме, хакер переписывает код функции CalculateCRC, ная проверка целостности своего кода. Рассмотрим сле-
заставляя ее всегда возвращать это значение, не вы- дующий алгоритм защиты: пусть у нас имеется зашиф-
полняя реальной проверки; рованная (а еще лучше упакованная) программа. Мы,
если защита осуществляет подсчет контрольной сум- предварительно скопировав ее в стековый буфер, рас-
мы различных участков программы и/или разработ- шифровываем (распаковываем) ее и… используем осво-
чик использовал запутанный самомодифицирующий- бодившийся буфер под локальные переменные защищен-
ся код, труднопредсказуемым способом меняющий ной программы. С точки зрения хакера, анализирующего
свою контрольную сумму, то хакер может изменить дизассемблерный код, равно как и гуляющего по защите
защиту так, чтобы она автоматически самовосстанав- отладчиком, все выглядит типично и «законно». Обнару-
ливалась после того, как все критические участки жив защитный механизм (пусть для определенности это
будут пройдены; будет тривиальная парольная проверка), хакер правит со-
отследив все вызовы CalculateCRC, хакер может про- ответствующий условный переход и с удовлетворением
сто снять динамическую шифровку, расшифровав ее убеждается, что защита больше не ругается и программа
вручную, после чего надобность в CalculateCRC про- работает. Как будто бы работает! – через некоторое вре-
падает. мя выясняется, что после взлома работа программы ста-
ла неустойчивой: то она неожиданно виснет, то делает из
Стоит отметить, что независимо от способа своей ре- чисел винегрет, то… Почесав репу, хакер озадаченно ду-
ализации любой самоконтроль элементарно обнаружива- мает: «А как это вообще ломать? На что ставить точки
ется установкой точек останова на те участки защитного останова? Ведь не анализировать же весь код целиком!».
механизма, которые были изменены. Остальное – дело Весь фокус в том, что некоторые из ячеек буфера,
техники. Можно сколь угодно усложнять алгоритм подсче- ранее занятого зашифрованной (упакованной) програм-
Ðèñóíîê 1.
38
безопасность
нии структуры (этим мы отвечаем хакеру на вопрос: а чего защиты приведен в листинге 1. Для упрощения понима-
это они не инициализированы?), а затем скопировать эту ния и абстрагирования от всех технических деталей здесь
структуру целиком (вместе с контролируемыми «дырка- используется простейшая схема аутентификации, «ло-
ми»!) в десяток-другой буферов, живописно разбросан- мать» которую совершенно необязательно: достаточно
ных по всей программе. Следить на всеми окажется не лишь подсмотреть оригинальный пароль, хранящийся в
так-то просто: во-первых, не хватит контрольных точек, а защищенном файле прямым текстом. Для демонстраци-
во-вторых, это просто не придет в голову. онного примера такой прием с некоторой натяжкой допу-
стим, но в реальной жизни вам следует быть более изощ-
Практическая реализация ренными. По крайней мере, следует добиться того, чтобы
Правила хорошего тона обязывают нас проектировать ваша защита не ломалась изменением одного-единствен-
защитные механизмы так, чтобы они никогда, ни при ка- ного байта, поскольку в этом случае даже неявный конт-
ких обстоятельствах не могли нанести какой бы то ни было роль будет легко выявить. Следует также отметить, что
вред легальному пользователю. Даже если вам очень- контролировать все критические байты защиты – не
очень хочется наказать хакера, ломающего вашу програм- очень-то хорошая идея, т.к. хакер сможет это легко обна-
му, форматировать диск в случае обнаружения модифи- ружить. Если защита требует для своего снятия хотя бы
кации защитного кода, категорически недопустимо! Во- десяти модификаций в различных местах, три из которых
первых, это просто незаконно и попадает под статью о контролируются, то с вероятностью ~70% факт контроля
умышленном создании деструктивных программ, а во- не будет обнаружен. Действительно, среднестатистичес-
вторых, задумайтесь, что произойдет, если искажение кий хакер следить за всеми модифицированными ими бай-
файла произойдет в результате действий вируса или не- тами просто не будет. Вместо этого, он в надежде что ту-
которого сбоя? Если вы не хотите, чтобы пострадали не- пая защита контролирует целостность своего кода цели-
винные, вам придется отказаться от всех форм вреда, в ком, будет следить за обращениями к одной, ну макси-
том числе и преднамеренном нарушении стабильности ра- мум двум-трем измененным им ячейкам и… с удивлени-
боты самой защищенной программы. ем обнаружит, что защита их вообще не контролирует.
Стоп! Ведь выше мы говорили как раз об обратном. После того как контрольные точки выбраны, вы долж-
Единственный путь сделать защиту трудноломаемой, не ны определить их смещение в откомпилированном фай-
выдавая никаких ругательных сообщений, по которым нас ле. К сожалению, языки высокого уровня не позволяют
можно засечь, – молчаливо делать винегрет из обраба- определять адреса отдельных машинных инструкций и,
тываемых данных. А теперь выясняется, что делать этого если только вы не пишите защиту на ассемблерных встав-
по этическим (и юридическим!) соображениям нельзя. На ках, то у вас остается один-единственный путь – восполь-
самом деле, если хорошо подумать, то все эти ограниче- зоваться каким-нибудь дизассемблером (например, IDA).
ния легко обойти. Что нам мешает оснастить защиту яв- Допустим, критическая часть защиты выглядит так, и
ной проверкой целостности своего кода? Хакер найдет и нам необходимо проконтролировать целостность услов-
нейтрализует ее без труда, но это и не страшно, посколь- ного оператора if, выделенного красным цветом:
ку истинная защита находится совершенно в другом мес-
те, а вся эта бутафория нужна лишь затем, чтобы предот- int my_func()
{
вратить последствия непредумышленного искажения кода if (check_user())
программы и поставить пользователя в известность, что {
fprintf(stderr, "passwd ok\n");
все данные нами гарантии (как явные, так и предполагае- }
мые) ввиду нарушения целостности оригинального кода else
{
аннулируются. Правда, при обсуждении защиты данного fprintf(stderr, "wrong passwd\n");
типа некоторые коллеги мне резонно возразили, а что, exit(-1);
}
если в результате случайного сбоя окажутся изменены и return 0;
контролируемые ячейки, и сама контрольная сумма? За- }
щита сработает у легального пользователя!!! Ну что мне
на это ответить? Случайно таких «волшебных» искаже- Загрузив откомпилированный файл в дизассемблер,
ний просто не бывает, их вероятность настолько близка к мы получим следующий код (чтобы быстро узнать, кото-
нулю, что… К тому же, в случае срабатывания защиты рая из всех процедур и есть my_func, опирайтесь на тот
мы ведь не форматируем легальному пользователю диск, факт, что большинство компиляторов располагает функ-
а просто нарушаем нормальную работу программы. Пусть ции в памяти в порядке их объявления, т.е. my_func будет
и предумышленно, все равно, если в результате того или вторая по счету функция):
иного сбоя был искажен исполняемый файл, то о коррек-
тности его работы более говорить не приходится. Ну хо- .text:00401060 sub_401060 proc near ↵
; CODE XREF: sub_4010A0+AF?p
рошо, если вы так боитесь сбоев, можно встроить в за- .text:00401060 call sub_401000
щиту хоть десяток явных проверок, – трудно нам что ли?! .text:00401065 test eax, eax
.text:00401067 jz short loc_40107E
Ладно, оставим этические проблемы на откуп тем са- .text:00401069 push offset aPasswdOk ↵
мым пользователям, которые приобретают титул «лицен- ; "passwd ok\n"
.text:0040106E push offset unk_407110
зионных» исключительно через крак, и перейдем к конк- .text:00401073 call _fprintf
ретным вещам. Простейший пример реализации данной .text:00401078 add esp, 8
union anti_hack {
{ (*(char *) ((int) &ZZZ + a)) ^= x_crypt;
char buf[MAX_CODE_SIZE]; }
struct code_control
{ // êîïèðóåì îáðàòíî
int local_var_1; memcpy(&check_user, &ZZZ, (int) &main - (int) &check_user);
int local_var_2;
char gag_1[OFFSET_1-sizeof(int)*2];
int x_val_1; // ÿâíàÿ ïðîâåðêà èçìåíåíèÿ êîäà
char gag_2[OFFSET_2 - OFFSET_1 - sizeof(int)]; // ======================================================
int x_val_2; for (a = 0; a < (int) &main - (int) &check_user; a++)
};
}; {
b += *(int *) ((int) &check_user + a);
}
if (b != x_original_all)
Исходный текст: {
fprintf(stderr, "-ERR: invalid CRC (%x) hello, hacker\n", b);
Ëèñòèíã 1. return 0;
#include <stdio.h> }
40
безопасность
Заключение каждую новую версию защищенной программы придет-
Итак, для надежной защиты своих программ от вездесу- ся ломать индивидуально и опыт предыдущих взломов
щих хакеров вам совершенно необязательно прибегать к ничуть не упрощает задачу, а сама логика защиты до
помощи широко разрекламированных, но дорогостоящих безобразия проста. Как защита проверяет целостность
электронных ключей (которые, как известно, склонны в своего кода, хакеру более или менее ясно, но вот где
самый неподходящий момент "сгорать", к тому же "отвя- конкретно осуществляется такая проверка, он не смо-
зать" программу от ключа для опытного взломщика не жет сказать до тех пор, пока не проанализирует всю
проблема). Также совершенно необязательно спускаться программу целиком.
на уровень "голого" ассемблера (ассемблерные защиты Допустим, объем кода защищенного приложения со-
непереносимы и к тому же чрезвычайно трудоемки в от- ставляет порядка 256-512 Кб (не слишком много, прав-
ладке, про сопровождение я и вовсе молчу). Как было да?), тогда при средней длине одной машинной инструк-
показано выше, практически неломаемую защиту можно ции в 2,5 байта, хакеру придется проанализировать 100 –
создать и на языках высокого уровня, например, на Си/ 200 тысяч ассемблерных команд! При "крейсерской" ско-
Си++, Delphi или Фортране. рости анализа 10-20 инструкций в минуту (а это предел
Защиты, основанные на неявном контроле целост- мечтаний для профессионалов экстракласса) ориентиро-
ности своего кода, ни один здравомыслящий хакер ло- вочное время взлома составит по меньшей мере полто-
мать не будет (конечно, при условии, что они не содер- раста часов работы – почти неделя напряженного труда!
жат грубых ошибок реализации, значительно упроща- А на практике (с учетом затрат на тестирование взло-
ющих взлом), ибо трудоемкость взлома сопоставима с манного приложения) даже более того. Другими слова-
разработкой аналогичной программы "с нуля", а ведь ми, взломать защиту за разумное время нереально.
42
безопасность
СЕРГЕЙ ЯРЕМЧУК
44
безопасность
В статье «Контрольная сумма на защите Linux/FreeBSD» компилятором С при обработке файлов заголовков, по-
июньского номера журнала «Системный администратор» этому удалять их не надо. После набираем:
была рассмотрена настройка утилиты Tripwire, позволя-
ющей системному администратору контролировать цело- # make linux (openbsd, freebsd, netbsd)
стность важных системных файлов и быть предупрежден-
ным о взломе. Но хотелось бы не доводить до всего этого чтобы откомпилировать программу и затем под логином root:
и иметь возможность защититься и предотвратить взлом.
Существует множество утилит, позволяющих определить # make install
признаки подготовки и начала атаки (сканирование пор-
тов, множество неудачных удаленных подключений к сер- Теперь в /usr/local должен появиться каталог psionic с под-
веру), в этой статье познакомимся с тремя из них. каталогом portsentry2, в котором будут находиться три фай-
Набор программ TriSentry от компании Psionic ла: portsentry – исполняемый файл программы, portsentry.conf
Technologies Inc. (http://www.psionic.com/) разработаны, что- и portsentry.ignore. В portsentry.ignore содержатся IP-адре-
бы увеличить защиту компьютерных сетей и уменьшить ве- са узлов, которые не дожны блокироваться.
роятность проникновения, эти приложения относятся к IDS По умолчанию там содержится два адреса 127.0.0.1 и
(Intrusion Detection System – система обнаружения вторже- 0.0.0.0, остальные при необходимости заносятся в фор-
ний). Состоит TriSentry из трех ключевых компонентов: мате <IP Address>/<Netmask>. Например:
PortSentry, HostSentry и LogSentry, распространяемых как
freeware и предназначенных для использования на Unix-по- 192.168.2.0/24
192.168.0.0/16
добных операционных системах как вместе, так и раздель- 192.168.2.1/32
но, в зависимости от задач и необходимости.
По умолчанию используется 32-битная маска. Теперь
PortSentry самое время заглянуть в главный конфигурационный файл
PortSentry – программа, предназначенная для обнаружения portsentry.conf. Опции в этом файле для удобства условно
сканирования портов, которое, как правило, всегда пред- сгруппированы по секциям и имеют вид ОПЦИЯ=«значение».
шествует атаке. Она не только позволяет регистрировать
это в системных журналах при помощи syslog, но и позволя-
ет запустить в ответ любую программу (блокировки хоста Значения опций файла portsentry.conf
firewall или переадресации на несуществующий dead host,
traseroute, свой скрипт), которой могут быть переданы IP- Interface Configurations
адрес атакующего и номер атакуемого порта, или просто INTERFACE=«auto» – названия подконтрольного интер-
прописать адрес компьютера в файле /etc/hosts.deny. фейса, при наличии одного возможен вариант «auto»,
PortSentry обнаруживает практически все известные виды и он будет найден автоматически; если же их несколь-
сканирования: Strobe-style, SYN/half-open, Null, XMAS, FIN, ко, то необходимо указать на выбранный для контро-
TCP connect и другие. В файле README.stealth архива вы ля, например INTERFACE=«eth0», Portsentry может кон-
найдете описание обнаруживаемых методов Stealth-скани- тролировать только один интерфейс.
рования. В настоящее время имеется уже версия 2.0 про- INTERFACE_ADDRESS=«XXX.XXX.XXX.XXX» – IP-адрес
граммы, отличающаяся от первой поддержкой libpcap, т.е. интерфейса, без него Portsentry не сможет работать дол-
методами обнаружения сканирования. После закачки паке- жным образом, в данное время не поддерживается ди-
та распакуйте (tar xfz portsentry-2.0b.tar.gz) его и откройте в намическое определение адреса, в этом случае придет-
любимом редакторе файл portsentry_config.h, в котором со- ся писать скрипт (но в ближайшее время, по заверени-
держатся некоторые опции конфигурирования, для большин- ям разработчиков, такая опция будет реализована).
ства случаев подойдут используемые по умолчанию:
CONFIG_FILE “/usr/local/psionic/portsentry2/portsentry.conf” – Port Configurations
содержится путь к конфигурационному файлу, если зна- TCP_PORTS – перечисляются через запятую все про-
чение по умолчанию не подходит, изменив его, не за- веряемые Portsentry TCP-порты (диапазоны не поддер-
будьте подправить его и в Makefile в опциях INSTALLDIR живаются), список желательно не делать слишком
(/usr/local/psionic) и CHILDDIR (/portsenry2); большим, чтобы уменьшить количество срабатываний,
WRAPPER_HOSTS_DENY “/etc/hosts.deny” – путь к фай- но он должен охватывать весь диапазон и содержать
лу hosts.deny для работы tcpwrapper; порт номер 1, так как в большинстве сканеров скани-
SYSLOG_FACILITY LOG_DAEMON – тип логов для рование начинается именно с него, также не надо вклю-
syslogd (подробности в man 3 syslog); чать сюда порты, открытые работающими приложени-
SYSLOG_LEVEL LOG_NOTICE – уровень syslogd для ями (20 – ftp, 25 – sendmail, 80 – httpd и пр.). При по-
посылки сообщений; пытке подключения к указанному порту информация
MAXSTATE 50 – максимальное количество запоминае- об этом заносится в логи, затем выполняется пользо-
мых хостов для проверки повторного подключения. вательская команда и после узел блокируется при по-
мощи ipchains.
Знак решетки (#) в этом файле в начале строк с пере- UDP_PORTS – то же самое, только касается UDP-пор-
менными – это не признак комментария, они требуются тов.
46
безопасность
Для каждого протокола может запускаться только один После этого скомпилированная программа logtail
выбранный режим. В режиме basic открываются описан- вместе со вспомогательными файлами скопируется в
ные в файле portsentry.conf контролируемые порты и при каталоги, указанные в переменных INSTALLDIR_BIN,
попытке соединиться с ними происходит блокировка, при INSTALLDIR и INSTALLDIR_SH. По умолчанию это под-
этом PortSentry не реагирует на Stealth-сканирование. Ре- каталоги /usr/local/bin, /usr/local/etc и /usr/local/etc. Кро-
жим Stealth отличается от предыдущего тем, что не дер- ме основного скрипта logcheck.sh и программы logtail,
жит порты открытыми, и атакующий получает достовер- в комплекте идут несколько вспомогательных файлов.
ную информацию об используемых портах, а также выяв- Файл logcheck.hacking содержит ключевые слова (вро-
ляет практически все виды Stealth-сканирования. Режим де LOGIN root REFUSED или attackalert от Portcentry),
Advanced является самым быстрым и рекомендуется раз- появление которых в лог-файлах может свидетельство-
работчиками (во второй версии используется именно этот вать только об одном – компьютер атакован, т.е. если
режим совместно со Stealth). При этом контролируются такое слово будет обнаружено, то суперпользователь
все порты ниже значений ADVANCED_PORTS_TCP и получит сообщение, которое просто не сможет не при-
ADVANCED_EXCLUDE_UDP. влечь его внимания: «ACTIVE SYSTEM ATTACK». А
файл logcheck.violations содержит набор слов, свиде-
LogSentry тельствующих, как правило, о каком-либо негативном
В системных журналах имеется довольно ценная инфор- действии (например, failed, denied и даже su root). На-
мация, так как любое событие оставляет там свой след, пример, сравните следующие два сообщения:
но большинство системных администраторов заглядыва-
ют туда один-два раза в неделю, иногда даже вручную, Jun 4 09:00:32 grinder sendmail[5475]: VAA05473: ↵
to=crowland, ctladdr=root (0/0), delay=00:00:02, ↵
что, согласитесь, очень утомительно. Утилита Logsentry xdelay=00:00:01, mailer=local, stat=refused
(или logcheck) как раз и предназначена для автоматичес-
Jun 4 09:00:32 grinder rshd: ↵
кой проверки системных журналов на предмет наруше- refused connect from hacker@evil.com:1490
ний безопасности и других необычных действий, таким
образом немного облегчая труд. Берет свою родослов- Первая строка указывает на довольно обычную житей-
ную от скрипта frequentcheck.sh, входящего в состав скую ситуацию с sendmail, отдаленный компьютер отка-
firewall Gauntlet компании Trusted Info