Мониторинг
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 Information Systems Inc. зался от подключений, т.е. слово refused к нашему слу-
(http://www.tis.com). Сценарий logcheck запускается при по- чаю не имеет абсолютно никакого отношения. А вот в сле-
мощи демона cron, при этом программа при помощи ути- дующей некто с hacker@evil.com пробовал запускать rsh-
литы grep проверит системные журналы на предмет на- сеанс на компьютере, это как раз наш случай (rshd при-
личия определенных ключевых слов, и в случае наличия веден только для примера, использование его на компь-
их в файле сисадмин получит извещение по почте. Чтобы ютере, по-моему, плохая идея) и опять присутствует сло-
не проверять каждый раз все файлы полностью, для за- во refused. Для того чтобы события, подобные первому,
поминания последней прочитанной в журнале позиции не отвлекали в файл logcheck.violations.ignore, добавля-
Logcheck использует программу, называемую logtail, ко- ем строку, наличие которой заставит logsentry проигно-
торая запоминает ее и использует эту позицию на после- рировать событие. В нашем случае это будет:
дующем шаге, чтобы обработать новую порцию инфор-
мации. При этом в каталоге с лог-файлами появятся еще mailer=local, stat=refused
несколько файлов хххххх.offset, где хххххх – название лог-
файла; если удалить его, утилита начнет проверять лог- Но с занесением данных в этот файл надо быть ос-
файл опять сначала. Также утилита контролирует номер торожным, чтобы не пропустить важное. По умолчанию
inode и размер лог-файла; при уменьшении размера или в нем содержится только одна строка stat=Deferred, по-
изменении номера inode счетчик сбрасывается и файл зволяющая игнорировать сообщения grep. Чтобы иметь
проверяется сначала. Поэтому можно не беспокоиться при возможность искать некоторые слова и не сообщать об
удалении лог-файлов (точнее, переносе на резервный но- их наличии, предназначен файл logcheck.ignore. Поис-
ситель), когда они разрастутся. Инсталляция программы ки по ключевым словам в файлах logcheck.hacking и
очень проста, распаковываем архив. logcheck.violations, чтобы гарантировать, что ничего не
пропущено, нечувствительны к регистру. А в файлах
# tar xfzv logsentry-1.1.1.tar.gz logcheck.violations.ignore и logcheck.ig-nore, наоборот, чув-
ствительны к регистру, чтобы гарантировать 100% попа-
И заходим в каталог (да, название немножко измени- дание и не пропустить что-нибудь интересное. Все *.ignore-
лось). файлы требуют точного текста.
Теперь необходимо сделать так, чтобы все сообщения
# cd logcheck-1.1.1 системы записывались в один файл /var/log/messages. Для
этого открываем в любимом редакторе /etc/syslog.conf.
И теперь вводим команду mаке с указанием использу- Он имеет приблизительно такую структуру: в левой час-
емой операционной системы, например для Linux. ти через точку с запятой перечисляются системные со-
бытия, а в правой – файл или устройство (что для Unix
# make linux одно и то же), в которое сообщение, соответствующее
48
безопасность
тановка HostSentry проблем вызвать не должна, просто После первого запуска образуются две базы данных:
распаковываем архив, заходим в образовавшийся ката- hostsentry.db, содержащая записи обо всех пользовате-
лог и вводим make install, после чего все необходимые лях, которые регистрировались с тех пор, пока HostSentry
файлы будут просто перенесены в каталог /usr/local/ был в действии, и hostsentry.tty.db об используемых (ак-
abacus/hostsentry (на него указывает переменная тивных) терминалах. В пользовательской базе данных
INSTALLDIR в Makefile). хранятся объекты входа в систему пользователя, которые
В файле hostsentry.conf устанавливаются пути к мо- сформированы со следующей схемой:
дулям, используемым утилитой, базам данных, необхо- username – имя входящего в систему пользователя;
димым для сбора информации, переменная WTMP_FILE recordCreated – дата начала записи в Unix-формате;
должна указывать на wtmp-файл (для Linux обычно /var/ firstLogin – первый вход в систему для этого пользова-
log/wtmp) и некоторым другим файлам, о них ниже. Един- теля;
ственная переменная, на которую можно обратить вни- trackLogins – список входов в систему этого пользова-
мание поначалу (остальные можно не трогать, а оста- теля (будет постоянно расти);
вить как есть, хотя базы данных я бы переместил в ката- validLoginDays – дни, когда данному пользователю раз-
лог /var, где и положено им быть) – это WTMP_FORMAT, в решено регистрироваться в системе;
которой устанавливается формат сохранения информа- validLoginHours – часы, когда пользователю разреше-
ции о логинах. Вся проблема здесь в том, что учет пара- но регистрироваться;
метров входа в систему (Name, TTY, Time, Host) в различ- adminDisabled – флаг, указывающий на то, что данная
ных реализациях Unix ведется по-разному, например, имя запись была отключена администратором;
хоста в BSD урезается до 16-32 байт, в RFC 1034 имя ог- securityDisabled – флаг, указывающий на то, что дан-
раничено 256 символами, а в переменной MAXDNAME ный пользователь был лишен возможности регистри-
(arpa/nameser.h) имя узла ограничено 1024 символами. роваться модулем программы;
Это приводит к тому, что если нападавшим использовано totalLogins – общее количество регистраций для дан-
длинное имя, то оно наверняка урежется (подробности в ного пользователя;
README.wtmp). Так вот в WTMP_FORMAT и устанавли- version – версия схемы базы данных.
вается формат, чтобы обеспечить запись необходимых
данных применительно к используемой системе (в про- База данных терминалов помогает HostSentry поддер-
стейшем случае необходимо будет раскомментировать со- жать список активных подключений и позволяет програм-
ответствующую строчку, в будущем планируется макси- ме знать, когда пользователь регистрировался. Посколь-
мально автоматизировать процесс). ку эти данные не используются между включениями, она
В файле hostsentry.modules описывается, какие моду- обнуляется каждый раз при перезапуске HostSentry. При
ли должны выполняться при регистрации пользователя в этом отслеживаются следующие элементы:
системе и при logout. В большинстве случаев можно ос- tty – TTY, с которого зарегистрировался пользователь;
тавить как есть. При необходимости сменить очередность username – имя пользователя;
выполнения модулей, их нужно просто переместить вверх/ loginStamp – уникальный timestamp для login;
вниз. В файл hostsentry.ignore заносятся пользователи, version – версия схемы базы данных.
которых не нужно отслеживать при помощи HostSentry,
это может быть полезно, например, для пользователей В loginStamp заносится информация, необходимая для
типа «ftp», который обнаруживается в wtmp и вызывает обработки компонентами системы и формируется следу-
большое количество ложных тревог из-за анонимного до- ющим образом:
ступа (при этом все равно в базу данных пользователь
будет включен). Для этого нужно просто разместить ис- loginIP@loginHostname@loginTTY@loginTime@logoutTime
ключаемых пользователей по одному в строке (и надо заг-
лядывать в него периодически, чтобы там не оказался Где:
root). Файл hostsentry.action описывает действия, которые LoginIP – IP-адрес пользователя при регистрации;
должна предпринимать утилита, пока она только регист- LoginHostname – имя хоста (полностью уточненное при
рирует залогинившихся пользователей. Теперь можно и помощи DNS);
запускать (для автоматического старта вместе с систе- LoginTTY – TTY пользователя;
мой нужно включить эту строку в файл rc.local). LoginTime – время входа в систему в Unix-формате;
LogoutTime – время выхода из системы в Unix-формате.
# python hostsentry.py
Если попробовать теперь зарегистрироваться, то до-
При этом в файле /var/log/messages должны появить- полнительно появится сообщение, в котором указывает-
ся такие строки. ся кто, когда, откуда и какие модули были выполнены.
50
программирование
ОЛЕГ ПОПОВ
52
программирование
С чем в действительности сталкивается программист SELECT OWNER,SEGMENT_TYPE,TABLESPACE_NAME,SUM(BLOCKS)SIZE_BLOCKS,
при использовании Python – это простой и ясный синтак- COUNT(*) SIZE_EXTENTS FROM DBA_EXTENTS
GROUP BY OWNER,SEGMENT_TYPE,TABLESPACE_NAME
сис. Я ловлю себя часто на мысли, что просмотр чужого """)
кода зачастую не требует значительного напряжения. И except cx_Oracle.DatabaseError,info:
print "SQL Error:",info
здесь помогает то, что отступы являются частью синтак-
сиса и определяют вложенность операторов.
Библиотеки зачастую имеют очень лаконичную доку- Печатаем результат на stdout. Замечу здесь, что
ментацию, но этого достаточно, так как API очень выра- my_cursor.description возвращает описание столбцов зап-
зительны и внятны. роса в виде списка кортежей. Для каждого столбца воз-
Сам процесс кодирования и тестирования достаточно вращаются следующие данные: (name, type_code,
комфортен. Здесь помогает качественная диагностика display_size, internal_size, precision, scale, null_ok).
ошибок. Оттестированные модули очень легко расширять Далее следует форматированный вывод на stdout (по-
и складывать из них приложения. чти как printf в языке C).
Для работы с RDBMS Oracle существует несколько print
различных модулей для Python, использующих разные print 'Database:',my_connection.tnsentry
print
механизмы: print "Used space by owner, object type, tablespace "
ODBC (Win32, Linux) print "-------------------------------------------------"
DCOM (Win32) title_mask=('%-16s','%-16s','%-16s','%-8s','%-8s')
i=0
PERL_DBI (Win32, Linux, Solaris, HP-UX, AIX) for column_description in my_cursor.description:
NATIVE API (Win32, Linux, Solaris, HP-UX, AIX) print title_mask[i]%column_description[0],
i=1+i
print ''
print "-------------------------------------------------"
Более подробную информацию вы можете найти на row_mask='%-16s %-16s %-16s %8.0f %8.0f '
www.python.org. for recordset in my_cursor.fetchall():
print row_mask%recordset
my_cursor=my_connection.cursor()
try: select * from all_users where USERNAME LIKE :S
my_cursor.execute("""
54
программирование
Листинг 1 Листинг 2
Выполняем простой запрос Запрос с параметрами
"" ""
cx_Oracle demo cx_Oracle demo
simple query query with parameters
""" """
__AUTHOR__='POPOV O.' __AUTHOR__='POPOV O.'
__COPYRIGHT__='POPOV O. 2002 Samara, Russia' __COPYRIGHT__='POPOV O. 2002 Samara, Russia'
from sys import exit from sys import exit
try: try:
import cx_Oracle import cx_Oracle
except ImportError,info: except ImportError,info:
print "Import Error:",info print "Import Error:",info
sys.exit() sys.exit()
if cx_Oracle.version<'3.0': if cx_Oracle.version<'3.0':
print "Very old version of cx_Oracle :",cx_Oracle.version print "Very old version of cx_Oracle :",cx_Oracle.version
sys.exit() sys.exit()
try: try:
my_connection=cx_Oracle.connect('system/gasdba@sqlmt') my_connection=cx_Oracle.connect('system/manager@test_db')
except cx_Oracle.DatabaseError,info: except cx_Oracle.DatabaseError,info:
print "Logon Error:",info print "Logon Error:",info
exit(0) exit(0)
my_cursor=my_connection.cursor() my_cursor=my_connection.cursor()
try: try:
my_cursor.execute(""" my_cursor.execute("""
SELECT OWNER,SEGMENT_TYPE,TABLESPACE_NAME, ↵ SELECT OWNER,SEGMENT_TYPE,TABLESPACE_NAME, ↵
SUM(BLOCKS)SIZE_BLOCKS, SUM(BLOCKS)SIZE_BLOCKS,
COUNT(*) SIZE_EXTENTS FROM DBA_EXTENTS COUNT(*) SIZE_EXTENTS FROM DBA_EXTENTS
GROUP BY OWNER,SEGMENT_TYPE,TABLESPACE_NAME WHERE OWNER LIKE :S
""") GROUP BY OWNER,SEGMENT_TYPE,TABLESPACE_NAME
except cx_Oracle.DatabaseError,info: """,S='SYS%')
print "SQL Error:",info except cx_Oracle.DatabaseError,info:
exit(0) print "SQL Error:",info
exit(0)
print
print 'Database:',my_connection.tnsentry print
print print 'Database:',my_connection.tnsentry
print "Used space by owner, object type, tablespace " print
print "--------------------------------------------------" print "Used space by owner, object type, tablespace "
title_mask=('%-16s','%-16s','%-16s','%-8s','%-8s') print "---------------------------------------------------"
i=0 title_mask=('%-16s','%-16s','%-16s','%-8s','%-8s')
for column_description in my_cursor.description: i=0
print title_mask[i]%column_description[0], for column_description in my_cursor.description:
i=1+i print title_mask[i]%column_description[0],
print '' i=1+i
print "--------------------------------------------------" print ''
row_mask='%-16s %-16s %-16s %8.0f %8.0f ' print "----------------------------------------------------"
for recordset in my_cursor.fetchall(): row_mask='%-16s %-16s %-16s %8.0f %8.0f '
print row_mask%recordset for recordset in my_cursor.fetchall():
for column_description in my_cursor.description: print row_mask%recordset
print column_description
ДАНИИЛ АЛИЕВСКИЙ
56
программирование
Средства для работы с файлами – одно из немногих слабых Обратите внимание: если файл удалось открыть (конст-
мест системы библиотек языка Java. Файловые библиотеки руктор FileInputStream успешно сработал), то мы закрываем
появились в самых первых версиях Java и были ориентиро- файл в любом случае, даже если процесс чтения оборвался
ваны на операционные системы того времени, главным об- из-за исключения. Однако исключения в процессе закрытия
разом на Unix. С тех пор операционные системы ушли дале- файла мы игнорируем. Действительно, если предыдущее
ко вперед, а области применения Java чрезвычайно расши- чтение произошло безошибочно, т.е. мы успешно прочита-
рились. Например, для текстовых файлов стали популярны ли весь файл, то на невозможность закрыть файл можно не
форматы Unicode (16-битовые, UTF-8). Файловая иерархия обращать внимания (тем более, что ошибка на этом этапе
в мире Windows резко усложнилась – появились такие поня- чрезвычайно маловероятна). Если же исключение произош-
тия, как «Desktop», «My Computer», «My Documents». По со- ло в процессе чтения, то, очевидно, оно представляет боль-
ображениям совместимости фирма Sun была вынуждена ший интерес, чем ошибка при попытке закрыть файл. Зна-
сохранять старые классы и интерфейсы, дополняя их новы- чит, «наружу» следует выдать именно исключение, связан-
ми. Получилась довольно запутанная система. В итоге пра- ное с чтением. Если бы мы не проигнорировали исключения
вильная организация работы с файлами в современной Java- при закрытии файла, то мы, в соответствии с известным
программе может оказаться достаточно непростой задачей. неудобным свойством Java, рисковали бы «потерять» ис-
В этой статье мы попытаемся рассмотреть наиболее ключение при чтении файла в методе f.read().
типичные задачи, возникающие при работе с файлами, и Обращение к методу length() во втором варианте фун-
предложить по возможности правильные способы их ре- кции loadFileAsBytes достаточно «безопасно». Этот ме-
шения. Все приведенные решения являются фрагмента- тод не порождает исключений, а при отсутствии файла
ми готовых отлаженных библиотек. или других возможных проблемах просто возвращает 0,
что в данном контексте не приведет ни к чему плохому.
Чтение и запись бинарного файла Запись файла:
Самая простая задача – прочитать некоторый файл в виде
массива байт, и наоборот, записать массив байт обратно public static void saveFileFromBytes(
String fileName, byte[] buf)
в файл. throws IOException
Это одна из немногих задач, решаемых стандартными {
saveFileFromBytes(new File(fileName),buf);
библиотеками вполне очевидным способом. Основную труд- }
ность здесь представляет корректная обработка исключе-
public static void saveFileFromBytes(
ний. К сожалению, в большинстве учебников по Java пред- File file, byte[] buf)
лагаются не вполне корректные решения, чреватые в слу- throws IOException
{
чае ошибки «утечкой» ресурсов системы (файл остается saveFileFromBytes(file,buf,0,buf.length);
незакрытым) или потерей информации об исключении. }
Вот пример возможного решения. public static void saveFileFromBytes(
Чтение файла: File file, byte[] buf, int off, int len)
throws IOException
{
public static byte[] loadFileAsBytes( FileOutputStream f= new FileOutputStream(file);
String fileName) throws IOException try {
{ f.write(buf,off,len);
return loadFileAsBytes(new File(fileName)); } catch (IOException e) {
} try {f.close();} catch (Exception e1) {};
return;
public static byte[] loadFileAsBytes( }
File file) throws IOException f.close();
{ }
byte[] result= new byte[(int)file.length()];
loadFileAsBytes(file,result);
return result; Используется вариант FileOutputStream байтового по-
} тока OutputStream.
public static void loadFileAsBytes(File file, Здесь обработка исключений несколько сложнее, чем в
byte[] buf) throws IOException случае чтения. Дело в том, что операционная система или
{
loadFileAsBytes(file,buf,0,buf.length); реализация FileOutputStream для конкретной платформы
} могут кэшировать операции с диском. Например, данные,
public static void loadFileAsBytes( посылаемые в файл методом f.write(), могут на самом деле
File file, byte[] buf, int off, int len) накапливаться в некотором буфере, и только при закрытии
throws IOException
{ файла действительно записываться на диск. Это означает,
FileInputStream f= new FileInputStream(file); что потенциальные ошибки на этапе закрытия файла столь
try {
f.read(buf,off,len); же важны, что и ошибки в процессе работы метода f.write().
} finally { Игнорировать их, как мы делали в случае чтения, нельзя.
try {f.close();} catch (Exception e) {};
} Приведенное выше решение игнорирует ошибки на эта-
} пе закрытия файла только в том случае, если какие-то ошиб-
ки уже имели место при записи методом f.write() – после-
Используется вариант FileInputStream байтового пото- дние в любом случае окажутся не менее информативными.
ка InputStream. Если же метод f.write() отработал безошибочно, то закрытие
58
программирование
Каждая кодировка в Java идентифицируется своим ле, в общем случае невозможно определить, не прочитав
именем. Стандартные библиотеки Java гарантированно файл, за исключением некоторых простых кодировок.
«понимают» кодировки со следующими именами: Наиболее естественно использовать для чтения тек-
«ASCII» – 7-битовая кодировка ASCII для англоязычных стового файла постепенно увеличивающийся буфер
текстов; StringBuffer. Вот вариант готового решения:
«Cp1252», «ISO8859_1» – 8-битовые расширения ASCII
для западноевропейских языков; public static String loadFileAsString(
File file, String encoding)
«UnicodeBig», «UnicodeBigUnmarked», «UnicodeLittle», throws IOException
«UnicodeLittleUnmarked», «UTF-16» – основные вари- {
InputStreamReader f= encoding==null?
анты 16-битовой кодировки Unicude; new FileReader(file):
«UTF-8» – псевдо-8-битовая кодировка Unicode (в дей- new InputStreamReader(
new FileInputStream(file),encoding);
ствительности на разные символы отводится разное StringBuffer sb= new StringBuffer();
число бит). try {
char[] buf= new char[32768];
int len;
7- и 8-битовые кодировки предполагают, что каждый while ((len=f.read(buf,0,buf.length))>=0) {
sb.append(buf,0,len);
символ текста хранится в отдельном байте файла. В слу- }
чае 7-битовой кодировки старший бит каждого байта по- return sb.toString();
} finally {
просту не используется (предполагается равным 0). try {f.close();} catch (Exception e) {};
16-битовые кодировки Unicode отводят на каждый сим- }
}
вол 16-битовое («короткое») слово файла. Друг от друга
они отличаются наличием или отсутствием в файле спе- Прокомментирую основные тонкости.
циального 16-битового префикса, идентифицирующего Прежде всего нужно обратить внимание на параметр
формат Unicode, и порядком байт в 16-битовом слове. encoding. Чтобы прочитать текстовый файл, необходимо
Кодировки «UnicodeBig», «UnicodeLittle» и «UTF-16» пред- указать кодировку, в которой он записан. Функция допус-
полагают, что первые 16 бит файла содержат префикс кает передачу null в качестве encoding, но это всего лишь
0xFEFF, указывающий, что файл записан в формате Unicode. означает, что файл будет прочитан в текущей кодировке
Кодировки «UnicodeBigUnmarked» и «UnicodeLittleUnmarked» операционной системы. Скажем, файл с русским текстом,
интерпретируют первые 16 бит файла как первый символ записанный в традиционной для России кодировке Windows
текста. Кодировки «UnicodeBig» и «UnicodeBigUnmarked» (формальное название «Cp1251»), прочитается правиль-
предполагают порядок байт big-endian: старший байт каж- но только при условии, что текущим языковым стандартом
дого слова следует в файле перед младшим. Кодировки (Regional Options) является русский.
«UnicodeLittle» и «UnicodeLittleUnmarked» предполагают по- Все это означает, что параметр encoding можно не ука-
рядок little-endian, более привычный пользователям Intel-про- зывать в единственном случае: когда предполагается, что
цессоров: младший байт каждого слова имеет в файле мень- файл записан в текущей кодировке операционной систе-
шее смещение от начала файла. При наличии префикса мы. Если файл записан в какой-то другой кодировке, то
0xFEFF порядок байт касается и способа записи этого пре- он может быть прочитан в виде совершенно непредска-
фикса: в случае big-endian первым байтом файла будет 0xFE, зуемого «мусора». Это вполне допустимо, например, если
в случае little-endian – 0xFF. Кодировка «UTF-16» не уточня- речь идет о написании простого одноплатформенного
ет, какой именно будет порядок байт, но в этом случае пре- текстового редактора типа Notepad.
фикс 0xFEFF является обязательным. Исходя из способа Внимание! Передавая null в качестве encoding, не
записи этого префикса, в готовом файле можно будет опре- следует полагаться, что латинские символы из стандар-
делить порядок байт в слове. Кодировка «UTF-8», строго та ASCII-7 (с кодами 0..127), если таковые в файле име-
говоря, не является 8-битовой, хотя и ориентирована на по- ются, будут гарантированно прочитаны правильно. Бо-
байтовое хранение данных. В этой кодировке стандартные лее того, теоретически возможна ситуация, когда файл,
символы ASCII, имеющие в терминах Unicode коды 0..127, содержащий только символы с кодами 0..127, будет про-
кодируются с помощью только одного байта, а все прочие читан неверно! В принципе в какой-то операционной си-
символы «расходуют» 2 или более байт. Эта кодировка – стеме может оказаться, что текущей кодировкой явля-
наиболее универсальная и удобная в большинстве случаев. ется UTF-8, UTF-16 или какая-нибудь новая кодировка,
Для текстов, не содержащих национальных и специальных которая будет разработана в будущем и которая коди-
символов, кодировка «UTF-8» столь же компактна, как и рует символы совершенно непредсказуемым способом.
традиционная ASCII, но при этом сохраняется принципиаль- В данный момент на известных мне версиях Windows
ная возможность записывать любые символы Unicode. все кодировки, предлагаемые операционной системой,
хранят латинские символы «как есть», согласно стан-
Чтение и запись дарту ASCII-7. Но никто не может гарантировать, что
текстового файла: алгоритмика так будет всегда. Чтобы правильно читать файлы с ла-
Прочитать целиком текстовый файл несколько сложнее, тинскими символами, записанные в традиционном фор-
чем бинарный. В случае бинарного файла мы заранее мате ASCII, нужно явно указывать кодировку «ASCII»
знали размер требуемого буфера – он был равен длине или одно из стандартных 8-битовых расширений:
файла. Число символов, содержащихся в текстовом фай- «Cp1252» либо «ISO8859_1».
60
программирование
ния null строковой переменной. В этом случае стереть файл На основе такого маршрута можно создать работоспо-
(если таковой существует) – самое логичное решение. Про- собный объект java.io.File и в случае файла передать его
верять наличие файла перед вызовом метода delete() не прочим классам пакета java.io.* для работы с этим фай-
нужно: при отсутствии файла (или при возникновении дру- лом. Для такого маршрута можно традиционными средства-
гих проблем) метод delete() возвращает false, не порождая ми класса java.io.File перейти к родительскому каталогу
никаких исключений. (File.getParent()), и получится вполне корректный новый
маршрут, если только текущий маршрут не является кор-
Путешествие по файловой системе: нем диска или верхнеуровневым псевдонимом подкатало-
основные трудности га для компьютера из локальной сети. Наконец, если эк-
Средства для анализа файловой системы: для работы с земпляр класса java.io.File соответствует обычному ката-
каталогами и путями, определения системных свойств логу (в том числе корню диска), то традиционные средства
файлов, работы с файлами-ссылками (links) и пр. в Java, к этого класса позволяют корректно получить все подката-
сожалению, реализованы довольно непоследовательно. логи и файлы, лежащие внутри него, и работать с ними.
Пакет для работы с файлами java.io.* был разработан в Пока приложение нуждается только в манипуляциях с
те времена, когда на рынке господствовали MS-DOS, ран- файлами внутри некоторого обычного каталога (имя ко-
ние версии Windows и всевозможные варианты Unix. В ре- торого получено из диалога выбора файла или из конфи-
зультате этот пакет хорошо «справляется» только с про- гурационного файла), проблем не возникает. Такая ситу-
стейшими путями к файлам, подчиненными жесткой иерар- ация достаточно типична для «невизуальных» и даже для
хии в соответствии с идеологией Unix (эту идеологию унас- многих визуальных приложений, в которых вся работа с
ледовала MS-DOS и вслед за ней Windows). А именно: име- диском сводится к манипуляциям с файлами внутри не-
на файлов и подкаталогов, лежащих в некотором катало- которого специального каталога, отведенного под это при-
ге, образуются добавлением их имен к имени этого ката- ложение. Но если нужно, например, показать пользова-
лога через символ-разделитель File.separator («\» – для телю полное дерево всех доступных файлов, включая се-
Windows, «/» – для Unix). В корне иерархии должен лежать тевое окружение, причем стандартные диалоги выбора
общий для всех корневой каталог «/» – в случае Unix, в файла почему-либо не устраивают, – тут средства пакета
случае MS-DOS и Windows – корневой каталог диска «C:\», java.io.* недостаточны. Другой пример нехватки возмож-
«A:\» или аналогичный. Все средства объекта java.io.File, ностей java.io.*: этот пакет не способен определить ката-
предназначенные для работы с путями, такие как лог документов текущего пользователя Windows 2000/XP,
File.getParent(), рассчитаны на эту логику. а это очень неплохая «точка отсчета» для размещения
В то же время все современные версии Windows с точ- рабочих файлов приложения.
ки зрения пользователя организуют свою файловую сис- Чтобы поддержать современные файловые системы,
тему совершенно иначе. Корнем иерархии обычно являет- компания Sun разработала новый отдельный пакет
ся «рабочий стол» («Desktop»). Его дочерними подкатало- javax.swing.filechooser.* Он размещен внутри графической
гами (или, если быть точным, дочерними узлами иерар- библиотеки Swing и рассчитан на использование совмест-
хии) являются «компьютер» («My Computer»), «папка с до- но с диалогом выбора файла javax.swing.JFileChooser. Тем
кументами» («My Documents»), подкаталог для доступа к не менее возможности, предлагаемые этим пакетом, точ-
локальной сети («My Network Places»). Дисковые накопи- нее, классом javax.swing.filechooser.FileSystemView, не име-
тели появляются уже как дочерние узлы «My Computer». ют никакого отношения к визуальному интерфейсу. В дей-
При этом, разумеется, маршрут вроде: Desktop\My ствительности методы этого класса куда логичнее смотре-
Computer\Local Disk (C:)\подкаталог в Windows никакого лись бы в пакете java.io.*
смысла не имеет. Сегодня средства для анализа и управления файло-
Тем не менее для большинства приложений такая орга- вой системой в Java распределены по двум классам:
низация файловой системы никак не конфликтует с бо- java.io.File и javax.swing.filechooser.FileSystemView. Клас-
лее простой логикой пакета java.io.* Дело в том, что «на сы эти непохожи по организации и частично перекрыва-
нижнем уровне» с точки зрения функций работы с фай- ют возможности друг друга, так что порой не так просто
лами даже самые последние версии Windows сохранили определить, какой из них выбрать.
старую, унаследованную от MS-DOS структуру файловой Попробуем разобраться в этих двух классах.
системы: в корне находятся диски «C:\», «A:\» и т. д. Ка-
талоги типа «Desktop» и «My Documents» соответствуют Путешествие по файловой системе:
некоторым каталогам главного диска операционной сис- класс java.io.File
темы: в случае Windows 2000/XP они расположены в ка- Класс java.io.File, вопреки названию, является представ-
талоге текущего пользователя внутри каталога лением не собственно файла, а маршрута к файлу или
«Documents and Settings». Любой файл или «обычный» подкаталогу. (И почему его не назвали, скажем, «Path»?)
каталог таким образом имеет вполне традиционный Unix- Создание экземпляра File никак не связано с созданием
подобный «низкоуровневый» маршрут. Даже файлы из файла, для работы с файлами служат потоки ввода-вы-
локальной сети Windows имеют традиционные Unix-подоб- вода. По сути, класс File можно считать специализиро-
ные «низкоуровневые» маршруты типа: ванным вариантом класса String, рассчитанным на рабо-
ту с маршрутами к файлам/подкаталогам и, что отличает
"\\èìÿ_êîìïüþòåðà\ïñåâäîíèì_ïîäêàòàëîãà\îáû÷íûé_ìàðøðóò..." его от String, допускающим создание наследников.
62
программирование
public void deleteOnExit() конструктором класса File) до корня иерархии, последова-
public boolean createNewFile()
public boolean mkdir() тельно вызывая метод getParentDirectory, то под Windows
public boolean mkdirs() мы в конце концов доберемся до каталога «Desktop». Ме-
public boolean renameTo(File dest)
public boolean setLastModified(long time) тод getRoots также честно возвращает этот единственный
public boolean setReadOnly() каталог. Если мы будем считывать дерево каталогов, вы-
зывая getFiles для корневого каталога «Desktop», затем для
Все эти методы, кроме createNewFile(), не порождают его элементов, затем для их элементов и т. д., мы увидим
исключений. примерно то же самое, что видит пользователь в любом
Как видите, набор возможностей для современных опе- стандартном диалоге выбора файла Windows: «My Com-
рационных систем исключительно бедный, учитывая, что puter», «My Network Places» и т. д.
это единственный класс пакета java.io.*, предлагающий Очень поучительно написать тест, считывающий «вер-
подобный сервис. (Мы не считаем класс java.io.FileSystem, хние этажи» дерева каталогов с помощью этих методов и
обеспечивающий то же самое, но несколько менее удоб- распечатывающий для каждого элемента (объекта File)
ным способом.) Удивительно, что метод isHidden() не име- результаты вызовов toString(), getAbsolutePath(), getCano-
ет парного setHidden(), а setReadOnly() работает только nicalPath(), getParent(), listFiles(), а также имя класса
«в одну сторону», не позволяя снять атрибут «read-only». getClass(). Также интересно распечатать аналогичную ин-
Еще класс File обеспечивает несколько вспомогатель- формацию для каталогов, получаемых подъемом к кор-
ных возможностей – создание временных файлов и пре- ню вызовами getParentDirectory от произвольных обычных
образование маршрута к формату URI, и наоборот. Так- маршрутов, созданных конструктором класса File.
же этот класс предоставляет строковые константы Оказывается, что классы объектов File, полученных та-
separator, pathSeparator и их синонимы типа char: ким способом, в действительности часто являются наслед-
separatorChar и pathSeparatorChar. никами стандартного класса java.io.File, чаще всего (в слу-
чае Windows) это класс sun.awt.shell.Win32ShellFolder. Этого
Путешествие по файловой системе: класс следовало ожидать. Обычный класс File в принципе не спо-
javax.swing.filechooser.FileSystemView собен представить такую сущность, как «My Computer».
Класс javax.swing.filechooser.FileSystemView – это библиоте- Действительно, практически любой маршрут, хранящийся
ка методов для работы с объектами типа File. Эта библиоте- в объекте File, который мы бы могли придумать для обо-
ка, прежде всего, позволяет перемещаться по файловой значения «My Computer», одновременно соответствовал бы
системе (переходить к «родителю» и получать список «де- какому-нибудь вполне допустимому файлу, а его методы
тей»), причем в современном стиле: корнем иерархии для вроде getParent() вообще возвращали бы ерунду.
Windows служит рабочий стол «Desktop», в нем имеется На самом деле любой вызов getParentDirectory возвра-
выход в «My Computer» и локальную сеть, и т. д. Кроме того, щает для Windows объект «внутреннего» класса фирмы
библиотека FileSystemView открывает доступ к дополнитель- Sun sun.awt.shell.Win32ShellFolder (наследника File), при-
ным свойствам файлов, подкаталогов и иных, «нефайло- чем если исходный маршрут был относительным, он ав-
вых» элементов файловой системы типа «Desktop». томатически преобразуется в абсолютный. У такого объек-
Чтобы использовать FileSystemView, нужно вначале та методы getParent() и listFiles() работают уже «правиль-
получить экземпляр библиотеки с помощью статическо- но», так же, как getParentDirectory и getFiles. Метод list(),
го метода getFileSystemView(): судя по всему, возвращает имена только для «обычных»
файлов/подкаталогов, опуская имена дисков или элемен-
FileSystemView fsv=FileSystemView.getFileSystemView(); тов типа «My Computer».
Методы getPath() и getAbsolutePath() для «нефайловых»
Это единственный способ получить экземпляр: класс объектов типа «Desktop» возвращают путь к каталогу, ко-
FileSystemView – абстрактный и не имеет открытых на- торый в операционной системе соответствует данной вы-
следников. В действительности указанный метод возвра- сокоуровневой сущности, при отсутствии такового (как в
щает экземпляр одного из закрытых классов-наследни- случае «My Computer») – некоторые абстрактные имена.
ков, разных для разных операционных систем. Описанные свойства наследников класса File, возвраща-
Получив экземпляр, можно использовать следующие емых методами FileSystemView, выяснены из тестирования
методы: на версии JDK 1.4.1. В документации они, судя по всему, не
описаны, так что полагаться на них не стоит. Для переме-
public File getParentDirectory(File dir) щения по файловой системе следует использовать докумен-
public File getChild(File parent, String fileName)
public File createFileObject(File dir, String filename) тированные методы FileSystemView getParentDirectory,
public File createFileObject(String path) getChild, getFiles...
public File[] getFiles(File dir, boolean useFileHiding)
public File[] getRoots() Важное замечание: в отличие от класса File, библио-
тека FileSystemView рассчитана на работу не с произволь-
Эти методы «перекрывают» основные методы и конст- ными маршрутами, а только с путями к реально существу-
рукторы класса File, предназначенные для «навигации» по ющим файлам или подкаталогам. Например, метод
файловой системе. Данные методы работают уже в «со- getParentDirectory для несуществующего файла/подката-
временном» стиле. Если мы попытаемся подняться от лю- лога (созданного конструктором File для маршрута, не со-
бого файла (созданного либо через createFileObject, либо ответствующего реальному файлу или каталогу) попрос-
Первый из них под Windows возвращает каталог «My Этот метод не имеет аналогов в классе File. В рамках
Documents», а второй – каталог «Desktop». пакета java.io.* для аналогичных целей должен был бы
использоваться примерно такой вызов:
public boolean isFileSystem(File f)
public boolean isRoot(File f) file.getParent().equals(folder.getPath())
public boolean isFileSystemRoot(File dir)
public boolean isDrive(File dir)
public boolean isFloppyDrive(File dir)
public boolean isComputerNode(File dir) (возможно, с предварительным приведением маршрутов
к каноническому виду методами getCanonicalPath). При ра-
Эти методы (в дополнение к традиционным методам боте с более сложными современными файловыми систе-
isDirectory() и isFile() класса File) позволяют распознать «спе- мами подобная проверка строк была бы некорректна. Дей-
циальные» узлы файловой иерархии, не соответствующие ствительно, folder.getPath() может вернуть «My Computer»
обычным файлам или подкаталогам. Точный их смысл опи- как для настоящего элемента «My Computer» – родителя
сан в документации на FileSystemView. Все «обычные» фай- каталога «C:\», так и для подкаталога с именем «My
лы и подкаталоги, которые можно корректно представить Computer» в текущем каталоге Windows. Попытка исполь-
классом File, относятся к категории isFileSystem. Часто бы- зовать getCanonicalPath не привела бы к успеху – для «My
вает полезно сочетание свойств: Computer» метод getCanonicalPath порождает исключение,
так как никакому осмысленному каталогу подобный эле-
fsv.isFileSystem(f) мент файловой системы не соответствует.
&& !fsv.isRoot(f)
&& !fsv.isFileSystemRoot(f); На самом деле современная реализация метода isParent
(JDK 1.4.1) устроена крайне неэффективно. Если folder –
В этом случае есть гарантия, что не только сам марш- наследник некоего внутреннего класса sun.awt.shell.Shell-
рут f, но и его родитель является вполне «добропорядоч- Folder (именно такие наследники получаются для всех ка-
ным» маршрутом, допускающим представление с помо- талогов, возвращаемых методами FileSystemView), то ме-
щью класса File. тод isParent, не мудрствуя лукаво, получает полный список
всех «детей» folder (вызовом getFiles) и поочередно срав-
public boolean isHiddenFile(File f) нивает объект file с каждым из них.
Вот типичный пример скрытой квадратичности, глубо-
Если судить по документации, это просто дубликат ко «закопанной» в исходниках библиотечных модулей. В
обычного f.isHidden(). частности, такая реализация порождает ужасающее «тор-
можение» визуального компонента JFileChooser при попыт-
public Boolean isTraversable(File f) ке просматривать с помощью клавиатуры каталог из со-
тен или тысяч файлов. Связано это с тем, что любое пере-
Этот метод обобщает f.isDirectory() на случай «необыч- мещение курсора по каталогу приводит к вызову метода
ных» элементов файловой системы, таких как соседние setSelectedFile, делающему новый файл активным. Этот
компьютеры в локальной сети. Несколько необычный тип метод проверяет (вызовом isParent), точно ли текущий
результата, видимо, выбран по аналогии с другим клас- выбранный каталог является «родителем» по отношению
сом javax.swing.filechooser.FileView, обслуживающим нуж- к новому файлу, и если это не так, изменяет текущий ката-
ды визуального компонента JFileChooser. лог. Действие в данной ситуации, вообще говоря, бессмыс-
ленное. (Это издержки общей организации модуля
public String getSystemDisplayName(File f) JFileChooser: один и тот же метод setSelectedFile использу-
public String getSystemTypeDescription(File f)
public javax.swing.Icon getSystemIcon(File f) ется и для управления компонентом «снаружи», когда те-
кущий каталог действительно может измениться, и при ре-
Эти методы предназначены для визуального отображе- акции на стрелки «вверх»/«вниз».) Проверка нового выб-
ния файлов или подкаталогов в виде списка (например, в ранного файла методом isParent требует полного перебо-
диалоге выбора файла). Метод getSystemDisplayName по- ра всех файлов текущего каталога, так как каталоги в
зволяет узнать, как операционная система рекомендует JFileChooser всегда представлены наследниками File, сге-
именовать данный элемент. Для корня диска C:\ может быть нерированными методами FileSystemView. В результате
получено что-то вроде «WINDOWS (C:)», для рабочего сто- каждое нажатие на стрелку «вверх»/«вниз» приводит к
ла – «Desktop». Метод getSystemTypeDescription дополняет линейному перебору каталога, а полная прокрутка катало-
имя элемента описанием, которое обычно можно увидеть га с помощью стрелок на клавиатуре означает квадратич-
при просмотре каталога в режиме «Details». Например, это ное число операций.
64
программирование
Аналогичное «скрытое» торможение легко можно полу- лыками». С точки зрения стандартных библиотек Java файл
чить, легкомысленно пользуясь методами getDefault- с расширением «.lnk» – это просто некоторый двоичный
Directory() и getHomeDirectory(), которые могут понадобить- файл с недокументированным строением, а подкаталог-
ся и в совершенно «невизуальной» программе. Эти методы «ярлык» из «My Network Places», ссылающийся на другой
тоже возвращают наследников ShellFolder, и для них isParent компьютер – это самый обычный подкаталог с двумя слу-
работает медленно. В моей практике был случай, когда про- жебными файлами. В результате дерево файловой систе-
грамма начала загружаться в десятки раз медленнее (не- мы, построенное с помощью документированных библио-
сколько минут) только из-за того, что в момент старта был тек Java в Windows XP, оказывается принципиально не-
добавлен простой анализ содержимого каталога getDefault- полным – содержимое компьютеров локальной сети туда
Directory(). Причина оказалась именно в методе isParent, не попадает. Это особенно заметно при использовании
превратившего нормальный линейный алгоритм анализа в стандартного диалога выбора файла JFileChooser – ком-
квадратичный. Самое неприятное, что проблема проявля- пьютеры из «My Network Places» там видны, но попытка
лась только в случае, когда каталог «My Documents» содер- зайти на них заканчивается, мягко говоря, странно.
жал много элементов – ситуация типичная для рядового К счастью, фирма Sun уже реализовала механизм об-
пользователя, но сравнительно редкая для хорошо структу- работки файлов-«ссылок» Microsoft Windows, хотя пока не
рированных файловых систем профессионалов. документировала его. Это уже упоминавшийся выше класс
Надо надеяться, что в будущих версиях Java фирма sun.awt.shell.ShellFolder. Помимо прочих методов, имеющих
Sun оптимизирует метод isParent, устранив оттуда пере- документированные эквиваленты в классе FileSystemView,
бор. Для подавляющего числа ситуаций, когда каталог класс ShellFolder содержит следующие два метода:
вполне «нормальный» (что можно определить вызовом
isFileSystem), перебор совершенно не нужен. Пока что я public abstract boolean isLink();
public abstract ShellFolder getLinkLocation()
рекомендую, если это возможно и допустимо логикой про- throws FileNotFoundException
граммы, всегда конвертировать каталоги, полученные от
класса FileSystemView, в обыкновенные объекты File: Вот как можно ими пользоваться:
66
образование
MAC OS X
или
АЛЕКСАНДР ПОТЕМКИН
68
образование
Мое первое знакомство с Маком происходило заочно: по версией была так называемая Tiny Basic, что совсем не
скриншотам, описаниям и восторженным крикам людей, подходило Возняку – ему нужна была полноценная вер-
которые хоть раз работали с ним. Вполне закономерным сия. Без интерпретатора языка программирования ком-
было желание познакомиться с этим компьютером, и чем пьютер не представлял бы из себя особенного интереса.
быстрее, тем лучше. Друг Возняка Стив Джобс был вдохновлен этой пла-
Итак, желание осуществилось – нас «познакомили», той и потому решил, что они просто обязаны выпускать
вот тут все и началось... свой компьютер так же, как это делали и другие фирмы.
Я расскажу историю развития компьютеров Apple (тем Так было положено начало легендарному компьютеру
самым затронув создание первых персональных компью- Apple II, презентация работы которого никого не могла
теров) и самой фирмы Apple, а также расскажу про пос- оставить равнодушным к такой технике.
леднюю (на момент написания этих строк) версию опера-
ционной системы Mac OS X. Компания Apple Inc.
Джобсу удалось заполучить в команду менеджера по име-
ни Майк Марккула, который раньше занимался организа-
Появление первого цией продаж и добился на этом поприще больших успе-
персонального компьютера хов. С тех пор как он уволился из Intel, Марккула зани-
(небольшая историческая вводная) мался различными бизнес-проектами.
Первым персональным компьютером (в том смысле, что Джобс попросил его написать бизнес-план для Apple и
его можно было «взять с собой») следует считать компь- Марккула включился в работу: с его помощью компании
ютеры Altair. Однако первые Altair сложно назвать полно- удалось привлечь капитал для инвестиций, переманить
ценными «компьютерами» – раз; компьютерами, «пригод- Майка Скотта – одного из менеджеров из Fairchild
ными» для обычного пользователя – два. Semiconductor, которому был предложен пост президента
О полноценности: все, что из себя представляла эта фирмы. Кроме того, Марккула также расписывался на
техника, было обычной «коробкой» с большим количе- документах в качестве первого председателя совета ди-
ством переключателей. Более того, собрать такую техни- ректоров.
ку пользователю предлагалось самому, так что особен- Следующим привлеченным в компанию человеком был
ными пользовательскими качествами такая техника так- Джон Скалли – президент отделения Pepsi-Cola, крупней-
же не обладала. шего в составе PepsiCo.
Небольшое лирическое отступление о развитии ком- У Скалли не было специального технического образо-
пьютеров в 1970-х годах: основными пользователями были вания, однако он давно был поклонником передовых тех-
компьютерные профессионалы – хакеры. Их карьера в нологий и, кроме того, был очарован Джобсом.
основном начиналась за большими компьютерами фир- Фраза Джобса, обращенная к Скалли: «У вас никогда
мы Dell либо IBM (последние популярностью не пользова- не возникало желания изменить мир? Или вы намерены
лись). Компьютерное время было весьма дорогим, а тяга провести остаток жизни, продолжая торговать подслащен-
к компьютерам – очень высока. Так стали появляться пер- ной водой?» положила начало весьма тесным отношени-
вые компьютеры, собранные «для себя». ям между ними, которым в дальнейшем, увы, будет суж-
Одним из таких компьютеров, пущенных в «промыш- дено распасться.
ленное» производство, были компьютеры Altair фирмы Джон Скалли становится президентом компании в ап-
MITS. Сразу же после организации этой фирмы она была реле 1983 года.
завалена заказами на год вперед. Люди платили деньги К началу 1980 года годовой оборот фирмы превысил
за возможность получить пакет с микросхемами и схемой 10 миллионов долларов.
сбора всех деталей в один блок.
Количество людей, желающих владеть таким «компь- Первые проблемы
ютером», неуклонно росло, что увеличивало общий уро- После Apple II у компании начались первые неприятнос-
вень технического образования, а значит, и количество ти. 19 мая 1980 г. был презентован новый компьютер –
людей, приобщающихся к хакерству. Apple III. Технически эта машина была более совершен-
Такие «коробки» пользовались спросом, однако все- на, однако именно с нее и начинается череда неудач: пос-
гда есть люди, которые хотят сделать что-то свое, сде- ле серии задержек продукт был выпущен на рынок в не-
лать лучше. Одним из таких людей был Стив Возняк. Он доработанном виде, в результате чего так и не был «при-
регулярно посещал собрания хакеров и в конечном итоге знан» пользователями. Одной из основных причин подоб-
решил создать компьютер для собственного удовольствия. ных проблем была следующая: это был первый компью-
Процессором компьютера стал чип 6502 от MOS тер, который собирался в условиях «фирмы» командой
Technology (основным критерием при выборе этого чипа была инженеров, которыми руководил Джобс.
цена), микросхемы, способные работать с этим процессо- В 1983 году выходит компьютер Lisa, использующий
ром, ему подарил Дэн Сокол на одном из собраний клуба. все преимущества графического интерфейса (разрабо-
Через некоторое время Возняк собрал свой компью- танного в Xerox) и оснащенный 1Mb оперативной памяти,
тер так, что все уместилось на одну плату (что было дос- Motorolla 68000 CPU (32 bit, 5Mhz), 2 приводами для дис-
таточно красивым решением). Кроме того, ему пришлось кет, жестким диском на 5Mb.
написать свой Basic, так как единственной на тот момент Марккула отстранил Стива (Джобса, Возняк сам ото-
шел от дел после серьезной авиакатастрофы в 1981 году) ли сокращаться, в то время как рыночная доля персональ-
от работы над этим компьютером, в результате чего вся ных компьютеров IBM и совместимых с ней моделей все
энергия Джобса была брошена на компьютер Macintosh. увеличивалась. Apple попала в непростую ситуацию, тре-
Компьютеры Lisa станут популярными с выходом бующую немедленного вмешательства старших.
«Lisa 2» и значительным снижением цены ($3495 против …Apple было крайне необходимо сократить цикл раз-
$9995), однако после назначения на должность руководи- работки новых моделей, большую часть которого состав-
теля проектами Lisa и Macintosh Стив позаботится о зак- ляли задержки, вызванные неудержимым стремлением
рытии первого проекта. Джобса к совершенству. Кроме того, Джобс все чаще стал
Джобс активно продвигал свое детище, в результате вмешиваться в деятельность других подразделений ком-
чего Macintosh стал гораздо более популярным, нежели пании, уже не довольствуясь властью только над отделе-
Lisa. Тому способствовала и грамотная маркетинговая нием компьютеров Macintosh. Менеджеры всех подразде-
компания, и, что самое главное, сам неутомимый Джобс. лений завалили Скалли жалобами, суть которых своди-
При разработке этого компьютера была сделана лась к одному: либо над Джобсом будет быстро установ-
одна серьезная ошибка – по цене в более $2500 его лен контроль, либо все судно пойдет ко дну.
нельзя было назвать дешевым компьютером, и в то же …Наконец, после долгих и мучительных колебаний,
время его техническое оснащение (в частности, отсут- Скалли принял решение лишить своего друга и учите-
ствие жесткого диска, невозможность присоединения ля реального влияния над деятельностью компании,
внешних устройств, наличие небольшого количества удалив его на символическую должность председателя
программ) не позволяло рассматривать этот компью- совета директоров Apple. Столь принципиальное изме-
тер как серьезную технику. нение баланса сил внутри компании требовало одоб-
рения Майка Марккула и совета директоров Apple. Не-
NeXT Inc. задолго до начала заседания совета директоров 10 ап-
«К 1985 году объемы продаж Apple достигли $2 млрд реля 1985 года Скалли отозвал Джобса в сторону и
впервые за непродолжительную историю компании нача- рассказал ему о своих планах. Джобс отреагировал
70
образование
словно ребенок, которого отправляют в чужую семью 10 миллионов долларов в NeXT.
на воспитание против его воли. В 1994 году NeXT публикует спецификации программ-
…Наконец, после бесконечного обсуждения, начавше- ного обеспечения, названные OpenStep, базирующиеся
гося ранним вечером и завершившегося почти сутки спу- на системе NeXTSTEP 3.2. Инициатива получает поддер-
стя, совет директоров Apple принял единогласное реше- жку в лице GNU – начато развитие GNUstep.
ние отправить Джобса в почетную отставку…» (1) В апреле 1995 года NeXT выкупает все права на
Итак, Стив Джобс «ушел». Впрочем, история его де- Object-C у Stepstone. В это же время выходит PDO (PDO –
ятельности на этом не заканчивается – он основывает Portable Distributed Objects – система для распределен-
новую фирму, сыгравшую большую роль в развитии опе- ных вычислений) и NetInfo – программа, шедшая стандар-
рационных систем, а впоследствии и самой компании тно с NeXTSTEP.
Apple, так что вкратце о стремительном развитии ком- В июне 1995 NeXT выпускает NeXTSTEP 3.3J и EOF
пании NeXT. 1.1J – японские версии программного обеспечения.
20 декабря 1996 года Apple выкупает NeXT за 400
Создание компании миллионов долларов. Впрочем, некоторые утверждают
Джобс с помощью семи сооснователей, покинувших Apple обратное. Загадочная картина на официальном сайте
вместе с ним, в 1985 году создает компанию NeXT Inc. предшествовала анонсу. В любом случае, это уже дру-
(позже преобразованную в NeXT Computer Inc.) с устав- гая история, которая начинается 24 марта 2001 года с
ным фондом в 7 миллионов долларов. выходом Mac OS X.
Стив Джобс посещает большинство американских уни-
верситетов в поисках интересных технологий, так, в Уни- Возвращение основателя
верситете Карнеги Милона он знакомится с Avie Tevanian, 20 декабря 1996 года Стив Джобс возвращается в род-
работающим над ядром Mach. ную компанию, что последней идет только на пользу.
Adobe и NeXT начинают совместную разработку Display Стив продолжает политику оригинального дизайна
PostScript, базу будущей системы NeXTSTEP. В 1987 году корпуса машины (машины NeXT были «упакованы» в
NeXT создает завод, способный выпускать 150’000 ком- весьма стильный черный корпус) и доводит ее до логи-
пьютеров в год (всего NeXT за всю свою историю собра- ческого завершения: с момента своего зарождения
ла 50’000 компьютеров). «Маки» по праву считались самыми простыми и понят-
12 октября 1988 Стив Джобс организовывает шоу в ными в использовании.
Сан-Франциско, демонстрирует все возможности новой Политика Стива Джобса основывается на том, что ком-
элегантной машины NeXTcube (с магнитооптическим дис- пьютер не должен более восприниматься как нечто слож-
ком на 256Mb, 68030 процессором, без жесткого диска и ное, скорее, как еще одна часть интерьера, бытовой тех-
привода для дискет) и системы NeXTSTEP (версии 0.8). ники. Именно этим обуславливается исключительный ди-
18 сентября 1990 Стив Джобс устраивает новое шоу в зайн корпусов последних компьютеров (самый яркий при-
Сан-Франциско для презентации новой машины и новой мер – iMac) от Apple, а также серия программ, начинаю-
системы NeXTSTEP 2.0. Эта дата считается датой офи- щихся с буквы «i» (iTunes, iMovie, iDVD, iPhoto) – идеоло-
циального выхода компьютера NeXT. гия простых программ. Apple видит компьютер как про-
Tim Berners-Lee, работающий в CERN, разрабатывает стое, но в то же время весьма мощное средство для вы-
первый веб-клиент (браузер) для NeXTSTEP. полнения любых задач любыми пользователями.
25 апреля 1991 Стив Джобс организовывает шоу в
CNIT в Париже, приуроченное к официальному выходу Macintosh: каков создатель,
компьютеров NeXT во Франции. таков и компьютер...
Были произведены многочисленные демонстрации Маки – творение фирмы Apple под четким руководством
машин NeXT и NeXTSTEP2. В частности, Джобс показал Стива Джобса – человека, благодаря бешеной энергии
таблицы Lotus 1-2-3, работающие через эмулятор SoftPC, которого и была создана эта «яблочная фирма». Крат-
после чего, заметив, что можно сделать и лучше, проде- кой характеристикой Джобса может служить такое опи-
монстрировал революционную программу для работы с сание: самоуверенный, немного эгоистичный и, несом-
таблицами – Improv. Также была продемонстрирована ра- ненно, талантливый харизматичный лидер. Однако со-
бота графической подсистемы. здателем первого Мака был друг Джобса – Стив Возняк,
Вышедшая 25 мая 1993 года на NeXTWORLD Expo, талантливый хакер (в изначальном значении этого сло-
операционная система NeXTSTEP 3.1 была первой вер- ва) по натуре достаточно спокойный, оригинальный и ве-
сией NeXTSTEP, работающей на машинах, отличных от селый человек. Пожалуй, именно эти качества можно
NeXT, – на PC 486. Версия NeXTSTEP 3.1 для PC называ- найти в Маках до сих пор. Каждая машина по-своему
лась NEXTSTEP 486. оригинальна, имеет свои достоинства и недостатки. Кро-
23 ноября 1993 года Sunsoft объявляет о лицензиро- ме того, основным преимуществом фирма Apple может
вании части кода NeXTSTEP для будущего использова- считать по праву тот факт, что можно взять любого че-
ния в операционной системе Solaris. NeXT, в свою оче- ловека с улицы, посадить его за Макинтош и через 15-
редь, анонсирует порт NeXTSTEP на компьютеры на плат- 20 минут он уже сможет выполнять большинство необ-
форме SUN – SPARC. ходимых функций. Однако это уже операционная систе-
Сразу же после этого соглашения SUN инвестирует ма, а о ней разговор отдельный.
Операционные системы от Apple область памяти. Такой подход может показаться кому-
то странным, однако он работал более 10 лет, и до сих
Mac OS 9 (Classic) пор большинство «макузеров» (от англ. – macintosh user)
На Маках от рождения могут «бегать» две операционные не собираются покидать свою любимую систему, обосно-
системы – Mac OS X и Mac OS 9 – это родное. Впрочем, вывая свое решение просто и лаконично: «Нам и здесь
последнее творение Apple упорно пытается вытеснить с неплохо». Впрочем, их можно понять: «девятка» очень
рынка своей более новой системой («десяткой»). простая и гибкая система в отличие от «десятки», в ос-
Приживить на Мак можно любую систему, работаю- нове которой лежит Unix. Этот факт мало кому нравится
щую на процессорах PowerPC, а это как минимум Linux, из всех ветеранов Мака, зато очень привлекает пользо-
OpenBSD, NetBSD, QNX, однако в родной системе, по- вателей Unix-систем...
моему, есть своя прелесть и менять ее особого смысла я
не вижу. Mac OS X
Итак, в арсенале компании Apple существует две опера- Итак, «десятка». Мое знакомство началось с Mac OS 9.2.2,
ционные системы: Mac OS 9 и Mac OS X. Первая из них сей- и эта система своим устройством успела достаточно силь-
час именуется классикой, точнее, это более ранняя систе- но меня расстроить, и, возможно, не писал бы я этих строк
ма, не использующая таких прелестей жизни, как защита (с некоторым агитационным оттенком), если бы не попа-
памяти и вытесняющая многозадачность. лось бы на мои глаза новое творение «яблочников» –
В одном из описаний этой системы я встретил хоро- Mac OS X (10.2, известная также как Jaguar). Тут уже есть
шую аналогию: Mac OS 9 предполагает, что все програм- о чем рассказать.
мы дружески относятся друг к другу и к пользователю,
и, кроме того, грамотно написаны. Если кто-то «заявля- Устройство системы Mac OS X
ет», что ему и только ему нужны все ресурсы процессо- «Десятка» – достаточно оригинальная система. Системную
ра, причем прямо здесь и сейчас, то система предоста- архитектуру у Mac OS X проще всего представить в виде
вит эти ресурсы. В свое время святой обязанностью про- многослойного пирога. На первом уровне находится мик-
граммы является «отдать» все позаимствованное, как роядро Mach, над ним находится Darwin, далее Core
только это более не будет нужно, и не «лезть» не в свою Services, Application Services. Над ними еще два уровня:
72
образование
Carbon и Cocoa. На самом верху – собственно программы. сколько грубым) определением будет следующее: Mach –
Итак, рассмотрим каждый из этих подуровней отдельно. это ядро, системный уровень; Darwin – это оболочка для
пользователя со всеми его приложениями.
Микроядро Mach Такая структура устройства системы пошла с 4.4BSD
Микроядро отвечает за следующие задачи: Lite – первой свободно-распространяемой в исходных ко-
управление виртуальной памятью (virtual memory); дах *nix-системой, очищенной от кода AT&T – первона-
взаимодействие процессов (IPC); чально, Unix был детищем этой компании, и вышел из ее
поддержка ввода/вывода (I/O) и прерываний; исследовательских лабораторий; вначале коммуникаци-
поддержка взаимодействия аппаратного и программ- онный гигант смотрел на распространение этой системы
ного обеспечения; сквозь пальцы, однако затем, как только была осознана
управление заданиями и потоками (Tasks & Threads). возможная экономическая выгода, все, использующие
код, написанный в AT&T, были вынуждены убрать его под
Подобный подход предоставляет достаточно четкую, угрозой судебного преследования.
понятную и легко портируемую структуру операционной
системы. Модульность системы реализуется через «кли- Core Services, Application Services
ент-серверную» модель – единственным процессом, ра- На этом уровне расположены общие для всей системы
ботающим в защищенном режиме процессора, является компоненты, такие как Core Foundation, Carbon Core, Apple
микроядро – первоочередная задача заключается в том, Events... (уровень Core Services) и Quartz, QuickDraw... (уро-
чтобы переместить максимальное количество кода на вень Application Services). Рассказ о каждом из них выхо-
пользовательский уровень. После загрузки микроядро дит за рамки задачи общего рассмотрения системы, но
предоставляет все необходимые сервисы для работы общее у них одно – все они являются базой для всех при-
серверов, одним из которых является Darwin. ложений системы, да и для системы в частности.
74
образование
машин становилась все менее актуальной, и сервер уже единого графического интерфейса (выбор – это хоро-
обрабатывал подключения с той же машины, на которой шо, но наличие стандарта необходимо);
был запущен и сам. его продуманности (сейчас зачастую интерфейсы либо
Кроме того, архитектура работы с графикой была «мно- копируют коммерческие реализации, такие как
гослойна». После запуска X server запускалось приложе- Microsoft, Apple, Motif, либо не очень ясны для обыч-
ние, позволяющее пользователю взаимодействовать с ком- ных пользователей);
пьютером – Window manager (оконный менеджер) в терми- грамотной реализации (качество кода, стабильность
нологии *nix. Оконный менеджер, в свою очередь, мог за- работы).
пускать дополнительные программы (например, приложе-
ния, отвечающие за рабочий стол, за панель снизу экрана Apple решила выбрать в качестве своей базовой плат-
и другие мелкие приложения, апплеты). Завершение рабо- формы *nix, расширить его под себя и переделать всю гра-
ты оконного менеджера означает выход из X server. фическую систему. Так, одним из нововведений является
Такая многослойность вполне в духе *nix-системы, где формат сохранения данных конфигурации – теперь все на-
множество приложений хорошо выполняют свою работу, стройки хранятся в файлах формата XML, более трудного
а их соединение позволяет получить один хороший резуль- для ручного редактирования, однако родного для «про-
тат. Однако обратной стороной подобной гибкости явля- граммного» хранения данных; кому приходилось редакти-
ется значительная фрагментация системы (что, как пока- ровать файлы конфигурации после того, как по ним про-
зывает практика, может быть хорошо для системы в це- шелся автоматический, дружественный к пользователю
лом, но не для графического интерфейса), а также поте- графический конфигуратор на *nix-платформе, поймет о
ря производительности. чем я, для остальных поясню: в результате подобных кон-
Именно эти факторы и мешают продвижению *nix-си- фигураций оказывается сбита вся логика построения фай-
стемы: ла, в ней нередко остается немало мусора, и далеко не все
отсутствие единой стандартной графической библио- параметры могут быть выставлены корректно.
теки для разработчиков (присутствующей в каждом Кроме того, фирма не может терять наработки про-
дистрибутиве и не меняющейся от версии к версии); шлых лет, в виде большого количества программного
обеспечения, написанного для «классики» (Mac OS до 9 вер- мандами “cd” и “make install”) как графических, так и ра-
сии включительно) и чуть меньшего для NextStep/OpenStep. ботающих из командной строки.
Для этого в новой системе поддерживается два вида Дополняя картину, нельзя не упомянуть продукт под
библиотек – Carbon и Cocoa. Первая из них – для совмес- названием Virtual PC – эмулятор x86 компьютера на Mac
тимости с «классикой», вторая объявлена новой и приори- OS (последняя 6 версия эмулирует Pentium II MMX, такто-
тетной. Для того чтобы старое (для «классики» или удов- вая частота зависит от мощности самого Мака).
летворяющее спецификациями OPENSTEP) программное Таким образом, компании удалось сохранить старых раз-
обеспечение заработало в новой системе, необходимо про- работчиков, а также привлечь новых, среди которых и такие
извести перекомпиляцию с незначительными изменения- ценные «outsource-кадры», как *nix-хакеры и просто пользо-
ми (либо и вовсе без них). Кроме того, в качестве еще од- ватели по всему миру, не требующие оплаты, однако же
ной рабочей среды объявлена среда Java – виртуальная привносящие весьма ощутимый вклад в развитие системы.
машина на Mac OS X считается лучшей реализацией сре-
ди прочих, и достаточно тесно интегрирована с системой. Mac OS X в работе
Не следует забывать и про слой BSD, и X server, кото-
рый компания скоро уже должна выпустить в окончатель- Desktop
ной версии (на данный момент доступна только beta-вер- Что нужно от жизни обычному пользователю? Простота на-
сия). Также не была упомянута возможность запуска стройки, наличие офиса, приложений для работы в Интер-
«классических» приложений, не портированных на новую нете, работа с родным (в нашем случае – русским) языком.
систему. Так что получается, что сейчас, прямо «из ко- Офисных пакета как минимум два: Microsoft Office (ста-
робки» система способна запускать приложения для бильно работающим не замечен) и Open Office. И тот и
«классики», приложения OPENSTEP, Java и огромное ко- другой обеспечивают совместимость с документами, со-
личество *nix-приложений (для чего создан отдельный зданными на «обычных» компьютерах. Причем Office от
проект переноса так называемых портов с FreeBSD на Microsoft снабжен даже большим количеством «фич», чем
Darwin, позволяющих установить приложение двумя ко- его собрат для Windows.
76
образование
Приложения для работы в Интернете Mac OS X Server) в графической версии его настройки
Здесь выбор весьма велик, а имена производителей дос- имеет два варианта работы с трафиком: allow/deny. И в
таточно известны, посему просто приведу название при- том случае, если администратор решит настроить NAT
ложения и имя производителя: (masquerading в терминах других систем), то правила бран-
Браузеры: Internet Explorer (Microsoft), Safari (Apple), Mozilla дмауэра (стандартного ipfw, кстати) придется прописывать
(Open Source), Opera (Opera Software) и многие другие. напрямую в конфигурационных файлах, что требует дос-
ICQ: ICQ (ICQ Inc.), Fire.app (Open Source), Proteus. таточно плотного знакомства с устройством системы.
E-mail: Outlook Express (Microsoft), Entourage (Microsoft), В общем, можно сказать, что сервер под управлением
Mail (Apple). Mac OS X Server имеет смысл ставить туда, где необходи-
ма простота администрирования, возможно, в некоторых
Локализация случаях в ущерб гибкости. С другими системами такой
Системной кодировкой является Unicode, так что все гра- сервер будет жить очень даже недурно (с системой идет
мотно написанные приложения не испытывают никаких samba, nfs, ssh, ftpd и ранее упоминаемый apache), а его
затруднений при работе с любым языком (систему можно обновление производится не более чем 6 нажатиями мыш-
в любой момент заставить «говорить» как на китайском, ки (и не вызывает таких печальных последствий, как ав-
так и на украинском; то же относится к любому приложе- томатическое обновление на другой популярной платфор-
нию, если его разработчик озаботился многоязыковой ме известного производителя ПО), и кроме того, наличие
поддержкой). обновлений может проверяться каждый день/неделю/ме-
Кроме того, перекодировка текста предусмотрена на сяц, и пользователю будет предложено установить имею-
уровне системных вызовов. щиеся обновления.
ОБУЧЕНИЕ ЧЕРЕЗ
ИНТЕРНЕТ –
ЭТО ВОЗМОЖНО?
ОЛЬГА ИГОШИНА
78
образование
Лето. С самого детства это слово согревает душу. В нем Интернет и обучение в Америке:
звучат наполненные солнцем неправдоподобно теплые дол- успешное совмещение
гие дни, душистые ласковые вечера и, пожалуй, главное – В качестве примера, характеризующего положительный
свобода. Свобода принадлежать себе, быть собой, наслаж- опыт педагогов США, расскажу немного о практике комп-
даться жизнью, изумляться ее неповторимости. Не надо боль- лексных обучающих пособий, получившей в Америке ши-
ше каждый день торопиться на лекции, сдавать экзамены. рокое распространение. Суть ее заключается в том, что
И пусть многим из нас уже нельзя провести все лето в донесению информации служит не просто отдельный учеб-
счастливом ничегонеделании, пусть многие работают, и уда- ник, но и интернет-сайт, сопровождающий информацию,
стся ли вырваться в отпуск – неясно. Все равно слово «лето» данную в учебнике, практическим материалом.
еще хранит на себе отблески юношеской беззаботности. Для примера возьму крупнейшую американскую груп-
Но, к сожалению или к счастью, все проходит. Лето пу издателей учебной литературы – Thomson Learning
закончится, и загоревшие и еще чуть-чуть повзрослев- (www.thomson.com). Понятно, что в Америке, стране боль-
шие юноши и девушки начнут вновь втягиваться в уче- ших возможностей и очень дорогого образования, учеб-
бу, в ежедневные посещения своих школ, колледжей, ников действительно много. Это богатый рынок с жёст-
университетов. кой конкуренцией, и подавляющее большинство учебных
Увы, приходится признать, что, несмотря на многие и материалов подготовлено на хорошем теоретическом и
весьма значительные достоинства бывшей советской си- выполнено на отличном полиграфическом уровне. И тут в
стемы образования, учиться у нас (особенно в вузах – это игру вступает такое весомое конкурентное преимущество,
становится все заметнее по мере взросления) не всегда как поддержка обучения через Интернет.
интересно. Едва ли не большинство выпускников россий- Покупает, допустим, студент учебник по математике,
ских институтов и университетов сохранили воспомина- в этом учебнике находится PIN-код. Зайдя на определен-
ния о томительно тянущихся лекциях, нудных объяснени- ный сайт в Интернете и воспользовавшись этим кодом,
ях, казенным языком написанных учебниках. Смысл упор- он будет уже не просто листать учебник, а в соответствии
но ускользает от тебя, и чувствуешь, что отстаешь от ку- с содержанием каждой главы решать задачи, проходить
рьерского поезда, уносящего вперед мысль преподава- тесты, смотреть интерактивные модели. Все его резуль-
теля. А как результат – напряженные семинары, непонят- таты будут автоматически проверены и учтены, а если с
ные лабораторные работы, нервная сдача экзаменов. В какой-то темой возникнут затруднения, то он может по-
итоге основная цель учёбы – сохранить требуемые све- практиковаться; изучить пошаговый разбор задач с под-
дения в голове до зачета или экзамена. А потом благопо- робными объяснениями; проделать столько сходных за-
лучно забыть. Начисто. даний, сколько необходимо, для того чтобы понять алго-
И студентов ведь можно понять. Они прекрасно видят, ритм решения; еще раз проверить свои силы в тестах.
что слишком часто преподаваемые знания не имеют прак- Очевидно, что это и удобно, и эффективно.
тической ценности, что жизнь, общество, наука давно Группа Thomson Learning и создала проект ВСА (http:/
ушли вперед. /bca.brookscole.com) с целью использовать преимущества,
Нынешняя политика модернизации российской обра- предоставляемые повсеместным распространением «па-
зовательной системы в целом ориентируется на общеми- утины». Проект – это та самая комплексная интернет-си-
ровой и, в частности, на американский опыт. Многие этим стема дистанционного обучения, интегрирующая обуче-
недовольны, ведь не однажды уже было сказано о пре- ние, тестирование и систему управления курсами. Очень
имуществах российского образования по сравнению с важно, что содержание проекта опирается именно на ма-
американским. Дескать, и четкой системы у них в препо- териалы учебников, издаваемых компанией.
давании нет, и учатся студенты за оценку, и широкого Все учебные материалы по университетским курсам –
кругозора такое высшее образование не дает. теория, тесты, задачи, задания сервера коррелируются с
Спорить не буду, недостатки есть, и весьма значитель- определенной темой, главой или вопросом одного из учеб-
ные. Но если вспомнить, что американский диплом счи- ников, на основании которых и строится программа учеб-
тается одним из самых востребованных и престижных во ного заведения. Система используется в колледжах и уни-
всем мире, становится понятно, что все-таки здесь есть верситетах Америки, как для поддержки обычного очно-
что перенимать и использовать. США на данный момент го учебного процесса, так и для дистанционного обуче-
– безусловный лидер по использованию современных ин- ния. Ежедневно сервер посещают свыше 50 000 пользо-
формационных технологий и Интернета в образовании. вателей примерно из 300 учебных заведений по всем
Использование новейших достижений и разработок по- Соединенным Штатам. В число вузов, пользующихся
зволяет американским студентам спокойно учиться и де- именно этой системой, входят такие известные универ-
лать это с комфортом. Они могут сдавать тесты, делать ситеты, как MIT (Massachusetts Institute of Technology) и
домашние задания, где и когда им удобно, повторять не- The University of Texas в Остине.
понятные темы и изучать новые в тех объемах, в каких Понятно, что популярность эта не случайна и говорит,
это необходимо им для понимания. Преподаватели с при- скорее всего, о реальных преимуществах такой системы.
менением того же Интернета могут проводить постоян- Кратко опишу самый простой и, пожалуй, самый распро-
ный мониторинг успеваемости своих учеников, что не дает страненный метод использования возможностей серве-
закостенеть системе преподавания, а студентам – безна- ра. Преподаватель заходит на сайт и, введя свой PIN-код
дежно отстать. (указанный, например, в учебнике или методическом по-
собии), создает свою страничку (при этом не требуется вания, что поняли его ученики из объяснений, он тоже
даже регистрироваться). Используя обширнейшую тесто- сможет лишь по окончании учебного курса. В этом вопро-
вую базу (свыше 200 тысяч тестов, задач, заданий по раз- се стандартная ситуация в вузе США весьма схожа с рос-
личным предметам), он формирует задание в соответ- сийской, но найден удачный способ ее разрешения: в те-
ствии с изучаемой темой и своими представлениями о чение семестра регулярно проводятся тестирования, пре-
методике обучения. Ссылку на задание он рассылает сво- подаватель отслеживает усвоение сложных тем и коррек-
им студентам, и они его выполняют в режиме он-лайн. тирует чтение курса с успеваемостью аудитории. В дан-
Результаты автоматически проверяются системой, зано- ном случае именно наличие интернет-поддержки вовле-
сятся в электронный журнал успеваемости и высылаются кает студента в сам процесс обучения.
преподавателю. Так как использование ресурсов серве- Основным средством мониторинга успеваемости в
ра предельно упрощено, сложно даже подсчитать точно, американских школах, колледжах и университетах тра-
сколько преподавателей из скольких университетов ежед- диционно служат тесты. Обычно используются два ос-
невно прибегают к помощи ВСА. новных вида тестов: true/false (да/нет) и multiple choice
Что и говорить, студентам такая форма обучения тоже (выбор из нескольких альтернатив). Американские сту-
очень удобна. Можно изучать нужную тему в индивиду- денты называют тесты вида true/false «угадайкой» и по
альном режиме, выполнять задания в любом месте и в понятным причинам любят их значительно больше, чем
удобное время. Самостоятельно решать, моделировать, multiple choice, в которых угадать сложнее и требуется
конструировать и чертить всегда гораздо интереснее, чем что-то знать по теме.
читать или пассивно присутствовать на лекции. Понятно, что и списывать при тестировании значитель-
В американских университетах семинарская форма за- но легче, поэтому большинство заданий в банке тестов
нятий вообще не принята, как это ни удивительно для нас. сервера составляют алгоритмические задачи. Это зада-
Их обучение – это, как правило, только лекции, и со мно- чи, в условиях которых все числовые значения генериру-
гими своими студентами преподаватель встречается во ются случайным образом из заданного определенным
время экзаменационного тестирования в конце семест- алгоритмом множества. И каждый студент в одинаковых,
ра. И судить о том, насколько удачна его манера препода- по сути, заданиях получает разные исходные цифры, со-
80
образование
ответственно, и ответ у каждого получится свой. При этом матической формулы студентом, работающим он-лайн с
правильность решения проверяется компьютером, а зна- использованием визуального редактора формул. Впервые
чит, у преподавателя не возникает дополнительный объем реализованы интерактивные приложения, позволяющие
работы по проверке множества разных вариантов. студентам вводить ответы в виде графиков, в том числе и
Получается, что студент, решая задачи определенно- трехмерных, химических формул, эскизов, логических
го типа, каждый раз видит новые численные значения, а выражений и просто развернутых текстовых ответов. Так-
компьютер никогда не устает их проверять. Удобны алго- же есть задачи, где ответы нужно вводить в виде форму-
ритмические задачи и для работы офф-лайн: например, лы, таблицы, выбирать из списка вариантов, конструиро-
преподаватель может распечатать задания для всей ауди- вать из имеющихся деталей. Многие типы задач проверя-
тории, и в одинаковых задачах во всех вариантах будут ются системой автоматически, она же заносит результа-
разные числовые значения. ты в электронный журнал успеваемости.
Помимо алгоритмических заданий ВСА применяет в
своих тестах и другие, сложные и очень интересные раз- Приживется ли интернет-обучение
работки. Нововведением стала гораздо более разно- в России?
образная система тестирования. И если в большинстве Понятно, что эти непривычные большинству из нас инте-
своем школьники и студенты при обучении сталкива- рактивные формы обучения исключительно удобны и
ются с тестами лишь двух основных видов, то в ВСА практически полезны для обеих сторон, штурмующих бар-
это количество значительно больше – их около 40. Мож- рикады под названием «получение высшего образова-
но сказать со всей определенностью, что тестирующая ния». Преподаватели добиваются понимания и интереса
система сервера не имеет аналогов во всем мире по к своему предмету, студенты же (говорю именно о сту-
целому ряду очень важных критериев обучения и мо- дентах, а не об откровенных «халявщиках») хотят выу-
ниторинга. Это и широкий выбор типов вопросов и за- чить с минимальными затратами сил и времени, все сдать,
дач, и реализованные возможности компьютерного вво- получить корочку и влиться во взрослую жизнь. И все эти
да ответов студентами. задачи могли бы решить (пусть частично) новые интерес-
Впервые разработан принцип свободного ввода мате- ные методики обучения.
Самое же, пожалуй, важное, что для того, чтобы взять формулу можно ввести разными способами, например,
на вооружение все эти технологии, не нужно никого при- поменяв порядок слагаемых или помножив и разделив на
глашать, перенимать опыт, создавать команды програм- одно и то же число.
мистов и т. д. Все эти разработки для ВСА на протяжении Именно в российской компании была разработана тех-
уже четырех лет выполняет российская компания – нология, которая, обладая дружественным, интуитивно
ФИЗИКОН (http://www.physicon.ru/) – разработчик учебных понятным студенту интерфейсом для ввода формул, по-
компьютерных программ для средней и высшей школы. зволяет компьютеру «распознавать» формулу, оценивать
Ее интерактивные учебники вошли в Федеральный набор по своей собственной логике правильность ответа, кото-
электронных учебников и были поставлены в 40 000 школ рый может быть введен разными способами.
России. Компания успешно завершила свыше 40 проек- Программисты компании создали уникальный инстру-
тов по разработке программного обеспечения для зару- ментарий для введения в систему свыше 50 видов задач
бежных заказчиков. и тестов. За время сотрудничества с Thomson Learning
В России разрабатывают как программное обеспече- была сформирована большая группа редакторов матема-
ние, так и интерактивные учебные материалы для амери- тических задач, которые алгоритмизировали около 120
канского сервера. Около 70% его уникального в масшта- тысяч задач. Большинство редакторов – студенты и аспи-
бах всего мира содержания создано именно российскими ранты Московского физико-технического института, их
разработчиками. При работе над системой наши програм- фундаментальное образование позволяет им быстро ори-
мисты использовали значительное количество своих соб- ентироваться в предметах и алгоритмах.
ственных наработок и технологий и внесли в разработку
сервера существенный интеллектуальный вклад. Тестирование ВСА в России
Например, одна из задач была такова: студенту, рабо- Весной этого года компанией был проведен очень ин-
тающему он-лайн, в процессе ответа на вопрос надо вве- тересный эксперимент, немаловажный в отношении об-
сти сложную формулу, содержащую степени, квадратные суждаемой темы. В течение недели в Лицее Информа-
корни и т. д. К тому же сложность была в том, чтобы ком- ционных Технологий г. Москвы тестировалась очеред-
пьютер смог автоматически проверить правильность та- ная версия ВСА.
кого ответа. Трудность такой задачи очевидна, так как За эту неделю в тестировании приняло участие девять
82
образование
классов трех специализаций обучения – «менеджеры», Происходило все так: школьники приходили в компь-
«дизайнеры» и «программисты». Всего было задейство- ютерный класс и обнаруживали, что вместо урока инфор-
вано около ста учеников. матики они сейчас будут проходить тест по математике, а
Мероприятие преследовало несколько целей: точнее, работать в трех разных учебных режимах. Пер-
выявить особенности сервера, затрудняющие его ин- вый режим – «Практика» – позволяет проходить тест
туитивное использование; сколько угодно раз и сразу проверять, был ли правиль-
решить, пригодна ли система для использования в ным ответ на вопрос. Второй – «Опрос» – позволяет ре-
России. шать тест три раза, правильный ответ ученик видит толь-
ко после того, как выполнит весь тест до конца.
Очевидно, что при разработке столь сложной систе- И наконец, третий режим – «Экзамен» – разрешает
мы возможны различные ошибки и/или недостатки сер- только одну попытку, а уж о ее результатах сообщит учи-
вера (его интерфейса, системы регистрации, заданий, тель. В каждом тесте учащимся предлагалось 12 задач,
системы ввода ответа и т. д.), которые затрудняют его на прохождение всех трех видов теста отводилась одна
продуктивное использование, интуитивно не ясны и оза- пара (два урока).
дачивают пользователя. Необходимо учитывать, что все Нельзя сказать, что всем ученикам пришлась по душе
задачи, созданные для ВСА, формулируются, естествен- перспектива два урока подряд решать задачки. Но боль-
но, на английском языке и к тому же программы обуче- шинству все же становилось интересно разобраться с чем-
ния в США и России сильно отличаются. Так что учите- то новым. Ученики регистрировались в системе и прохо-
лям лицея совместно с сотрудниками компании-разра- дили поэтапно все виды тестов. На возникавшие по ходу
ботчика пришлось основательно потрудиться, чтобы вопросы тут же отвечали сотрудники ФИЗИКОНа, пере-
сформировать тесты по математике, которые по содер- вод заданий раздавался всем желающим в распечатан-
жанию задач не вызвали бы больших проблем у учащих- ном виде, а непривычные для российского школьника
ся. Самым важным все же было протестировать систе- математические обозначения были выписаны на доске.
му, а не знания учеников. В процессе тестирования за реакцией школьников вни-
84
сети
POWERLINE:
ИНТЕРНЕТ
ИЗ РОЗЕТКИ
ДЕНИС КОЛИСНИЧЕНКО
86
сети
Все, кто хотя бы один раз в жизни прокладывал сеть Среднескоростной обмен (Medium baud rate) – пред-
собственными руками, скажут, что это занятие не из назначен для передачи информации на средние рассто-
приятных. Одно дело – проектировать сеть, совсем дру- яния – до двух-трех километров. При этом максималь-
гое – заниматься монтажом оборудования и проклады- ная скорость передачи данных в этом режиме составля-
ванием кабелей. Конечно, когда все компьютеры нахо- ет 50 Кб/с, а минимальная – 0,05. В принципе, если поду-
дятся в одной комнате, особых проблем с кабелем, как мать, 50 Кб/с – это не так уж и мало, если учесть, что
правило витой парой, не возникает. Но когда нужно существующие линии телефонной связи, особенно ана-
объединить в сеть два, три, четыре, пять или более эта- логовые, еле обеспечивают надежную передачу данных
жей, невольно начинаешь думать: «Кто бы за меня все на скорости 33,6 Кб/с. Мой модем, подключенный к ана-
это сделал?». логовой АТС, работает по такому сценарию: сначала под-
Конечно же Powerline! Powerline Communications – это ключается на скорости 33,6 Кб/с, затем (минут через 15-
семейство технологий связи, использующее в качестве 20) сбрасывает скорость до 28,8 Кб/с, потом скорость то
физической среды передачи информации существующую понижается (до 21 Кб/с), то повышается (до 28,8 Кб/с).
сеть электропитания (220В или 120В). Низкоскоростной обмен (Low baud rate). Обеспечива-
Выходит, чтобы объединить в единую сеть целый жи- ет передачу данных на расстояние более 10 километ-
лой дом, не нужно прокладывать кабели, монтировать ров. Максимальная скорость передачи – 0,05 Кб/с.
различные сетевые устройства и заботиться о том, что- Данный режим будет полезен для передачи какой-ни-
бы однажды ночью они не исчезли вместе с кабелем. будь служебной информации небольшого объема.
Среда передачи данных уже есть – это обычная элект-
ропроводка. И количество этажей не играет особой роли. Как подключиться к электросети?
Удобно? Еще бы. Кроме этого, мы получаем еще одно Предположим, что у нас есть самый обыкновенный ком-
преимущество: безопасность передачи данных – пере- пьютер, снабженный самым обыкновенным Ethernet-адап-
хватить данные в электросети не так уж просто, если тером (имеется в виду FastEthernet). Как можно его под-
сравнивать с обычной Ethernet-сетью. К тому же исполь- ключить в PLC-сеть? Неужели прямо в розетку? Почти:
зуется аппаратное шифрование потока данных, о кото- для подключения компьютера к электросети использует-
ром мы поговорим позже. ся специальный адаптер – Powerline to Ethernet adapter.
Вам мало одного дома? Вы хотите подключить еще Вот он-то и подключается к электросети, а Ethernet-адап-
один? Технология Powerline позволяет передавать дан- тер подключается к нему. На рисунке 1 изображен при-
ные на расстояние до десяти километров. Естествен- мер небольшой домашней сети, состоящей из трех ком-
но, если мы что-то приобретаем, то нужно что-то от- пьютеров, использующей технологию Powerline.
дать взамен. В нашем случае мы жертвуем скоростью
передачи. Если объекты находятся на расстоянии бо-
лее двух километров, скорость передачи данных пада-
ет до 0,05 Кб/с (максимум 50 Кб/с). Поэтому для связи
удаленных объектов целесообразнее использовать дру-
гие технологии, например RadioEthernet.
Скорость передачи
данных и расстояние
В зависимости от расстояния между объектами изменя-
Ðèñ. 1. Ïðèìåð íåáîëüøîé ñåòè ñ èñïîëüçîâàíèåì
ется скорость передачи данных: òåõíîëîãèè Powerline.
Высокоскоростной обмен (High baud rate). В этом ре-
жиме обеспечивается передача данных на расстоя- Один из компьютеров подключается непосредствен-
ние до нескольких сотен метров. Скорость передачи но к среде передачи данных, то есть к электропроводке,
данных обратно пропорциональна расстоянию, мини- используя адаптер Powerline to Ethernet. На данном ком-
мальная скорость передачи в высокоскоростном ре- пьютере должен быть установлен интернет-адаптер. Дру-
жиме – 100 Кб/с, максимальная – 14 Мб/с (практи- гие два компьютера подключены в нашу домашнюю сеть
чески никогда не достигается). Данный вариант иде- через самый обыкновенный интернет-коммутатор (switch),
ально подходит для создания небольшой SOHO-сети который, в свою очередь, подключается к электросети с
(Small Office – Home Office) или объединения в одну помощью адаптера Powerline to Ethernet. Далее, к одному
сеть компьютеров друзей, живущих в одном доме. из компьютеров подключен модем. Если правильно на-
Однако подключить сразу все желаемые PLC-уст- строить программное обеспечение, этот компьютер будет
ройства не получится: может не хватить полосы про- выступать в роли интернет-шлюза и все компьютеры по-
пускания, а она для PLC-устройств составляет не лучать доступ к Интернету.
более 10 Мб/с. Да, видео в реальном времени пере- На вашем компьютере нет сетевой платы? Не беда:
давать не получится, но для передачи файлов с при- кроме адаптера Powerline to Ethernet существуют адапте-
емлемой скоростью вполне хватит. О максимальной ры Powerline to USB, позволяющие использовать USB-порт
скорости, а также о полосе пропускания мы еще по- компьютера вместо сетевой платы. Такой адаптер целе-
говорим чуть позже. сообразнее использовать на одиночных компьютерах, как
Устройства производства
Planet Technology
Рассмотрим два устройства производства Planet
Technology:
Powerline to Ethernet converter (PL-101E)
USB to Powerline Network Adapter (PL-101U)
Примечание: в таблице 1 указана приблизительная
Первое устройство позволяет подключаться к элект- цена, которая может измениться в зависимости от раз-
росети с помощью сетевого адаптера, а второе представ- личных факторов.
ляет собою сетевой адаптер, подключаемый к USB и спо-
собный работать по электросети – такой себе набор 2 в 1. Тестирование
Устройства представлены на рисунках 2 и 3 соответ- К сожалению, у меня не получилось раздобыть все пере-
ственно. численные в таблице 1 устройства, поэтому ограничимся
теми, что были: Powerline to Ethernet converter (PL-101E) и
USB to Powerline Network Adapter (PL-101U).
Установка устройства происходит без проблем. USB-
адаптер операционная система Windows 2000 определи-
ла как Safely Remove Hardware, после чего был проин-
сталлирован драйвер с компакт-диска.
Ðèñ. 2. Powerline to Ethernet converter (PL-101E). Ethernet-устройства вообще не требуют никакого драй-
вера, нужно только изменить пароль по умолчанию (обыч-
но это слово «HomePlug»). Напомню, что пароль должен
быть одинаковым на всех PLC-устройствах.
На прилагаемом компакт-диске также находилась про-
грамма конфигурации, позволяющая изменить парамет-
ры устройства, а также оценить скорость передачи дан-
Ðèñ. 3. USB to Powerline Network Adapter (PL-101U). ных между устройствами.
Оба устройства поддерживают спецификации Несмотря на то что заявленная максимальная скорость
HomePlug PowerLine Alliance v1.0 и USB Spec 1.1. Основ- передачи данных равна 14 Мб/с, на практике она состав-
ные технические характеристики: ляла 5-6 Мб/с.
Максимальная скорость до 14 Мб/с; При передаче файла объемом 10 Мб наилучший ре-
Для надежности передачи данных используют кодиро- зультат был следующим: 5, 55 Мб/с. Всего было сделано
вание с ключом 56 бит (DES); 10 попыток в идеальных условиях: оба устройства нахо-
Максимальное расстояние – до 90 м; дились в пределах одной квартиры, и не было включено
Метод сетевого доступа – CSMA/CA (Carrier Sense ни одно устройство, способное создавать помехи – даже
Multiple Access with Collision Avoidance – метод коллек- холодильник был временно отключен.
тивного доступа с избежанием коллизий); При включении водонагревателя, холодильника и мик-
Поддержка QoS (Quality of Service, IEEE 802.3u); роволновой печи скорость передачи этого же файла со-
Полоса занимаемых частот для обмена данными: 4,3 – ставила 3,14 Мб/с. Очень даже неплохо, учитывая, что
29,9 Mhz; сигнал преодолел сопротивление в 70 Ом и несколько
Схема модуляции – OFDM, прямая коррекция ошибок автоматов-выключателей.
(FEC, Forward Error Correction). В отличие от PLC-устройств типа HomePlug, существу-
ет еще один тип подобных устройств – HomePNA, позво-
Стоимость каждого устройства – около $130. ляющий для передачи данных использовать обычные те-
Примечание: 56-битная система шифрования окажет- лефонные линии. А что если подключить наши HomePlug
88
сети
(PLC)-устройства к телефонной линии? Они работают, несколько компьютеров друзей, находящихся в одном
причем их работа оценивается утилитой мониторинга как доме, лучшим выбором окажется Powerline. А если объек-
«Excellent», то есть с максимальной скоростью. В то же ты находятся на расстоянии более 1 километра, исполь-
время мы можем набрать номер и нормально разговари- зовать Powerline вряд ли целесообразно: при таком рас-
вать по телефону – качество голосовой связи не постра- стоянии скорость передачи данных будет очень низкой.
дало. Теоретически можно подключить PLC-устройства и Используемое 56-битное шифрование DES создает до-
к радио, то есть к ретрансляционной сети. Однако я не полнительный барьер при перехвате информации. Также
стал этого делать. стоит отметить, что шифрование выполняется на аппа-
В начале статьи мы акцентировали внимание не толь- ратном уровне, и вам не нужно заботиться о различных
ко на удобстве, но и на надежности. Мол, самые надеж- программных средствах для шифрования трафика, как в
ные и самые безопасные... Неужели нет способа «зава- случае с Ethernet-сетью.
лить» PLC-сеть? Способ есть: соедините сетевым кабе- Стоимость Powerline-устройств на сегодняшний день
лем два устройства Ethernet to PL и увидите, что будет. пока высока. Например, чтобы объединить в сеть два ком-
Если боитесь экспериментировать, скажу, что в резуль- пьютера, вам понадобится минимум $200. При использо-
тате блокируется работа всех устройств в подсети. вании FastEhternet вам понадобятся всего лишь два сете-
вых адаптера ($5-10 каждый) и до 100 метров витой пары
Выводы пятой категории (от $20 за 100 метров). Как известно, если
Теперь подытожим все вышесказанное. Powerline-устрой- нужно соединить сетью два компьютера, можно обойтись
ства являются самыми удобными в плане внедрения в уже без концентратора/коммутатора, поэтому итоговая сто-
существующую среду передачи информации – электро- имость такой сети 40-50 долларов: в четыре раза ниже,
сеть. В отличие от устройств HomePNA, использующих чем стоимость Powerline-сети. Однако в FastEthernet мы
для передачи информации телефонные кабели, PLC-уст- не учли стоимость прокладки кабеля (если вы будете за-
ройства являются более удобными, поскольку телефон- ниматься этим сами, то стоимость будет определяться вре-
ный провод есть не в каждой комнате, а вот розетка на- менем, потраченным на монтаж такой сети) и возможно-
верняка найдется. го ремонта помещения, если придется прокладывать ка-
Хотя заявленная пропускная способность 14 Мб/с, на бель через стену.
практике она составляет 6 Мб/с, это не так уж и мало. Кроме стоимости ограничивает распространение PLC-
Сравнивать PLC-устройства с сетью FastEhternet не сто- устройств максимальная полоса пропускания. Да, мы
ит – они находятся в разных весовых категориях. Гораздо можем объединить в сеть компьютеры, которые располо-
корректнее сравнивать Powerline-устройства с жены на разных этажах и даже в разных подъездах (если
RadioEthernet и другими беспроводными сетями. Что луч- это жилой дом), но мы не можем объединить в сеть все
ше – RadioEthernet или Powerline сказать однозначно тоже компьютеры, находящиеся в одном доме. Ограниченная
нельзя: это зависит от того, как вы хотите использовать полоса пропускания не позволяет работать с относитель-
данные технологии. Если вы хотите объединить в сеть но высокой скоростью более чем 10-15 PLC-устройствам.
ПЛАНИРУЕМ
ПЕРЕЕЗД СЕТИ
90
из личного опыта
Создание сети сродни волшебству. В самом начале на
Переезд – это не только головная боль, но и взгляд непосвященного у вас будет лишь куча коробок с
два-три вусмерть уставших сисадмина... запакованными железками. Затем эти железки будут рас-
ставляться, включаться, вы будете с таинственным видом
всматриваться в мигающие огоньки и священнодейство-
вать, производя непонятные пассы руками и произнося
магические заклинания. И потом симпатичные секретар-
ши будут шептаться между собой, вспоминая, что делал
этот приличный с виду человек у них под столом…
Мне недавно повезло: довелось поучаствовать в со-
здании сети с нуля на два офиса для фирмы в 300 чело-
век. После привлечения всех необходимых доказательств
о невозможности переезда «просто так», был дан карт-
бланш на производимые работы и покупку необходимого
оборудования. В этой статье я хочу поделиться тем, как
происходил весь процесс. Я намеренно опущу название
фирмы, подвергшейся моему «консультантству», не буду
рекламировать фирму-поставщика СКС и телефонной
станции. В общем, кто знает, тот догадается. А кто не зна-
ет, тому ничего не поможет…
Этап первый
И что мы будем с этим делать?
На тот момент вся фирма ютилась в небольших комнатах
рядом с арендуемым складом. Было тесно, душно и не-
удобно перед клиентами. Наконец размер финансовых
запасов совпал с амбициями директора по размещению
и был назначен переезд. Переезд работников предпола-
гался в строящийся бизнес-центр. Одновременно на ок-
раине города снималось просторное помещение под
склад. Переезд должен осуществиться с минимальными
потерями во времени. Таковы простые условия, постав-
ленные нам директором.
С трудом утихомирив радость местного сисадмина по
поводу переезда («Наконец-то я выкину эти каджуны!» –
кто знает, тот понимает, для остальных поясню: речь идет
о Lucent Cajun), я усадил его и спросил о том, что будет
переезжать и куда. Если на вопрос про список техники,
которая подвергнется переезду, он ответил довольно бод-
ро, то на вопрос про место переезда он не смог ничего
внятно сказать. Пришлось сесть и накидать небольшой
план по работам, которые необходимо выполнить до изу-
чения прайсов. План получился примерно таким:
Из чего состоит компьютерная и телефонная сеть фир-
мы сейчас?
Что поедет в бизнес-центр, а что – на склад?
Как будет сделана сеть в бизнес-центре и как – на
складе?
Как центр и склад будут связаны между собой?
Как будет происходить процесс переезда?
Этап второй
«Я знаю, здесь будет город-сад»
Первая проблема, которая возникла перед нами – это ут-
вержденный план размещения, в котором никак не про-
ВЯЧЕСЛАВ КАЛОШИН сматривалось «уголка сисадмина». Проблема решилась
92
из личного опыта
Например: Алексей Алексеевич имеет внутренний номер Наклейки изготовляли очень просто: печатали цифры
34 и работает в бухгалтерии. После переезда на новое мес- на бумаге, вырезали и приклеивали под скотч. Такой рас-
то ему можно будет позвонить, просто набрав 34 и подож- писанный по пунктам план очень помог при неразберихе,
дав пару секунд. Однако у него появится и другой номер: неизбежно возникающей при переезде. Когда ответствен-
2034. При переходе, скажем, в юридический отдел, у него ный за перевозку звонил и спрашивал: «А чего куда вез-
сменится номер на 1034. В итоге любому по номеру будет ти?» просто говорилось: «Идешь к нам, берешь листок и
понятно, где работает человек и исчезает путаница с номе- начинаешь танцевать с 8-го пункта».
рами при переводах. Теперь пользователи. На мгновение представьте себе
После некоторого размышления была рождена идея чуть 300 человек, которые обустраиваются, распаковываются
подправить адресацию сети: привели IP-адрес сети к номе- и делают прочие необходимые телодвижения… Против
ру телефона человека. К примеру, адрес 10.5.20.34 стал обо- них всего 3 человека. Страшно? Нам тоже было страшно.
значать того же Алексея Алексеевича, находящегося в Ин- Поэтому составили маленькую инструкцию в духе: «По-
тернете и имеющего телефон 2034. А 10.2.20.34 – его же, здравляем, вы переехали на новое место работы. Пожа-
только занимающегося юридическими делами на благо фир- луйста, занимайте указанные вам на плане столы. Пожа-
мы. Как оказалось впоследствии, это очень удобно при раз- луйста, не передвигайте мебель. Если вам не нравится
борке всяких сетевых конфликтов. ваше место, мы поможем изменить его, но только после
С удаленным складом решили очень просто: местная окончания переезда…». В общем, памятка молодому бой-
фирмочка бросила туда выделенку. Мы поставили там млад- цу, расписывающая схему номеров, порядок включения и
шую модель cisco в качестве роутера и брандмауэра. Зару- так далее. В конце добавили пару угроз от имени дирек-
били на ней вообще все. Рядом взгромоздили VoIP-шлюз на тора, размножили все это и положили каждому на стол.
4 аналоговых порта. Через cisco подняли VPN в общую сеть. Вздохнули и дали отмашку на переезд. В воскресенье
На стороне бизнес-центра стоял такой же VoIP-шлюз, толь- перевезли серверы и настроили их. В понедельник вся
ко с портами, приспособленными для включения в АТС. Ус- фирма пришла в офис и начала собираться. Нам в по-
танавливать плату VoIP прямо в АТС было не выгодно – слиш- мощь были выданы наиболее подкованные пользовате-
ком дорого. Все. Склад получил сеть и телефоны, включен- ли, которые следили за аккуратностью разборки машин и
ные в общую сеть компании. правильную упаковку их принадлежностей по пакетам.
Вначале наша диспозиция была следующей: все трое
Этап четвертый находились на старом месте. Затем с первой партией
«Ох, рано встает охрана …» cотруд-ников двое уехали в новый офис и распаковыва-
Самый скучный. Программирование новой АТС и комму- лись, а оставшийся «подчищал хвосты». Было тяжело, но
таторов, проверка разводки (ползание под фальшпотол- вовремя расписанные планы помогли выдержать этот су-
ками и под новыми столами), накладка схемы сети на ре- масшедший день.
альную разводку и корректировка всего этого дела. За- Как ни странно, но наиболее часто задаваемый вопрос:
тем проход еще раз по всей сети и очередная корректи- «А когда все заработает?» мы намеренно не включили в
ровка. Проверка электропитания и кондиционирования памятку. Ибо было дико приятно отвечать: «А все уже ра-
(путем включения в будущей серверной тепловой пушки) ботает». И в самом деле, телефоны были теми же, про-
и так далее и тому подобное. граммы показывали все то же самое, что и должны были
По окончании этого этапа получилось следующее: показывать, в общем, люди включались в работу «с колес».
Около каждого телефонного стола мы имели сиротли-
во ожидающую своего включения телефонную и компью- Этап шестой
терную розетки. Каждая розетка была промаркирована. Последний
Маркировка совпадала с указанной на плане разводки. Од- Он двигался параллельно: происходили разборки с дама-
новременно была составлена таблица кроссировки и схе- ми, которые по своей извечной женской натуре начали
матическая схема сети с указанием IP-адресов и отделов. переставлять мебель и столы. Надо было зафиксировать
Вздохнув, мы начали следующий этап. все перемещения, сделать изменения на схемах, в неко-
торых случаях изготовить новые патч-корды и так далее
Этап пятый и тому подобное. Второй поток заключался в просмотре
«Мы едем, едем в далекие края …» оставляемой территории. Было захвачено то, что забыли
Так как переезд сродни пожару, то решили запастись ог- в суматохе. То, что решили оставить (провода, обзывае-
нетушителями заранее. Расписали последовательность мые сетью и коммутаторы от Lucent, старая АТС), отдали
действий на уровне: на растерзание в дирекцию. Если я не ошибаюсь, все это
Выключить сервер. оптом купила фирма, которая въехала туда после нас. Не-
Выключить блок бесперебойного питания. известный администратор, я очень тебе сочувствую…
Собрать все шнуры в пакет. Ну и короткое резюме: системные администраторы по-
Завязать пакет и пометить цифрой «1». лучили по премии и повышению зарплаты за прекрасно
Аккуратно вынуть сервер и поставить тут (схематич- проведенный переезд. Плюс в их распоряжении оказалась
ное изображение соседней комнаты). правильно сделанная и полностью документированная
Наклеить на сервере и UPS цифры «1». сеть. Они счастливы. А я… Я получил дополнительный
…. опыт. Мне пока хватает.
94
подписка
81655
Единый
подписной
индекс:
81655
по каталогу 81655
агентства
«Роспечать»
Рады видеть
Вас нашими
читателями!
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
НОМЕРЕ:
sekretar@samag.ru
Технический редактор
Владимир Лукин OpenBSD. Первые шаги Протокол V.90
Продолжим наше знакомство с В этой статье мы поговорим об осо-
РЕКЛАМНАЯ СЛУЖБА OpenBSD. Мы остановились на успеш- бенностях протокола V.90. Сам про-
тел.: (095) 928-8253 (доб. 112) ной установке системы и предложени- токол не очень новый и уже давно
факс: (095) 928-8253 ем перезагрузиться, что, собственно применяется многими пользователя-
Константин Меделян говоря, и выполняем. Итак, первая заг- ми и провайдерами. Однако в процес-
reсlama@samag.ru рузка системы уже по традиции для се эксплуатации у пользователей по
BSD-систем выполняется на синем тем или иным причинам возникают
Верстка и оформление фоне, и вы можете видеть, как ядро си- разные проблемы, понять суть кото-
imposer@samag.ru стемы опрашивает все устройства, ко- рых мы сможем, рассмотрев принци-
maker_up@samag.ru торые находит. Отлично, ядро загрузи- пы работы самого протокола V.90.
лось, дальше пошел init системы (про-
Дизайн обложки цесс, который запускает все остальные Построение
Николай Петрочук процессы системы). Мы видим, как под- переносимого shell-кода
нимается сетевой интерфейс (в моем для Windows-систем
103012, г. Москва, случае le1), добавляется маршрут по Всё чаще и чаще обсуждаются аспек-
Ветошный переулок, дом 13/15 умолчанию (в большинстве случаев ты атак на Windows-системы. Основ-
тел.: (095) 928-8253 (доб. 112) надо прописать его в /etc/mygate, я рас- ные возможности атак на семейство
факс: (095) 928-8253 скажу об этом файле при конфигури- данных систем были уже рассмотре-
Е-mail: info@samag.ru ровании сети), запускаются демоны ны, но не стоит забывать о том, что
Internet: www.samag.ru sendmail inetd и sshd. Торжественный при построении атаки на переполне-
момент... Волшебная дверь в систему, ние буфера в большинстве случаев
РУКОВОДИТЕЛЬ ПРОЕКТА которая тщательно выбирает себе дру- атакующий сталкивается с построе-
Петр Положевец зей, но если вы станете ее другом – она нием shell-кода.
сделает все для вас. Твердо и уверен-
УЧРЕДИТЕЛИ но вводим root, затем пароль, который Мониторинг
Владимир Положевец мы указывали при инсталляции. Windows-серверов
Александр Михалев с помощью Nagios
Плохое электропитание, Часть 2
ИЗДАТЕЛЬ или «Грабли» с UPS Первая часть этой статьи рассказыва-
ЗАО «Издательский дом К сожалению, отечественные сети элек- ла об одной из нескольких методик
«Учительская газета» тропитания не обеспечивают достаточ- настройки Nagios для слежения за сер-
ную стабильность подаваемого напря- верами под управлением семейства
Отпечатано типографией жения. Напряжение может изменяться операционных систем Windows. Для
ООО «Мастер Печати» по значению и пропадать на время от достижения наших целей на контроли-
Тираж 5500 экз. нескольких миллисекунд до нескольких руемую машину устанавливалась про-
часов без предварительного предуп- грамма NSClient, а данные собирались
Журнал зарегистрирован реждения. Данная нестабильность в с помощью модуля check_nt.
в Министерстве РФ по делам печати, электропитании есть следствие особен- В этой части мы изучим второй
телерадиовещания и средств мас- ностей российского законодательства. способ мониторинга. Для получения
совых коммуникаций (свидетельство В идеале проблемы и последствия сбо- необходимых данных мы будем ис-
ПИ № 77-12542 от 24 апреля 2002г.) ев электропитания должны решать пользовать SNMP (Simple Network
юристы. Однако мы живём далеко не в Management Protocol). На данный мо-
За содержание статьи ответственность идеальной стране, полной исключений. мент SNMP является самым популяр-
несет автор. За содержание рекламно- Все знают, что «русский сервис нена- ным протоколом управления и мони-
го обьявления ответственность несет вязчив», и за разумные деньги выби- торинга сетей. Первоначально он раз-
рекламодатель. Все права на опубли- рать особо не приходится. рабатывался для работы с маршрути-
кованные материалы защищены. Ре- Данная статья показывает доволь- заторами, но постепенно стал исполь-
дакция оставляет за собой право изме- но дешёвый вариант решения пробле- зоваться и во многих других устрой-
нять содержание следующих номеров. мы электропитания. ствах.
96