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

Так видит журнал читатель, который забыл оформить подписку:

СЬ

ЛИ
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
КУ ВО

О
НИ НО

ТР
№11(36) ноябрь 2005

С
БЫ
подписной индекс 20780
КА

www.samag.ru

Поговорим через Интернет?

И
ЬГ
ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

Расширяем права доступа

НЧ ЖИ
ВО

РА Е О

КО НЕО
АВ СЛ
Л

в Linux с помощью ACL


Л
ХА

ПО
УЕ

ЗА
Автоматизируем установку
драйверов в Windows
Так видит журнал читатель, оформивший подписку:
Ещё один способ
восстановить MBR
Тонкий клиент –
шаг к мэйнфреймам?
Разрабатываем
документацию в NPJ:
эффективно и удобно!
Используем возможности ftpd
Расширения РHP:
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! пять шагов к написанию
№11(36) ноябрь 2005

Роспечать – 81655 Как сисадмины проводят


Пресса России – 87836 свободное время
Интер-почта – тел. (095) 500-00-60
оглавление
2 ТЕНДЕНЦИИ БЕЗОПАСНОСТЬ
ИНТЕРВЬЮ 60 Windows Script Host: проводим аудит
безопасности сети
5 MiniMo – минибраузер из семейства Чтобы не тратить массу времени на поиск в логах ин-
Mozilla формации о попытках несанкционированного доступа
Интервью с главой проекта MiniMo – Дугом Тернером. к ресурсам сети, используем сценарии WSH.
Антон Борисов Андрей Бирюков
a.borisov@tesv.tmb.ru mex_inet@rambler.ru

АДМИНИСТРИРОВАНИЕ 66 Проверяем защищенность сети и сервисов


сканером DragonSoft Secure Scanner
8 Поговорим через Интернет? Обзор сканера безопасности. Сергей Яремчук
Анализ наиболее популярных сетей интернет-теле- grinder@ua.fm
фонии. Михаил Платов
platov@cs.vsu.ru WEB-ПРОГРАММИРОВАНИЕ
16 FreeBSD tips: какими возможностями 68 Расширения РHP: пять шагов к написанию
обладает ftpd Как быстро разработать надежное расширение PHP.
Ftpd вполне пригоден для решения большинства типо- Александр Календарев
вых задач по обмену файлами. Сергей Супрунов akalend@mail.ru
amsand@rambler.ru
ПРОГРАММИРОВАНИЕ
20 Автоматизируем установку драйверов
в Windows 74 Редактор для создания скриптов:
С проблемой специальных драйверов мы сталкиваемся, Primal Script 4.0
когда оборудование выходит за стандартную архитекту- Рассматриваем недокументированные возможности
ру простеньких компьютеров. Алексей Барабанов редактора. Иван Коробко
alekseybb@mail.ru ikorobko@prosv.ru

26 GRUB на CD, ИТОГИ IT-ТУРНИРА


или Ещё один способ восстановить MBR
Восстанавливаем MBR минимальными средствами. 78 Сетевой проект для небольшой компании
Алексей Мичурин Сетевая инфраструктура предприятия, разработанная
alexey@office-a.mtu-net.ru командой-победительницей конкурса «Кубок сетевых
проектов Microsoft». Земскова Ольга
32 Тонкий клиент – шаг к мэйнфреймам? zo13@rol.ru
Сегодня снова экономически выгодно использовать Ширнин Олег
мэйнфреймы с подключением легких терминалов – oshirnin@yandex.ru
тонких клиентов. Антон Борисов Цюрюпа Егор
a.borisov@tesv.tmb.ru egts@land.ru

40 Разрабатываем документацию ХОББИ


с помощью NPJ: эффективно и удобно!
Обзор системы коллективной работы Net Project 82 Десять красок неба
Journal. Алексей Коршунов Чему посвящают свое свободное от работы время сис-
akeeper@akeeper.ru темные администраторы? Наталья Алексютина
info1@samag.ru
46 Развертываем сервер Subversion
на платформе FreeBSD РЕТРОСПЕКТИВА
Современная замена устаревшей системы CVS.
Андрей Шетухин 84 Alpha, или история одной архитектуры
shetuhin@corp.mail.ru Павел Болотов
Ольга Никулина walter@alasir.com
nikulina@yandex-team.ru
КНИЖНАЯ ПОЛКА
54 Расширяем права доступа в Linux
с помощью ACL 92 Обзор книжных новинок
ACL позволяет использовать более сложные модели Александр Байрак
доступа, чем традиционная реализация, применяемая x01mer@pisem.net
в Unix-системах. Сергей Яремчук
grinder@ua.fm 52, 53, 91 BUGTRAQ
Летим скорее
Лучше каждому Информация
Оформили на почту!
получать отдельный о подписке
подписку! экземпляр журнала на 94 стр.
Принес номер
Мужики, Почему я до сих пор на работу, И у меня А можно ещё Как же я без
Я забыл
где журнал этого не сделал?! «увели» почитать такая же беда успеть? любимого журнала?
подписаться!
взяли?

№11, ноябрь 2005 1


тенденции
Microsoft укрепляет ставленной информации; повышением ках организации портала «Сеть твор-
позиции в индустрии квалификации преподавателей и со- ческих учителей» (www.it-n.ru), ор-
IT-образования трудников сферы образования зани- ганизация всевозможных конкурсов
28 октября 2005 г. компания Microsoft мается Национальный фонд подготов- (см. http://www.it-university.ru/itproject)
провела первую ежегодную конфе- ки кадров, имеющей отдельное много- и многое другое. Спецификой почти
ренцию «Образование в XXI веке» миллионное финансирование. всех образовательных проектов явля-
для высшего руководства российс- ется исключительная направленность
ких вузов и органов управления об- Microsoft в образовании на технологии и продукты Microsoft.
разованием. Стратегическими пар- Ольга Дергунова представила по- Исключением из общей массы яв-
тнерами конференции выступили зицию и планы Microsoft на индуст- ляется совместный проект Microsoft
компании Hewlett-Packard и Intel. рию образования в России. 28 октяб- с факультетом «Бизнес-информати-
В конференции приняло участие ря 2004 года компания представи- ки» ГУ-ВШЭ, который направлен на
более 300 руководителей высших ла первый русифицированный про- создание нового подхода подготовки
учебных заведений, представителей дукт из линейки программ для обра- IT-специалистов в сфере высшего об-
региональных и федеральных органов зования – MS ClassServer 3.0. Сегодня, разования. Разработанная специаль-
управления образованием. Во время спустя всего один год, на отечествен- ность «Бизнес-информатика» имеет
пленарного заседания и пяти темати- ном рынке представлена целая серия преимущества с точки зрения препо-
ческих секций прозвучало более 30 до- программных средств и технологий, давания экономических дисциплин, но
кладов, посвященных вопросам ис- а президент российского отделения с точки зрения обучения IT она эклек-
пользования информационных техно- говорит уже о национальных приори- тично дублирует содержание сущест-
логий для поддержки образовательно- тетах в образовании глазами Microsoft. вующих инженерных специальностей.
го процесса, автоматизации админист- В рамках конференции был презенто- Это не позволяет рассматривать ее
ративных функций учебных заведений ван новый продукт Learning Essentials как серьезную альтернативу сущест-
и организации дистанционного обуче- для Microsoft Office, в состав которого вующим специальностям, по которым
ния на предприятиях. Особый интерес вошли ориентированные на обучение выпускаются тысячи лучших IT-кадров
вызвали доклады начальника управле- инструменты для учителей и учащихся. в десятках технических вузов.
ния Федерального агентства по обра- Следует отметить, что данный продукт
зованию РФ Алексея Карпова, прези- демонстрирует важнейшую тенденцию Опыт использования IT
дента Microsoft в России и СНГ Ольги развития офисных средств и их кон- в зарубежных вузах
Дергуновой, директора по IT Универси- вергенции, где функции различных Пол Хопкинс в своем докладе поде-
тета Ньюкастла Пола Хопкинса. приложений объединяются в единую лился опытом использования IT в од-
информационную панель с настраи- ном из ведущих вузов Великобрита-
Итоги пятилетки ваемыми меню и другими активными нии. В качестве ключевой концепции
информатизации образования элементами из разных программ. организации обучения была выделена
Алексей Карпов подвел итоги пяти- Также были представлены продук- задача перехода к новой, производс-
летки информатизации образования ты Learning Network Manager, Microsoft твенной парадигме учебного заведе-
по федеральной целевой программе Class Server 4.0, русская версия об- ния как провайдера образовательных
«Развитие единой образовательной разовательного портала Microsoft и научно-исследовательских услуг.
информационной среды 2001-2005». Learning Gateway (www.mlg-edu.ru) При таком подходе (близким по сво-
На средства бюджета, объемом более и пример организации информацион- им идеям к ITIL и CobiT) предоставле-
8.5 млрд. рублей, удалось: подключить ного портала вуза на базе технологий ние и обеспечение IT может также рас-
к Интернету или ведомственным сетям SharePoint Portal Server 2003. сматриваться как услуга, позволяю-
более 10% школ; увеличить количест- Помимо программных продуктов щая увеличить эффективность обуче-
во персональных компьютеров в шко- Microsoft предлагает целый ряд обра- ния и проведения научных работ. Пол
лах почти в 6 раз, достигнув цифры 80 зовательных проектов, направленных отметил, что, несмотря на необходи-
ПК на одного ученика; разработать 17 на поддержку преподавателей и сту- мость расчета себестоимости и оценки
образовательных порталов и повысить дентов: распространение лучших ме- возврата вложенных средств в обуче-
квалификацию более 50 тыс. препода- тодик преподавания IT-дисциплин ние, в настоящее время не существует
вателей. Для оценки эффективности (MSDN AA Curricula Repository), повы- полноценных пригодных к практичес-
расходования средств на образование шение знаний и навыков преподавате- кому использованию методик.
можно привести следующие факты: лей в области IT (Microsoft IT Academy), Общий объем финансирования,
в Москве и Санкт-Петербурге, где к Ин- тренинги в учебных центрах компаний- выделяемый университетом на IT, со-
тернету подключено более 80% домов, партнеров, междисциплинарный под- ставляет около 2% от общего бюдже-
проживает более 10% населения стра- ход к использованию IT в образовании та (около 10 миллионов $). Общий же
ны; согласно статистике только за 2003 на примере серии материалов для учи- бюджет вуза численностью 17000 сту-
год количество пользователей – свы- телей-предметников «Использование дентов соизмерим с объемом финан-
ше 13 миллионов; в этом году приня- Microsoft Office на уроках», программа сирования упомянутой выше пяти-
то решение о слиянии всех 17 порта- «Партнерство в образовании», подде- летней программы Минобрнауки РФ.
лов в один из-за малых объемов пред- ржка лучших преподавателей в рам- Схема выбора поставщиков IT-реше-

2
тенденции
ний для использования в вузе следую- Более подробную информацию ли об успешном завершении нагру-
щая: для основных, ядерных приложе- о докладах на конференции и програм- зочного тестирования продукта «Бит-
ний выбираются крупные поставщики мных продуктах Microsoft можно най- рикс: Управление сайтом 4.0». Этот
(Microsoft, SAP, Oracle); для ниши раз- ти по адресу http://www.microsoft.com/ программный продукт предназна-
вивающегося и специализированного Rus/Education. чен для создания, управления и раз-
программного обеспечения (например, вития веб-проектов и ориентирован
системы автоматизации составле- Андрей Филиппович на сегмент малого и среднего бизне-
ния расписания) выбираются лучшие са (SMB).
по результатам анализа; для исследо- Oracle выпускает В качестве тестовой системы был
вательских или маленьких локальных бесплатную редакцию выбран сервер начального уровня
задач выполняются собственные раз- СУБД «Kraftway GEG Express 100» с опера-
работки; для использования студента- Тридцать первого октября 2005 го- ционной системой Red Hat Enterprise
ми выбираются приложения, ориенти- да корпорация Oracle анонсировала Linux AC Release 3, а в качестве ба-
рованные на технологию тонкого кли- выход бета-версии новой редакции зы данных использовалась Oracle 10g
ента; при разработке сервисно-ори- Oracle Database 10g Express Edition Release 2 (Standard Edition One).
ентированной архитектуры (SOA) ис- (Oracle Database XE). Данная редак- Для тестирования были выбраны
пользуются открытые стандарты на ция СУБД распространяется бес- Oracle-версии продукта «Битрикс: Уп-
веб-сервисы. платно, и независимые разработчи- равление сайтом – «Старт» (включа-
При организации IT-инфраструкту- ки программного обеспечения мо- ющая в себя минимальный набор мо-
ры предпочтение отдается беспровод- гут абсолютно свободно распростра- дулей для управления корпоративны-
ной связи. Для удобства администри- нять и внедрять Oracle Database XE ми сайтами) и «Бизнес» (полнофунк-
рования в 90% случаев используется в составе своих решений. Новая ре- циональная версия продукта, предна-
унифицированное программное обес- дакция СУБД основывается на коде значенная для создания и управления
печение от Microsoft (Active Directory, Oracle Database 10g Release 2 и пол- корпоративными порталами, интернет-
XP, Exchange, SharePoint и др.). В ос- ностью совместима с семейством ком- магазинами, сайтами СМИ и другими
тавшихся 10% – используются техноло- мерческих СУБД Oracle Database 10g. интернет-проектами).
гии Apple и UNIX для изучения полигра- Oracle Database XE предоставляет В результате суточного тестирова-
фических систем и проведения некото- разработчикам тот же интерфейс SQL ния данных продуктов были получены
рых научных исследований. К важному и PL/SQL, что доступен и в старших ре- следующие результаты.
преимуществу такой организации до- дакциях, плюс интерфейс к ряду язы- Версия «Старт», включающая 4 мо-
кладчик также отнес удобство органи- ков программирования, включая Java, дуля, «выдержала» 1 117 956 уни-
зации вычислительных кластеров. .NET и PHP. кальных пользователей (3 879 336
Oracle Database XE доступна для 32- хитов), а состоящая из 18 модулей
Курьезы Microsoft разрядных платформ Linux и Windows, версия «Бизнес» – 465 160 уни-
В целом конференция вызвала боль- и на нее накладываются следующие кальных пользователей (1 614 103
шой интерес среди специалистов и бы- ограничения: хита).
ла проведена на высоком техническом Используется только один ЦП. Среднее время ожидания д ля
уровне, однако без курьезов не обош- Используется не более 1 Гб ОЗУ. «Старта» и «Бизнеса» составило
лось. Во время демонстрации реше- Допускается работа только одного 0,265 и 1,107 секунд соответственно.
ний Microsoft сначала не удалось вый- экземпляра БД. Количество же ответов, время ожи-
ти в Интернет для получения доступа Не более 4 Гб пользовательских дания которых от 3 до 7 секунд, со-
к Microsoft Learning Gateway, а затем данных на жестком диске. ставило 0,04% и 0,55% от общего
при попытке запуска системы Learning числа запросов.
Network Manager после перезагрузки Для зарегистрировавшихся на сай-
операционной системы всплыло со- те корпорация Oracle предоставляет Добиться столь высоких показа-
общение о необходимости активации бесплатный доступ к форуму, который телей удалось благодаря 2-уровне-
используемой копии Windows. Это со- сопровождают специалисты компа- вой конфигурации сервера («front-
бытие, произошедшее после слов Оль- нии. Скачать Oracle Database XE мож- end» (прокси-сервер nginx 0.1.44) +
ги Дергуновой о необходимости про- но по ссылке: www.oracle.com/database/ «back end» (apache 1.3.33 + php 4.3.11 +
ведения воспитательной работы сре- xe.html. e-accelerator 0.9.3)) и использованию
ди молодежи по использованию ли- в качестве базы данных Oracle 10g
цензионного программного обеспе- Андрей Маркелов Release 2. В то же время версия про-
чения, с одной стороны, вызвало бур- граммного продукта, использующая
ную радость большей части посетите- Завершено тестирование в качестве базы данных MySQL, проде-
лей конференции, а с другой – позво- нового программного монстрировала гораздо более скром-
лило осознать значимость того факта, продукта по созданию ные результаты – «всего» 30 000 уни-
что в России количество пиратских ко- веб-ресурсов кальных пользователей.
пий программного обеспечения снизи- Первого ноября 2005 года компании
лось с 99% до 87%. «Битрикс», «QSOFT» и ФОРС объяви- Николай Никульшин

№11, ноябрь 2005 3


тенденции
Unisys ставит на «зрелость» Open Source ставления для популяризации Linux. Финансовую подде-
Компания Unisys сообщила о том, что рассматривает про- ржку проекту оказали компании IBM, Novell, Philips, Red Hat
граммное обеспечение с открытым кодом как «ключевую и Sony.
область» для роста, и объявила о намерении продвиже- «Открытая совместная работа критична для создания
ния ОС Linux в крупные предприятия. По словам Питера инноваций, обеспечивающих глобальный экономический
Блэкмора, исполнительного вице-президента и президен- рост. Препятствия коллаборации для операционной сис-
та по мировым продажам в Unisys, Open Source уже являет- темы Linux подвергает серьезной опасности возможные
ся «созревшей технологией», готовой предоставить разум- инновации. Для поддержания развития инноваций в про-
ные и экономичные решения для многих заказчиков. Unisys граммном обеспечении для Linux должна быть установле-
уже занимается внедрением проектов с открытым кодом на новая модель управления интеллектуальной собствен-
в IT-структуры крупных компаний: «Сейчас Linux действи- ностью – вне зависимости от размера и типа бизнеса или
тельно пользуется спросом. Мы работаем с одним клиен- организации», – пояснил смысл создания OIN ее исполни-
том (европейским туристическим предприятием), для ко- тельный директор Джерри Розенталь.
торого обратились к услугам Open Source в масштабной
серверной среде. Мы можем доказать надежность и го- Novell меняет политику по GNOME и KDE
товность данного решения, а оно сохранит им 30 процен- для SUSE Linux
тов итоговых затрат». В начале ноября компания Novell объявила о смене стан-
дартной графической оболочки для SUSE Linux (и Novell
OpenSync и KDE готовят Linux Desktop) с KDE на GNOME, объявив о том, что от-
ПО синхронизации телефонов ныне поддержкой пакетов KDE будет заниматься проект
Энтузиасты из проектов OpenSync и KDE занимаются раз- OpenSUSE. Однако вскоре планы были несколько измене-
работкой библиотеки, с помощью которой можно будет ны: из-за широкого резонанса, что вызвало известие в со-
синхронизировать мобильный телефон, КПК, работающий обществе, и большого числа отзывов своих пользователей
под управлением Windows CE или Palm, со своим настоль- Novell уступила и сообщила, что в дальнейшем будет уде-
ным ПК под управлением ОС Linux. Код старых программ лять равное внимание поддержке KDE и GNOME в своих
синхронизации, среди которых пакеты KitchenSync, KSync, Linux-дистрибутивах.
Kandy, libksync, уже удален из KDE (все они будут отсутс-
твовать в следующем major-релизе KDE – 4.0). Появление Составил Дмитрий Шурупов
первой стабильной версии библиотеки OpenSync ожидает- по материалам www.nixp.ru
ся к началу 2006 года. Тогда же должна выйти и реализа-
ция для KDE. В ней будет представлена возможность син-
хронизировать данные устройств с такими программами,
как Kontact, Evolution, Palm Pilots, SyncML.

Lips займется стандартизацией Linux


в телефонах
PalmSource, Orange и другие компании объединили свои
усилия в стандартизации свободной операционной системы
Linux в среде мобильных телефонов. Главная задача нового
сформированного союза Linux Phone Standard (Lips) Forum –
унифицирование интерфейса ОС Linux для возможности ее
установки на различные модели телефонов. «Существует
потребность в альтернативе Microsoft и Symbian, – проком-
ментировал Джон Острем, член совета Lips, основатель
China Mobilesoft и научный лидер в PalmSource. – Мы заин-
тересованы в борьбе с разнородностью и в предоставлении
стандартной Linux-платформы, которая позволит быстрее
создавать Linux-телефоны по меньшей стоимости и с ог-
ромной интероперабельностью». Первая версия для про-
стейших телефонов, которая позволит совершать звонки
и запускать элементарные приложения, должна появить-
ся в первом квартале 2006 года, а сертифицировать плат-
форму планируется в 2007-м.

Новый альянс предоставит патенты


ОС Linux
10 ноября анонсировано формирование Open Invention
Network (OIN) – новой компании, которая займется покуп-
кой патентов с целью их дальнейшего бесплатного предо-

4
интервью

MiniMo – мини-браузер
из семейства Mozilla
Mozilla

Антон Борисов
Многим из вас приходилось работать с программными продуктами, в названии которых
присутствует слово Mozilla. В этом году, пожалуй, только ленивый не слышал о браузере
Mozilla FireFox. Однако главный герой сегодняшнего рассказа – браузер MiniMo, родословная
которого начинается с браузера Mozilla. Некоторые детали его разработки и концепцию
развития поведает Дуг Тернер (Doug Turner) – глава проекта.
Расска жите, как вы оказа лись ми. В определенный момент кому-то вильное направление, но одно ясно –
в Netscape Communications Inc., о ва- пришла в голову сумасшедшая идея от «безумной идеи» выиграли милли-
шей работе в этой компании, её ос- выпустить исходный код в публичный оны. «Освобождение ящерицы» в ито-
новных направлениях. доступ. В Netscape Communications мо- ге вылилось в лучший код, стало боль-
Я присоединился к команде Netscape им шефом был Крис Хофман. Он и сей- ше инноваций, и, наконец, война брау-
в 1996 году, для работы над клиен- час мой шеф в Mozilla Foundation. На- зеров вышла на новый виток.
том браузера под Mac-платформу. столько хороший, что у меня нет жела-
Поначалу было не очень интересно, ния мечтать о лучшем. Сколько людей занято в проекте
но это была работа на лучшую компа- MiniMo и кто вам помогает при раз-
нию, над лучшим продуктом того вре- Как бы вы охарактеризовали идею работке?
мени. Годом позже я стал работать выпуска исходного кода Netscape Что касается создания проекта MiniMo,
над вещами гораздо интереснее: се- в публичный доступ? С точки зре- то его родителями являются: Крис
тевое взаимодействие, многопоточ- ния того времени и с точки зрения Хофман, Дарин Фишер (Darin Fisher)
ность, xpcom, низкоуровневые подсис- реалий сегодняшнего дня. и я. Это было несколько лет назад. Да-
темы и над более сложными проблема- Я не был уверен вначале, что это пра- рин теперь работает в Google над дру-

№11, ноябрь 2005 5


интервью

Что представляет из себя ся Internet Explorer, то для мобильных уст- ся» («Make good software that people like to
MiniMo? ройств это далеко не так: здесь присутс- use, and the rest will take care of itself»).
После того как в январе 1998 года были твуют такие имена, как Opera, NetFront, Коллектив Mozilla Foundation сложил-
выпущены в свет исходные коды Netscape Obigo, Nokia Series 40/60 Browser, Openwave, ся в июле 2003 года в основном из быв-
Navigator [1], началась новая ветка в исто- Pocket Internet Explorer, NicheView, Picsel, ших участников корпорации Netscape [10].
рии развития браузеров. Одним из «побоч- RocketBrowser, Wapaka, Thunderhawk, Он разрабатывает не только MiniMo,
ных» эффектов стало появление MiniMo Skweezer, Andromeda и некоторые другие. но и такие продукты, как Mozilla FireFox,
(MiniMozilla) – мини-браузера для КПК и мо- Сфера применений пока, на мой взгляд, Mozilla Thunderbird, Mozilla SeaMonkey,
бильных устройств [2]. достаточно узкая – помимо непосредствен- и многие другие. Большинство из них, ко-
Что из себя представляет MiniMo? ного отображения веб-страниц и удобной нечно же, напрямую не связано с MiniMo,
Это в первую очередь исходный код бра- интеграции с Google Maps на этом функцио- но от каждого зависит общее развитие
узера Mozilla, который можно собрать нал и заканчивается. Технология MiniMozilla продукта.
для мобильной платформы, например, построена таким образом, что в принципе В частности, технологический темп для
для КПК iPAQ. Вполне очевидно, что полная можно отделить интерфейс пользователя развития MiniMo задает Дуг Тернер, Крис
функциональность настольной Mozilla для (UI) от ядра браузера Mozilla и построить Хофман координирует бизнес-планирова-
мобильных устройств не требуется. На пер- новые приложения под конкретные требо- ние. Официально Дуг Тернер начал рабо-
вый план выходит компактность браузера вания заказчика, но пока об этом мало что тать на Mozilla Foundation с декабря 2004 го-
и повышенные требования к распределе- слышно. Также мало слышно и об актив- да. Хотя послужной список данными пер-
нию памяти (в КПК количество ОЗУ все- ном использовании в MiniMo подключае- сонами не афишируется, но удалось уз-
таки отличается от настольных ПК). Вто- мых модулей. Впрочем, не буду заострять нать, что до прихода в Netscape в 1996 го-
рой немаловажный фактор – это умение внимание на том, чего пока нет. Отмечу, ду Дуг Тернер работал в компании Apple
отображать html-страницы для экранов что проект MiniMo идет вперед семимиль- Computer Inc.
КПК-устройств (разрешение в пределах ными шагами. И лозунгом развития Mozilla Первое упоминание об успешном пор-
160x240 пикселов или более; сейчас уже Foundation отчасти может служить фраза тировании MiniMo на КПК датируется 8 де-
типичны устройства с разрешением экра- Криса Хофмана (Chris Hofmann) – «Созда- кабря 2003 года, когда Дуг Тернер пишет
на 640х480 пикселов) [3]. Если для настоль- вайте хорошие продукты, которые приятны в своем блоге – о запуске Firebird на iPAQ
ных ПК доминирующим браузером являет- для использования, а остальное приложит- 5555 [4].

гими вещами, а Крис занят создани- изводит КПК и смартфоны для I-Mate, Что касается запуска MiniMo на Opie,
ем бизнес-связей в Mozilla Foundation. HP, Orange, Dell и др.), наш код рабо- то здесь потребуется переписать код
Над MiniMo CE активно работают 6 че- тает нормально. под QT. Как вы знаете, сейчас Mozilla
ловек, каждый в своем направлении. основана на GTK-коде, поэтому зако-
Мы также помогаем нескольким спе- Как вашей команде удается тести- номерно, что и MiniMo зависит от GTK.
циалистам, работающим над версией ровать MiniMo на всех линейках КПК, Портирование на QT-основу происхо-
Linux MiniMo. У нас большая команда скажем, и на семействах Windows дит (см. http://dot.kde.org/1094924433).
тестеров, людей, которые придумыва- Mobile и дистрибутивах Familiar Как только оно завершится, то появит-
ют новые классные идеи, и, конечно же, Linux? Какие виртуальные машины ся причина для перестраивания дере-
мы получаем отдачу от всего направ- вы используете? ва MiniMo, чтобы в дальнейшем выпус-
ления развития FireFox. Прямо сейчас Отличный вопрос. Многие разработ- кать исполняемые файлы и в форма-
Марсио Галлио (Marcio Gallio) и я за- чики других браузеров для мобильных те MiniMo/QT.
няты разработкой ядра MiniMo. Фигу- устройств используют эмулирующие
рально выражаясь, мы стоим на пле- приложения. Для нас это не актуаль- Я попробовал запустить MiniMo 0.07
чах таких гигантов, как Джонни Стен- но, т.к. мы используем ядро от FireFox, в Windows CE 2002 (WinCE 3.0), од-
бэк (Johnny Stenback), Дэвид Барон поэтому если какая-то функция рабо- нако все попытки оказались не-
(David Baron) и всех тех сотрудников, тает в FireFox, то она будет работать удачными. В чем может быть про-
которые двигают технологию Mozilla и в MiniMo. блема, в WinCE 3.0 или все-таки
вперед, т.к. MiniMo базируется в пер- Однако есть такие опции, кото- в MiniMo? Есть ли планы выпускать
вую очередь на коде Mozilla. рые отсутствуют в FireFox, напри- MiniMo в виде одного инсталлятора,
мер, рендеринг для малых экранов а не в виде архива файлов?
На каких аппаратных платформах (Small Screen Rendering). У меня есть Для использования в Windows CE 2002
MiniMo может работать сегодня? мысль написать такое расширение требуется перекомпиляция кода MiniMo
В основном это ARM и несколько x86- для FireFox, чтобы у пользователей ПК с использованием SDK от WinCE 2002.
устройств. Существует несколько спе- была возможность увидеть, как стра- Сейчас мы сфокусированы в основном
цифичных вопросов, но наш код очень ница отображается на устройствах на Windows CE 2003, так что и для бо-
удобен в портировании. На большинс- с экраном 240x360. Мы компилируем лее старой версии WinCE в скором вре-
тве устройств, что поставляет HTC код на настольных ПК и копируем его мени будет релиз. Что касается инс-
(тайваньская компания High Tech на КПК. Затем тестируем и делаем вы- талляторов, то для себя мы использу-
Computer Corporation [11], которая про- вод о функциональности. ем как коммерческие, так и собствен-

6
интервью
Какие планы развития MiniMo? И как сил бы развитие MiniMo, если на рын-
Дуг Тернер – соавтор первой антиспам происходит тестирование дополни- ке было что-то стоящее.
программы SpamBlaster, созданной в 1997 тельного функционала?
году. Сотруд ник компании Netscape Для MiniMo также существует план Насколько мне известно, с Nokia
Communications c 1996 года. Занимался развития [5]. Что же касается дополни- и с T-Mobile подписаны контракты
развитием объектной модели XPCOM, про- тельного функционала, то он, как пра- по поставке MiniMo вместе с их про-
работкой вопросов поддержки сети и пото- вило, появляется в качестве расши- дукцией. Насколько это верно?
ковых (thread) вопросов в браузерах серии рений к продукту. Например, Spatial У меня не входит в практику распро-
Netscape, а в последствии и в серии Mozilla. Navigation – это расширение, кото- страняться, кто собирается, а кто
В декабре 2004 года возглавил разработ- рое я написал для Pioneer Research. не собирается что-то поставлять, по-
ку браузера MiniMozilla в компании Mozilla Его цель – использовать клавиши вверх, ка не выпущен официальный пресс-
Foundation. вниз и т. д. для навигации по докумен- релиз. Так что, извините, говорить
ту (см. http://www.mozilla.org/access/ об этом преждевременно.
ные инсталляторы. Так что не волнуй- keyboard/snav). На сегодня это расшире-
тесь – MiniMo будет выпускаться и в ка- ние выглядит как опция, которую мож- Есть ли разработчики, которых
честве единого файла. но загрузить с http://addons.mozilla.org. вы могли бы отметить отдельно?
Как только расширение становится до- Мы сотрудничаем с компанией INdT
Для меня представляют интерес статочно востребованным, оно интег- (http://www.indt.org.br/indt), с коман-
русскоязычные ресурсы, поэтому рируется в дерево разработки. Одна- дой, которая работает над разными
я зашел на mail.ru и обратил внима- ко чтобы быть включенным, это конк- Open Source-проектами. В качестве
ние на то, что браузер автоматиче- ретное расширение проходит не толь- одного из таких проектов они выбра-
ски не распознает кодировку. ко через руки тестеров, но и через ру- ли MiniMo. Последние несколько ме-
Мы делаем достаточно широкие шаги ки тех, кто повседневно его использует, сяцев их внимание было сфокусиро-
вперед. Предлагаю использовать вер- т.е. знает расширение практически до вано на GTK-коде нашего кроссплат-
сию 0.08, ибо многие проблемы реша- мелочей. Поэтому относительно качес- форменного браузера. Также среди их
ются с выходом каждой новой версии. тва кода можете не волноваться. работ значится проект MaeMo – пор-
Некоторые вопросы, возникающие тирование на платформу Nokia 770
с перекодировками, связаны с тем, как Означает ли это, что практически (см. http://www.indt.org.br/maemo).
определять установленные на устрой- любое расширение, написанное для
стве шрифты и как проводить переко- FireFox, будет работать и с MiniMo? Ссылки:
дирование из национальных кодовых В общем-то, да. У нас было несколь- 1. http://en.wikipedia.org/wiki/Netscape.
страниц в юникод-представление. На- ко расширений для FireFox, которые 2. http://en.wikipedia.org/wiki/Minimo.
деюсь, в версии 0.10 многие из них бу- через несколько минут доработки за- 3. http://www.linuxdevices.com/articles/
дут решены. работали и с MiniMo. Расширения, AT7396996719.html.
стоящие упоминания, – это adblock 4. http://weblogs.mozillazine.org/dougt/
Действительно здорово осозна- и colorzilla. archives/004471.html – first announcement
вать, что исходный код для MiniMo of FireBird at IPAQ 5555.
и для Firefox почти один и тот же. Есть ли у вас планы по созданию 5. ht tp://w w w.linuxdevices.com /news /
Однако в ходе тестирования MiniMo прототипа для Symbian OS? NS8 91114 50 47.html – roadmap for
на различных версиях Windows CE Д.T.: Таких планов нет. Есть люди, ко- MiniMo.
я столкнулся с проблемой быст- торым нравится Symbian, и те, кото- 6. http://www.meer.net/~dougt/minimo_ce –
родействия. Если я сравню Pocket рые ненавидят его. Я действительно MiniMo WinCE builds – домашняя стра-
Internet Explorer (PIE) с MiniMo, не знаю, к кому я тяготею. Если смо- ница Дуга Тернера. Отсюда вы може-
то последний никак не кажется мне треть на API от Symbian и сравнивать те загрузить последние релизы MiniMo
быстрым. Есть ли какие-либо под- его с Linux, то, скорее всего, я принад- для платформы Windows CE.
вижки в улучшении данной про- лежу ко второму лагерю. 7. http://www.absoluteastronomy.com /
блемы? encyclopedia/m/mi/microbrowser.htm –
Д а , п р о и з в о д и т е л ь н о с т ь и м е е т С о гл а с н о о б з о р а м , в ы п ус к а е - классификация микробраузеров.
очень важное значение. Но срав- мым компанией Opera Software 8. Сравнить характеристики различных
нивать PIE с MiniMo недостаточно Inc., они не рассматривают MiniMo веб-браузеров можно пользуясь табли-
честно, т.к. PIE в действительнос- браузер в качестве конкурента, цей – http://www.absoluteastronomy.com/
ти не отображает многие сайты кор- т.к. Opera-Mini работает на других encyclopedia/c/co/comparison_of_web_
ректно, у него слабая реализация платформах (Symbian OS, Palm OS). browsers.htm.
JavaScript, и он не может выполнять Сможете ли вы утверждать, что ваш 9. http://davetitus.com/mozilla.
AJAX (http://developer.mozilla.org/en/ коллектив также не рассматривает 10. http://www.absoluteastronomy.com /
docs/AJAX). Впрочем, я не открещи- браузер от Opera в качестве конку- encyclopedia/m/mo/mozilla_foundation.
ваюсь от проблемы с быстродействи- рирующего продукта? html.
ем. Да, она существует, и мы ее посте- Мне бы не хотелось оценивать, кто ко- 11. http://en.wikipedia.org/wiki/High_Tech_
пенно решаем. му является конкурентом. Лично я бро- Computer_Corporation.

№11, ноябрь 2005 7


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

Поговорим через Интернет?


Анализ наиболее популярных сетей
интернет-телефонии

Знаете ли вы, что с помощью компьютера можно не только работать с документами, играть,
обмениваться письмами, но еще и разговаривать? Сегодня, отбросив максимум рекламной
шелухи, мы рассмотрим достоинства и недостатки трех наиболее популярных клиентов
интернет-телефонии – Skype, Gizmo Project и Google Talk.

Михаил Платов
«А в чем, собственно, ринговых сетей, широко используемых П о д д е р ж к а р а з л и ч н ы х п л а т-
вопрос?» для обмена файлами (Napster, KaZaA, форм (Windows, Mac OS X, Linux,
За последние несколько месяцев ры- Gnutella и др.). С тех пор в течение поч- PocketPC).
нок компьютерной телефонии пере- ти трех лет сеть Skype активно разви- Наличие API для разработки собс-
жил несколько значительных событий. вается, а количество пользователей твенных расширений программы.
Наиболее интересными среди них яв- программы неуклонно продолжает рас- 27 различных языков в интерфей-
ляются запуск проекта Gizmo Project, ти. За первый год работы сеть набрала са клиента Skype.
а также открытие голосового сервиса свой первый миллион активных пользо-
компанией Google. Сразу после этого вателей, за второй год – еще два, сей- Как работает Skype
в сети появились многочисленные ста- час их количество медленно, но вер- Для того чтобы понять техническую
тьи, рассказывающие о преимущест- но приближается к отметке в 5 милли- часть, обратимся к рис. 1.
вах новых сетей перед старыми кон- онов… Последним значимым этапом Сеть состоит из программных кли-
курентами. Как ни странно, сколь-ни- в истории Skype стало слияние с извес- ентов Skype, работающих на компью-
будь единого мнения о том, какая же тными и популярными сервисами элек- терах пользователей. В зависимости
сеть на данный момент является луч- тронной коммерции e-bay и PayPal [1]. от условий работы один и тот же кли-
шей, представлено не было. Более то- Что же лежит в основе успеха Skype? ент может выступать либо как «обыч-
го, мнения различных обозревателей Для ответа на этот вопрос достаточно ный узел», либо как «суперузел» се-
зачастую оказывались диаметрально посмотреть на список основных воз- ти [2]. У последних есть по меньшей
противоположными. Для внесения яс- можностей программы: мере два характерных признака:
ности в этот вопрос было произведе- Передача речи, мгновенных сооб- Они всегда имеют реальный интер-
но небольшое исследование, с резуль- щений и файлов. нет-адрес.
татами которого вы сможете ознако- Высокое качество речи. Они принимают непосредственное
миться в этой статье. Итак, кандидат Проведение конференций. участие в поддержке работы сети
№1 – Skype. Связь с традиционной телефон- Skype.
ной сетью (через сервисы SkypeIn
Skype, «Let the whole и SkypeOut). Собственно, благодаря наличию
world talk for free» Дополнительные возможности (ин- «суперузлов» Skype и относят к де-
В недалеком 2003 году, основате- теграция с MS Outlook, Firefox, ра- централизованным сетям. Поиск або-
ли сети KaZaA Николас Зенстром бота с сетями wi-fi хот-спотов, воз- нентов, отслеживание их текущего со-
и Янус Фрис создали революционную можности «корпоративного» управ- стояния (активен/не активен), обмен
для своего времени программу для ин- ления счетами и др.). мгновенными сообщениями и файла-
тернет-телефонии с совершенно непо- Шифрация всех передаваемых дан- ми – все это производится с участи-
нятным названием – Skype. Ее изюмин- ных (алгоритмы AES, RC4). ем «супер узлов». Впрочем, их самой
ка заключалась в том, что для переда- Отличная работа из-за NAT и бранд- важной функцией является то, что каж-
чи «голоса» использовались идеи пи- мауэров. дый из них может выступать посред-

8
администрирование
ником при передаче голосового тра- нивались качество
фика между другими клиентами се- передаваемой ре-
ти Skype, находящимися за сервера- чи, а также величи-
ми NAT (см. вариант «3» на рис. 1). на задержки. С по-
Теоретически подход Skype позволя- м о щ ью Et he rnet-
ет бороться абсолютно со всеми ви- снифера опреде-
дами NAT (см. врезку «NAT и STUN»), лялись характер-
правда, к сожалению, борьба эта ве- ные особенности
дется руками ничего не подозреваю- реализации рабо-
щих абонентов (ведь физически «су- ты клиентов из-за
перузлы» находятся на компьютерах NAT (используемые
самых обычных пользователей сети). протоколы, IP-ад-
Так, один день работы Skype в режиме реса узлов, участ-
«суперузла» может стоить владельцу вующих в переда-
Рисунок 1. Структура сети Skype
компьютера до 800 Мб трафика других че голосового тра-
пользователей Skype [3]. Ситуация усу- фика). Вариант, при котором оба клиента
губляется тем, что на данный момент При тестировании проверялось непосредственно подключены к Ин-
не существует официального способа качество работы в следующих сце- тернет при тестировании не рассмат-
запретить клиенту Skype становиться нариях: ривался. Такая схема подключения яв-
«суперузлом». Конечно же, можно схит- Разговор между двумя абонентами, ляется достаточно редкой. Все же ча-
рить и поместить свой компьютер за находящимися за одним и тем же ще такие люди работают либо из-за
NAT, но в таком случае вы лишь обос- NAT-сервером (внутри организа- сервера NAT, либо через прокси-сер-
трите проблему качества речи в сети, ции или локальной сети). вер (локальные и корпоративные се-
переложив ее решение на плечи дру- Разговор между абонентом находя- ти) и очень редко напрямую (как пра-
гих пользователей Skype. щимся в Интернет (dial-up-подклю- вило, это удел конечных пользовате-
чение), и абонентом за динамичес- лей, часто dial-up). К тому же прове-
Личное знакомство ким NAT (разговор между пользо- дение всех вариантов тестов с реаль-
Итак, идем на http://www.skype.net и за- вателями Интернета, подключен- ными интернет-адресами в моем слу-
гружаем Windows-версию клиента ными к одному и тому же провай- чае было несколько затруднительным.
Skype (на момент написания статьи – деру). Отчаиваться по этому поводу не стоит,
версия 1.3.0.66). Владельцам модемов Разговор между двумя абонента- результаты тестов в данном сценарии
придется подождать загрузки 7-мега- ми (dial-up и LAN), находящимися более чем предсказуемы.
байтного файла установки. После ин- за различными несимметричными
сталляции запустим программу и за- NAT-серверами (разговор между Тестирование Skype
регистрируем себе уникальное имя пользователями Интернета, под- Первый же тест преподнес сюрприз –
в сети Skype. ключенными к различным провай- даже находясь в одной локальной се-
Интерфейс программы достаточно дерам). ти, клиенты Skype умудрялись обме-
прост и понятен (см. рис. 2). нивались данными через «суперузел»
Первое, что мы сделаем, – найдем в Швейцарии, подключенный к Интер-
человека, с которым будем общать- нету с помощью беспроводной тех-
ся (можно искать по skype-именам нологии 802.11. (провайдер Monsoon
или просто найти пользователей в ре- Networks). Думаю здесь комментарии
жиме Skype-me, желающих поболтать), излишни.
и добавим его в список контактов. Пос- При тестировании по второй схе-
ле этого, нажав на зеленую кнопку вни- ме поведение клиента полностью со-
зу экрана, мы начнем звонить. В мо- ответствовало ожидаемому – данные
ем случае вызов проходил достаточно передавались напрямую между учас-
долго – около 10 сек. Кроме того, когда тниками (см. вариант «2» на рис. 1).
у вызываемого абонента было запуще- Субъективно качество речи было луч-
но несколько skype-клиентов на раз- ше, чем при разговоре по обычному те-
ных компьютерах (для Skype такая си- лефону, но все-таки хуже, чем у конку-
туация допускается), звонок иногда до- рентов (см. ниже).
ходил только до одного из них. Третья схема (см. «3», рис. 1) пол-
ностью повторила результаты первой,
Методика тестирования разве что география в этот раз бы-
Для каждой из рассматриваемых се- ла другой – Великобритания, Япония
годня программ проводился опреде- и США. Качество речи сильно меня-
ленный набор испытаний. В процес- лось от звонка к звонку – от полной
се каждого теста субъективно оце- Рисунок 2. Интерфейс skype-клиента невозможности разговора, до ред-

№11, ноябрь 2005 9


администрирование
ких пропаданий речи, види- ные голосовые звонки або-
мо, при разговорах выбира- нентам д ругих SIP- с етей
лись различные «суперузлы». (несколько VoIP-сетей уни-
Объяснить причину такого по- верситетов, VoIP-сети проек-
ведения достаточно сложно – та SipBroker по всему миру).
протокол закрыт и зашифро- Кроме того, относительно
ван, а сама Skype не спешит просто должна достигаться
раскрывать миру особеннос- и организация связи с обыч-
ти объектов своей интеллек- ными телефонными сетями,
Рисунок 3. Структура сети SipPhone
туальной собственности. за что еще раз скажем спа-
Итак, давайте посмотрим, что же сибо протоколу SIP.
Чем плох Skype? может Gizmo: Для передачи мгновенных сообще-
Самым большим «злом» Skype явля- Передача голоса и мгновенных со- ний используется открытый протокол
ется то, что он использует ресурсы общений. XMPP, на основе которого работают
компьютеров своих пользователей Связь с традиционной телефон- сети Jabber. На данный момент Gizmo
для нужд всей сети в целом. ной сетью через службы Call In Project является участником IM-конфе-
В результате, некоторые образо- и Call Out. дерации [4], что автоматически озна-
вательные учреждения США и Европы Связь с абонентами Gizmo через чает обмен сообщениями с абонента-
официально запретили своим работни- выделенные городские номера до- ми других jabber-сетей.
кам и студентам использовать Skype. ступа (набор добавочного SIP-но-
В основе программы лежат закры- мера). Визуальная «примерка»
тые протоколы. Никто до конца точ- Проведение конференций, в том Основным сайтом проекта является
но не знает, что на самом деле делает числе и с абонентами ТФОП. http://www.gizmoproject.com. Именно
Skype, какие данные и куда он может Бесплатная голосовая почта. оттуда, из раздела Download, я и за-
передавать (посредством тех же «су- Возможность записи разговоров. грузил последнюю версию клиента
перузлов»). Исходный код клиента так- Отображение участников разгово- (1.1 на момент написания статьи). Раз-
же закрыт, поэтому нам остается лишь ра на карте мира. мер дистрибутива для Windows-плат-
«верить», что он не содержит Spyware Использование эмотиконов и зву- формы – чуть более 9 Мб.
или других подобных средств. ковых вставок. Интерфейс клиента достаточно удо-
Из-за использования закрытого Поддержка открытых стандартов бен и интуитивно понятен (см. рис. 4).
протокола интеграция Skype с други- (SIP, Jabber). В о с н о в е л еж и т с тан д ар т н а я
ми сетями на данный момент крайне Связь с другими VoIP-сетями, ис- для всех IM-клиентов идея «списков
затруднительна. Впрочем, судя по су- пользующими SIP. друзей» (buddy list). Имеется поиск, за-
ществованию SkypeOut, это не означа- Возможность работы с использо- писная книжка и история совершенных
ет, что интеграция невозможна в при- ванием аппаратных SIP-шлюзов звонков. Последняя централизованно
нципе, ее нет скорее по политическим и IP-телефонов. хранится на сервере и доступна с лю-
причинам. бого компьютера (у Skype история хра-
Большая часть выпускаемого се- В отличие от Skype, архитекту- нится локально). Голосовая почта ре-
годня оборудования для Skype (так на- ра сети SipPhone более традиционна ализована просто – все оставленные
зываемые skype-телефоны), работа- (см. рис. 3). сообщения в виде wav-файлов (к со-
ет только вместе со skype-клиентом В центре сети находятся серве- жалению, ничем не сжатых) отсыла-
на компьютере пользователя. Таким ры сети SipPhohe.
образом, достаточно сложно исполь- Благодаря исполь-
зовать skype без компьютера. зованию открытых
протоколов в сети
Gizmo Project возможна работа
Автором и владельцем этого проек- не только клиентов
та является Майкл Робертсон, из- Gizmo Project, но и
вестный миру такими брендами как любых других, под-
mp3.com и Linspire (в прошлом – держивающих про-
Lindows). В 2003 году Майкл основал токол SIP, в том чис-
компанию SipPhone, задачей которой ле и аппаратных
было создание сети IP-телефонии на (список рекомен-
базе протокола SIP. В середине 2005 дуемого оборудова-
года состоялся анонс бета-версии про- ния можно найти на
граммного клиента для этой сети – сайте проекта.
Gizmo Project, который многие неза- Всем участни-
медлительно назвали первым реаль- кам сети SipPhone
ным конкурентом Skype. доступны бесплат- Рисунок 4. Интерфейс Gizmo Project

10
администрирование
ются на указанный в систе- го, но интенсивного тестиро-
ме e-mail. вания Call Out качество речи
Таким образом, сообще- было несколько хуже, чем при
ния голосовой почты также внутрисетевых звонках. При-
можно централизованно хра- чиной этому, судя по всему,
нить на любом почтовом сер- являлось транскодирование.
вере. В параметрах настрой- Дело в том, что подавляю-
ки Gizmo можно указать вто- щее большинство оборудо-
рой e-mail адрес, на который вания операторов не подде-
будут отсылаться уведомле- рживает даже открытый ко-
ния о пришедших голосовых дек iLBC, не говоря уже о ком-
сообщениях (так предлагает- мерческом ISAC и его собра-
ся реализовывать SMS-опо- тьях из пакета GIPS. Поэто-
вещения). При желании мож- му звонки перед терминаци-
Рисунок 5. Отображение положения участников разговора
но настроить безусловную на карте мира ей скорее всего подвергаются
переадресацию входящих транскодированию на одном
звонков на другой номер, в том чис- места – реализованные возможности из серверов SipPhone, которое и при-
ле и номер ТФОП (в этом случае або- STUN оптимальны с точки зрения сов- водит к некоторому ухудшению качес-
нент будет оплачивать все переадре- местимости с другими устройствами тва речи. С другой стороны, благодаря
суемые звонки по соответствующему сети. Впрочем, это вовсе не означает, транскодированию даже пользователи
тарифу для Call Out). что специальные расширения функци- с низкоскоростными интернет-канала-
Другой приятной особенностью ональности для лучшей совместной ми могут делать call-out-звонки с при-
Gizmo является отображение учас- работы Gizmo из-за NAT невозможны емлемым качеством.
тников разговора на карте мира в принципе… Для услуг междугородной и меж-
(см. рис. 5). Для этого использует- дународной телефонии SipPhone,
ся интерфейс системы Google Maps. Групповое использование как и другие подобного рода компании,
К слову реализация этой возможности Одним из таких «расширений» мож- скорее всего использует возможнос-
тоже имеет мелкие недостатки. Так при но считать службу Bonjour. Послед- ти крупных операторов IP-телефонии.
совершении звонков через Call Out на няя является реализацией открыто- Как правило, последние для передачи
карте вместо расположения вызыва- го протокола IETF Zeroconf и активно голоса используют выделенные сети
емого абонента (которое достаточно используется в MacOS X для простой IP MPLS, поэтому проблем с ухудше-
точно можно определить по номеру работы с сервисами в локальной сети нием качества на их участке не воз-
телефона) показывалась точка в США (сетевые настройки компьютеров, ра- никает и наибольшее влияние все-та-
(предположительно точка установки бота с файлами и принтерами, обмен ки оказывает состояние интернет-ка-
шлюза, соединяющего SipPhone c тра- музыкой и картинками). С помощью нала между клиентом и сервером
диционными сетями). этой службы клиенты Gizmo Project SipPhone. На данный момент серверов
могут напрямую передавать голосо- SipPhone, работающих за пределами
Работа с NAT вой трафик при звонках в рамках од- США, обнаружено не было – при раз-
В этом пункте Gizmo Project продол- ной подсети. говорах голосовые пакеты всегда пе-
жает следовать идее максимально- Некоторые пользователи сообща- редавались через единственный сер-
го использования уже существующих ли о проблемах в работе управляе- вер, расположенный в США. (Справед-
и проверенных технологий. При рабо- мого оборудования D-Link, возникаю- ливости ради нужно отметить, что при
те с клиентами, находящимися за NAT, щих после установки Bonjour (вместе прочих равных условиях качество речи
используется открытый протокол с Gizmo Project или Apple iTunes) [5], по- в Gizmo при проведении тестирования
STUN. Правда, как показало практи- этому если возможность прямых раз- из-за NAT было лучше, чем у Skype, ис-
ческое исследование поведения теку- говоров в локальной сети вам не нуж- пользующего для транзита «суперуз-
щей версии Gizmo, возможности STUN на, а потенциально «проблемное» обо- лы» в Японии, Европе и США.)
реализованы далеко не полностью – рудование имеется просто деинстал-
только для передачи данных между лируйте эту службу с помощью про- А все ли хорошо
клиентом за NAT и интернет-сервером граммы TurnOffBonjour.exe, входящей в американском королевстве…
сети SipPhone. В этом случае на качес- в стандартную инсталляцию Gizmo. К сожалению, при работе с Gizmo
тво речи значительное влияние будет не обошлось и без большой ложки де-
оказывать взаимное расположение Особенности терминации гтя. Во-первых, программа действи-
клиента и сервера. Последний, к сло- Для тестирования услуги звонков тельно является бета-версией (а мес-
ву, находится в США. на обычные телефоны все вновь ре- тами даже и альфа), особенно в пла-
Если же вспомнить, что в сети гистрирующиеся пользователи полу- не стабильности. Так, клиент несколь-
SipPhone помимо клиентов Gizmo так- чают на счет 35 центов. Стоимость ко раз произвольно завершал свою ра-
же работают обычные шлюзы и IP-те- звонка в Россию – 7 центов, тарифика- боту (особенно часто при попытке от-
лефоны, то все сразу встает на свои ция – поминутная. В процессе коротко- правки IM-сообщений на русском язы-

№11, ноябрь 2005 11


администрирование
ке), причем перед повторным запус- руется обмен сообщениями с други-
ком часто требовалось вручную за- ми jabber-серверами в рамках проек-
вершить процесс gizmo.exe. Неболь- та IM Federation [7]. Передача речи на
шой осадок оставила функция отоб- данный момент возможна только меж-
ражения звонков на карте при вызовах ду родными клиентами Google Talk.
в ТФОП. В некоторых специфичных ус- В будущих версиях заявлена под-
ловиях клиент просто не мог подклю- держка протокола SIP. Помимо этого
читься к сети. Однако с учетом того, Google также обещает открыть сооб-
что программа активно развивается ществу детали использования XMPP
и все еще имеет официальный статус для передачи голоса в Google Talk [8].
«бета», можно надеяться, что в скором
времени эти и другие недочеты будут Работа с NAT
успешно устранены.. При работе с клиентами, находящи-
мися за NAT, Gtalk также использу-
Google Talk ет STUN. Качество реализации STUN
24 августа 2005 года состоялся офи- от Google впечатляет – во всех рас-
циальный анонс еще одной голосо- сматриваемых сегодня схемах с NAT
вой службы, на этот раз от компании Gtalk всегда удавалось передавать
Google, известной миру своей одно- Рисунок 6. Интерфейс Google Talk голосовые данные напрямую между
именной поисковой системой. Назва- почтовый адрес не является адресом участниками. Как вы помните, Skype
ние простое – Google Talk или сокра- почтовой системы Google, то вам будет в этом случае использовал «суперу-
щенно – Gtalk. предложено пригласить этого пользо- зел», а Gizmo – специализированный
Основные возможности: вателя в Gmail прямо из Google Talk. сервер в США. Субъективная оцен-
Передача голоса и мгновенных со- С пользователями, имеющими статус ка качества речи лишь подтвердила
общений. «Available», можно общаться. При голо- объективные данные – среди всех рас-
Отображение качества разговора совых сеансах качество речи в реаль- смотренных участников наилучшее ка-
в реальном времени. ном времени отображается индикато- чество речи было у Google Talk.
Уведомления о непрочитанных ром верхней панели, причем достаточ-
письмах в почтовом ящике. но корректно. Связь с телефонными сетями
Быстрое открытие ящика Gmail. Интерфейс клиента вылизан до ме- В настоящее время официально та-
лочей. Приятные меню, автодополне- кой услуги нет. Информации о ее воз-
Как видим, список невелик, но да- ния при вводе адресов, моменталь- можном появлении также нет. Однако
вайте воздержимся от поспешных вы- ное открытие ящика Gmail (без ввода изучение сигнальных сообщений, пе-
водов, ведь, как известно, больше пароля), удобные уведомления о но- редаваемых между сервером и клиен-
не значит лучше… вой почте, ненавязчивое звуковое со- тами Gogle Talk, обернулось несколь-
провождение – и все это при размере ко неожиданным сюрпризом – поми-
Знакомство дистрибутива в 900 Кб! За интерфейс мо декларирования поддержки коде-
Первой приятной особенностью про- Google Talk без разговоров получает ков GIPS и двух стандартных вариаций
граммы стал ее размер – всего лишь свои заслуженные 5 баллов. G711 в сообщениях также присутство-
900 Кб. вала следующая запись:
Для работы с Google Talk понадоби- Протоколы, диалекты… <payload-type xmlns=http://www.google.com/session/phone
лась учетная запись почтовой системы С технической точки зрения выбор id="4" name="G723"/>

Google Mail. Для получения последней Google особенно интересен. Если Таким образом, возможно, уже сей-
нужно попросить любого знакомого Skype использует собственный за- час в клиенте Google Talk есть подде-
с почтой Gmail прислать вам пригла- крытый протокол, а Gizmo Project – ржка популярного в мире IP-телефо-
шение. К сожалению, других офици- стандартный для IP-телефонии SIP, нии кодека G723! С точки зрения здра-
альных способов регистрации в Gmail то в основе Gtalk лежит протокол вого смысла это может означать од-
для людей, проживающих за предела- Jabber/XMPP, широко используемый но – интеграция с телефонными сетя-
ми США, на данный момент нет. Open Source-сообществом для пере- ми не за горами. Причем благодаря то-
После получения приглашения дачи мгновенных сообщений. Благода- му, что поддержка кодека есть непос-
и успешной регистрации можно войти ря этому совместно с Google Talk гипо- редственно в клиенте, отпадает не-
в Gtalk. Интерфейс программы типичен тетически можно использовать абсо- обходимость в перекодировании ре-
для Google – просто, удобно и в то же лютно любой Jabber-клиент. Список га- чи, что для конечных пользователей
время красиво (см. рис. 6). рантированно работающих альтерна- должно отразиться в более высоком
Имеется традиционный список тив можно найти на соответствующем качестве речи при разговорах с або-
контактов, для его наполнения можно разделе сайта google [6]. Клиенты бу- нентами телефонных сетей. Главное,
использовать адресную книгу Gmail дут работать с сервером Google, поэ- чтобы версия в клиенте Google оказа-
или просто ввести e-mail нужного че- тому создавать учетную запись в Gmail лась совместимой с тем, что называ-
ловека в поле поиска. Если введенный все равно придется. В будущем плани- ется G723.1 у телефонистов…

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

NAT и STUN нию, возникают проблемы. Так, при уста- только в том случае, если узел за NAT
На сегодняшний день подавляющее чис- новке соединения с помощью SIP участни- сам предварительно посылал им какие-
ло компьютеров подключено к Интерне- ки диалога внутри SIP-сообщений указы- либо пакеты.
ту с использованием протокола четвер- вают IP-адреса и номера портов, которые Динамический NAT, ограниченный
той версии протокола IP. Одной из извест- будут использоваться для передачи RTP- по IP-адресам и портам. То же, что
ных проблем этой версии является нехват- пакетов. Если NAT-сервер не занимается и предыдущее, только ограничения за-
ка адресного пространства. Так, для адре- анализом содержимого пакетов на уров- даны более жестко: узел в Интернет мо-
сации в IPv4 используется 32 разряда, что не протокола (а именно так все известные жет отсылать пакеты только с того пор-
позволяет обращаться к 4 294 967 296 ус- реализации и поступают), то RTP-пакеты та, на который он предварительно что-
тройств. Для Интернет на стадии его за- просто не дойдут до адресата, ведь в SIP- то получил от узла из-за NAT.
рождения (20 лет назад) эта цифра ка- сообщениях будут указаны внутренние Симметричный NAT – все пакеты от
залось огромной. С позиции настоящего немаршрутизируемые адреса участни- внутреннего IP-адреса и порта к вне-
времени эта цифра уже не кажется столь ков. Для решения этой проблемы исполь- шнему IP-адресу и порту преобразуют-
большой, напротив, многие говорят о гря- зуется протокол STUN – Simple Traversal of ся в один и тот же IP-адрес и порт NAT-
дущей нехватке IP-адресов, особенно ког- UDP through NAT [9]. Его основная идея за- сервера. Отличие заключается в том,
да начнут появляться бытовые устройства ключается в том, чтобы дать возможность что при обращении к различным вне-
(телефоны, холодильники и другие предме- клиенту определить, что он находится за шним IP-адресам порты на NAT-серве-
ты бытовой техники), подключенные к Ин- NAT, а также сообщить ему IP-адрес и но- ре тоже будут изменяться. Таким обра-
тернету. Сейчас же для «экономии» час- мер порта, которые получатся после транс- зом, только один интернет-узел может
то используется механизм NAT – Network ляции внутреннего адреса сервером NAT. посылать пакеты узлу, находящемуся
Address Translation. Общую идею NAT мож- Имея эту информацию, клиент сможет сам за NAT-сервером.
но описать так: преобразование адресов правильно указать в SIP-сообщениях вне-
одной сети в адреса другой сети. В наибо- шний адрес и номер порта для передачи Для первых трех типов NAT можно с ус-
лее популярном частном случае (подклю- RTP-данных на сервере NAT. пехом использовать внешний STUN-сер-
чение локальной сети к Интернету) это бу- С точки зрения STUN выделяются 4 ос- вер, а вот для четвертого типа этот метод
дет трансляция внутренних адресов ло- новных типа реализации NAT-серверов: уже не поможет – номера портов, назнача-
кальной сети (10.0.0.0/8, 172.16.0.0/12, Динамический неограниченный NAT. емые для пакетов к STUN-серверу и второ-
192.168.0.0/16) в один внешний интернет- В этом случае все запросы от опреде- му участнику разговора, будут разными.
адрес, полученный от провайдера. Обраба- ленного внутреннего IP-адреса и пор- Единственным возможным здесь вариан-
тывая пакеты, NAT-сервер будет просто за- та отображаются на один и тот же вне- том является интеграция функциональнос-
менять «локальные» адреса клиентов сво- шний IP-адрес и порт. Кроме того, раз- ти STUN-сервера в прокси-сервер голосо-
им интернет-адресом, а при получении от- личные узлы Интернета могут послать вого трафика. В этом случае номера пор-
ветных данных из Интернета будет прово- пакеты узлу за NAT, отправляя их на со- тов будет возможно определить, и соеди-
дить обратное преобразование. При этом ответствующий порт NAT-сервера. нение будет установлено. Вам это еще ни-
для служб, работающих на уровне IP, ника- Динамический NAT, ограниченный чего не напоминает? Правильно! Именно
ких проблем не возникает – NAT прозрач- по IP-адресам. То же, что и предыду- так и работает механизм «суперузлов» сети
но меняет заголовки IP-пакетов. С прото- щее, за исключением того, что вне- Skype, позволяющий успешно работать да-
колами более высокого уровня, к сожале- шние узлы могут посылать пакеты же из-за симметричного сервера NAT.

Чего в Gtalk нет вать таковыми контакты Gmail мож- ализована не вся желаемая функцио-
Оценивать функциональность Google но лишь с очень большой натяжкой), нальность.
Talk достаточно сложно. Если в ряду крайне ограниченны возможности по-
его конкурентов рассматривать Skype иска абонентов (глобального катало- Российский путь
и Gizmo Project, то, безусловно, наибо- га нет, только личная адресная кни- Некоторое представление о том, как
лее существенным недостатком будет га из Gmail). развивается интернет-телефония в ми-
отсутствие связи с традиционной те- ре, мы получили, но что происходит
лефонной сетью. Если же конкурента- Статус и стабильность у нас? Говоря об интернет-телефонии
ми будут «мессенджеры» от Microsoft, На данный момент сервис Gtalk офи- в России, можно упомянуть, как мини-
AOL и Yahoo, то в сравнении с ними уже циально находится в стадии Beta. Од- мум, два проекта – Mail.Ru Agent и сеть
имеющиеся на данный момент воз- нако, как показало непродолжитель- sipnet.ru.
можности передачи голоса будут бо- ное, но достаточно интенсивное тес-
лее чем достаточны. тирование, детище Google на данный Mail.ru Agent
Что же касается других полез- момент более чем стабильно – за все Детальное изучение MRA показа-
ных, но пока отсутствующих функций, время испытаний не возникло ни од- ло, что он скорее является очеред-
то в Gtalk на данный момент нет аудио- ной ошибки. ным ICQ-клоном, ориентированным
и видеоконференций, нельзя исполь- Таким образом, приставка beta в первую очередь на обмен мгновен-
зовать эмотиконы, практически отсутс- в названии данной программы скорее ными сообщениями. Голосовые функ-
твуют профили пользователей (назы- означает то, что пока в программе ре- ции номинально имеются, но качество

№11, ноябрь 2005 13


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

«Sound by Global IP Sound» шее, по сравнению с конкурентами, качес- Как результат, при нехватке пропуск-
Такую фразу можно встретить в описании тво передачи речи». ной способности качество речи у вто-
большинства рассмотренных сегодня сис- А теперь, как говорится, вопрос на за- рого клиента будет лучше.
тем (кроме сети Тарио и агента Mail.Ru). Не- сыпку – если все рассмотренные сегод- Благодаря выбору более оптимального
которые пояснения по поводу смысла этой ня сети для передачи речи используют маршрута удалось найти такой путь до-
фразы можно найти на сайте [10]. Соглас- один и тот же набор кодеков от GIPS (а су- ставки пакетов, что задержка и процент
но размещенной там информации, предме- дя по официально доступной информа- потерь оказались меньше, чем у конку-
том деятельности компании Global IP Sound ции, так оно и есть), то почему же так от- рентов.
является разработка и лицензирование личается качество передачи речи в раз-
речевых кодеков IP-телефонии, обладаю- личных сетях? Первый случай скорее является край-
щих высоким качеством речи и более ус- Можно привести два варианта ответа ностью, и его суть кратко можно выразить
тойчивых к потерям IP-пакетов. Наиболее на этот вопрос: так – «ошибка проектировщиков и про-
известным кодеком этой компании яв- Используются различные алгоритмы граммистов».
ляется iLBC – Internet Low Bitrate Codec выбора конкретного кодека из паке- Второй вариант, при прочих равных ус-
(см. [11]), описание алгоритма работы ко- та, предоставляемого GIPS. Реаль- ловиях, может оказывать очень сильное
торого можно найти в RFC-3951. Другими, но это может означать следующее – влияние на качество. Так, разговаривать
но уже закрытыми, кодеками GIPS являют- там, где одна программа выбирает, через неизвестный узел в Японии или бес-
ся – iSAC, Enhanced G711, iPCM-wb. Более например, iLBC с размером потока проводного клиента в Швейцарии (Skype),
подробное описание их особенностей мож- 13.3 кБит/с, другая благодаря исполь- как правило, оказывалось хуже, чем через
но найти в [12], кратко информацию, при- зованию более совершенных методов выделенный сервер в США (Gizmo). Луч-
водимую в данном документе, можно вы- определения имеющейся пропускной шее же качество достигалось при переда-
разить так: «Закрытые кодеки при опре- способности выбрала менее требова- че данных напрямую между участниками
деленных условиях могут обеспечить луч- тельный ISAC с битрейтом 10 кБит/с. разговора (Google Talk).

их практической реализации (по срав- Работа с NAT ля он запросто может поставить в ту-
нению с тем же GTalk) оставляет же- Как видно из названия, сеть использу- пик – «интуитивного понимания» нет.
лать лучшего. Оценку голосовых воз- ет протокол SIP. Вариант борьбы с NAT Прежде чем что-либо сделать, реко-
можностей, к сожалению, произвес- стандартен – STUN. Сеть предостав- мендуется обязательно ознакомиться
ти не удалось – при нахождении або- ляет свой сервер (stun.sipnet.ru), кли- с соответствующим разделом встро-
нентов за NAT слышимость была ну- ентская часть протокола присутству- енной системы помощи. Кроме того,
левой. ет во всех популярных SIP-клиентах. часть настроек учетной записи доступ-
С технической точки зрения MRA По информации с официального сай- на в свойствах учетной записи сервера
использует собственный бинарный та, реализация STUN в sipnet.ru поз- CommuniGate PRO. Описание этих на-
протокол (на вид достаточно ICQ- воляет работать даже из-за симмет- строек приводится уже в другом мес-
подобный), что ограничивает круг ричного NAT, хотя на практике устано- те. Другими словами, в плане «друже-
его применения только абонентами вить соединение из-за NAT при помо- любного» интерфейса spinet еще есть
mail.ru. щи клиента x-lite мне не удалось. (хо- чему поучиться…
тя Gtalk, Skype и Gizmo соединялись Второй вариант использует те же
Sipnet.ru без проблем). узлы сети Tario, но уже для вызова або-
А вот этот проект, как оказалось, име- нентов sipnet. Позвонив на номер узла
ет самое что ни на есть непосредствен- Связь с телефонными сетями Tario в вашем городе и набрав добавоч-
ное отношение к теме нашего сегод- Связь с телефонными сетями возмож- ный SIP-номер абонента, вы можете
няшнего разговора. Сеть sipnet в неко- на в двух вариантах: позвонить любому пользователю сети
тором смысле можно считать россий- Звонки абонентов sipnet в ТФОП. sipnet. Если же абонент занят или не-
ским аналогом SipPhone. Так, с 27 ок- Звонки из ТФОП абонентам spinet. доступен, вы можете оставить ему со-
тября каждый желающий может бес- общение голосовой почты (для реали-
платно подключиться к сети sipnet.ru, Для «приземления» звонков в те- зации этой возможности используется
заполнив небольшую форму на веб- лефонные сети используется платфор- платформа CommuniGate PRO). Спи-
сайте. Собственного программного ма Tario Softswitch. Одной из ее осо- сок городов и номеров телефонов уз-
клиента (как Gizmo Project у sipphone), бенностей является то, что абоненты лов доступа на данный момент приво-
у sipnet нет, вместо это предлагается сами могут выбирать конкретные уз- дится только в личном кабинете або-
использовать бесплатные версии про- лы, через которые будут совершаться нента sipnet. Звонок на узел Тарио та-
грамм, поддерживающих протокол SIP их звонки (до появления sipnet эта воз- рифицируется как звонок на обычный
(CounterPath x-lite, Microsoft Messenger можность была доступна только опера- городской телефон.
и др). Также можно использовать ап- торам, работающим с Tario). Специа-
паратные голосовые шлюзы, причем листам интерфейс-платформы более Качество речи
юридическим лицам Sipnet готов пре- чем понятен (ведь для них это и дела- К сети могут подключаться любые SIP-
доставить их бесплатно. лось), а вот начинающего пользовате- совместимые клиенты. На официаль-

14
администрирование
Таблица 1. Сводная таблица возможностей Нет четкой политики относитель-
Возможности Skype Gizmo Project (Beta) Google Talk (Beta) Sipnet.ru* но использования мгновенных со-
Связь с телефонными сетями Да Да Да Да общений.
Возможность проведения
Да Да Нет Нет Общие недочеты в реализации
конференций
служб (неполная локализация), от-
Мгновенные сообщения Да Да Да Нет
Да, за дополнительную
сутствие https в личном кабинете,
Голосовая почта Да, бесплатно Нет Да, бесплатно
плату нетипичный интерфейс форума.
Дополнительные услуги Да, средствами
Да, за дополнительную
(переадресация, автоответчик Да Нет платформы
и т. д.)
плату
CommuniGate PRO Вместо выводов
Передача файлов Да Нет Нет Нет В заключение подведем краткий итог.
Возможность работы с другими
Нет Да Нет Да Самое большое преимущество Skype –
сетями
количество пользователей. Согласи-
Шифрация трафика Да Нет Нет Нет
тесь, довольно сложно использовать
Субъективная оценка работы
4 3 5 2
с NAT (максимум – 5 баллов) Gizmo, если все знакомые в Skype,
«Прямые звонки» между
Нет Да, с помощью Bonjour Да, с помощью STUN Неизвестно а если вспомнить, что Skype еще и за-
абонентами локальной сети
крыт, то надеяться на «мягкую» миг-
Да, с использованием Да, с помощью самой Да, с использованием
Возможность записи разговоров
средств 3-х фирм программы средств 3-х фирм
Нет
рацию и вовсе не приходится. Если же
Набор речевых кодеков
Да Да Да Нет
раньше вы и ваши друзья не пользо-
от Global IP Sound
вались интернет-телефонией, посмот-
Используемый протокол Собственный SIP XMPP SIP
рите на Gizmo Project или Google Talk.
Возможность контроля качества Номинально присутствует, Есть, работает
речи в реальном времени
Нет
но работает некорректно достаточно корректно
Нет
С помощью первого можно звонить
Отображение собеседников
Нет Да Нет Нет
на обычные телефоны, второй же мо-
на карте
жет прийтись по вкусу тем, кто допол-
Возможность расширения
функциональности
Да, через API Нет Нет Нет нительно хочет сменить (или получить)
Размер дистрибутива 7,2 Мб 9,3 Мб 960 Кб Неприменимо e-mail. Владельцам широкополосного
Потребление памяти при работе 18,4 Мб 14 Мб 2,6 Мб Неприменимо подключения к Интернету (128 кбит/с
Windows, MacOS X,
Windows 2000/XP, и выше) можно посмотреть в сторону
Поддерживаемые платформы MacOS X, Linspire Windows 2000/XP Неприменимо
Linux, Pocket PC sipnet, особенно если вам часто прихо-
Статус Release Beta Beta Неприменимо дится звонить, а в плане мгновенных
* Приводятся возможности только для сети Sipnet.ru. Sipnet – это не клиент, а открытая сеть и некоторые пункты к нему (как к сети) сообщений устраивает и ICQ.
не применимы
Более подробное сравнение воз-
ном сайте имеются инструкции по на- нации), но, насколько мне известно, та- можностей всех рассмотренных се-
стройке Microsoft Windows Messenger кого сервиса у sipnet.ru пока нет. годня клиентов можно найти в Таб-
и CounterPath X-lite. При работе с этими лице 1.
программами скорее всего придется Краткий итог
использовать самые неэкономичные Основные плюсы sipnet.ru: Литература и ссылки:
кодеки G711A и G711U (MS Messenger Бесплатные внутрисетевые звонки 1. http://investor.ebay.com/event.cfm.
других и не знает, а все остальное, и голосовая почта. 2. Salman A Baset, Henning Schulzrinne, An
что входит в x-lite, на практике не под- Дешевые междугородные и между- Analysis of the Skype Peer-to-Peer Internet
держивается терминирующими шлю- народные звонки. Telephony Protocol, September 2005.
зами провайдеров). Возможность звонков абонентам 3. http://www.connect.ru/article.asp?id=4997.
Как мы помним из [11], для такой сети sipnet через выделенные го- 4. http://www.imfederation.com.
связи нам понадобится канал свя- родские номера. 5. http://www.voipuser.org/forum_topic_
зи около 80 кБит/c в каждую сторону Возможность пополнения счета че- 2567.html.
(пользователям dial-up можно не бес- рез российские системы интернет- 6. http://www.google.com/talk/otherclients.
покоиться). расчетов. html.
Если же взять SIP-клиент или аппа- Дополнительные возможности (на- 7. http://www.imfederation.com.
ратный шлюз с поддержкой G723 или стройки маршрутизации, заказ 8. http://www.google.com/talk/developer.
G729, то можно без проблем пользо- звонков). html#protocols.
ваться междугородной связью, а вот Возможности группового исполь- 9. Rosenberg J, STUN – Simple Traversal
при разговорах с другими абонента- зования. of User Datagram Protocol (UDP) Through
ми сети трудности останутся – из-за ог- Network Address Translators (NATs),
раничений нашего канала мы не смо- Основные минусы sipnet.ru RFC3489, march 2003.
жем говорить с пользователями x-lite Нет удобного и интуитивно понят- 10. http://www.globalipsound.com.
и MS Messenger. ного интерфейса пользователя. 11. Платов М. Что важно знать об IP-теле-
В принципе эта проблема могла бы Нет четких правил относительно фонии. – Журнал «Системный адми-
решаться использованием централи- используемых кодеков. нистратор», №5, май 2005 г. – 20-25 c.
зованного перекодирования (как это, Сложности в работе dial-up-клиен- 12. Global IP Sound GIPS Codecs – http://www.
например, делает sipphone при терми- тов. globalipsound.com/datasheets/Codecs.pdf.

№11, ноябрь 2005 15


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

FreeBSD tips: какими возможностями


обладает ftpd

Сергей Супрунов
Протокол FTP предназначен для передачи файлов по сети. Существует множество очень
функциональных ftp-серверов, однако для использования в «личных» целях, как правило,
вполне достаточно возможностей входящей в состав FreeBSD программы ftpd.

П
рограмма ftpd представляет собой достаточно прос- Протоколом определены два режима взаимодействия:
той ftp-сервер. В отличие от таких инструментов, активный и пассивный, понимание которых крайне важно
как ProFTPd, PureFTPd и других, ftpd не имеет раз- в случае использования в сети брандмауэров.
витых средств конфигурирования, работы с правами до-
ступа и т. д. Однако если вы не собираетесь строить пуб- Активный режим работы FTP
личный ftp-сервер, то его возможностей вам вполне хва- В активном режиме процесс установления соединения
тит для организации «бытовых» функций, таких как обмен между сервером и клиентом выглядит следующим об-
файлами между сервером и вашей рабочей машиной, на- разом:
пример, для размещения HTML-страниц на веб-сервере Клиент с непривилегированного порта (с номером боль-
или настройки простейшего резервирования. ше 1024) отправляет запрос на порт 21 сервера (порт уп-
равления).
Начнем с теории После процедуры авторизации (команды USER и PASS)
Для начала давайте коротко ознакомимся с самим прото- клиент начинает прослушивать порт N и отправляет
колом FTP. Он описывается довольно объемным докумен- на сервер команду PORT, сообщающую ему, какой имен-
том RFC 959 и определен только для транспортного прото- но порт открыт.
кола TCP; UDP-реализации, в отличие от TFTP, нет. Сервер, получив команду PORT, устанавливает соеди-
Характерной отличительной особенностью FTP от дру- нение с указанным портом N со своего порта 20. Это со-
гих протоколов является то, что он для своей работы за- единение используется для передачи данных.
действует два порта – порт данных и порт управления.
Порт управления используется для установления соеди- Посмотрим, как это происходит на практике. Для эму-
нения между клиентом и сервером, для управления режи- ляции работы управляющего соединения вполне подой-
мами работы и т. д. дет стандартная утилита telnet. Чтобы посмотреть, как ра-
В то время как порт данных служит для передачи запра- ботает порт данных, воспользуемся небольшой програм-
шиваемой информации. мкой на Python:

16
администрирование
#!/usr/local/bin/python Теперь по команде LIST, запрашивающей список фай-
# lystener – скрипт для прослушивания указанного порта
лов в текущем каталоге, сервер устанавливает соедине-
import sys, socket ние с указанным портом (со стороны сервера используется
host = str(sys.argv[1]) порт 20) и передает запрошенные данные, которые и фикси-
рует наш сценарий. После выполнения команды соединение
port = int(sys.argv[2])
по порту данных разрывается, но управляющее соединение
s = socket.socket() сохраняется, пока не будет подана команда QUIT.
s.bind((host, port))
s.listen(1) Как видите, активный режим удобен для администра-
m = s.accept() тора сервера, поскольку при этом задействуются только
print 'Connected on', m[1]
порты 20 и 21 (причем инициализация соединения – только
while(1): на 21 порту), а остальные можно смело закрыть брандмау-
rsv = str(m[0].recv(256))
print rsv эром. С другой стороны, для клиента этот режим крайне не-
if rsv == '': приятен, так как вынуждает держать открытыми непривиле-
print 'No data more. Connection is closed.'
break; гированные порты. Поскольку общепринятой практикой яв-
ляется запрет любых входящих соединений на клиентские
m[0].close()
s.close() машины (а в случае работы через NAT вообще требуется
выполнять «проброс» внешних соединений до клиента либо
Этот скрипт будет прослушивать соединение на ука- организовывать работу в режиме прокси-сервера), то в этом
занном в параметрах командной строки порту и выводить плане более удобным является пассивный режим.
на экран всю полученную через созданный сокет инфор-
мацию. Пассивный режим работы FTP
Откроем две терминальные сессии, которые услов- В этом случае все соединения инициируются клиентом,
но назовем cmd (порт управления, обмен данными пока- что позволяет обойти ограничения, налагаемые обычно
зан зеленым шрифтом) и data (порт данных, соответству- брандмауэром и серверами NAT. Процесс организации со-
ющие строки – серые). Ввод пользователя выделен крас- единения теперь выглядит следующим образом:
ным шрифтом. На приведенном ниже листинге строки обо- Клиент с непривилегированного порта (с номером боль-
их терминалов показаны вперемежку, отображая хроноло- ше 1024) отправляет запрос на порт 21 сервера (порт уп-
гию их работы: равления).
После процедуры авторизации (команды USER и PASS)
cmd: serg$ telnet localhost 21
cmd: Trying 127.0.0.1...
клиент отправляет на сервер команду PASV, информи-
cmd: Connected to localhost. рующую о том, что он намерен работать в пассивном
cmd: Escape character is '^]'. режиме.
cmd: 220 myserver.ru FTP server (Version 6.00LS) ready.
cmd: USER username Сервер открывает непривилегированный порт и сооб-
cmd: 331 Password required for username. щает его номер клиенту.
cmd: PASS userpasswd
cmd: 230 User username logged in, access restrictions apply.
Клиент со своего порта N инициирует соединение на ука-
data: serg$ ./lystener localhost 25623 занный сервером порт, который и используется для об-
cmd: PORT 127,0,0,1,100,23 мена данными.
cmd: 200 PORT command successful.
cmd: LIST
cmd: 150 Opening ASCII mode data connection for '/bin/ls'. Чтобы смоделировать работу FTP-клиента в пассивном
data: Connected on ('127.0.0.1', 20)
режиме достаточно двух telnet-сессий:
data: total 8
data: drwxr-xr-x 2 0 0 512 Jun 4 2001 bin
data: drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdata cmd: serg$ telnet localhost 21
data: drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankit cmd: Trying 127.0.0.1...
data: drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updata cmd: Connected to localhost.
data: cmd: Escape character is '^]'.
data: cmd: 220 myserver.ru FTP server (Version 6.00LS) ready.
data: No data more. Connection is closed. cmd: USER username
cmd: 226 Transfer complete. cmd: 331 Password required for username.
cmd: QUIT cmd: PASS userpasswd
cmd: 221 Goodbye. cmd: 230 User username logged in, access restrictions apply.
cmd: Connection closed by foreign host. cmd: PASV
cmd: 227 Entering Passive Mode (127,0,0,1,245,5)
data: serg$ telnet localhost 62725
Итак, сначала мы устанавливаем соединение с пор- data: Trying 127.0.0.1...
том 21 сервера, проходим процедуру аутентификации. За- data: Connected to localhost.
тем запускаем во втором терминале наш скрипт lystener на data:
cmd:
Escape character is '^]'.
LIST
порту 25623 хоста localhost. Теперь даем серверу команду cmd: 150 Opening ASCII mode data connection for '/bin/ls'.
PORT, сообщая, на каком именно порту мы ждем соедине- data: total 8
data: drwxr-xr-x 2 0 0 512 Jun 4 2001 bin
ния. Обратите внимание на синтаксис команды: в качест- data: drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdata
ве аргументов указываются шесть октетов (первые четыре data: drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankit
соответствуют IP-адресу хоста, последующие два – стар- data:
data:
drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updata
Connection closed by foreign host.
ший и младший байты номера порта). В нашем случае порт cmd: 226 Transfer complete.
данных – 100*256 + 23 = 25623. cmd: QUIT

№11, ноябрь 2005 17


администрирование
cmd: 221 Goodbye. Если по соображениям безопасности вы не используете
cmd: Connection closed by foreign host. inetd, а также если FTP-доступ к вашему серверу выполня-
ется достаточно часто, то выгоднее запустить ftpd в режи-
На этот раз оба соединения устанавливаются со сторо- ме демона (с ключом -D). В этом случае сервер будет пос-
ны клиента. Порт, на котором следует открывать соедине- тоянно находиться в памяти.
ние для передачи данных, сервер указывает в ответ на ко- В стартовых сценариях FreeBSD не предусмотрено за-
манду PASV (в данном случае 245*256 + 5 = 62725). пуска ftpd в режиме демона, но нужный скрипт несложно
Однако на сервере при этом должны быть разрешены написать самостоятельно. Поместите в каталог /etc/rc.d та-
соединения на непривилегированные порты, что не поз- кой файл ftpd:
воляет достаточно жестко ограничивать доступ. Как вы,
должно быть, заметили, в пассивном режиме 20 порт не ис- #!/bin/sh
#
пользуется. # PROVIDE: ftpd
# REQUIRE: DAEMON LOGIN
# KEYWORD: shutdown
Расширенные режимы
В дополнение к описанным выше, документ RFC 2428 оп- . /etc/rc.subr
ределяет так называемые расширенные режимы, которые name="ftpd"
позволяют работать в сетях IPv6. В расширенных режимах rcvar=`set _ rcvar`
command="/usr/libexec/${name}"
вместо команд PORT и PASV используются EPRT и EPSV
соответственно. Синтаксис EPRT следующий: load _ rc _ config $name
ftpd _ flags="-D ${ftpd _ flags}"
run _ rc _ command "$1"
EPRT |протокол|адрес|порт|
Не забудьте сделать его исполнимым (chmod a+x ftpd).
Здесь «протокол» может иметь значение 1 (IPv4) или Чтобы этот сценарий мог запускать сервер ftpd, в файл
2 (IPv6), «адрес» – IP-адрес, синтаксис которого должен /etc/rc.conf нужно добавить следующие строки:
соответствовать используемому семейству протоколов,
«порт» – номер порта. ftpd _ enable="YES"
ftpd _ flags="-E"
Команда EPSV может в качестве параметра прини-
мать 1 или 2 (указывает семейство протоколов, которое Вторая строка необязательна и задает дополнитель-
поддерживает клиент). Кроме того, специальная коман- ные параметры запуска (ключ -D будет добавлен приве-
да EPSV ALL информирует сервер о том, что в дальней- денным выше сценарием автоматически). Теперь ftpd бу-
шем будет использоваться только команда EPSV, и все дет автоматически стартовать при загрузке операционной
остальные команды на установление соединения следу- системы. Кроме того, вы можете вручную запускать и ос-
ет отбрасывать. танавливать его:

Что поддерживает ftpd # /etc/rc.d/ftpd start


# /etc/rc.d/ftpd stop
Сервер ftpd, входящий в состав FreeBSD, по умолчанию мо-
жет обслуживать как активные, так и пассивные соедине- Теперь ftpd будет вести себя так же, как и любой дру-
ния (в том числе и расширенные), режим работы для конк- гой сервис.
ретного сеанса определяется клиентом. Работать ftpd мо- Поговорим о его работе и настройке.
жет как в режиме демона (постоянно присутствует в памя-
ти и самостоятельно обслуживает соединения на 21 порт), Как работает ftpd
так и в сотрудничестве с супердемоном inetd, который осу- Сервер ftpd поддерживает авторизованный и анонимный
ществляет вызов сервера при получении входящего соеди- доступ. В любом случае в начале каждого сеанса прово-
нения на порту 21. дится аутентификация пользователя, после чего пользо-
Если доступ на ваш сервер по FTP требуется доволь- ватель авторизуется для работы в соответствие со следу-
но редко, то более удобным выглядит использование inetd ющими условиями:
для запуска сервера (если, конечно, этот демон у вас ис- Если пользователь имеет пустой пароль, либо его обо-
пользуется). В этом случае не придется держать в памяти лочка по умолчанию отсутствует в /etc/shells, либо его имя
сервер ftpd постоянно – он будет загружаться лишь для об- (или наименование группы, членом которой он являет-
служивания конкретного соединения. ся) указано в файле /etc/ftpusers, то соединение разры-
Типичная строка запуска в /etc/inetd.conf выглядит сле- вается – такому пользователю запрещен доступ по ftp.
дующим образом: Когда имя пользователя или его группа указаны в фай-
ле /etc/ftpchroot, то разрешается ограниченный доступ
#ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l – пользователь может работать только в пределах свое-
го домашнего каталога.
Снимите с нее комментарий, пошлите сигнал HUP про- В случае, когда в качестве имени указано ftp или
цессу inetd, и вы получите работающий ftp-сервер, настроен- anonymous, соединение рассматривается как аноним-
ный по умолчанию. О том, что это за настройки и как их мож- ное (подробнее об анонимном доступе рассказано в сле-
но изменить, мы поговорим в следующем разделе. дующем подразделе).

18
администрирование
Если же ни одно из приведенных выше условий не вы- командной строки. Если вы запускаете ftpd из inetd, добавьте
полнено, то в случае указания правильного пароля поль- нужные параметры в соответствующей строке файла inetd.
зователь получает ftp-доступ ко всей файловой систе- conf (по умолчанию там записан только ключ -l). Если же
ме согласно имеющимся у него правам. предпочтете воспользоваться приведенным выше сцена-
рием для запуска ftpd в режиме демона, то дополнительные
Анонимный доступ ключи можно указать в файле rc.conf, в строке ftpd_flags.
Чтобы разрешить анонимный доступ по FTP, вам потребу- Некоторые ключи, которые могут быть полезны:
ется вручную создать системного пользователя с именем -D: запускать ftpd в режиме демона.
ftp. У этого пользователя должна быть «легальная» оболоч- -a <адрес>: в режиме демона принимать соединения
ка (одна из указанных в /etc/shells), и он должен иметь до- только на указанный IP-адрес.
машний каталог, в котором и будут размещаться файлы, до- -d: включить режим отладки (подробная информация о ра-
ступные анонимному пользователю. Также у него не может боте будет выдаваться серверу syslog как LOG_FTP).
быть пустого пароля. По умолчанию, анонимный пользова- -h: не выводить информацию о системе в сообщениях
тель не может модифицировать или удалять существующие сервера.
файлы. Разрешено только создавать новые при условии, -l: протоколировать все сессии (обычно используется
что пользователь ftp будет иметь достаточно прав на запись. /var/log/xferlog).
Дополнительно регулировать доступ к каталогам и фай- -A: разрешить только анонимный доступ.
лам (например, полностью запретить запись в определен- -M: запретить анонимным пользователям создавать пап-
ную папку) можно силами операционной системы, выстав- ки.
ляя соответствующие права пользователю ftp. В частнос- -m: разрешить анонимным пользователям модифици-
ти, рекомендуется запрещать для пользователя ftp запись ровать существующие файлы (если для этого достаточ-
в его домашний каталог, чтобы исключить возможность пе- но системных прав).
реполнения раздела, на котором он размещен. -o, -O: разрешить только запись на сервер всем пользо-
вателям (-o) или только анонимному пользователю (-O).
Ограниченный доступ В частности, таким образом можно организовать сбор
В том случае, если имя пользователя присутствует в фай- с удаленных серверов файлов резервных копий, чтение
ле /etc/ftpchroot, то соответствующий процесс запускает- которых пользователями не предусмотрено.
ся в chroot-окружении, ограничивая пользователю доступ -r: перевести сервер в режим «только для чтения». Лю-
только его домашним каталогом (или тем, который указан бая модификация размещенных данных будет запре-
во втором поле файла ftpchroot). При необходимости орга- щена.
низовать такую работу для большого числа пользовате-
лей (например, дать всем абонентам доступ для обновле- Дополнительную информацию всегда можно найти
ния своих домашних веб-страничек), в ftpchroot можно ука- на странице руководства man ftpd(8).
зать общую для них группу, предварив ее имя символом @.
Во втором поле дополнительно может быть указан ката- Заключение
лог, который следует использовать в качестве корневого Как видите, ftpd вполне пригоден для решения большинства
для соответствующего пользователя или группы. Вот при- типовых задач по обмену файлами. Если ваши потребности
мер такого файла: не выходят за пределы его возможностей, то вряд ли имеет
смысл обременять систему установкой дополнительных па-
vasya кетов. Однако если вам требуется создать «промышленный»
petya /var/db/petya
@dialup FTP-сервер, позволяющий более гибко управлять правами
доступа, пользователями, параметрами передачи файлов,
Теперь Вася и все пользователи группы dialup смогут то воспользуйтесь более серьезным решением.
работать только в пределах своих домашних каталогов, а
для Пети в качестве рабочей будет определена указанная
папка /var/db/petya. С помощью разделителя /./ можно ука-
зать каталог, отличающийся от корневого, который ста-
нет текущим:

serg /home/serg/./public _ html

В данном случае для пользователя serg доступ будет


ограничен каталогом /home/serg, но в качестве текущего
при входе на сервер установится /home/serg/public_html.

Как подстроить ftpd под собственные


задачи
Некоторые настройки сервера, в том числе и касающиеся
ограничения доступа, можно выполнить с помощью ключей

№11, ноябрь 2005 19


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

Автоматизируем установку драйверов


в Windows

Алексей Барабанов
Автоматизация установки MS Windows до предела сокращает вмешательство оператора.
Можно сказать, что практически исключает. Но при встрече с нестандартным оборудованием
преимущество оборачивается непреодолимой, на первый взгляд, преградой.

В
серии статей на тему автоматизации работ в сре- системе устройства и нажать нужную клавишу. Тогда сис-
де MS Windows, опубликованных в нашем журнале тема остановит процесс установки и «попросит» устано-
[1, 2, 3, 4], не затронуты вопросы автоматической вить дискету с драйверами (рис. 2).
установки драйверов. В большинстве случаев это не ме- Увы, такой дискеты нет в дистрибутиве эмулятора, и ис-
шает работе, так как используемая операционная систе- пользование SCSI-диска не рекомендовано для виртуаль-
ма славится тем, что имеет в своем дистрибутиве очень ных машин MS Windows XP. Хотя, сам драйвер присутствует
широкий набор драйверов. И традиционно каждый изго- в составе VMWare Tools. Тогда подготовим дискету вручную.
товитель нового устройства стремится, чтобы его драйвер Сначала вставим чистый диск и сформатируем его:
был представлен в дистрибутиве MS Windows. А если по-
падается «несчастливое» устройство, которое там отсутс- # fdformat /dev/fd0
твует, то драйвер можно поставить и после, хотя это и пе- Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
реведет установку из статуса автоматической в рукотвор- Formatting ... done
Verifying ... done
ную. Но, увы, дело оборачивается полным крахом, если
в качестве «незнакомого» для этой чудной ОС выступает # mkdosfs /dev/fd0
устройство, на которое далее предполагается установка, mkdosfs 2.10 (22 Sep 2003)
Device mounted using subfs, please do not access it while creating filesystem
то есть дисковый накопитель или его контроллер.
Далее всё будем рассматривать на примере созданно- # umount /dev/fd0
# mkdosfs /dev/fd0
го ранее, как указано в перечисленных выше статьях, дис-
трибутивного диска MS Windows XP Professional для авто- mkdosfs 2.10 (22 Sep 2003)

матической установки, запускаемой в виртуальной маши- # mount /dev/fd0


не VMWare. Но все сделанные выводы и рассмотренные
приемы справедливы и для других архитектур. Например, Теперь примонтируем диск с VMWare Tools и скопируем
для широко распространенных компьютеров на основе в корень чистого диска файлы с драйверами:
схемных решений для процессоров AMD.
Итак, в дистрибутиве MS Windows XP отсутствует # mount -t iso9660 -o ro,loop ↵
/usr/lib/vmware/isoimages/windows.iso /mnt
драйвер контроллера BusLogic SCSI, и если в настройках # cp -v /mnt/program\ files/VMware/VMware\ ↵
VMWare выбрать в качестве дискового устройства SCSI- Tools/Drivers/scsi/win2k/* /media/floppy
диск, то попытка поставить ОС в среде такой виртуальной `/mnt/program
`/mnt/program
files/VMware/VMware
files/VMware/VMware
Tools/Drivers/scsi/win2k/disk.tag' -> `/media/floppy/disk.tag'
Tools/Drivers/scsi/win2k/txtsetup.oem' -> `/media/floppy/txtsetup.oem'
машины завершится неудачей (рис. 1), так как именно кон- `/mnt/program
`/mnt/program
files/VMware/VMware
files/VMware/VMware
Tools/Drivers/scsi/win2k/vmscsi.cat' -> `/media/floppy/vmscsi.cat'
Tools/Drivers/scsi/win2k/vmscsi.inf' -> `/media/floppy/vmscsi.inf'

троллер BusLogic эмулируется в VMWare. `/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/vmscsi.sys' -> `/media/floppy/vmscsi.sys'

Иначе говоря, система не нашла, куда ставиться. Но есть # umount /dev/fd0


штатный ход – в процессе установки подгрузить драйвера.
Для этого надо «поймать» на экране установки предложе- Полученный диск можно использовать при установке
ние нажать <F6> как указание о применении незнакомого MS Windows. Вставим его в привод в ответ на приглаше-

20
администрирование
ние и нажмем «S», как требуется. Система прочтет содер-
жимое диска и предложит подтвердить выбор (рис. 3) на-
жатием «Enter».
Далее система предложит добавить еще какие-нибудь
устройства (рис. 4), на что в нашем случае ответим отка-
зом опять же путем нажатия «Enter».
К сожалению, все перечисленные действия не приве-
дут к успеху. Поскольку в использованном диске автома-
тической установки нет возможности указать иное уст-
ройство загрузки дистрибутивных файлов, чем CD-ROM
и в ответ на запрос, где искать использованный драйвер
vmscsi.sys (рис. 5), приходится или прекращать установку Рисунок 1. Не найдено ни одного дискового устройства
вообще, или, понадеявшись на «авось», пропускать копи-
рование этого файла.
И так как теперь для работы второй фазы установки сис-
темы нужны еще и использованные драйвера SCSI, то не-
удачный финал предопределен (рис. 6).
Ничего не остается, как обратиться к источникам [5, 6, 7].
Здесь можно и закончить нашу историю, мол, читайте и воп-
лощайте. Но, к сожалению, информация с [5] весьма скуд-
на, с [6] противоречива и местами ошибочна, а с [7] откро-
венно наивна, как всякий дословный перевод техническо-
го источника. Хотя, безусловно, если нужно узнать и по-
нять все, то и прочесть кроме этой статьи придется также
все перечисленное.

Добавляем драйверы
устройств загрузки
Итак, проблема заключена в том, что установщик ОС дол- Рисунок 2. Запрос дискеты с драйверами
жен использовать драйвера применяемых дисковых ус-
тройств в процессе установки и далее. В данном случае
все нужные файлы содержатся в /mnt/program\ files/VMware/
VMware\ Tools/Drivers/scsi/win2k. Обычно драйвера постав-
ляются в виде исполняемого бинарного файла с суффик-
сом sys, далее обязательно есть файл с описанием и суф-
фиксом inf, и возможно еще некоторые файлы. Но все они
должны быть упомянуты в строках inf-файла обычно в сек-
ции [SourceDiskFiles]. Иногда все это еще и сопровождается
файлом с цифровой подписью – файл с суффиксом cat.
Точно следуя первой части рецепта с [8], внесем необхо-
димые изменения в файл TXTSETUP.SIF. Нахождение это-
го файла и все сопутствующие проблемы сборки готового
диска с ним уже обсуждались в [1,2,3,4] и здесь мы не бу-
дем еще раз это рассматривать. Вот модификация в фор-
мате, пригодном для автоматического патчирования:
Рисунок 3. Выбор драйвера с дискеты
# diff -Naur TXTSETUP.SIF.orig TXTSETUP.SIF +
*PNP0300 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318}
--- TXTSETUP.SIF.orig 2005-10-27 10:15:56.000000000 +0400 *PNP0301 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318}
+++ TXTSETUP.SIF 2005-10-29 21:32:40.000000000 +0400 *PNP0302 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318}
@@ -206,6 +206,9 @@ @@ -19281,6 +19286,7 @@
isapnp.sys = 1,,,,,,3 _ ,4,1,,,1,4 dac2w2k = dac2w2k.sys,4

+vmscsi.sys = 1,,,,,, _ x,4,1,,,1,4 +vmscsi = vmscsi.sys,4


+
+ [BootBusExtenders.Load]
ksecdd.sys = 100,,,,,, _ 5,4,0,0,,1,4 @@ -21639,6 +21645,7 @@
mountmgr.sys = 100,,,,,,3 _ ,4,0,0,,1,4 perc2 = "Dell PERC 2|3 RAID-╙╝╜БЮ╝╚╚╔Ю"
mrxdav.sys = 100,,,,,,,4,0,0 perc2gat = "Dell PERC 2/3 RAID-╙╝╜БЮ╝╚╚╔Ю (Gatling)"
@@ -18836,6 +18839,8 @@
*PNP0E02 = "pcmcia" +vmscsi = "VMware SCSI Controller"
*PNP0700 = "fdc"
[BootBusExtenders]
+PCI\VEN _ 104B&DEV _ 1040 = "vmscsi" pci = "└Ю═╘╒╔Ю Х╗╜К PCI",files.pci,pci

№11, ноябрь 2005 21


администрирование
мат. Сам файл vmscsi.sys (или файлы, если их много) на-
до просто скопировать в неизменном виде в директорию
i386 дистрибутивного диска и именно там будет его ис-
кать установщик.
Затем добавляем строку в секцию [HardwareIdsDatabase].
В этой секции описывается соответствие номеров уст-
ройств PCI и их драйверов. В нашем случае будет так PCI\
VEN_104B&DEV_1040 = «vmscsi». Т.е. указывается код
производителя, код устройства и имя файла с драйвером.
Как только установщик обнаруживает некое PCI-устройс-
тво, он ищет по этим кодам драйвер, ему соответствующий,
и затем грузит его, как описано чуть выше. Значения этих
констант можно взять из соответствующего этому драйве-
ру файла INF.
Ну и наконец надо связать с этим драйвером некую стро-
Рисунок 4. Запрос дополнительных драйверов ку комментария, что и делается путем добавления строки
в секцию [SCSI]: vmscsi = «VMWare SCSI Controller». Содер-
жание строки не имеет никакого принципиального значе-
ния для работы системы, но отсутствие ее вовсе недопус-
тимо и приводит завершению установки из-за отсутствия
параметра, описывающего драйвер.
Всего перечисленного должно быть достаточно по логи-
ке. Но только не в MS Windows. В этой чудной системе на-
до еще и специально указать в секции [SCSI.load] загруз-
ку нужного драйвера vmscsi = vmscsi.sys,4 из указанного
места в указанном формате, который далее будет связан
с соответствующим ему PCI-устройством и описание кото-
рого будет взято из соответствующей строки... Уф! Вот те-
Рисунок 5. Vmscsi.sys не найден на источнике установки перь все: файл драйвера скопирован куда надо, файл ука-
заний установщику «что делать», модифицирован как на-
до. Можно собирать диск и устанавливать систему. Сбор-
ка производится, как было описано в [1, 2, 3, 4]. После ус-
тановки обнаруживаем, что драйвер благополучно загру-
жен в систему (рис. 7).
Заметим, никаких дополнительных манипуляций с раз-
мещением таких файлов в директориях Drivers и подобное,
что предлагается в [6, 7, 8], делать не надо. В этом вопро-
се указанные источники заблуждаются.
Рисунок 6. «Голубая смерть»
Точно таким же образом можно на этапе загрузки под-
Здесь добавления вносятся в три секции файла ключить и все остальные драйверы дисковых устройств. Ес-
TXTSETUP.SIF. ли один и тот же драйвер используется для нескольких воз-
Во-первых, в секции [SourceDisksFiles] описываем файл можных PCI устройств, например viamraid, то надо для каж-
(или файлы, если их много), который оригинально размеща- дого набора PCI индексов записать отдельную строку в сек-
ется в директории i386 дистрибутивного диска. Но, как ви- ции [HardwareIdsDatabase], например так:
дите, формат строки немного отличается от предложен-
ного в [8]. Полностью все опции управления описаны в [9]. PCI\VEN _ 1106&DEV _ 3249 = "viamraid"
PCI\VEN _ 1106&DEV _ 3149 = "viamraid"
И здесь обнаруживается лишнее действие – сжатие фай- PCI\VEN _ 1106&DEV _ 3164 = "viamraid"
ла утилитой makecab.exe. Поскольку у нас вся сборка про-
изводится в среде GNU Linux, то ради экономии полутора Если же производитель устройств с разными PCI-ин-
десятков килобайт не будем портить чистоту среды и запус- дексами сотворил драйвера с одинаковыми именами (фир-
кать MS Windows, только чтобы воспользоваться отсутству- ма Intel очень такое любит), то ничего не мешает эти драй-
ющей в Linux утилитой makecab. И всего-то, что придется вера переименовать как угодно и соответственно изме-
сделать – поменять «3_» в строке описания на «_x». Полу- нить все аналогичные строки в TXTSETUP.SIF. Например,
чилось vmscsi.sys = 1,,,,,,_x,4,1,,,1,4. Число пробелов вокруг для драйвера BusLogic из VMWare Tools название файла
знака «=» не принципиально, а вот число запятых – очень можно поменять на vmscsi1.sys без какого-либо ущерба
даже. Вообще, похоже на колдовское заклинание. Главное, работоспособности.
не сбиться ни в одном знаке, а то вместо «грозы» выйдет Политика подключения драйверов должна быть макси-
«коза», а может, что и похуже. Но смысл этой строки по- мально объемлющей. То есть можно включить в загрузку
нятен. Здесь описываются файл с драйвером и его фор- все возможные драйверы, какие найдутся в коллекции со-

22
администрирование
здателя загрузочного диска. Система сама выберет из это-
го списка те, что соответствуют реально присутствующим
в компьютере устройствам.

Добавляем драйверы устройств


через OemPnPDriversPatch
Как видно все на том же рис. 7 в виртуальном компьюте-
ре присутствует устройство, драйвер для которого не был
найден, это устройство SVGA, вместо которого использо-
ван драйвер VGA общего назначения. И устройство, драй-
вер которого определен в нашем случае недостаточно вер-
но, это драйвер сетевой карты. Использован присутству-
ющий в MS Windows драйвер AMD PCNET, в то время как
в VMWare есть собственный драйвер сетевой карты.
Все драйвера, которые предназначены для использо-
вания с виртуальным оборудованием VMWare, можно най- Рисунок 7. Vmscsi.sys установлен в систему
ти в примонтированном образе VMWare Tools, а именно
в /mnt/program\ files/VMWare/VMWare\ Tools/Drivers. Драй-
вера, подходящие для использования с MS Windows XP, со-
держатся внутри поддиректорий win2k или winnt2k. Возь-
мем все, кроме уже использованного драйвера scsi, и ско-
пируем в директорию дистрибутива $OEM$/$1/Drivers/Very_
looooong_filename. Такое имя выберем для того, чтобы до-
казать, что источники [6, 7] не правы, ограничивая имена
внутри дистрибутивного диска правилом 8.3. В процессе ус-
тановки содержимое дистрибутива, включая Drivers/Very_
looooong_filename, будет перенесено на загрузочный диск.
Для того чтобы использовать эти данные в настройке сис-
темы запишем (или раскомментируем) специальные стро-
ки в WINNT.SIF в секции [Unattended]:

OemPnPDriversPath="Drivers\Very _ looooong _ filename"


DriverSigningPolicy=Ignore Рисунок 8. Устанавливаем дополнительные драйверы
Первая строка укажет путь поиска файлов, а вторая поз- ции [Display] файла WINNT.SIF. Все перечисленные драй-
волит проигнорировать несоответствие подписей драйве- веры вместе со всеми необходимыми файлами были ско-
ров доверенным сертификатам, размещенным в дистри- пированы из директории C:\Drivers\Very_looooong_filename
бутиве. В целевой директории должны собраться следу- внутрь установочной директории MS Windows XP, что вид-
ющие файлы: но на рис. 8 в окошке поиска. Здесь можно сделать вывод,
что директорию с драйверами можно в конце установки уда-
# ls -l /uawsp2/\$OEM\$/\$1/Drivers/Very _ looooong _ filename лять, так же как и директорию с дистрибутивами устанав-
total 204 ливаемых программ в секции [GuiRunOnce]:
drwxr-xr-x 2 root root 4096 Oct 29 17:48 .
drwxr-xr-x 3 root root 4096 Oct 29 17:48 .. # grep -n rmdir WINNT.SIF
-r--r--r-- 1 root root 1929 Mar 23 2005 vmmemctl.inf
-r--r--r-- 1 root root 5452 Mar 23 2005 vmmemctl.sys 539:"%windir%\system32\cmd.exe /c rmdir ↵
-r--r--r-- 1 root root 7890 Mar 23 2005 vmmouse.cat %systemdrive%\InstData /s /q"
-r--r--r-- 1 root root 1312 Mar 23 2005 vmmouse.inf 540:"%windir%\system32\cmd.exe /c rmdir ↵
-r--r--r-- 1 root root 3904 Mar 23 2005 vmmouse.sys %systemdrive%\Drivers /s /q"
-r--r--r-- 1 root root 7900 Mar 23 2005 vmware-nic.cat
-r--r--r-- 1 root root 3561 Mar 23 2005 vmware-nic.inf
-r--r--r-- 1 root root 79584 Mar 23 2005 А вот парочка драйверов vmmemctl.sys и vmmouse.sys
vmx_fb.dll
-r--r--r-- 1 root root 2400 Mar 23 2005 так и не нашла себе применения. И поэтому осталась толь-
vmx_mode.dll
-r--r--r-- 1 root root 9044 Mar 23 2005
ко в C:\Drivers\Very_looooong_filename.
vmx_svga.cat
-r--r--r-- 1 root root 2396 Mar 23 2005 vmx_svga.inf
-r--r--r-- 1 root root 14912 Mar 23 2005 Еще одно интересное наблюдение было сделано в [10].
vmx_svga.sys
-r--r--r-- 1 root root 7860 Mar 23 2005 Установщик не ищет драйвера и их INF-файлы во вложен-
vmxnet.cat
-r--r--r-- 1 root root 3567 Mar 23 2005 vmxnet.inf
-r--r--r-- 1 root root 22528 Mar 23 2005 ных директориях от указанной в OemPnPDriversPath, но ес-
vmxnet.sys
ли записать несколько путей через точку с запятой, то они
После установки наблюдаем следующую картину будут обрабатываться в порядке сортировки имен. То есть
(рис. 8). если некоторые драйвера, например чипсета, требуется
Автоматически были установлены драйверы SCSI, SVGA установить первыми, то директорию с ними надо назвать
(и теперь экран настроен в разрешение 800х600), специаль- именем с использованием символов с меньшими номера-
ный драйвер сетевой карты, то есть так как задано в сек- ми в кодировке.

№11, ноябрь 2005 23


администрирование
вочного диска. Все нужные драйверы и сопровождающие
их файлы следует разместить внутри директории $OEM$\
Drivers. Причем внутри дерева вложенных директорий лю-
бой глубины. Можно выбирать любые мнемонические име-
на и группировать драйверы хоть по производителям, хоть
по классу устройств.
Если для работы был использован диск, подготовлен-
ный в [1, 2, 3, 4], то должно получиться примерно следу-
ющее:

# ls -l /uawsp2/\$OEM\$
total 180
drwxr-xr-x 4 root root 4096 Mar 22 2005 $$
drwxr-xr-x 6 root root 4096 Oct 31 00:11 $1
drwxr-xr-x 5 root root 4096 Oct 30 22:21 .
drwxr-xr-x 5 root root 4096 Apr 21 2005 ..
-rw-r--r-- 1 root root 118272 Dec 31 2002 AutoIt3.exe
-rw-r--r-- 1 root root 27 Mar 28 2005 Cmdlines.txt
Рисунок 9. Установка драйвера vmmouse drwxr-xr-x 3 root root 4096 Oct 30 22:21 Drivers
-rw-r--r-- 1 root root 264 Oct 5 22:51 Drivers.au3
В формате WINNT.SIF используется 8-битная кодиров- -rw-r--r-- 1 root root 20992 Dec 31 2002 SetupCopyOEMInf.exe
-rw-r--r-- 1 root root 3584 Dec 31 2002 WatchDriverSigningPolicy.exe
ка. Для России это cp866. Хотя достаточно добавить циф- -rw-r--r-- 1 root root 113 Mar 28 2005 mkusers.cmd
ровой префикс к имени директории с драйверами, посколь-
ку порядок цифр в всех кодировках совпадает. По мнению Как уже было сказано, в Drivers кладутся нужные драй-
авторов [10], логика работы системы такова: так как драй- веры. AutoIt3.exe – это интерпретатор скрипта Drivers.au3:
вера чипсета необходимы для работы многих других ус-
тройств, то установка в первую очередь зависимых уст- # cat /heap2/unattended-win/uawsp2/\$OEM\$/Drivers.au3
ройств не произойдет должным образом, если еще не ус- ProcessSetPriority("setup.exe",0)
тановлены драйвера основных. Run(@ScriptDir & "\WatchDriverSigningPolicy.exe")
ProcessWait("WatchDriverSigningPolicy.exe")
Но проблема с неустановленными драйверами vmmemctl. RunWait(@ScriptDir & "\SetupCopyOEMInf.exe Drivers")
sys и vmmouse.sys таким путем не решается. Так как эти ProcessClose("WatchDriverSigningPolicy.exe")
ProcessSetPriority("setup.exe",2)
драйвера проиграли конкуренцию в PnP тем, которых пред-
почел PnP-резолвер, использовавший информацию из INF- А SetupCopyOEMInf.exe и WatchDriverSigningPolicy.exe –
файлов. И эти драйвера приходится добавлять вручную че- это простенькие программки, первая из которых выполня-
рез «Мастер обновления оборудования». Выбираем «Уста- ет соответствующий системный вызов [14], а вторая избав-
новку из указанного места» и режим «Не выполнять поиск. ляет от диалога с вопросом о доверии поставщику в слу-
Я сам выберу нужный драйвер» (см. рис. 9). чае нахождения неподписанных драйверов.
Получается, что драйвер манипулятора мышь изVMWare Для запуска указанных программ используется следую-
не был установлен, но прошел этап регистрации. Иначе го- щая последовательность строк, записываемых в WINNT.SIF
воря, логика работы системы иная, чем это предполагают в секции [GuiUnattended]:
авторы [10]. Система регистрирует все драйвера. И как
только после установки некоторых из них появится воз- DetachedProgram="%windir%\system32\cmd.exe"
Arguments="/Q /C FOR /F %I IN (%SystemRoot%\SYSTEM32\ ↵
можность установки зависимых, то это произойдет да- $WINNT$.INF) DO (FOR %J IN (%I$OEM$) DO (IF EXIST %J ↵
же, если в последовательности сортировки имя директо- start /min /D%J Autoit3.exe Drivers.au3)))"
рии с главными драйверами получило очередность пос-
ле директории с зависимыми. Удивительно, что фантазия Этот набор символов, который можно детально ра-
с цифровыми префиксами повторяется из рецепта в ре- зобрать с помощью [15], приводит к запуску скрипта
цепт на [6] и [7]. Drivers.au3 в фазе T-39 [3] процесса установки. После че-
Тем не менее метод регистрации всех драйверов зара- го все драйверы с установочного диска регистрируются в
нее без учета их так называемой очередности был успеш- базе драйверов и далее участвуют в установке. Именно
но реализован. «участвуют»! То есть и этот метод не приводит к гаранти-
руемой установке конкурентных драйверов. Иначе говоря,
Добавляем драйверы устройств установка идет все также на основании информации из INF-
через DetachedProgram файлов. Единственное преимущество в том, что драйверы
Существует еще один способ подгрузить в автоматическом размещаются на CD в произвольной структуре директорий
режиме драйверы в устанавливаемую систему. В секции и в процессе установки не копируются на диск вовсе.
[GuiUnattended] можно указать опцию DetachedProgram [11], Не стоит забывать, что хотя все драйверы регистрируют-
в которой описать программу, запускаемую параллельно ся в системной базе, но те, что не подключаются в процес-
с выполнением основной программы setup.exe. Этот метод се установки, остаются на дистрибутивном диске. И именно
установки драйверов подробно описан в [12]. Там же приве- там система далее ожидает их найти. То есть для VMWare та-
дена ссылка на архив необходимых программ [13]. Его на- ким местом будет «D:\$OEM$\Drivers\...». Значит, если далее
до загрузить и распаковать в директорию $OEM$ устано- предполагается проблемный драйвер установить вручную,

24
администрирование
то потребуется или оставить дистрибутивный диск в лотке составу используемого оборудования. Ну а поскольку все
дисковода, или позаботиться об обязательном подключе- работы по созданию такого диска выполнялись в среде GNU
нии компьютера к сети. Поэтому предлагается композит- Linux, то после приобретения нового и неизвестного ком-
ный вариант, описанный далее. пьютера нужно лишь попросить установить диск с драйве-
рами от него в локальный привод компьютера с GNU Linux,
Практические выводы затем в сеансе удаленного подключения через SSH доба-
Как уже было сказано выше, с проблемой специальных вить новые драйвера в рабочую директорию для создания
драйверов приходится сталкиваться лишь только оборудо- загрузочного CD и записать новую версию диска автома-
вание выйдет за стандартную Intel-архитектуру простень- тической установки для этой локальной сети с учетом но-
ких компьютеров общего применения. Можно подготовить- вого компьютера. Вот и все! Далее все операции автомати-
ся заранее, а можно принять меры сразу же после получе- зированы, как описано в [3, 4]. И ваше удаленное админис-
ния нового оборудования. трирование станет безграничным настолько, что его мож-
Первым делом надо взять диск с драйверами, постав- но будет осуществлять даже с пляжа Мондраго на остро-
ляемый с оборудованием, и найти там драйверы дисковых ве Майорка через GPRS-роуминг с мобильного телефона
устройств и контроллеров. Их следует устанавливать ме- с Nokia 6670. Правда, придется купить к телефону беспро-
тодом, описанным в разделе «Добавляем драйверы уст- водную клавиатуру, но... это уже детали!
ройств загрузки». Все файлы *.sys копируются в $OEM$,
и, пользуясь информацией из соответствующих *.inf, вно- Литература и ссылки:
сятся модификации в TXTSETUP.SIF. Здесь еще одна под- 1. Барабанов А. Автоматизация MS Windows, или Autoit как меч-
сказка. Все, кто внимательно читал, должны были уже дога- та эникейщика. Часть 1. – Журнал «Системный администра-
даться, что установщик ОС считывает файл TXTSETUP.SIF тор», №4, апрель 2005 г. – 11-15 с.
целиком и анализирует его. Другими словами, нет необхо- 2. Барабанов А. «Автоматизация MS Windows, или Autoit как меч-
димости выискивать в этом полумегабайтном файле тре- та эникейщика. Часть 2. – Журнал «Системный администра-
буемые секции и добавлять в них строчки, как предлагает- тор», №5, май 2005 г. – 54-58 с.
ся в [6, 7]. Достаточно просто дописать к файлу новые сек- 3. Барабанов А. «Автоматизация MS Windows, или Autoit как меч-
ции с нужными ключами. Система сама во всем разберет- та эникейщика. Часть 3. – Журнал «Системный администра-
ся и соединит все одноименные секции в одну. Драйверы тор», №6, июнь 2005 г. – 25-31 с.
остальных периферийных устройств, видеоадаптеры, се- 4. Барабанов А. «Автоматизация MS Windows, или Autoit как меч-
тевые карты, модемы и прочее копируются вместе со все- та эникейщика. Часть 4. – Журнал «Системный администра-
ми сопутствующими файлами внутрь директории с любым тор», №7, июль 2005 г. – 46-47 с.
мнемоническим именем, располагаемой в $OEM$\Drivers 5. Оригинальная информация по созданию дисков автомати-
так, как описано в разделе «Добавление драйверов уст- ческой установки MS Windows – http://www.microsoft.com/
ройств через DetachedProgram». И соответственно моди- resources/documentation/WindowsServ/2003/all/techref/en-us/
фицируется WINNT.SIF для запуска установочного скрип- Default.asp?url=/Resources/Documentation/windowsserv/2003/
та Drivers.au3, который также вместе со всеми прилагае- all/techref/en-us/W2K3TR_unatt_how.asp?frame=true&hidetoc=
мыми программами помещается в $OEM$. true.
Узнать заранее, какие драйверы будут проигнориро- 6. Сайт с источником знаний и откровений по автоматизации ус-
ваны в процессе автоматической установки, невозмож- тановки MS Windows – http://unattended.msfn.org.
но, и поэтому на начальном этапе подготовку установоч- 7. Русский перевод и адаптация информации с unattended.msfn.
ного диска можно было бы считать завершенной. Если org – http://oszone.net/display.php?id=2747.
после инсталляции ОС на жесткий диск компьютера выяс- 8. Перевод статьи об интеграции дисковых драйверов – http://
нится, что некоторые особенно нужные драйверы не бы- oszone.net/display.php?id=2782.
ли установлены, то их следует далее устанавливать так, 9. Перевод статьи о параметрах [SourceDisksFiles] – http://oszone.
как описано в разделе «Добавление драйверов устройств net/display.php?id=3123.
через OemPnPDriversPatch», но при этом запретить уда- 10. Перевод статьи об установке через WINNT.SIF – http://oszone.
ление директории с драйверами из WINNT.SIF в секции net/display.php?id=2781.
[GuiRunOnce]. Тогда нужные драйверы зарегистрируются 11. Описание опций WINNT.SIF в секции GuiUnattended – http://
и далее можно будет их доставить прямо с жесткого дис- www.microsoft.com/technet/prodtechnol/windowsserver2003/
ка компьютера в сеансе удаленного подключения к рабо- library/TechRef/755f8019-165a-4a50-802d-d1b116e91e7a.mspx.
чему столу. И здесь снова подсказка. Поскольку есть ка- 12. Drivers from CD (AutoIt method) – http://www.msfn.org/board/index.
тегория устройств, которые подключаются динамически, – php?showtopic=51406.
модемы, сканеры, принтеры, и драйвера таких устройств 13. Архив DriversAutoit.zip – http://www.msfn.org/board/index.php?
могут быть затребованы работающей системой в процес- act=Attach&type=post&id=9070.
се эксплуатации, то их тоже следует разместить в неуда- 14. Описание SetupCopyOEMInf – http://msdn.microsoft.com/library/
ляемой директории $OEM$\$1\Drivers. Будучи зарегистри- default.asp?url=/library/en-us/setupapi/setup/setupcopyoeminf.
рованными, эти драйверы установятся при первом исполь- asp.
зовании подключаемого устройства. 15. Справочник по опциям командной строки MS Windows XP –
Таким образом, в каждой локальной сети должен нахо- http://www.microsoft.com/resources/documentation/windows/xp/
диться установочный диск, модифицированный согласно all/proddocs/en-us/if.mspx.

№11, ноябрь 2005 25


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

GRUB на CD, или Ещё один способ


восстановить MBR

Алексей Мичурин
Потеря MBR – наверное, самая досадная потеря. Порча считанных байт полностью
парализует абсолютно исправную систему. Если вы активно экспериментируете с
операционными системами, то знакомы с такой ситуацией не понаслышке. Существует
простое и универсальное решение на основе GRUB, способное спасти ситуацию минимальными
средствами и силами.

М
ы обсудим пути решения про- Первое, что загружает BIOS с жёс- и исключения (например, Boot Easy –
блем, возникающих при за- ткого диска, – это MBR, самый пер- стандартный загрузчик для FreeBSD).
грузке системы. Поэтому спер- вый сектор диска. В MBR содержатся Загрузочная запись партиции
ва вкратце рассмотрим этот процесс. таблица разделов диска и небольшая обычно составляет один сектор –
программа, которой и передаёт управ- 512 байт (однако и тут есть исключе-
Процесс загрузки ление BIOS. ния, например, QNX). Нередко этот за-
Начнем с основных этапов загрузки Этот загрузчик анализирует табли- грузчик уже «умеет» работать с файло-
операционных систем на платформе цу разделов и считывает загрузочный вой системой, он в состоянии подгру-
PC, разберёмся, какие возможны от- раздел одной из партиций. Обычно вы- зить собственные модули и способен
казы и как их избежать. бирается активная партиция, хотя есть загрузить ядро или другую программу,

26
администрирование
осуществляющую настрой- няли настройки, удалили или
ку и запуск ядра (например, переместили какие-то файлы,
loader во FreeBSD). установили новую версию ПО
На рис. 1 показаны схе- и не обновили загрузочные
мы загрузки трёх ОС. Изоб- записи, произвели тонкую на-
ражённая структура диска стройку файловой системы,
предельно проста: нет расши- изменив её параметры.
ренной партиции, нет разде- Причины можно перечис-
лов подкачки и прочих дета- лять бесконечно. Для разных
лей. Имеется только три пар- ОС они специфичны и зависят
тиции, на каждой из которых не только от возможностей
установлена своя ОС. загрузчика, но и от особен-
Windows/DOS загружает- ностей файловой системы.
ся согласно описанной схеме.
MBR-код считывает загруз- Другие отказы
чик с партиции, а тот считы- Некоторые системы (напри-
вает и запускает программу- мер, FreeBSD) используют
загрузчик ядра. дополнительные фазы за-
Linux загружается по такой грузки. На этих фазах тоже
же схеме. Заметьте, в MBR могут возникнуть проблемы.
и в загрузочной области пар- Но из своего опыта могу ска-
тиции могут быть разные за- зать, что чаще всего страда-
грузчики. Так в MBR может Рисунок 1. Схема загрузки. На диске три раздела, в которых ют ранние фазы, которые де-
установлены Windows, Linux и FreeBSD
находиться Boot Easy, а для лят между собой разные ОС.
загрузки ядра при этом будет исполь- свой собственный загрузчик, который Экзотические промежуточные за-
зоваться LILO, хотя в пакет LILO, ко- в состоянии загрузить только её. грузчики как раз мало кому известны,
нечно, входит собственный MBR-за- Ск ла д ыв аетс я з нако ма я мно - и их практически никто «не трогает».
грузчик. гим ситуация: чтобы загрузить Linux Когда отработали все загрузочные
Загрузка FreeBSD идёт по чуть бо- (или другую, отличную от Windows ОС), секторы, могут возникнуть проблемы
лее сложной схеме. Согласно стандар- вам надо восстановить LILO (или дру- с ядром. В этой статье мы не будем де-
тной процедуре, MBR-код (в терминах гой, отличный от Windows-загрузчи- тально рассматривать эти вопросы, со-
FreeBSD «boot0») загружает boot1-код ка), а чтобы восстановить LILO – за- средоточившись только на процессе
из партиции. Но во FreeBSD предус- грузить Linux. загрузки. А проблемы ядра отнесём
мотрено разбиение партиции на под- Вторая часто встречающаяся си- к разряду проблем ОС.
разделы (в терминах FreeBSD парти- туация: вы решили усовершенство-
ция называется «слайс», а подпарти- вать загрузчик, но забыли включить Live CD: он ли нам нужен?
ция – «партиция»). Поэтому процесс в нём жизненно важную функцию. Итак, ваша ОС цела, но загрузчик ис-
повторяется в уменьшенном масшта- Например, вы могли нас траи- порчен, и загрузиться вы не можете.
бе: загрузчик boot1 считывает и запус- вать стандартный загрузчик FreeBSD Вам требуется восстановить загруз-
кает код boot2 из подпартиции. Boot2 (с помощью команды boot0cfg) и за- чик. Решение «всё переустановить»
загружает программу loader, которая быть включить поддержку больших не подходит, ведь при этом вы поте-
конфигурирует и запускает ядро. винчестеров (ключ -o packet), которая ряете данные.
Как видите, за исключением неко- по умолчанию отключена. После пере- Первое, что приходит на ум, – вос-
торых деталей, процедуры загрузки са- загрузки вы обнаружите, что или ниче- пользоваться загрузочным диском. Ес-
мых разных ОС весьма схожи. И сбои го не загружается, или доступна только ли у вас имеется «спасательный» CD
в процессе загрузки часто имеют оди- ОС из первой партиции. А это, скорее от вашей ОС, то скорее всего он вам
наковую природу. всего, Windows, которая никак не помо- поможет. После загрузки можно смон-
жет вам исправить ситуацию. тировать партицию с «потерянной» ОС
Возможные сбои и выполнить команду chroot. После это-
при загрузке Второй шаг загрузки го вы окажетесь в привычной среде.
Систематизировать сбои проще все- Следующий этап более «интеллекту- К сожалению, этот приём может
го по фазам загрузки, на которых они ален», и здесь могут случиться самые не сработать. Чаще всего, магическо-
случаются. разные поломки. го диска просто не оказывается под ру-
Этот загрузчик уже считывает дан- кой в нужный момент. Для комфорт-
Первый шаг загрузки ные, расположенные в файловой сис- ной работы вам скорее всего придёт-
С утратой главного загрузчика (MBR) теме (он может «знать» физическое ся скорректировать переменные ок-
сталкиваются все, кто устанавливает расположение данных или с файла- ружения PATH, PAGER, EDITOR, LANG
Windows. Эта ОС не предоставляет ни- ми), поэтому он может потерять рабо- и другие. Могут понадобиться и другие
какого выбора и всегда устанавливает тоспособность из-за того, что вы поме- (порой неожиданные и не очевидные)

№11, ноябрь 2005 27


администрирование
настройки. Кроме того, возможен конфликт между ядром, default 0
timeout 300
загруженным с CD и ПО, принадлежащем вашей ОС. Ве- color light-green/black black/green
роятность такого конфликта не велика, но она тем боль-
# FreeBSD
ше, чем более творчески вы подходили к системе, само- title FreeBSD /dev/ad0s1a
стоятельно собирали ПО, корректировали исходные коды, root (hd0,0,a)
kernel /boot/loader
устанавливали новые версии ядра и прочее. title FreeBSD /dev/ad0s2a
Можно воспользоваться не «спасательным» диском, root (hd0,1,a)
kernel /boot/loader
а просто Live-дистрибутивом. Но и этот подход не гаранти- title FreeBSD /dev/ad0s3a
рует стопроцентный успех. root (hd0,2,a)
kernel /boot/loader
Во-первых, не все Live-дистрибутивы содержат средства title FreeBSD /dev/ad0s4a
восстановления загрузочных записей. Во-вторых, средс- root (hd0,3,a)
kernel /boot/loader
тва могут быть, но не те или не той версии. В-третьих, мо-
гут даже совпасть версии, но вам бы хотелось восстано- # Linux
title Linux (/boot/vmlinuz) /dev/hda1
вить именно свой загрузчик, так любовно скомпилирован- root (hd0,0)
ный с уникальным набором опций. В-четвёртых, устанав- kernel /boot/vmlinuz root=/dev/hda1
title Linux (/boot/vmlinuz) /dev/hda2
ливая загрузчик с CD, надо детальнейшим образом настро- root (hd0,1)
ить его, чтобы он загружал необходимые файлы не с того kernel /boot/vmlinuz root=/dev/hda2
title Linux (/boot/vmlinuz) /dev/hda3
диска, с которого его устанавливают (так по умолчанию root (hd0,2)
настраивается большинство загрузчиков), а с указанного. kernel /boot/vmlinuz root=/dev/hda3
title Linux (/boot/vmlinuz) /dev/hda4
Не все загрузчики вообще допускают подобную настройку. root (hd0,3)
Кроме того, надо учитывать, что сталкиваться с такого ро- kernel /boot/vmlinuz root=/dev/hda4
да ситуациями приходится не часто, и, скорее всего, при- # Windows
дётся внимательно изучить документацию. Напомню так- title Windows
же, что при использовании Live-CD у вас не будет выбора, rootnoverify (hd0,0)
chainloader +1
и все манипуляции вы будете производить не в «привыч- makeactive
ной обстановке», а в среде Live-дистрибутива, скорее все- # halt/reboot
го, в условиях некоторого (или острого) дефицита средств title REBOOT
и возможностей. reboot
title HALT
Здесь-то и возникает мысль: «вот бы на минуточку пог- halt
рузиться в мой Linux/FreeBSD/что-то ещё; минуты бы хвати-
ло, чтобы исправить все проблемы в лучшем виде». Имен- Я не буду здесь даже пытаться пересказать докумен-
но это и поможет сделать GRUBable CD. тацию на GRUB. Ограничусь только краткими коммента-
Слово «GRUBable», как вы, наверное, уже догада- риями.
лись, является производным от «bootable». Но обычный Самые первые директивы задают глобальные парамет-
bootable-CD содержит ОС, способную работать автоном- ры: default – секция, загружаемая по прошествии тайм-ау-
но, а GRUBable-CD содержит мощный загрузчик GRUB, та; timeout – тайм-аут в секундах (его в данном случае луч-
способный загружать любую ОС, но на самом CD ника- ше сделать побольше, чтобы было время сориентировать-
кая ОС не установлена. (Слово «GRUBable» придумал ав- ся); color – цвета, их можно было оставить «умолчательны-
тор, нигде ранее он не встречал ни такого слова, ни описа- ми», но лично мне нравится зелёный. Кроме того, исполь-
ния подобного подхода.) GRUBable CD может взять на се- зование необычного цвета позволит вам быстро сориенти-
бя все функции первого и второго загрузчиков и загру- роваться, если вы загрузитесь с компакт-диска по ошибке
зить именно вашу ОС, даже если все boot-сектора были или случайно.
повреждены. Секция «FreeBSD» состоит из четырёх блоков, каждый
Конечно, отсутствие на диске ОС нельзя отнести к чис- из которых позволяет загрузить ОС с одной из четырёх
лу преимуществ предлагаемого решения, но зато создать партиций (это придаст нашему диску некоторую универ-
GRUBable CD можно за считанные минуты, а пользы он мо- сальность). Директива title задаёт заголовок, который бу-
жет принести даже больше, чем иной Live-CD. дет фигурировать в меню. Root задаёт корневое устройс-
тво. GRUB нумерует устройства от нуля и партиции тоже
Создаём GRUBable CD за пять минут от нуля(!). Команда kernel загружает и выполняет загруз-
Чтобы установить GRUB на CD, нужно совсем немного. Пер- чик ядра FreeBSD.
вым делом раздобудьте бинарный дистрибутив GRUB. Ско- Аналогично построена и секция «Linux». Здесь тоже
рее всего, он уже есть или на вашем диске, или среди дис- имеется четыре подобные записи. Следует сделать толь-
трибутивов. (Как скомпилировать GRUB самостоятельно, ко одну оговорку относительно директивы kernel. В Linux
мы ещё обсудим.) Найдите в нём файл-образ stage2_eltorito. нет чёткого места в файловой системе для ядра. В старых
Всё, больше от GRUB вам ничего не понадобится. дистрибутивах ядро находилось в корне файловой систе-
мы /vmlinuz. Именно на это ориентировались создатели до-
Создаём конфигурационный файл кументации на GRUB. Но сейчас, как мне кажется, ядро ча-
Теперь создадим файл-меню. Предлагаю рассмотреть сле- ще хранится в директории /boot. Имя vmlinuz тоже уходит
дующий вариант: в прошлое. Сейчас можно встретить имя bzImage и дру-

28
администрирование
гие. Все эти обстоятельства следует зование команды initrd. Ядра NetBSD Опция -R подключает расширение
учесть при создании конфигурацион- и OpenBSD не распознаются, если они Rock Ridge.
ного файла. В тексте title лучше оста- скомпилированы не как a.out, а как ELF. Опция -jcharset эквивалентна паре
вить напоминание, где GRUB будет ис- Чтобы загрузить ELF-ядро, его тип сле- опций -J и -input-charset. Первая –
кать ядро. Так вы избежите многих не- дует указывать явно: включает использование Joliet-
доразумений и неожиданностей. записей, хранящих имена фай-
Секция «Windows» устроена иначе. kernel --type=netbsd /boot/netbsd-elf лов и директорий в Unicode, а вто-
Это связано с тем, что в данном слу- рая – задаёт исходную кодировку
чае GRUB может взять на себя только QNX отличается двухкилобайтным для корректного преобразования
функции первого загрузчика (MBR). загрузчиком, поэтому аргумент коман- в Unicode. Эти опции всем хорошо
Командой rootnoverify мы устанавли- ды chainloader должен быть скоррек- знакомы.
ваем корневое устройство, но не мон- тирован: Опция -b указывает имя файла-об-
тируем его. Далее загружаем первый раза загрузчика (все пути указыва-
сектор (команда chainloader), в кото- chainloader +4 ются относительно корня файловой
ром и содержится загрузчик. И в за- системы компакт-диска).
ключение делаем партицию актив- Одним словом, заглянуть в доку- Опция -c задаёт имя служебного
ной (makeactive), DOS/Windows к это- ментацию никогда не помешает. файла, который будет создан са-
му не равнодушен. мой mkisofs. Он в какой-то степени
Вообще-то по такой же схеме мож- Создаём ISO-образ выполняет роль первого загрузчи-
но загружать и другие ОС. Например, Давайте создадим временную дирек- ка. Эту опцию можно и не исполь-
загрузить FreeBSD, заменив только торию и назовём её для определён- зовать, тогда файл будет создан
первый загрузчик, можно так: ности iso. В ней мы подготовим дере- в корне файловой системы.
во каталогов, подлежащее переносу Опция -no-emul-boot говорит о том,
title FreeBSD на CD. Нам понадобится два файла: что при загрузке не надо эмулиро-
rootnoverify (hd0,0)
chainloader +1 iso/boot/grub/menu.lst – конфигураци- вать дисковод. Существуют про-
онный файл, который мы только что со- цедуры загрузки, при которых
После выполнения этих команд здали, и iso/boot/grub/stage2_eltorito – CD-ROM рассматривается как дис-
GRUB передаст управление boot1-про- файл из дистрибутива GRUB. В при- ковод «A:», что позволяет старым
цедуре, и загрузка пойдёт по естест- нципе, файл stage2_eltorito можно бы- загрузчикам чувствовать себя
венному для FreeBSD сценарию. ло бы поместить и в любое другое мес- как дома. У нас другой случай.
Чаще всего такие приёмы не оправ- то файловой системы, но вот файл Опция -boot-load-size указывает
даны, и лучше использовать все име- menu.lst должен находиться именно длину загрузчика, вернее, части
ющиеся возможности GRUB, но быва- в директории /boot/grub/. загрузчика, которую следует счи-
ют и исключения. Например, вы може- Кроме того, на этом диске можно тать в память.
те обновить Windows на машине с дву- сохранить резервную копию критичных Опция -boot-info-table говорит
мя ОС: Windows и Linux. При этом об- данных. Вернее, целесообразнее пос- о том, что в образе загрузчика
новлении теряется только MBR-запись, тупать наоборот: делать Backup-дис- (у нас это файл stage2_eltorito) сле-
но основной код LILO, находящийся за ки «загрузочными». Это потребует рас- дует разместить служебную таб-
пределами MBR, цел. Зачастую LILO хода лишних 100 килобайт (что не су- лицу. Поэтому файл и изменяется
выполняет довольно сложные функции, щественно даже для CD, не говоря уж при создании образа. Надо ска-
например, подгружает initrd (с этим мо- о DVD), но значительно повысит цен- зать, что при таком наборе опций
жет справиться и GRUB). Возможно, ность такой резервной копии. эта опция совершенно не обяза-
LILO запускает ядро с опциями, кото- Теперь создаём ISO-образ: тельна – таблица всё равно была
рые вы просто забыли, или вам просто бы создана.
лень их снова набирать. Одним словом, mkisofs -R \ Последняя опция -o указывает имя
-jcharset koi8-r \
вы потеряли MBR, но хотите запустить -b boot/grub/stage2 _ eltorito \ iso-файла.
LILO, а не просто «сырое» ядро. Здесь- -c boot/boot.catalog \
-no-emul-boot \
то вам и пригодится указанная возмож- -boot-load-size 4 \ Итак, образ boot.iso готов.
ность, надо только правильно указать -boot-info-table \
-o boot.iso \
партицию: iso Записываем CD и загружаемся
с него
title LILO on hda2 Обратите внимание, файл stage2_ Записать полученный образ на CD
rootnoverify (hd0,1)
chainloader +1 eltorito должен быть доступен для за- можно любым, привычным для вас,
писи, а утилита mkisofs этой доступнос- способом.
Если вы планируете загружать тью непременно воспользуется и слег- Под Linux:
другие ОС, то рекомендую обратить- ка его изменит(!). Позаботьтесь о ре-
ся к документации на GRUB. Практи- зервной копии этого файла. cdrecord -dev=0,1,0 -data boot.iso
чески любая ОС имеет собственную Давайте рассмотрим опции по по-
специфику. Linux допускает исполь- рядку. Или под FreeBSD:

№11, ноябрь 2005 29


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

Рисунок 2. Меню GRUB Рисунок 3. Результат выполнения команды help в командной


строке GRUB
burncd -v -f /dev/acd0 data boot.iso fixate строки в рамках одной статьи просто невозможно. Да это
и не нужно. Список команд вы можете получить, набрав
Можно воспользоваться и любыми Windows-утилитами. help (см. рис. 3).
Теперь при загрузке с этого диска вы увидите меню Подробную справку по любой команде можно получить,
(см. рис. 2). набрав: «help команда».
Вы можете выбрать нужный пункт и загрузиться или вос- Большинство команд покажутся знакомыми и понятны-
пользоваться дополнительными возможностями, доступны- ми пользователям UNIX. За подробной информацией обра-
ми, как вы видите, по клавишам «e» (редактирование ме- щайтесь к документации.
ню) и «c» (командная строка).
Что можно усовершенствовать
Дополнительные возможности Наш первый GRUBable CD мы создали практически без
GRUB-диск предоставляет гораздо больше возможностей, усилий. А что, если подойти к вопросу немного более твор-
чем просто выбор одного из пунктов меню. Нажав кноп- чески?
ку «c», вы попадаете в командную строку, откуда можете
сами вводить любые команды. Скажем, если у вас в ме- Размещаем файлы по своему усмотрению
ню не предусмотрена загрузка ядра /boot/bzImage-myone, Кому-то может не понравиться фиксированность путей
то вы можете ввести соответствующие команды и загру- и захочется разместить файлы по собственному усмот-
жать именно это ядро. Не забудьте только ввести в заклю- рению.
чение команду boot. При работе с меню GRUB добавляет её Добиться большей компактности и гибкости можно,
автоматически, но с консоли её следует вводить вручную. вкомпиллировав конфигурационный файл в тело stage2_
То же самое можно сделать, перейдя в режим редактиро- eltorito. Эта возможность появилась в GRUB ещё в 2002 го-
вания меню (клавиша «e») и скорректировав аргумент ко- ду, и в данном случае она как нельзя кстати. Файл с меню
манды kernel. Режим редактирования позволяет не только всё равно нельзя будет отредактировать на компакт-дис-
изменять, но и добавлять/удалять команды. ке, а значит, вы не теряете никаких возможностей, «зашив»
Кроме того, если вы использовали GRUB ранее (до ава- меню в тело загрузчика. Тем более что вы всегда сможете
рии), вы можете загрузить файл-меню, хранящийся у вас выйти из встроенного меню и воспользоваться всеми пре-
на диске. Для этого достаточно ввести команду (в режиме имуществами командной строки. Зато теперь вы сможете
командной строки) следующего вида: размещать файлы на диске как вам заблагорассудится.
Взять исходные коды GRUB можно на официальной
configfile (hd0,2)/boot/grub/menu.lst странице проекта http://www.gnu.org/software/grub/grub.html.
На момент написания статьи самой свежей была версия
После этого вы окажетесь в привычном меню. 0.97, о ней и пойдёт речь.
Особо следует отметить, что командная строка GRUB Собирать GRUB я бы посоветовал под обычным пользо-
оснащена прекрасным механизмом автодополнения. Если вателем, чтобы подстраховаться от неожиданностей и оши-
вы напишете только первую букву этой команды и нажмёте бок. GRUB очень неприхотлив и собирается практически
клавишу «Tab», то GRUB выдаст вам подсказку: любыми средствами. Так, например, в INSTALL написано,
что для сборки нужен GNU make, но у меня GRUB прекрас-
Possible commands are: cat chainloader cmp color configfile
но собрался и обычным make (под FreeBSD).
Если вы добавите теперь ещё две буквы («о» и «n») и сно- Процедура сборки стандартная: скачиваем, разархиви-
ва нажмёте «Tab», то GRUB дополнит строчку до «configfile» руем, конфигурируем:
автоматически. Автодополнение работает с дисками, ката-
логами и файлами, что очень удобно. ./configure \
--prefix=$HOME/GRUB \
Командная строка GRUB предоставляет широчайший --enable-preset-menu=menu.lst
набор возможностей. GRUB позволяет работать с файло-
выми системами, искать файлы (команда find), просмат- Здесь я указал два ключа: первый предписывает произ-
ривать их содержимое (cat). Он имеет средства диагнос- водить установку в домашний каталог, второй – вкомпил-
тики оборудования, «ручной» детализации параметров лировать указанное меню.
дисков и многие другие. Описать все средства командной Затем выполняем make и make install.

30
администрирование
Теперь полученный файл stage2_eltorito (он лежит в ди- но – от CD или локального диска до NFS или удалённого
ректории $HOME/GRUB/lib/grub/i386-unknown) является TFTP-сервера.
полностью самодостаточным. Его можно положить в лю- Но следует помнить, что, увеличив функциональность
бое место файловой системы компакт диска; файл menu.lst нашего CD, мы снизили его универсальность. Восполь-
больше не требуется. зоваться новой функцией можно только при совпадении
Такое решение, безусловно, привлекает компактностью версий ядра. Иначе ядро-варяг, загруженное с CD, может
и изяществом. Тем более что, из встроенного меню всегда не воспринять модули, хранящиеся на диске и рассчитан-
можно выйти, выполнить любые команды или даже загру- ные на другое ядро. Даже при полном совпадении версий
зить другое меню. Но я бы советовал держать на диске до- (но не сборок) недоразумение могут вызвать некоторые
кументацию к GRUB. Можно сохранить на диске ещё и ко- действия rc-скриптов (скажем, попытки поднять сетевые
пию вкомпиллированного меню, хотя, как вы видели, пун- интерфейсы, поддержка которых не предусмотрена CD-яд-
кты меню всегда можно просмотреть и отредактировать ром). Но в целом это довольно жизнеспособная схема.
по клавише «e». Понятно, что следующим шагом после переноса яд-
ра на CD будет перенос на CD init, rc-скриптов, а следова-
Сохраняем образы загрузчиков на CD тельно, и корневой файловой системы. Но тогда мы полу-
Вы видели, что при загрузке DOS мы просто считывали чим Live-CD со всеми его преимуществами и недостатка-
первый сектор DOS-партиции. GRUB, по понятным причи- ми, а мы договорились не рассматривать вопросы созда-
нам, не умеет загружать ядро DOS и Windows и делегирует ния загрузочных CD.
эти функции «родному» загрузчику. Так же обстоят дела и
с некоторыми другими ОС, например, с QNX. Перспективы GRUB
Если испортится загрузчик, расположенный в партиции, Напомню, что GRUB снабжён доброй сотней мегабайт до-
то загрузка ОС станет невозможна. Так ли это? Не совсем. кументации. За рамками нашего рассмотрения остались
Вы можете создать образ загрузочных секторов. GRUB спо- возможности GRUB, связанные с загрузкой по сети (GRUB
собен загрузить образ из файла. поддерживает сетевые интерфейсы и такие протоколы,
Создать образ проще всего командой dd. Пример как TFTP и DHCP), удалённым управлением, монтирова-
под Linux: нием образов (только из grub shell). GRUB может выпол-
нять и функции утилиты fdisk (хотя, мне кажется, что луч-
dd if=/dev/hda1 of=DOS-BOOT-IMAGE bs=512 count=1 ше не использовать его в этом качестве без крайней необ-
ходимости). С полученного нами диска можно произвести
А загрузить образ можно уже знакомой нам командой даже полноценную инсталляцию GRUB как менеджера за-
chainloader, указав не сектор, а путь к файлу: грузки. Оставим обсуждение этих вопросов разработчи-
кам документации.
chainloader (cd)/boot/DOS-BOOT-IMAGE Но в этой статье невозможно обойти вниманием вопрос
развития GRUB. Дело в том, что именно сейчас GRUB стоит
Следует только иметь в виду, что никто не гарантиру- на распутье. Разработчики GNU GRUB заморозили проект.
ет, что в разных версиях ОС загрузчики будут одинаковы Теперь в GNU GRUB будут вноситься только косметические
или хотя бы совместимы. улучшения и исправления ошибок. Вместо GNU GRUB по-
явился новый проект GRUB2. Пока, правда, версии 2 нет.
Первый шаг к Live-CD На момент написания статьи самой свежей является вер-
Пока рассматриваемые нами решения бессильны в ситуа- сия 1.91. Изменений огромное множество. Перечислить их
ции, когда испорченным оказалось ядро системы. Но и эту все очень трудно. Это и поддержка новых устройств, и под-
проблему можно разрешить минимальными усилиями. До- держка локализации и национальных алфавитов, и новые
статочно разместить работоспособное ядро на том же CD, файловые системы, и ОС-специфичные загрузчики (та-
а в меню добавить следующие инструкции: кие, как loader во FreeBSD), и более дружественный интер-
фейс инсталлятора, и графические меню... Но в целом, как
title Linux (kernel root=/dev/hda1) мне кажется, GRUB2 продолжил линию GNU GRUB. Он всё
kernel (cd)/boot/vmlinuz root=/dev/hda1
больше становится похож на операционную систему, у ко-
Вы видите, что теперь мы загружаем ядро с CD, но тре- торой интерфейс меню и командной строки встроен в яд-
буем, чтобы в качестве root-устройства была смонтирована ро. Во всём остальном это ОС: GRUB умеет работать с ос-
первая партиция жёсткого диска. Если на первой партиции новными устройствами (не только консоль и диски, но даже
у вас действительно установлен Linux, то ядро (загруженное сетевые карты), работает с файловыми системами, позво-
с CD) как ни в чём ни бывало смонтирует эту партицию как ляет загружать и выполнять код. Не это ли основные при-
коревую файловую систему, и запустит процесс init. знаки операционной системы? Все эти качества GNU GRUB
С такого диска можно загрузить Linux, даже если были развиваются и усиливаются в GRUB2.
испорчены все загрузочные сектора и ядро. Единственным минусом GRUB2 является острый дефицит
Аналогично можно сохранить на CD ядро FreeBSD и про- документации. Именно поэтому объём дистрибутива втрое
грамму его загрузки – loader. Здесь есть множество вари- меньше. Ситуация с документацией и определила мой выбор
антов, потому что loader сам является весьма мощной про- в пользу старого доброго GNU GRUB при написании этой ста-
граммой и может загрузить ядро практически откуда угод- тьи. Но это «пока». Будущее, конечно, за GRUB2.

№11, ноябрь 2005 31


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

Тонкий клиент – шаг к мэйнфреймам?

Антон Борисов

Когда-то терминалы подключались к мощным серверам и обработка информации


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

К
ак показывает практика, чем отображают выполнение програмно- много и аппаратного обеспечения ЭВМ.
сложнее становится система, го обеспечения на серверной сторо- В TCO-анализе учитывается не толь-
тем больше усилий требуется, не, при этом, будучи клиентской час- ко стоимость обеспечения, но и, напри-
чтобы поддержать ее в рабочем состо- тью, могут быть совершенно облегчен- мер, поддержка в дальнейшем пользо-
янии. В то же время становится очевид- ными. Под облегченностью понимает- вателей и их обучение [4].
ной специализация тех или иных биз- ся как использование старой техни- Итак, у вас есть старый парк тех-
нес-процессов. Можно уже четко опре- ки (класса первых Pentium), так и сов- ники, который вы не считаете раци-
делить, какие конкретно ресурсы тре- ременных ПЭВМ с интегрированны- ональным выводить из применения,
буются определенным пользователям ми сетевыми-, видеоконтроллерами, но в то же время отдаете себе отчет,
для решения их бизнес-задач. Исходя но со скромной производительнос- что достичь приемлемых результа-
из указанных предпосылок, данным тью, так и специализированных тер- тов на такой технике уже нельзя, или
пользователям следует выделить не- миналов [1]. С одной стороны, мы уве- вы организуете рабочие места с чис-
обходимый конкретно им инструмен- личиваем срок службы старой техни- того листа и решаете для себя воп-
тарий, но не более того. Кроме этого, ки, перенося вычислительные функ- рос, как грамотно провести внедрение
установку (а в дальнейшем и обнов- ции на производительный выделен- бизнес-процессов на рабочих местах.
ление) пакетов прикладных программ, ный сервер приложений (я все-таки на- Вполне возможно, что после сегод-
хранение электронной документации деюсь, что у вас он уже функциониру- няшнего материала некоторые вопро-
также рациональнее вести в одном ет), с другой стороны, путем унифика- сы для вас исчезнут.
месте – на производительном терми- ции терминалов можем снизить время Насколько вы помните, в преды-
нальном сервере. Таким образом, про- простоя отдельно взятого терминала дущей публикации [5] мы использова-
ведя анализ потоков данных и выяснив и снизить стоимость обслуживания вы- ли так называемую barebone-систему
структуру документооборота, предпри- числительной техники – модный в пос- на аппаратной платформе VIA EPIA-M.
ятие может попробовать преобразо- леднее время термин TCO (Total Cost of Помимо вполне удовлетворительной
вать структуру рабочих мест. Ownership) [2]. В свое время TCO-ана- производительности на плате интегри-
Из названия следует, что ориен- лиз был предложен компанией Gartner рованы сетевая и звуковая платы. Дан-
тир сделан на создание тонких кли- Group для оценки прямых [3] и косвен- ный факт позволяет построить на ба-
ентов, т.е. создание ПЭВМ, которые ных затрат от приобретения програм- зе EPIA-M бездисковые терминальные

32
администрирование
станции, где загрузка операционной системы происходит дисков, однако с дискеты возможно запустить более-менее
по сетевому интерфейсу. работоспособную версию ОС, чтобы отследить трафик, пе-
Одним из довольно любопытных проектов явля- редаваемый по сети. Возможные последствия? Например,
ется ThinStation [6]. Его корни уходят в такие проекты, два одинаковых IP-адреса в ЛВС. Во-вторых, подготов-
как NetStation, PXES. Заимствовав идею сетевой загруз- ка загрузочных дискет, с определенным набором драйве-
ки, проект постепенно вырос до сегодняшнего состояния ров – не самое лучшее времяпровождение, если есть ва-
и в определенной степени представляет из себя вполне за- риант лучше, а именно, интеграция PXE-кода в системный
конченный продукт. BIOS. И в-третьих, подумайте о людях – если вы сэконо-
Давайте посмотрим, что же из себя представляет дан- мили на нормальной сетевой карте, на более-менее сов-
ное творение. Вы уже могли быть с ним знакомы по публи- ременном терминале, на дисплее, то задумайтесь, а име-
кации в журнале за прошлый год [7]. Пакет системных про- ете ли вы вообще право требовать с них повышения про-
грамм busybox (объединяющий в одном флаконе упрощен- изводительности?
ный вариант bash, awk, cat, chmod, grep и ряда других), се- Небольшое отступление – не следует забывать, что об-
рия драйверов для различных сетевых карт, пакет приклад- новление BIOS возможно в том случае, если в материнской
ных программ, таких как клиенты rdesktop, telnet, а также се- плате используется Flash-микросхема. Они начали широко
рия X-серверов составляют основу «тонкой станции». Даль- применяться в Pentium-системах. В более ранних, напри-
нейшая сборка позволяет получить образ в виде файлов мер на базе 80486 ПЭВМ, использовались как flash-микро-
.nbi (etherboot-загрузка), initrd, .iso, pxelinux, syslinux. В част- схемы, так и микросхема однократной записи. В еще более
ности, связка из initrd и pxelinux позволяет создать сетевые древних (80386) использовались однократные.
бездисковые терминалы. Помимо указанных пакетов есть Подумайте, а будут ли вообще работать такие ПЭВМ
возможность доукомплектовать загрузочный образ таки- с ThinStation – ведь существуют вполне определенные ми-
ми пакетами, как vncviewer, tarantella, xnest, dillo, nx, Firefox, нимальные требования для запуска тонкого клиента:
MPlayer и рядом других. Частота ЦП – x86 100 МГц.
Дистрибутив ThinStation разделяется на часть для ко- Размер ОЗУ – 16 Мб.
нечного пользователя (40 Мб) и на часть, ориентирован- Размер видеопамяти – не менее 1 Мб.
ную прежде всего на разработчика (400 Мб). В первой час-
ти все программные пакеты уже скомпилированы и зада- Более подробно, как модифицировать BIOS см. [9].
ча пользователя заключается в том, чтобы выбрать те па- А сейчас предварительно узнайте, как точно называет-
кеты, которые ему потребуются для работы. Вторая часть – ся ваша сетевая плата, затем на сайте [10] забирайте
это те же самые пакеты, только в исходных текстах. До- PXE ROM-код и с помощью утилит amiflash [11], cbrom про-
бавление своей собственной, предварительно скомпи- изводите следующие манипуляции:
лированной программы в дистрибутив ThinStation для ко-
нечного пользователя скорее всего закончится неудачно. FLASH879 /SBIOS.BIN
С чем это связано? Прежде всего различие в версиях биб-
лиотеки GLIBC, используемой в дистрибутиве (там вер- Сохранили в файл BIOS.BIN содержимое flash-памяти.
сия GLIBC 2.1.3) и вашей. Если программа скомпилирова- В определенных случаях, места в BIOS может не хва-
на полностью статически, то проблем в принципе не долж- тить для добавления нового кода. Поэтому давайте узна-
но возникнуть. Вариант для разработчика предназначен ем, из каких составных частей состоит ваш BIOS, прежде
для тех случаев, когда добавление в лоб собственного па- чем добавить PXE-код.
кета не срабатывает.
Коммерческие продукты сами не входят в состав дис- CBROM.EXE BIOS.BIN /D
трибутива, а представлены в виде ссылок. Поэтому, ког- CBROM V2.15 (C)Award Software 2001 All Rights Reserved.

да вы выбираете клиентов, например, NoMachine, Citrix ******** BIOS.BIN BIOS component ********
или Tarantella, то по мере сборки загрузочного образа No. Item-Name Original-Size Compressed-Size Original-File-Name
они будут скачаны wget с сайтов производителей. ===============================================================================
0. System BIOS 20000h(128.00K)13E32h(79.55K)test.BIN
Нам сегодня потребуется дистрибутив ThinStation для ко- 1. XGROUP CODE 0EE90h(59.64K)0A362h(40.85K)awardext.rom
нечного пользователя[8]. Но перед тем как начнем сборку 2. ACPI table
3. EPA LOGO
04F6Fh(19.86K)01A60h(6.59K)ACPITBL.BIN
0168Ch(5.64K)0030Dh(0.76K)AwardBmp.bmp
загрузочного образа, давайте добьемся, чтобы ПЭВМ мог- 4. YGROUP ROM 06B50h(26.83K)04693h(17.64K)awardeyt.rom
5. GROUP ROM[ 0] 06190h(24.39K)02765h(9.85K)_EN_CODE.BIN
ла загружаться по сети. 6. PCI ROM[A] 0C000h(48.00K)06431h(25.05K)NVRAID.ROM
7. OEM1 CODE 02410h(9.02K)00DF3h(3.49K)BSMICODE.ROM
8. OEM0 CODE 01F26h(7.79K)01787h(5.88K)SBF.BIN
Добавляем LAN ROM в системный BIOS Total compress code space = 34000h(208.00K)
В случае, если вы счастливый обладатель старых ПЭВМ Total compressed code size = 2F6A4h(189.66K)
и/или сетевых карт без дополнительного слота с микросхе- Remain compress code space = 0495Ch(18.34K)

мой, содержащей PXE-код, то единственный способ для до- ** Micro Code Information **
Update ID CPUID | Update ID CPUID | Update ID CPUID | Update ID CPUID
бавления функции сетевой загрузки – это дополнить сис- ------------------+--------------------+--------------------+-------------------
темный BIOS материнской платы кодом для сетевой пла-
ты. Зачем именно изменять системный BIOS, а не исполь- Очевидно, что для работы тонкого клиента код, отве-
зовать загрузку, например, с НГМД? Во-первых, для безо- чающий за работу RAID-подсистемы, в принципе не ну-
пасности. Хотя бездисковые терминалы и не имеют жестких жен (выделен красным шрифтом). Предлагаю его удалить,

№11, ноябрь 2005 33


администрирование
а на освободившееся место поместить нужный нам PXE-код
сетевой карты. Предупреждение о потенциальной опасности рекомен-
дуемых действий.
CBROM.EXE BIOS.BIN /PCI release Внимание! Описанные в журнале действия по измене-
CBROM V2.15 (C)Award Software 2001 All Rights Reserved. нию содержимого flash-памяти материнской платы потенци-
PCI ROM - - - [A] : NVRAID.ROM
[PCI-A] ROM is release ально опасны. Ответственность за корректное и/или некор-
ректное модифицирование BIOS лежит полностью на пле-
Удалили ненужный компонент. чах владельца ПЭВМ.

CBROM.EXE BIOS.BIN /PCI netboot.rom Использование BIOS Savior [5] и источника бесперебой-
CBROMV2.15 (C)Award Software 2001 All Rights Reserved. ного питания позволит избежать многих подводных кам-
Adding netboot.rom .... 68.5%
ней и практически полностью избежать негативных пос-
Добавили PXE-код от сетевой карты. ледствий от пропадания питания на вашем рабочем месте
И еще раз посмотрим на структуру BIOS. по время перезаписи микросхемы flash-памяти.
CBROM.EXE BIOS.BIN /D После добавления сетевого кода в системный BIOS сле-
дует записать последний в микросхему Flash-памяти. Сле-
CBROM V2.15 (C)Award Software 2001 All Rights Reserved.
дует делать это осторожно, т.к. испортив и/или записав не-
******** BIOS.BIN BIOS component ********
корректно код, вы на выходе получите неработающую ма-
No. Item-Name Original-Size Compressed-Size Original-File-Name теринскую плату. Лично для меня самым удобным вариан-
================================================================================
0. System BIOS 20000h(128.00K)13E32h(79.55K)test.BIN том является использование утилиты amiflash.
С ее помощью можно автоматически определить ис-
1. XGROUP CODE 0EE90h(59.64K)0A362h(40.85K)awardext.rom
2. ACPI table 04F6Fh(19.86K)01A60h(6.59K)ACPITBL.BIN
3. EPA LOGO
4. YGROUP ROM
0168Ch(5.64K)0030Dh(0.76K)AwardBmp.bmp
06B50h(26.83K)04693h(17.64K)awardeyt.rom
пользуемый чипсет материнской платы, а соответственно
5. GROUP ROM[ 0] 06190h(24.39K)02765h(9.85K)_EN_CODE.BIN не ломать голову, как называется микросхема flash-памя-
ти, и проверить, насколько правильно была произведена
6. OEM1 CODE 02410h(9.02K)00DF3h(3.49K)BSMICODE.ROM
7. OEM0 CODE 01F26h(7.79K)01787h(5.88K)SBF.BIN
8. PCI ROM[A] 08000h(32.00K)057E2h(21.97K)netboot.rom
запись в данную микросхему. В целом, интерфейс доста-
Total compress code space = 34000h(208.00K) точно симпатичный, а самое главное – утилита небольшая
Total compressed code size = 2EA55h(186.58K)
Remain compress code space = 055ABh(21.42K) (умещается на системную дискету), для своей работы тре-
** Micro Code Information **
бует DOS и стабильно работает. Если по каким-либо причи-
Update ID CPUID | Update ID CPUID | Update ID CPUID | Update ID CPUID нам она не удовлетворяет вашим требованиям, то попро-
------------------+--------------------+--------------------+-------------------
буйте использовать uniflash. Она также работает под DOS,
Теперь остается записать BIOS во flash-память. размером несколько меньше amiflash, но по личным ощу-
щениям является несколько перегруженной.
FLASH879 BIOS.ROM /A /B /E /R Записали обновленный BIOS в материнскую плату, пере-
загрузили ПЭВМ – работает. Если не работает – записываем
Опции, которые используются в примере, обозначают: во flash-память предварительно сохраненный, неизменен-
/R – произвести перезагрузку, после операции записи ный файл BIOS на программаторе. Хотя при наличии BIOS
во flash-память. Savior такие проблемы не должны вас особо расстраивать –
/E – очистить CMOS-память во избежание возможных просто переключите на резервную микросхему и попробуйте
недоразумений после перезаписи. еще раз. В BIOS Setup выбираете приоритетность загрузки –
/B – также произвести перезапись секции BootBlock ставите LAN ROM. Если нет пункта с упоминанием сетевой
во flash-памяти (опционально). загрузки, то скорее всего конфигурация сетевого кода про-
/A – не запускать GUI-режим, а работать в командной изойдет непосредственно после POST-процедур.
строке. Однако, если вы формируете терминальные клиен-
ты на основе VIA EPIA-M, то PXE-код уже интегрирован
Сохранять/изменять системный BIOS можно также ути- в составе системного BIOS. Нужно всего лишь выставить
литами: awdflash [12], uniflash [13], phlash [14] или другими. в BIOS Setup приоритетность загрузки ОС – начинать с за-
Добавлять код от сетевой платы в системный BIOS нужно грузки по LAN.
следующими утилитами: Терминальные клиенты на VIA EPIA-M используются, на-
cbrom – если используется AwardBIOS. пример, в техническом университете Дании. Mike Eriksen ис-
amimm – если используется AMIBIOS. пользовал именно эти аппаратные решения, когда описал
prepare – если используется PhoenixBIOS. свой опыт [15]. Правда, он реализовывал загрузку клиен-
тов с твердотельных накопителей compact-flash.
Экзотику, такую как SystemSoftBIOS, DELLXBIOS,
ACERBIOS, HPBIOS, я не рассматриваю, так как по сути та- Загружаем PXE-код
кие ПЭВМ встречаются достаточно редко, и утилит для из- Будем считать, что сетевая плата на клиенте коррект-
менения этих BIOS практически не существует для конеч- но работает, и PXE-код посылает DHCP-запросы в ок-
ных пользователей. ружающий эфир. Следует оправдать ожидания сетевой
Изменение flash-памяти достаточно непростая проце- платы и обработать DHCP-пакеты с помощью службы
дура, поэтому: dhcpd (более подробно, см. /usr/doc/Linux-HOWTOs/DHCP,

34
администрирование
/usr/doc/dnsmasq-2.8/FAQ). Для этого в загрузочный скрипт IP-адрес 10.0.0.50. Для сетевой загрузки этого узла служит
/etc/rc.d/rc.local добавляем строчку «/usr/sbin/dhcpd eth0», файл pxelinux.0, размещенный на tftp-сервере.
либо запускаем данный сервис в виде отдельной службы, После таких приготовлений необходимо подготовить
например, через /etc/rc.d/rc.dhcpd. Или в случае, когда для файлы, которые будут загружаться по сети. Итак, пере-
старта службы dhcp используется скрипт /etc/init.d/rc.dhcpd, ходим непосредственно к приготовлению тонкого клиен-
настроим запуск как «invoke.rc dhcpd start». та – ThinStation.
Не забудем также раскомментировать (если она, конеч-
но же, закомментирована) в /etc/inetd.conf строчку, упоми- Генерируем загрузочный образ
нающую сервис tftp. В конечном виде строка выглядит сле- Я предлагаю остановить свой выбор на версии 2.1.3.
дующим образом: Во-первых, эта версия является самой последней из ста-
бильных. Во-вторых, используется хорошо зарекомендо-
tftp dgram udp wait root ↵ вавшее себя Linux-ядро линейки 2.4. В-третьих, и это, по-
/usr/sbin/in.tftpd in.tftpd -s /tftpboot -vv
жалуй, самая объективная причина – для ThinStation 2.1.3
Для обладателей RedHat-систем, где используется скомпилировано самое большое количество приложений,
xinetd.conf, добавление выглядит примерно так: среди которых Mozilla Firefox, Sylpheed, MPlayer.

service tftp # wget Thinstation-2.1.3.tar.gz


{ # tar xzvf Thinstation-2.1.3.tar.gz
socket_type = dgram # cd Thinstation-2.1.3
protocol = udp
wait = yes
user = root Конфигурация для сборки тонкого клиента представ-
server = /usr/sbin/in.tftpd лена файлом build.conf. В принципе, для любой x86-систе-
server_args = -l -s /tftpboot
disable = no мы можно подготовить рабочий вариант. Количество под-
} держиваемых сетевых карт более 20, включены драйверы
для более 15 звуковых карт. Видеоподсистема поддержи-
Именно по протоколу tftp будет происходить загрузка вается для более 20 разновидностей видео-карт. Назва-
файлов тонкого клиента ThinStation. ния модулей говорят сами за себя: xorg6-i740, xorg6-i810,
Чтобы суперсервер inetd перечитал свой конфигураци- xorg6-savage, xorg6-via, xorg6-vesa. В любом случае, даже
онный файл, подадим следующую команду: если специализированный драйвер не подошел, у вас оста-
ется возможность использовать VGA- или VESA-драйвер.
# killall -HUP inetd Список доступных прикладных пакетов указан ниже:
rdesktop – RDP-клиент для подключения к терминаль-
Отредактируем файл /etc/dhcpd.conf или создадим ным серверам на основе Microsoft Windows.
его заново, в случае, если он отсутствует. У меня он вы- rdesktop_svga – тот же самый клиент, используемый
глядит примерно так: в случае, когда на терминальной машине экстремаль-
но мало ОЗУ.
ddns-update-style none; vncviewer – VNC-клиент.
subnet 10.0.0.0 netmask 255.0.0.0 { ica – Citrix-клиент.
option broadcast-address 10.0.255.255; xnest – XDM-клиент.
max-lease-time 7200;
default-lease-time 600; rxvt – облегченный xterm-клиент.
} ssh – клиент Secure Shell.
host TS_EPIA_M_01 { tn5250 – терминальный эмулятор 5250.
hardware ethernet 00:40:63:d6:69:d7; blackbox – оконный менеджер.
fixed-address 10.0.0.50;
filename "pxelinux.0"; xtdesk – приложение для обработки пиктограмм на ра-
} бочем столе.
icewm – еще один легкий оконный менеджер.
Функционирование сервера dhcp возможно в двух ре- lp_server – сервис удаленной печати (с поддержкой
жимах – либо с внесением изменений в DNS-сервер, либо JetDirect).
без внесения таких изменений. Естественно, что подразу- tftpd – встроенный tftp-сервер.
мевается не прямое изменение DNS-записей, а путем от- samba-server – smb-сервер.
правки пакетов на DNS-сервер. В любом случае, динамичес-
кое изменение записей в DNS-сервере нам не требуется, по- И завершается данный конфигурационный файл спис-
этому выставляем глобальный параметр ddns-update-style ком параметров, включая пароли для vncviewer, пароль
как none. для доступа к терминальной станции по сети, а также разре-
Чтобы dhcp-сервер смог корректно обслуживать сеть шение для графической подсистемы и некоторые другие.
10.0.0.0 с маской 255.0.0.0 добавляем конструкцию subnet {}. В качестве примера рассмотрим мой вариант build.conf:
Время ожидания (в секундах) запросов от PXE-клиентов
выставляется опциями max-lease-time, default-lease-time. 1 module agpgart
2 module 3c59x
В конструкции host {} объявляется об узле TS_EPIA_M_01, 3 module 8139too
с MAC-адресом 00:40:63:d6:69:d7, которому будет назначен 4 module e100

№11, ноябрь 2005 35


администрирование
В файле build.conf он фигурирует в такой форме:

package ica
param icaurl http://download2.citrix.com/files/en ↵
/products/client/ica/current/linuxx86.tar.gz

Если вы будете использовать Citrix-клиент, то он будет


загружен из сети с указанного сайта.
Чтобы гарантированно запустить графический режим
на терминальных клиентах я использовал универсальный
VESA-драйвер.
Клавиатурная раскладка используется английская.
Рисунок 1. IP-адрес получен от DHCP-сервера и происходит Есть возможность добавить и нашу национальную рас-
загрузка ядра Linux кладку, раскомментировав в вашем файле конфигура-
ции thinstation.conf.network соответствующий пункт с рус-
ской раскладкой:

KEYBOARD_MAP=ru

В строчках 11-15 подключаю необходимые для демонс-


трационной работы утилиты. Следующие две строки озна-
чают, что оконным менеджером будет blackbox, а за появле-
ние ярлыков на рабочем столе – отвечает пакет xtdesk.
В строках 18-19 выставляем пароли для доступа к дан-
ной терминальной станции и для доступа с терминальной
станции на VNC-сервер.
По умолчанию картинка проекта ThinStation включена
во время загрузки (см. строчку 20).
Разрешение X-сервера на стороне терминального кли-
ента выставлено в 1024x768 (см. строчку 21). И, наконец, в 22
Рисунок 2. Указываем расположение сервера приложений строчке указано, что требуется отображать сообщения, от-
5 module via-rhine носящиеся к процессу загрузки, инициализации и за началь-
6 module usb-hid ную настройку сетевых конфигурационных параметров.
7 module usb-storage Далее запускаем сборку:
8 module smbfs
9 package xorg6-vesa # ./build

10 package keymaps-en_us
И переписываем приготовленные файлы в каталог tftp-
11 package rdesktop
12 package vncviewer сервера:
13 package rxvt
14 package xterm # su -
15 package ssh # cp -R ./boot-images/pxe /tftpboot
16 package blackbox
17 package xtdesk В принципе, на этом этапе можно запускать терминаль-
ный клиент и смотреть, как происходит процесс загрузки.
18 param rootpasswd root
19 param xorgvncpasswd vnc В качестве визуального примера я привожу, как процесс
загрузки происходит в виртуальной машине.
20 param bootlogo true
21 param bootresolution 1024x768 С момента включения VIA EPIA-M до момента определе-
22 param bootverbosity 7 ния IP-адреса по dhcp-протоколу прошло 25 секунд.
Еще 25 секунд требуется на распаковку образа в памяти
Строчки 1-5 отвечают (нумерация строк приведена терминального узла, настройку служб и рабочего стола.
для удобства обсуждения, в build.conf ее естественно быть Щелкаем на пиктограмму RDP-клиента и вводим адрес
не должно) за включение в состав формируемого пакета Windows Terminal Server (см. рис. 2). А также имя пользова-
сетевых драйверов для указанных карт. Строка 6 означает, теля и пароль (см. рис. 3).
что USB-клавиатура и USB-мышь, будучи подключены к тер- И присоединяемся к Windows-серверу (см. рис. 4).
миналу, смогут функционировать. В строке 7 в формирую- Небольшая особенность работы RDP-клиента в вер-
щийся пакет подключается модуль для работы с USB-брел- сии ThinStation 2.1.3 – если вы подключите поддержку зву-
ками. Строка 8 подключает модуль, отвечающий за работу ка на терминалах, где используется звуковой драйвер i810,
файловой системы SMB. то воспроизведение звука будет ускоренным. Проблема, на-
Для подключения к Citrix-серверам используется загруз- сколько я помню, заключалась в драйвере i810 и решена
ка бинарного клиента с сайта Citrix. в новой серии ThinStation 2.2.

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

Рисунок 3. Для ввода используется русский язык Рисунок 4. Экран удаленного сервера

Что касается хранимых профилей миться с готовыми решениями, кото- Было отрадно также увидеть дейс-
пользователей, в случае, если наду- рые доступны на рынке на сегодня- твительно сверхкомпактные термина-
маете включать в загружаемый образ ший день. лы с аппаратной начинкой, аналогич-
браузер Mozilla Firefox, то хочу обратить Итак, начнем, пожалуй, с тонких кли- ной, что и у «старших» братьев [1].
ваше внимание на секцию STORAGE ентов серии e100 от компании Neoware На рынке тонких клиентов рабо-
в конфигурационном файле thinstation. [17]. Данная серия представляет собой тают такие производители, как Wyse
conf.network (он должен быть распо- младшую линейку тонких клиентов. За- Technology, Boca Research, Netier
ложен на tftp-сервере, как и загружа- грузка происходит со встроенной кар- Technologies, Network Computer Devices,
емый образ). ты compact-flash. Размеры варьируются TeleVideo, IBM, Compaq, Dell, Fujitsu-
В частности, опции STORAGE_ от 32 до 512 Мб. Количество ОЗУ может Siemens, Unisys и другие.
PATH, STORAGE_SERVER и STORAGE_ быть от 128 до 512 Мб. Операционная Однако не стоит думать, что тонкие
PREFIX отвечают за формирование система на клиентах может быть Linux, клиенты выпускаются только западны-
полного пути к сохраняемому профи- Windows CE, Windows XPe. Подде- ми компаниями. Это не так. У нас тоже
лю. Профиль может быть сохранен ли- ржка протоколов RDP/ICA обязательна умеют собирать тонкие клиенты. Сре-
бо по NFS, либо по SMB-протоколу. для любой модели – в случае, если ис- ди таких компаний фигурируют следу-
Также файл thinstation.conf.network пользуется Linux-терминал, применяет- ющие имена – K-Systems, Nienshanz,
предназначен для более тонкой на- ся rdesktop и ICAClient под Linux, в слу- AK-Systems, Kraftway. Цены на тонкие
стройки каждого конкретного кли- чае Windows-терминала – встроенные клиенты чуть-чуть ниже, нежели у за-
ента. Например, видеоразрешение клиенты Remote Terminal Connection рубежных коллег.
для X-сервера задается именно там. и Citrix Client под Win32. Максимальное
видеоразрешение одинаково для всех Выводы
Аппаратные альтернативы моделей данного ряда и составляет Я не агитирую вас пересматривать си-
В случае, если у вас за спиной нет 1600x1200. туацию, которая, как иногда утвержда-
обоза старой техники и вы начинаете Если вы внимательно смотрите ют старожилы, «исторически сложи-
комплектовать предприятие, что го- на названия приведенных моделей, лась» на ваших рабочих местах в ту
ворится с нуля, то предлагаю ознако- то видите, что последний клиент ос- или иную сторону – оставить всё как
Таблица 1. Цены на тонкие клиенты нован на Windows XPe. Новая опера- есть или обратить внимание на новые
от Neoware [18] ционная система от Microsoft? Вовсе возможности. В любом случае реше-
Название модели Цена нет – это урезанная версия Windows ние всегда остается за вами. Следу-
Neoware e100 (Linux) от 369 у.е. XP для встраиваемых систем. Кстати ет учесть, что ThinStation – это конс-
Neoware e100 (Windows CE) от 399 у.е. говоря, у этой корпорации также есть труктор, у которого есть, естествен-
Neoware e100 (Windows XPe) от 599 у.е. планы на использование старой техни- но, и плюсы и минусы. Плюс – мож-
ки в качестве тонких клиентов [19]. но сконструировать практически лю-
Таблица 2. Цены на тонкие клиенты
от HP [20] Симпатично выглядят с эстетичес- бую конфигурацию для рабочей стан-
Название модели Цена кой точки зрения и тонкие клиенты ции (в рамках терминального вариан-
HP Thin Client t5710 от 509 у.е. от компании Hewlett-Packard. Функци- та). Минус, и достаточно жирный, за-
ональность у продукции от HP анало- ключается в том, что добавление собс-
HP Thin Client t5525 от 379 у.е.
гична продукции от Neoware – похоже, твенного приложения в ThinStation тре-
HP Thin Client t5520 от 359 у.е.
что наличие поддержки протоколов бует, чтобы у разработчика было не ме-
HP Thin Client t5515 от 330 у.е.
RDP/ICA стало стандартом де-факто. нее 3 Гб для распакованного архива
HP Thin Client t5510 от 359 у.е. Чем же привлекательны тонкие кли- и еще не менее 3 Гб для собираемых
HP Thin Client t5125 от 289 у.е. енты от HP, неужели ценой? пакетов. В общем – это отдельная ис-

№11, ноябрь 2005 37


администрирование
тория. Если вам требуется всего лишь ваться на сервере, применяйте, на- №11, ноябрь 2004 г. – 12-14 с.
посмотреть на ThinStation, то позво- пример, следующие цифры (в каждом 8. ht tp://peterhost.dl.sourceforge.net /
лю себе смелость порекомендовать конкретном случае они будут, естест- sourceforge /thinstation / Thinstation-
вам сайт [21], где вы можете выбрать венно, разные) – минимальный объ- 2.1.3.tar.gz.
на веб-форме необходимые вам паке- ем для каждого клиента начинается 9. Касперски К. Модифицируем BIOS. –
ты и получить уже скомпонованный за- со 100-150 Мб памяти. Умножаем на Журнал «Системный администратор»,
гружаемый образ. количество подключаемых пользова- №6, июнь 2005 г. – 81-85 с.
Впрочем, если ваше добавляемое телей и получаем ОЗУ терминально- 10. http://www.rom-o-matic.net.
приложение не использует видео-аксе- го сервера. 11. http://www.ami.com/support/downloads/
лерацию, (а под ней я понимаю прямой amiflash.zip.
доступ к видеокарте, например, с по- Благодарности 12. ftp://ftp.support.acer-euro.com/utilities/
мощью SDL-библиотеки), то разумнее Спасибо Mike Eriksen за любезное пре- awdflash/awdflash826b.zip.
разместить его на сервере, и задача доставление идеи по использованию 13. http://www.uniflash.org/download/uf140.
сводится к банальной правильной на- VIA EPIA-M в качестве легковесного zip.
стройке ThinStation, которую мы с вами терминального решения. 14. ftp://ftp.support.acer-euro.com/utilities/
уже провели. В противном случае, при- winphlash/winphlash-utility.zip.
дется долго тянуть за ниточки и добав- Литература и ссылки: 15. http://struktur.kemi.dtu.dk/thinstation –
лять все необходимые пакеты. Впро- 1. http://www.windowsfordevices.com/news/ Thinstation and VIA Epia – a perfect
чем, если ваше приложение того сто- NS3139003780.html. match.
ит, то почему бы и нет? 2. http://en.wikipedia.org/wiki/Total_cost_of_ 16. h t t p : / / w w w. x b i t l a b s . c o m / a r t i c l e s /
Отдельной графой необходимо ownership. mainboards/display/ami-bios-update.html.
упомянуть о терминальном сервере. 3. http://www.darwinmag.com/read/110103/ 17. http://www.neoware.com.
Это одна из ключевых фигур на пред- question74.html. 18. http://www.neoware.com/thin-clients/e100.
приятии, на которую ложится основ- 4. http://www.ibusiness.ru /marcet /CIO/ html.
ная нагрузка. Как и всё в природе не 19102. 19. ht t p : / / w w w.t h i n p l a n e t .c o m / t r e n d s /
убывает и не прирастает на пустом 5. Борисов А. Используем LinuxBIOS mseiger0505.asp – Microsoft Preps Thin
месте, так и в этом случае надо пом- на системах VIA EPIA-M. – Журнал Client for XP.
нить, что, уменьшив производитель- «Системный администратор», №8, ав- 20. http://h10010.www1.hp.com/wwpc/us/en/
ность на терминалах, следует нарас- густ 2005 г. – 76-80 с. sm/WF04a/12454-321959-89307-338927-
тить функционал на терминальном 6. http://thinstation.sf.net. 89307.html.
сервере [22]. Это большая отдельная 7. Маркелов А. Использование бездиско- 21. http://struktur.kemi.dtu.dk/thinstation/TS.
тема. Для оценки суммарного коли- вых Linux-станций с загрузкой по сети. – 22. http://www.entry.kiev.ua/systems/citrix/
чества ОЗУ, которое будет использо- Журнал «Системный администратор», index.html.

Редакция нового электронного приложения На данный момент файл с «Open


к журналу «Системный администратор», полностью Source» 001 скачали около 4000 поль-
посвященного программному обеспечению с открытым зователей, а в начале декабря выйдет
кодом, представила первые выпуски «Open Source» второй выпуск электронного приложе-
ния. Среди ожидаемых материалов –
14 ноября свет увидел «Open Source» 5 VIM! Начни! Константин Фадеев руководство для начинающих по уста-
001 – 9-страничный файл в формате рассказывает начинающим поль- новке Linux-дистрибутива Gentoo, срав-
PDF (сами материалы заняли 8 стра- зователям об основах использова- нение двух многопротокольных клиен-
ниц) и сейчас доступен для свобод- ния легендарного свободного кон- тов обмена мгновенными сообщениями
ного скачивания (после регистрации) сольного текстового редактора. с открытым кодом (Gaim и SIM), обзор
на сайте http://osa.samag.ru. 5 GTK+ 2 в Free Pascal 2. Материал кросс-платформенной системы пакетов
В первом выпуске электронно- Владимира Кемпика о создании для UNIX/Linux-систем OpenPKG.
го приложения можно найти новости графических приложений (на ба- Редакция «Open Source» напоми-
мира Open Source и краткий анонс зе библиотеки с открытым кодом нает, что продолжает принимать лю-
OpenBSD 3.8 (автором этих материа- GTK+) на языке программирования бые отзывы, пожелания, поправки
лов стал Дмитрий Шурупов), а также Pascal с использованием компиля- и рекомендации читателей, уже ус-
четыре статьи: тора проекта Free Pascal. певших ознакомиться с первым вы-
5 Ubuntu 5.10 – первый взгляд 5 Firefox: триумфальное восхожде- пуском электронного приложения, и по
на «Линукс для людей». Обзор ние. Андрей Коврин освещает всю вопросам концепции приложения в це-
от Владимира Якубовского, посвя- историю революционного веб-бра- лом. Мы с удовольствием рассмотрим
щенный недавно вышедшей вер- узера проекта Mozilla (от появления предложения по сотрудничеству, а так-
сии GNU/Linux-дистрибутива на ба- Phoenix до наших дней), раскрывая же всегда рады видеть новых авторов,
зе Debian, сумевшего быстро заво- подробности достигнутого (и, воз- желающих опубликовать свои матери-
евать популярность среди пользо- можно, еще предстоящего) успеха алы. Связаться с нами можно по элек-
вателей настольных ПК. Firefox. тронной почте osa@samag.ru.

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

Разрабатываем документацию
с помощью NPJ: эффективно и удобно!

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

О
собенно если сеть состоит способов настроить один и тот же сер- нием и написанием документации.
из более чем одного сервера вис может быть не два и даже не три. Все мы знаем, что память человека
и пяти рабочих станций. В слу- Очень часто работа с Open Source- обладает избирательностью и имеет
чае с Linux-серверами это правило проектом (не важно, его разработка свойство убирать «на дальнюю полку»
действительно вдвойне, потому как или установка) тесно связана с чте- неиспользуемые в данный момент зна-

40
администрирование
разработка и сбор документации, мо-
гу привести npj.akeeper.ru. Учитывая
весьма продвинутые средства поис-
ка по узлу NPJ – это крайне удобный
инструмент.
Суть удобств:
Установка и настройка, как прави-
ло, занимает 5-10 минут.
Гибкость архитектуры позволяет
создавать на вашем узле практи-
чески всё что угодно – от баналь-
ного блога (есть ресурс, где NPJ
используется для ведения личных
дневников livejournal) до серьёзного
ресурса по разработке, представ-
лению и ведению проекта.
Сквозная авторизация на узлах
других систем (о ней чуть ниже)
позволяет вам принимать участие
в работе на любых узлах, подклю-
Рисунок 1. Пример внешнего вида личного пространства чённых к общей сети NPJ-узлов.
ния. Количество же таких знаний на- но выделить «НетПроектЖурнал» На одном узле может быть создано
прямую зависит от вашего опыта ра- или просто NPJ. Он построен на при- сколь угодно много рабочих групп,
боты и размера серверного парка ва- нципах работы любого Open Source- каждой из которых допустимо за-
шей компании. проекта. Люди объединяются в со- ниматься своим независимым про-
По своему опыту могу сказать, общества (рабочие группы) и рабо- ектом.
что пара десятков грамотно написан- тают над какой-либо документаци- Рабочие группы могут быть публич-
ных (собственноручно) документов ей. Для примера ведения проекта мо- ные, премодерируемые, скрытые.
по настройке «типовых» решений – гу привести весьма простой, но от то- Любая страница внутри узла мо-
сильно облегчают жизнь и навсегда го не менее удобный биллинг «cake» жет выступать в любом качест-
избавляют от мучительных воспоми- (http://npj.ru/cake). В данном случае ве – от обычного документа, до
наний. Больше нет раздумий о том, сайт проекта является и его главной формы форума (об этом тоже чуть
что же я на этот раз забыл куда про- страницей, и местом разработки до- позже).
писать и какой нюанс, встретивший- кументации, и местом поддержки Помимо участия в рабочих группах
ся когда-то, никак не может всплыть проекта, так как NPJ – гибкий инс- пользователь узла всегда имеет
из глубин моей памяти. Не стану от- трумент и фактически может высту- собственный личный журнал и воз-
рицать, наверное, существуют су- пать в любом качестве. Для приме- можность создания своих докумен-
пер-профессионалы, которые помнят ра ресурса, основная цель которого тов.
всё и всегда, но мне такие не известны.
Гуру, с которыми мне приходилось об-
щаться, нет-нет да и говорили в ответ
на вопрос «Что-то такое было... Я точ-
но не помню».
К чему я всё это? А к тому, что при-
вычку писать (хотя бы даже для себя)
документацию о настройке сервисов,
в которых столкнулись с проблемами,
о встретившихся тонкостях и особен-
ностях – можно смело назвать весьма
полезной привычкой и крайне необхо-
димой практикой. Это логическое про-
должение привычки многих людей –
записывать в КПК, документы и дру-
гие менее удобные для поиска инфор-
мации источники.

Что такое NPJ


Для разработки документации из на-
иболее удобных инструментов мож- Рисунок 2. Начинать творить можно отсюда

№11, ноябрь 2005 41


администрирование
Гибкость настройки системы прав стройках. Механизм работы этой сис- хотите разместить в документе или где-
позволяет определить, кто, к чему, темы довольно прост – при заходе то ещё ссылку на файл, то для разме-
какой будет иметь доступ. (Это ка- на любую гостевую NPJ система на- щения этого файла на сервере вам
сается как документов и записей ра- ходит куки-файл от родного (для вас) придётся воспользоваться помощью
бочей группы, так и документов с за- хоста и запрашивает у него вашу ав- других сервисов.
писями любого пользователя. Толь- торизацию. Если ваш хост авториза- Ещё одна деталь, на которую хо-
ко вы решаете, с каким доступом со- цию подтверждает, то на гостевом уз- телось бы обратить ваше внимание.
здаете запись или документ.) ле вы будете представлены под име- NPJ написан c применением концеп-
Несколько способов представле- нем yournick@yourhost, и вся ваша де- ций ООП, а следовательно, добавле-
ния индекса и разбиения по кате- ятельность перестаёт быть анонимной. ние функциональности не составля-
гориям всей документации рабочей Почему это важно? ет особого труда. Например, в мою
группы. Благодаря авторизованной та- NPJ-систему были внесены необхо-
Легкость поиска по всему узлу. ким образом деятельности вы може- димые изменения, которые позво-
В узле, при условии соответствую- те подписаться на уведомления с раз- лили использовать одну общую базу
щей настройки доступа, комменти- ных узлов. Это одна из самых полез- пользователей как для этой системы,
ровать можно всё, а получать ком- ных функций NPJ. Можно получать уве- так и для phpbb2 форума. Это оказа-
ментарии и отвечать на них можно домления о: лось весьма удобно, а реализация не
прямо из вашего почтового кли- Создании новых документов. В том заняла и двух дней.
ента. (Больше никаких идиотских числе, получать в письме весь но-
писем: «Появился новый коммен- вый документ, со всей разметкой. Как NPJ выглядит
тарий, на который вы подписаны. Изменениях в существующих доку- и работает
Пройдите по ссылке, чтобы его уви- ментах. Для установки NPJ-узла не требуется
деть» – забудьте! Жить стало зна- Анонсах на узлах (о создании но- неординарных усилий. Всё происхо-
чительно проще и удобнее.) вых групп, сообществ, разрабо- дит гладко, и система встаёт, что на-
При разработке документации ток). зывается, из коробки. На сайте про-
ведётся история её изменения, ко- Новых комментариях к записям, екта (http://www.npj.ru) содержится де-
торую всегда можно просмотреть в том числе отвечать на эти ком- тальная информация по установке,
и точно узнать, какие правки и до- ментарии прямо из вашей люби- и там же можно всегда скачать пос-
бавления были произведены. Бо- мой почтовой программы. леднюю версию системы. Начать ра-
лее того, всегда можно вернуться Прочие уведомления. боту лучше всего с изучения страницы
к одной из сохранённых версий до- http://npj.ru/npjdev/release. Для работы
кумента. Особого внимания заслуживает то, NPJ необходимы: Apache (возможно,
Документ можно анонсировать что любая страница журнала может вы- он так же будет работать и с другими
по рабочим группам, сообщив та- ступать в совершенно разных качест- веб-серверами), MySQL, а также PHP.
ким образом о его существовании. вах. Для пояснения необходимо немно- На сайте проекта нет информации
Есть возможность создать дайд- го рассказать об архитектуре этой сис- о минимально необходимой конфигу-
жест. темы. Суть архитектуры «НетПроект- рации компьютера для установки. Од-
Благодаря Wiki-разметке, писать Журнал» можно было бы охарактери- нако я устанавливал NPJ на Linux-ма-
документы не просто, а очень прос- зовать как «вот вам пластилин, что на шины следующей конфигурации (PIII,
то. И крайне приятно. ум пришло, то и лепите». Это значит, 256 Мб RAM, 10 Гб HDD) и никаких про-
Интерфейс для каждой группы, что каждая страница доступна для ре- блем в работе не замечал.
пользователя настраивается инди- дактирования и может как содержать Я не буду описывать процесс кон-
видуально. информацию в самой себе, так и яв- фигурирования нового узла, так как
Возможность прямо с центральной ляться (например) оглавлением для уже выше было сказано – исчерпыва-
страницы увидеть все документы, раздела. Вы можете создать ссылку ющая информация находится на сай-
изменения в документах всех поль- в теле страницы на объект, который те разработчиков (который пред-
зователей, ленту всех пользовате- не существует. А сразу после сохра- ставляет из себя такой же NPJ-узел).
лей, ленту всех анонсов, список нения созданной страницы можно пе- Единственное, обращу ваше внимание
изменений в дайджестах и так да- рейти на эту ссылку и тут же создать на две настройки. Если вы хотите полу-
лее. документ, который будет по ней рас- чать уведомления на почту, то придёт-
Поддержка RSS. полагаться. И только вам решать, бу- ся создать почтовый аккаунт для NPJ
Есть багтрекер. дет это документом или очередным ог- и обеспечить
лавлением, каталогом, индексом, гос- к нему pop3-
Выше я упоминал сквозную авто- тевой книгой или чем-то ещё. д о с т у п. Н а -
ризацию на разных узлах. Дело в том, Потенциальный «минус», кото- стройки для
что каждый узел «НетПроектЖурна- рый довольно скоро бросается в гла- э т о г о п р о -
ла» имеет возможность войти в объ- за, – отсутствие возможности загруз- п и с ы в а ю т -
единённую общую сеть. Это произ- ки на сервер узла файлов через веб- с я в ф а й л е Рисунок 3. Типичное
оформление главной
водится нажатием пары ссылок в на- интерфейс. Другими словами, если вы config_tunes. страницы узла

42
администрирование
php. И если вы хотите прини- в своём личном пространстве.
мать участие в работе на дру- Для сведения, рабочая группа
гих узлах с теми приятными может существовать в скры-
мелочами, что были описаны том виде для единственно-
выше, включите интеграцию го пользователя. Это весьма
вашего узла в общую сеть. полезно, когда ваш узел пуб-
Это делается двумя кликами личный и на нём присутству-
на странице администриро- ет много людей, а вы по каким-
вания – http://npj.example.ru/ то причинам не хотите разгла-
manage/nns. шать информацию, с которой
После установки в ва- работаете. (Я это использо-
шем распоряжении будет од- вал для ведения докумен-
на группа, по умолчанию на- тации на всю сеть компании
зывающаяся node@имяузла, на своём узле, который досту-
а также личная область, до- пен всему Интернету.)
ступная всем пользователям Рабочие группы на узлах
(см. рис. 1). NPJ – это фактически разгра-
Вы можете выбрать не- ничение прав между пользо-
Рисунок 4. Рассматриваем группы более внимательно
сколько вариантов оформ- вателями узла. Они существу-
ления узла для вас, а также умолча- и использовали исключительно в лич- ют для определения политики выдачи
ния для тех пользователей, которые ных целях. (отображения) информации, с которой
не сделали собственных предустано- Как только вы увидите всё это бо- работают члены группы, а также для
вок. Первое делается в настройках гатство, возникнет вопрос – как же определения прав доступа каждого
вашего профиля, а второе, соответс- всем этим пользоваться. К сожалению члена. Группы могут быть публичными,
твенно, в настройках узла. По умол- или к счастью, NPJ имеет достаточно премодерируемыми, а также, как уже
чанию выставлен стиль «simplifica», но высокий «уровень вхождения», поэто- упоминалось, скрытыми.
многие предпочитают более аскетич- му на первых порах у пользователей Члены групп могут обладать раз-
ный стиль «academic». Мне, правда, не возникает множество вопросов о спо- ными правами, от читательских до ме-
нравится ни тот, ни другой, так как их собах взаимодействия с узлом. Здесь неджерских (администраторских). Ра-
функциональность для меня не под- на помощь приходит выражение, ко- зумеется, в пределах своих групп. Ес-
ходит. Я использую «minikui», который торое уже прозвучало выше, – каждая ли пользователь является менеджером
вы можете видеть на рис. 1. Его основ- страница узла – это «пластилин», из ко- пусть даже основной рабочей группы
ное преимущество – удобство в быс- торого вы можете «лепить» что угод- node@имяузла – это не означает, что
тром доступе к множеству функций но. Для того, чтобы понять, о чем я го- он становится администратором узла.
и свойств страницы. Например, к свое- ворю, просто кликните дважды на лю- Если вы создали рабочую груп-
му стыду, я так и не понял, как в стиле бой странице узла. Например, на цен- пу (или же решили использовать
«academic» добиться быстрого и удоб- тральной. И если вы обладаете адми- уже существующую), то можете сра-
ного (а главное постоянного, вне зави- нистраторскими правами – получите зу приступить к оформлению и на-
симости от просматриваемой страни- окно для редактирования страницы полнению её материалами. Для это-
цы) доступа к поиску. (см. рис. 2). го достаточно зайти на страницу груп-
Есть и другие причины заглянуть Начиная с этого момента вы може- пы, которая, как правило, выглядит
в пользовательские настройки. Напри- те как угодно до неузнаваемости из- http://имяузла/имярабгруппы и точно
мер, там есть выбор между использо- менить главную страницу вашего уз- так же, как на центральной странице,
ванием вики/вака разметки и более на- ла. Воспользуйтесь ссылкой на опи- кликнуть на ней дважды. Откроется
глядного редактора в стиле MS Word. сание различных тегов и разметки – уже знакомое окно редактирования.
В личной области вы можете вес- http://www.npj.ru/node/chastyevoprosy/ Оформление первой страницы ра-
ти свой дневник (как тот же livejournal) zapisizhurnala/wikisintaksis. Есть непи- бочей группы может состоять из рубри-
и, например, таким образом протоко- саные стандарты оформления главной катора материалов, алфавитного спис-
лировать для себя разработки на узле. страницы. Однако следовать им вов- ка и т. п. Причем для использования,
Там же у вас есть возможность созда- се не обязательно. Вы можете пос- например, рубрикатора, вам потребу-
вать собственные документы, не при- мотреть, как могут выглядеть заглав-
вязанные ни к какой рабочей груп- ные страницы просто попутешество-
пе. Строго говоря, рабочие группы во- вав по разным узлам.
обще не обязательный атрибут, если Когда с центральной страницей бу-
узел создавался не с целью обеспе- дет покончено, в зависимости от то-
чения какого-либо проекта, которым го, собираетесь ли вы заводить ра-
занимаются много людей. Мне извес- бочую группу или нет, – можете прой-
тно немало случаев, когда NPJ стави- ти в редактирование рабочих групп
ли на собственной локальной машине или же просто приступить к работе Рисунок 5. Начинаем мять «пластилин»

№11, ноябрь 2005 43


администрирование
подходящим для проведения такой ра-
боты (разработка с участием геогра-
фически сильно удалённых пользо-
вателей), но к тому времени я поки-
нул компанию.
Не буду рассказывать, как нам по-
могала в работе документация, состав-
ленная в NPJ весьма помагала в ра-
Рисунок 6. Две инкарнации одинаковых страниц боте. Мы забыли, что такое «гадать»
или в чем-то сомневаться. Просто от-
крываешь браузер, и вся детальная ин-
формация перед глазами.

Выводы
Способов применения в работе узла
Рисунок 7. Структура рабочей группы «Город-Инфо» NPJ ровно столько, сколько вы смо-
ется только добавить код на страницу, димым. От обычных html-текстов их от- жете придумать. Может быть, вы пред-
рубрики будут отображаться автома- личает только удобство использова- почтёте записывать в собственный
тически. (Разумеется, если при вводе ния, удобство редактирования и про- журнал интересные находки «на бу-
документов, вы будете учитывать не- чие «полезности», что уже были озву- дущее», а в документах сохранять,
обходимость указания рубрики для до- чены выше. к примеру, особо удачные конфигура-
кумента.) ционные файлы или же их описание.
Для пробы описанных выше воз- Использование NPJ Может быть, вы создадите отдельную
можностей давайте создадим на стра- в работе рабочую группу, где будете вести всю
нице новой рабочей группы ссылку Какую конкретно документацию вес- документацию по своей сети. А может,
на два объекта. Допустим, что первая ти в NPJ, решать вам. От себя я мо- вы посвятите свой узел поддержке ка-
ссылка будет документом, а вторая – гу поделиться той схемой, благодаря кого-либо проекта, разработкой кото-
оглавлением (см. рис. 5). которой у меня навсегда исчезла про- рого в данный момент занимаетесь
После сохранения мы увидим под- блема ответа на вопрос (начальству или только планируете заняться.
чёркнутые пунктиром наши ссыл- или самому себе), что где находится Многие тонкости работы NPJ оста-
ки и знак вопроса в конце. При клике и как оно работает. Эта схема исполь- лись за рамками статьи. Причин для
на этот знак вопроса нам будет пред- зовалась в компании «Город-Инфо» этого несколько. Во-первых, несмот-
ложено создать не существующий по- (см. рис. 7). ря на то, что я давно пользуюсь этой
ка объект. Как видно из рисунка, фактически системой, для меня ещё не все тон-
Теперь заполним первую страницу все области работы службы системных кости раскрыты. Во-вторых, многое
текстом, а на второй сделаем оглавле- администраторов компании здесь ос- из оставленного за рамками статьи от-
ние (см. рис. 6). вещены. Разумеется, часть информа- носится к редко используемому, и да-
Как вы видите, от того, что страни- ции не отображена на схеме и вклю- леко не всем будет интересно. Напри-
цы нами предназначались для разных чена в пункты «прочее», но и того, мер, работа с «Сообществами», внут-
целей, – суть их не изменилась. Мы мо- что отображено, более чем достаточ- ри которых создавать документы не-
жем в первый документ добавить ог- но для понимания. Стрелками отобра- льзя. Эта такая дискуссионная форма,
лавление какого-нибудь нового раз- жены ссылки между разделами. Мно- но применения ей я не нашёл, поэто-
дела. А можем, наоборот, на второй жество перекрёстных ссылок нахо- му в своём рассказе пропустил. А са-
созданной странице написать текст дится и внутри документов, но отоб- мую сложную проблему в использо-
и разместить (к примеру) картинку. разить это на схеме не представляет- вании NPJ, понимание, как это рабо-
В любой момент вы можете про- ся возможным. тает, хочется надеяться, я помог вам
смотреть код практически любой стра- Там же системными администра- разрешить.
ницы (причем необязательно только торами компании велась разработка Одно могу сказать вам точно, пос-
вашего узла). Для этого достаточно на- документации, которая впоследствии ле того, как привыкаешь пользоваться
брать http://npj.example.ru/page/source, предоставлялась клиентам и заказчи- в работе таким удобным инструментом,
и вы получите указанную страницу кам. NPJ позволяла не только вместе он становится незаменимым помощни-
в wiki-разметке. выполнять такие работы, но и отслежи- ком. И это неудивительно. Вы не тра-
Надеюсь, теперь вы поняли, что вать изменения в документе. А также тите время на поиск места для сохра-
каждая страница NPJ-узла – это шаб- предоставляла площадь для дебатов нения мыслей или целого докумен-
лон, в котором может находиться всё, по поводу внесения тех или иных из- та, не мучаетесь с построением кра-
что вам заблагорассудится. Фактичес- менений. Впоследствии там же долж- сивой структуры, не страдаете от не-
ки это можно представить как кучу html- на была начаться разработка целого корректно работающего поиска, кото-
файлов, которые между собой увяза- пакета документации, так как именно рый никак не хочет выдать требуемое –
ны так, как вы сами посчитали необхо- это средство было признано наиболее вы просто делаете свою работу.

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

Развертываем сервер Subversion


на платформе FreeBSD
Андрей Шетухин,
Шетухин,
Ольга Никулина
Прогресс в области разработки систем контроля версий не стоит на месте. Представляем вам
Subversion – современную замену устаревшей системы CVS.

Что такое Subversion? без потери версионирования кущий момент доступно около де-
Если коротко, Subversion – это сво- и истории изменений. В отличие сятка программ для работы с репо-
бодно распространяемая система от CVS, которая требует вмеша- зиторием SVN: ViewCVS, SVN::Web,
контроля версий, призванная заме- тельства администратора серве- WebSVN, ViewSVN, mod_svn_view,
нить собой устаревшую систему CVS. ра и ручного копирования файлов, Chora, Trac, SVN::RaWeb::Ligh, SVN
Subversion используется такими про- Subversion изначально обладает та- Browser, Insurrection и т. д. В данной
граммистскими коллективами, как ко- кой возможностью, а при установке статье мы рассмотрим настрой-
манда разработчиков компиляторов модуля SVN::Mirror, разработанно- ку WebSVN как наиболее простого
GNU, KDE Development Team, разработ- го Chia-Ling Kao, Subversion также и в то же время функционального
чиками СУБД Ingres, Apache Software «обучается» клонировать данные инструмента.
Foundation, Samba и многими, многими из текущего в произвольный уда- Кроме утилит командной строки,
другими. Далеко не полный список про- ленный репозиторий. доступны также графические ин-
ектов, исходные коды которых хранятся Права доступа к репозиторию. терфейсы: кроссплатформенный
в Subversion, доступен по ссылке: http:// Вы можете назначать пользова- RapidSVN, TortoiseSVN – плагин
subversion.tigris.org/testimonials.htm. телям права доступа к различным для MS Windows Explorer, а также –
частям репозитория, простым ре- Jsvn, написанный на Java и доступ-
CVS vs Subversion дактированием текстового конфи- ный везде, где есть Java-машина.
Поскольку Subversion разрабатыва- гурационного файла. Ну и, наконец, лицензия. Subversion –
лась как продвинутая замена CVS, из- Комментарии к каждому изме- программное обеспечение с откры-
начально ставилась задача: сохранить ненному объекту. Теперь вы може- тым кодом и распространяется
всю привычную функциональность те оставлять комментарий в журна- по лицензии Apache/BSD-style.
при добавлении новых возможнос- ле коммита к любому измененному
тей. Поэтому большинство широкоис- вами файлу. Что входит в состав
пользуемых команд Subversion имеют Простота развертывания сис- пакета Subversion
такой же синтаксис, как и CVS. Пере- темы. Для построения полноцен- svn – клиент Subversion. Представ-
ход на Subversion несложен и не тре- ной работоспособной системы ляет собой утилиту командной
бует долгого привыкания. Subversion в большинстве случа- строки, осуществляющую доступ
Атомарное принятие изменений. ев необходим только веб-сервер к репозиторию Subversion.
Поддержка атомарных коммитов Apache2 и интерпретатор PHP, а ми- svnversion – программа, показы-
позволяет либо принимать весь из- нимальный набор утилит Subversion, вающая состояние компонент те-
мененный код, либо не принимать позволяющий работать по протоко- кущего репозитория.
изменения вовсе, если транзакция лам SVN и SVN + SSH, вообще не svnlook – утилита для контроля ре-
по каким-либо причинам (напри- требует установки стороннего ПО. позитария Subversion.
мер, из-за падения канала) не бы- Простота интеграции в сущест- svnadmin – утилита для создания,
ла завершена. Subversion подде- вующую инфраструктуру сети. управления и восстановления ре-
рживает такой режим работы и га- Доступ к репозиторию Subversion позитария Subversion.
рантирует, что репозиторий не бу- может осуществляться по протоко- svndumpfilter – программа филь-
дет содержать в себе несовмести- лам HTTP, HTTPS, SVN, SVN+SSH, трации дампов репозитория
мых данных – либо репозиторий из набора которых вы сможете лег- Subversion.
останется неизмененным, либо об- ко выбрать наиболее подходящий mod_dav_svn – модуль для веб-сер-
новление будет полным. для заданной конфигурации сети. вера Apache2, предоставляющий
Переименование, перенос и ко- Разнообразные веб-интерфейсы доступ в репозиторий Subversion
пирование файлов и каталогов для доступа к репозиторию. На те- по протоколам HTTP и HTTPS.

46
администрирование
svnserve – программа-сервер, запускающаяся как оди- либо:
ночный демон или из inetd и предоставляющая доступ
к репозиторию Subversion по протоколу SVN или SSH. # pw -V /usr/home/jails/svn/etc useradd admin -g 0 ↵
-d /usr/home/jails/svn/usr/home/admin -s /bin/csh ↵
-h 0 -m
План установки Subversion
Установка необходимого ПО. В этом разделе будут Для удобства работы присваиваем пользователю группу
описаны установка и запуск FreeBSD Jail, установка веб- 0 (wheel) и разрешаем в jail запуск sshd. В файл /usr/home/
сервера Apache 2.X, Subversion, PHP4 и WebSVN. jails/svn/etc/rc.conf добавляем строчку sshd_enable=”YES”
Создание сертификатов и конфигурация серверно- и запускаем jail командой /etc/rc.d/jail start. Если все сделано
го ПО. Здесь мы рассмотрим создание собственного са- правильно, команда jls(8) выведет примерно следующее:
моподписанного сертификата (Certificate Authority, CA),
создание сертификата сервера и создание клиентских # jls
сертификатов. JID IP Address Hostname Path
Настройка клиентов SVN на *nix и Windows. Этот раз- 1 XX.YY.XX.TT svn.reki.ru /usr/home/jails/svn

дел посвящен работе с Subversion на платформе *nix Заходим в jail по ssh, получаем права суперпользовате-
(Linux/FreeBSD/Solaris ), а также установке на Windows- ля, выкачиваем и разворачиваем архив дерева портов:
машину клиента TortoiseSVN.
# ssh XX.YY.XX.TT -l admin
# su - root
Создаем и устанавливаем Jail # cd /usr
Jail необходим для того, чтобы система контроля версий жи- # fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports ↵
/ports.tar.gz
ла в собственном мире и никак не пересекалась с остальны- # tar -xzf ports.tar.gz
ми приложениями. Кроме того, используя jail, вы повышаете
общий уровень защищенности системы: если обнаружится Начиная с этого момента jail представляет собой пол-
уязвимость в пакетах Subversion, Apache или PHP, основная ноценную виртуальную машину, доступную для админис-
система не пострадает. Jail будет также полезен в том слу- трирования по ssh.
чае, если на основной системе установлен Apache 1.3.X.
Если для Subversion используется выделенный сервер, Устанавливаем веб-сервер Apache2
этот пункт можно смело пропустить. Для повышения общего уровня безопасности, будем ав-
Собираем jail. Обратите внимание, что на FreeBSD 5.3 торизовывать клиента через подписанный нами серти-
команда «make world DESTDIR=$D» из jail(8) не работает. фикат; поэтому нам следует воспользоваться опцией
Вместо нее следует воспользоваться командами: FakeBasicAuth. При входе клиента с выданным нами сер-
тификатом на сервер Apache произведет псевдоавториза-
make buildworld цию, основываясь на данных сертификата.
make installworld DESTDIR=$D
Надо отметить, что при подобной авторизации имя поль-
Итак, в нашем случае сборка jail будет выглядеть так: зователя выглядит как строка свойств сертификата. Соот-
ветственно при коммите через HTTPS имя пользователя бу-
# cd /usr/src дет не stellar, а /C=RU/ST=-/L=Moscow/O=Reki.ru/OU=SVN/
# mkdir -p /usr/home/jails/svn
# make buildworld CN=stellar/emailAddress=stellar@reki.ru. Понятно, что нали-
# make installworld DESTDIR=/usr/home/jails/svn чие в двух ипостасях одного и того же пользователя никого
# cd etc
# make distribution DESTDIR=/usr/home/jails/svn устроить не может и хорошим решением было бы взять в ка-
честве логина часть строки данных сертификата. Для этого
В файл /etc/rc.conf добавляем следующие строчки: в Apache предусмотрена директива SSLUserName и... увы
и ах, мир несовершенен: без исправлений кода mod_ssl оп-
jail _ enable="YES" # Включаем загрузку jail ции FakeBasicAuth и SSLUserName вместе не работают.
# Список всех jail, которые есть в системе
jail _ list="svn" К счастью, по URL http://reki.ru/products/subversion/patch-
# Запрещаем изменение hostname из jail server-ssl_engine_kernel.c, теперь доступен патч, исправля-
jail _ set _ hostname _ allow="NO"
# Разрешаем для jail обмен только по TCP/IP ющий это недоразумение.
jail _ socket _ unixiproute _ only="YES" Для сборки Apache с поддержкой FakeBasicAuth +
# Запрещаем SystemV IPC внутри jail
jail _ sysvipc _ allow="NO" SSLUserName надо скачать патч и положить его в каталог
/usr/ports/www/apache2/files. Если предполагается, что репо-
# Для jail с именем "svn"
jail _ svn _ rootdir="/usr/home/jails/svn" # Каталог jail зиторий Subversion будет храниться в BerkeleyDB, нам так-
jail _ svn _ hostname="svn.reki.ru" # Имя хоста jail же будет необходимо включить поддержку BerkeleyDB
jail _ svn _ ip="XX.YY.XX.TT" # IP адрес
jail _ svn _ exec="/bin/sh /etc/rc" # Скрипт инициализации для Apache.
jail _ svn _ devfs _ enable="YES" # Монтировать devfs в jail Итак, устанавливаем необходимые переменные окру-
жения и запускаем установку Apache.
Добавляем пользователя, под которым мы будем захо-
дить в jail. Для этого можно воспользоваться командой: # cd /usr/ports/www/apache2
# setenv WITH _ BERKELEYDB db42
# cd files
# vipw -d /usr/home/jails/svn/etc # fetch http://reki.ru/products/subversion ↵

№11, ноябрь 2005 47


администрирование
/patch-server-ssl _ engine _ kernel.c // Разрешить скачивание проекта в виде tar.gz-архива
# cd ../ $config->allowDownload();
# make install clean // Включить подсветку синтаксиса программой enscript
$config->setEnscriptPath("/usr/local/bin");
$config->useEnscript();

Устанавливаем систему контроля версий


Subversion Создаем сертификаты и конфигурируем
Поскольку предполагается, что доступ к SVN будет осущест- серверное ПО
вляться по протоколу HTTPS, нам следует установить мо- Создаем собственный самоподписанный сертификат
дуль mod_dav_svn. По умолчанию репозиторий SVN созда- (Certificate Authority, CA). Используя этот сертификат, мы бу-
ется в каталоге /home/svn/repos. дем подписывать сертификат сервера и все клиентские
сертификаты.
# cd /usr/ports/devel/subversion
# setenv WITH _ MOD _ DAV _ SVN yes # openssl req -new -newkey rsa:1024 -x509 -days 3650 -nodes ↵
# setenv WITH _ APACHE2 _ APR yes -out ca.crt -keyout ca.key -subj /C=RU/ST=- ↵
# make install clean /L=Moscow/O=Reki.ru/OU=Certificate _ Issuer ↵
/CN=reki.ru/emailAddress=admin@reki.ru
Если требуется подсветка синтаксиса исходных фай-
лов, устанавливаем программу enscript. В этом случае Перечислим список команд:
в файле конфигурации WebSVN следует включить под- req – запрос на создание нового сертификата.
дежку enscript. -new – cоздание запроса на сертификат (Certificate Signing
Request, CSR).
# cd /usr/ports/print/enscript-a4 -newkey rsa:1024 – длина RSA ключа сертификата.
# make install clean
-x509 – создание самоподписанного сертификата вмес-
то создания CSR.
Устанавливаем PHP4 -days 3650 – срок действия сертификата (10 лет). Это зна-
PHP4 нам понадобится для WebSVN – веб-фронтэнда репо- чение должно быть больше срока действия создаваемо-
зитория. Для работы WebSVN необходимо установить рас- го сертификата сервера и клиентских сертификатов.
ширения PHP для поддержки zlib и pcre. -nodes – флаг, указывающий не шифровать ключ.
-out ca.crt – сертификат.
# cd /usr/ports/lang/php4 -keyout ca.key – закрытый ключ сертификата.
# make install clean
# cd /usr/ports/lang/php4-extensions -subj – данные сертификата.
# make install clean
Строка subj имеет следующие поля:
С – код страны (Country). Двухбуквенная аббревиатура.
Устанавливаем и настраиваем WebSVN ST – название республики, региона или округа (State
По умолчанию WebSVN устанавливается в /usr/local/www/ Name).
data/WebSVN. Для наших целей придется скопировать его L – название города/деревни (Locality Name).
содержимое в каталог /usr/home/www/svn/svn.reki.ru/www. O – организация (Organization Name).
OU – отдел организации (Organization Unit).
# cd /usr/ports/devel/websvn CN – имя. Для сервера – ServerName; для клиентского
# make install clean
# mkdir -p /usr/home/www/svn/svn.reki.ru/www сертификата – что угодно.
# mkdir -p /var/log/apache/www/svn.reki.ru emailAddress – почтовый адрес администратора сервера.
# cp -r /usr/local/www/data/WebSVN ↵
/usr/home/www/svn/svn.reki.ru/www
// Правим файл конфигурации фронтэнда Для создания серверного и клиентских сертификатов
# vi /usr/home/www/svn/svn.reki.ru/www/include/config.inc
вам понадобится либо воспользоваться стандартным фай-
Примерный вид файла конфигурации следующий: лом конфигурации openssl.cnf, который, как правило, нахо-
дится в каталоге /etc/ssl, либо вручную создать собственный
// Указываем пути к программам svn, diff, sed, tar и gzip файл конфигурации (название файла – ca.config):
$config->setSVNCommandPath("/usr/local/bin");
$config->setDiffPath("/usr/bin");
$config->setSedPath("/usr/bin"); [ca]
$config->setTarPath("/usr/bin"); default _ ca = CA _ CLIENT
$config->setGZipPath("/usr/bin");
// Перечисляем все те репозитории, которые должны быть [CA _ CLIENT]
// доступны через фронтэнд # Рабочий каталог для базы данных клиентских ключей
$config->addRepository("Example Repository #1", ↵ dir = ./db
"/usr/home/svn/example"); # Каталог для новых сертификатов
$config->addRepository(«Example Repository #2", ↵ certs = $dir/certs
"/usr/home/svn/example2"); # Каталог, куда будут складываться выписанные сертификаты
// Язык веб-интерфейса new _ certs _ dir = $dir/newcerts
include("languages/russian.inc");
// Кодировки веб-интерфейса # Индекс базы данных выписанных ключей
$config->setInputEncoding("windows-1251"); database = $dir/index.txt
$config->setOutputEncoding("windows-1251"); # Номер текущего ключа
// Включить кэширование данных для фронтэнда serial = $dir/serial
$config->setCachingOn(); # Собственный самоподписанный сертификат CA

48
администрирование
certificate = ./ca.crt ErrorLog /var/log/apache/www/svn.reki.ru/error _ log
# Закрытый ключ сертификата CA CustomLog /var/log/apache/www/svn.reki.ru/access _ log ↵
private _ key = ./ca.key "%t %h %{SSL _ PROTOCOL}x ↵
%{SSL _ CIPHER}x \"%r\" %b"
# Время, на которое выписывается клиентский сертификат
default _ days = 365 SSLEngine on

default _ crl _ days = 7 # Срок действия CRL SSLCipherSuite ↵


default _ md = md5 # Алгоритм подписи ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+ ↵
LOW:+SSLv2:+EXP:+eNULL
# Название секции политики
policy = policy _ anything SSLCertificateFile ↵
/usr/local/etc/apache2/ssl.crt/server.crt
[policy _ anything] SSLCertificateKeyFile ↵
# Разрешаем не указывать код страны /usr/local/etc/apache2/ssl.key/server.key
countryName = optional
# ------ // ------- название штата или округа SSLCACertificateFile ↵
stateOrProvinceName = optional /usr/local/etc/apache2/ssl.crt/ca.crt
# ------ // ------- название города/деревни
localityName = optional SSLVerifyClient require
# ------ // ------- название организации # Пускаем только тех пользователей, которые имеют
organizationName = optional # подписанные нами сертификаты
# ------ // ------- название отдела SSLVerifyDepth 1
organizationalUnitName = optional
# Обязательно указать имя. <Location />
commonName = supplied SSLVerifyClient require
# Почтовый адрес можно не указывать # Для совместной работы этих опций
emailAddress = optional SSLOptions +FakeBasicAuth
SSLUserName SSL _ CLIENT _ S _ DN _ CN # необходим патч
AuthName "SVN"
Создаем структуру каталогов, описанную в секции AuthType Basic
AuthUserFile ↵
[CA_CLIENT] /usr/home/www/svn/svn.reki.ru/.htpasswd _ ssl
require valid-user
# mkdir -p /usr/local/etc/crt </Location>
# cd /usr/local/etc/crt
// Создаем и редактируем файл конфигурации <Location /svn>
# vi ca.config DAV svn # Обработчик DAV - svn
# mkdir ./db # общий каталог для репизиториев
# mkdir ./db/certs SVNParentPath /usr/home/svn
# mkdir ./db/newcerts
# touch ./db/index.txt AuthzSVNAccessFile ↵
# echo "01" > ./db/serial /usr/home/www/svn/svn.reki.ru/.htauth _ svn

require valid-user
Создаем сертификат сервера: </Location>

SetEnvIf User-Agent «.*MSIE.*» nokeepalive ↵


# openssl req -new -newkey rsa:1024 -nodes ↵ ssl-unclean-shutdown downgrade-1.0 ↵
-keyout server.key -out server.csr ↵ force-response-1.0
-subj /C=RU/ST=-/L=Moscow/O=Reki.ru/OU=SVN ↵ </VirtualHost>
/CN=svn.reki.ru/emailAddress=svn@svn.reki.ru
Строчки, выделенные красным, указывает серверу,
Для сертификата сервера тег CN должен содержать что принимать соединение необходимо только для тех кли-
его ServerName. В данном случае – это svn.reki.ru. ентов, которые имеют «правильный», то есть выданный на-
Подписываем сертификат собственным CA: ми сертификат. В строках, выделенных зеленым, мы ими-
тируем авторизацию по паролю. Это необходимо для того,
# openssl ca -config ca.config -in server.csr ↵ чтобы разрешить доступ к репозиторию SVN только тем
-out server.crt -batch
пользователям, которым выдан личный сертификат SSL.
Устанавливаем сертификаты: Для этого мы указываем «файл паролей», находящийся
по адресу: /usr/home/www/svn/svn.reki.ru/.htpasswd_ssl. Его
# cp server.crt /usr/local/etc/apache2/ssl.crt/server.crt содержимое состоит из строки CN (commonName), которую
# cp server.key /usr/local/etc/apache2/ssl.key/server.key
# cp ca.crt /usr/local/etc/apache2/ssl.crt/ca.crt мы задавали при создании пользовательского ключа, и ма-
гического заклинания «xxj31ZMTZzkVA», являющегося DES-
Конфигурируем веб-сервер. Создаем необходимую хэшем слова «password».
структуру каталогов:
stellar:xxj31ZMTZzkVA
oniks:xxj31ZMTZzkVA
# mkdir -p /var/log/apache/www/svn.reki.ru
# mkdir -p /usr/home/www/svn/svn.reki.ru/www
Заметим, что поскольку это не настоящая авторизация
В файл /usr/local/etc/apache2/ssl.conf прописываем кон- (по-настоящему мы авторизуемся через сертификат), у всех
фигурацию виртуального веб-сервера: пользователей один и тот же пароль: «xxj31ZMTZzkVA»:
«password».
<VirtualHost *:443> Синие строки указывают, какой путь будет использовать-
DocumentRoot /usr/home/www/svn/svn.reki.ru/www ся для https-доступа к SVN. Для нашего случая это https://
ServerName svn.reki.ru:443 svn.reki.ru/svn. Ввиду того, что мы планируем использовать
ServerAdmin admin@svn.reki.ru
Subversion для нескольких разных проектов одновременно,

№11, ноябрь 2005 49


администрирование
нам потребуется при помощи директивы SVNParentPath ука- 33928 ?? SsJ 0:03.31 /usr/local/sbin/httpd -k start -DSSL
зать общий родительский каталог для всех репозиториев. 81260 ?? IJ 0:00.01 /usr/local/sbin/httpd -k start -DSSL
81261 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL
Все репозитории из каталога /usr/home/svn будут доступ- 81262 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL
ны как https://svn.reki.ru/svn/имя_репозитория. 81263 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL
Теперь нам остается только раздать пользователям пра- 81264
81271
??
??
IJ
IJ
0:00.00
0:00.01
/usr/local/sbin/httpd
/usr/local/sbin/httpd
-k
-k
start
start
-DSSL
-DSSL
ва доступа к проектам. Для этого используется директива
AuthzSVNAccessFile, указывающая файл с описанием прав На этот момент настройка сервера Subversion завер-
доступа к тому или иному репозиторию. шена.
Формат файла следующий:
Отправка информации о коммитах
# имя репозитория:/путь
[example:/]
по почте
# Имена пользователей = права доступа До и после каждого события (commit, lock, unlock) Subversion
stellar = rw выполняет так называемые скрипты-зацепки (hook-scripts).
oniks = rw
Они располагаются в каталоге имя_репозитория/hooks.
[example2:/] Скрипты, выполняющиеся до действия, имеют префикс
stellar = rw
oniks = r «pre-», а после – соответственно «post-». Так, скрипт, запус-
кающийся перед процессом коммита, будет иметь название
Пользователь stellar имеет полный доступ к репозито- «pre-commit», а скрипт, вызывающийся после завершения
риям example и example1, а пользователь oniks – полный до- процедуры коммита – «post-commit». Соответственно, поме-
ступ к example и право на чтение из example2. щая в эти скрипты вызов программы svnmailer, мы будем рас-
сылать информацию о проведенных в проекте изменениях.
Создаем репозитории Установка программы svnmailer не представляет слож-
Поскольку мы условились, что будем использовать ности:
Subversion для двух проектов с именами example и example2,
создаем два репозитория в каталоге /usr/home/svn: # cd /usr/ports/mail/svnmailer
# make install clean

# svnadmin create /usr/home/svn/example Для рассылки оповещений о проведенных коммитах,


# svnadmin create /usr/home/svn/example2
# chown -R www:www /usr/home/svn/ создаем в каталогах репозиториев файл hooks/post-commit
и добавляем в него строчки:
Структура проекта может быть произвольной, но об-
щепринято создавать три основных каталога: branches – #!/bin/sh
REPOS="$1"
для веток, tags – для тегов проекта и trunk – непосредс- REV="$2"
твенную рабочую область для коммитов. Чтобы каждый /usr/local/bin/svn-mailer --commit --repository ↵
"${REPOS}" --revision "${REV}" --config ↵
раз не делать одну и ту же работу, создаем шаблон проек- /usr/local/etc/svn/mailer.conf &
та с основными каталогами и импортируем его в создан-
ные репозитории: Создаем файл /usr/local/etc/svn/mailer.conf, содержащий
конфигурацию списка рассылки по проектам.
# svnadmin create /usr/home/svn/example
# mkdir -p /usr/local/share/svn/skel [example] # Имя репозитория
// Каталог с шаблоном репозитория for _ repos = .*/example
# cd /usr/local/share/svn/skel from _ addr = %(author)s
# mkdir branches tags trunk # Список рассылки
# svn import /usr/local/share/svn/skel/tree ↵ to _ addr = test-developersA@example.ru
file:///usr/home/svn/example -m "initial import" [examle2]
for _ repos = .*/example2
from _ addr = %(author)s
В дальнейшем можно создавать каталоги внутри проек- to _ addr = test-developersB@example.ru
та посредством команды «svn add», удалять их – командой
[maps] # Список подстановок
«svn delete». Права на каталоги репозиториев должны при- from _ addr = [authors] # Авторы
надлежать пользователю, от которого запущен Apache. to _ addr = [mailing-lists] # Подписчики
[authors]
В файл /etc/rc.conf добавляем строчки: oniks = nikulina@example.ru
stellar = stellar@example.ru
[mailing-lists]
apache2 _ enable="YES" oniks = nikulina@example.ru
apache2ssl _ enable="YES" stellar = stellar@example.ru
test-developersA = test-developersA@example.ru
и запускаем Apache: test-developersB = test-developersB@example.ru
test-developersC = test-developersC@example.ru
# /usr/local/etc/rc.d/apache2.sh start

Если все сделано правильно, команда ps(1) покажет не- Настройка клиентов SVN
что похожее на это: Создаем и подписываем клиентский сертификат. Рассмот-
рим создание клиентского сертификата на примере поль-
# ps axw | grep httpdvv зователя stellar.

50
администрирование
# openssl req -new -newkey rsa:1024 -nodes ↵ Если импорт произведен успешно, при заходе на https://
-keyout stellar.key -out stellar.csr ↵
-subj /C=RU/ST=-/L=Moscow/O=Reki.ru ↵ svn.reki.ru появляется диалог выбора сертификата p12.
/OU=SVN/CN=stellar/emailAddress=stellar@reki.ru

Generating a 1024 bit RSA private key


Проверка работы Subversion из *nix
.++++++ Для доступа к репозиторию используется утилита svn.
.....++++++ Ее синтаксис во многом повторяет синтаксис команды
writing new private key to 'stellar.key'
cvs. Например, чтобы получить список файлов, необхо-
Подписываем созданный сертификат. димо указать ключ list и через пробел – URL-репозитории
Subversion: svn list URL.
# openssl ca -config ca.config -in stellar.csr ↵ При первом запуске svn выдаст достаточно большое ко-
-out stellar.crt -batch
личество информации:
Using configuration from ca.config
DEBUG[load_index]: unique_subject = "yes" # svn list https://svn.reki.ru/svn/example/
Check that the request matches the signature
Signature ok Authentication realm: https://svn.reki.ru:443
The Subject’s Distinguished Name is as follows Client certificate filename: /usr/home/stellar/stellar.p12
countryName :PRINTABLE:'RU' Error validating server certificate for 'https://svn.reki.ru:443':
stateOrProvinceName :PRINTABLE:'-' - The certificate is not issued by a trusted authority.
localityName :PRINTABLE:'Moscow' Use the fingerprint to validate the certificate manually!
organizationName :PRINTABLE:'Reki.ru' Certificate information:
organizationalUnitName:PRINTABLE:'SVN' - Hostname: svn.reki.ru
commonName :PRINTABLE:'stellar' - Valid: from Sep 15 09:23:00 2005 GMT until Sep 13 09:23:00 2006 GMT
emailAddress :IA5STRING:'stellar@reki.ru' - Issuer: Certificate Issuer, Reki.ru, Moscow, -, RU
- Fingerprint: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Certificate is to be certified until Sep 15 14:57:05 2006 GMT (365 days)
(R)eject, accept (t)emporarily or accept (p)ermanently? p
branches/
Write out database with 1 new entries tags/
Data Base Updated
При следующих запусках svn количество выводимой
Подготавливаем сертификат для передачи пользовате- информации будет много меньшим:
лю. Для этого выполняем следующую команду:
# svn list https://svn.reki.ru/svn/example/
# openssl pkcs12 -export -in stellar.crt ↵ Authentication realm: https://svn.reki.ru:443
-inkey stellar.key -certfile ca.crt -out server.p12 ↵
-passout pass: Client certificate filename: /usr/home/stellar/stellar.p12
branches/
tags/
При необходимости можно защитить передаваемый
сертификат паролем, указав его в поле «-passout pass:па-
роль:». Сертификат готов к передаче клиенту. Проверка работы Subversion из Windows
Вносим сертификат в список авторизации на сервер. Для работы с Subversion из-под Windows лучше всего восполь-
Для этого в файл /usr/home/www/svn/svn.reki.ru/.htpasswd_ssl зоваться программой TortoiseSVN. Узнать больше об этой
добавляем строчку: программе можно на сайте http://tortoisesvn.tigris.org.
После установки TortoiseSVN в меню, вызываемом
stellar:xxj31ZMTZzkVA по правому клику мышки, будет доступен пункт «SVN
Checkout». При попытке первого checkout программа потре-
бует ввести URL репозитория и файл сертификата p12. От-
Настройка клиентов SVN на *nix сутствие ошибок во время checkout – признак того, что сис-
и Windows тема настроена правильно.
Рассмотрим настройку клиентов SVN на различных ОС.
Вы увидите насколько это легко. Также проверим работу Выводы
Subversion из-под этих ОС. Subversion – кроссплатформенный, легкий в настройке и об-
служивании инструмент, который позволит вашему большо-
Установка сертификатов в браузерах Firefox му коллективу вести распределенную разработку проектов
и Microsoft Internet Explorer со сложной иерархией каталогов. При этом гибкая систе-
Передаем полученный сертификат на машину клиента лю- ма прав доступа гарантирует безопасность и необходимую
бым известным защищенным способом. Это можно сделать, конфиденциальность данных и кода проекта.
воспользовавшись SSH или sFTP.
Для установки сертификата следует выполнить следу- Литература, ссылки:
ющие действия: 1. Subversion Book. Доступна в виде HTML, XML Docbook и PDF на ан-
Для Microsoft Internet Explorer: зайти в меню «Tools → глийском и русском языках – http://svnbook.red-bean.com.
Internet Options → Content → Certificates → Import» и вы- 2. Сравнение систем контроля версий. Довольно полное опи-
брать файл сертификата. сание семнадцати систем контроля версий, как коммер-
Для Mozilla Firefox – ненамного сложнее. Зайти в меню ческих, так и open source. Доступно на английском языке –
«Инструменты → Настройки → Сертификаты → Упоря- http://better-scm.berlios.de/comparison/comparison.html.
дочить сертификаты → Восстановить» и также выбрать 3. TortoiseSVN. FAQ и описание Windows-клиента Subversion –
файл сертификата. http://tortoisesvn.tigris.org.

№11, ноябрь 2005 51


bugtraq

Переполнение кучи в системных Множественные уязвимости в PHP


таймерах в Cisco IOS Программа: PHP 4.4.0 и более ранние версии, PHP 5.0.5
Программа: Cisco IOS 10.x, Cisco IOS 11.x, Cisco IOS 12.x, и более ранние версии.
Cisco IOS R11.x, Cisco IOS R12.x. Опасность: Средняя.
Опасность: Высокая. Описание: 1. Массив GLOBALS является недостаточно за-
Описание: Уязвимость обнаружена в системных таймерах щищенным. Удаленный пользователь может переопреде-
на Cisco IOS. Злоумышленник может вызвать переполне- лить глобальные переменные с помощью multipart/form-data
ние кучи и выполнить произвольный код на целевой сис- POST-запроса со специально сформированным полем file
теме или произвести DoS-атаку. upload или посредством сценария, вызывающего функцию
URL производителя: www.cisco.com. extract() или import_request_variables(). Удачная эксплуата-
Решение: Установите исправление с сайта производите- ция уязвимости требует, чтобы опция register_globals была
ля. включена в конфигурационном файле PHP.
2. Обнаружена ошибка при обработке входных данных
Множественные уязвимости в NetBSD в функции parse_str(), когда эта функция вызывается толь-
Программа: NetBSD 1.x. ко с одним параметром. Злоумышленник может отключить
Опасность: Высокая. memory_limit во время обработки входных данных в функ-
Описание: 1. Удаленное переполнение буфера в telnet-кли- ции parse_str() путем отправки уязвимой функции большого
енте на различных платформах BSD. количества переменных. Функция parse_str() на время об-
2. Множественные уязвимости в CVS. Удаленный поль- работки входных данных включает опцию register_globals,
зователь может вызвать отказ в обслуживании или выпол- и если во время выполнения функции произойдет отключе-
нить произвольный код на целевой системе. Локальный ние memory_limit, то опция register_globals останется вклю-
пользователь может повысить свои привилегии на сис- ченной до перезагрузки веб-сервера.
теме. 3. Межсайтовый скриптинг возможен при обработке
3. Целочисленное переполнение в коде совместимос- входных данных в функции phpinfo(). Удаленный пользова-
ти с FreeBSD может привести к повреждению динамичес- тель может с помощью специально сформированного URL
кой памяти. Локальный пользователь может вызвать отказ выполнить произвольный HTML-сценарий в браузере жер-
в обслуживании или выполнить произвольные код на сис- твы в контексте безопасности уязвимого сайта.
теме с root-привилегиями. 4. Удаленный пользователь может обойти механизмы
4. Небезопасное создание временных файлов в ути- безопасности «safe_mode» и «open_basedir» с помощью
лите imake во время генерации страниц помощи. Локаль- модулей ext/curl и ext/gd.
ный пользователь может с помощью специально сформи- 5. Неопределенная ошибка при вызове функции
рованной символической ссылки повысить свои привиле- virtual() в Apache 2 может быть использована для обхо-
гии на системе. да ограничений безопасности директив «safe_mode»
5. Уязвимость в OpenSSL позволяет злоумышленнику и «open_basedir».
обойти некоторые ограничения безопасности. URL производителя: www.php.net.
6. Обход ограничений безопасности обнаружен в ntpd. Решение: Установите последнюю версию (4.4.1) с сайта
Приложение может быть запущено с некорректными груп- производителя.
повыми привилегиями.
7. Ошибка обнаружена в функции ptrace() при проверке Уязвимость форматной строки
привилегий процесса перед присоединением к другим про- в OpenVPN
цессам. Локальный пользователь может подключить suid- Программа: OpenVPN версии до 2.0.3.
процесс, который вызывает функцию exec() и произвести Опасность: Средняя.
дополнительные системные вызовы. Описание: Уязвимость форматной строки обнаружена
URL производителя: www.netbsd.org. в функции foreign_option() в файле options.c при обработ-
Решение: Установите исправления с сайта производите- ке входных данных. Удаленный пользователь, контроли-
ля. рующий VPN-сервер, может выполнить произвольный код
на OpenVPN-клиенте. Для удачной эксплуатации уязвимос-
Отказ в обслуживании ти опция pull должна быть разрешена в конфигурационном
в Serv-U FTP Server файле клиента.
Программа: Serv-U FTP Server версии до 6.1.0.4. Ошибка разыменования нулевого указателя обнаруже-
Опасность: Средняя. на при неудачном вызове функции accept() в OpenVPN-сер-
Описание: Удаленный пользователь может послать спе- вере, работающем в TCP-режиме. Удаленный пользователь
циально сформированный пакет приложению и вызвать может вызвать отказ в обслуживании приложения.
отказ в обслуживании. Подробности уязвимости не сооб- URL производителя: www.openvpn.net.
щаются. Решение: Установите последнюю версию (2.0.3) с сайта
URL производителя: www.serv-u.com. производителя.
Решение: Установите последнюю версию (6.1.0.4) с сай-
та производителя. Составил Александр Антипов

52
bugtraq

Отказ в обслуживании в Sun Java JRE Успешная эксплуатация уязвимости позволит злоумыш-
Программа: Sun Java JRE 1.4.2_08, 1.4.2_09, и 1.5.0_05. леннику выполнить произвольный код на целевой систе-
Опасность: Низкая. ме с привилегиями пользователя, запустившего уязвимое
Описание: Уязвимость существует в Sun Java Runtime приложение.
Environment при обработке сериализированных Java-объ- Решение: В настоящее время способов устранения уязви-
ектов. Удаленный пользователь может аварийно завер- мости не существует.
шить работу Java Virtual Machine с помощью специально-
го приложения, десериализирующего объекты их недове- Множественные уязвимости в phpBB
ренных источников. Программа: phpBB 2.0.17 и более ранние версии.
URL производителя: www.sun.com. Опасность: Высокая.
Решение: В настоящее время способов устранения уязви- Описание: 1. Межсайтовый скриптинг возможен из-за недо-
мости не существует. статочной обработки входных данных в параметре error_msg
сценария usercp_register.php, параметре forward_page сце-
Небезопасный вызов функции нария login.php и параметре list_cat сценария search.php.
CreateProcess() у различных Удаленный пользователь может с помощью специально
производителей сформированного URL выполнить произвольный HTML-
Программа: RealPlayer 10.5. Kaspersky Anti-Virus for Windows сценарий в браузере жертвы в контексте безопасности
File Servers 5.0, iTunes 4.7.1.30, Microsoft Antispyware 1.0.509 уязвимого сайта.
(Beta 1), VMWare Workstation 5.0.0 build-13124. 2. SQL-инъекция возможна из-за недостаточной обра-
Опасность: Средняя. ботки входных данных в параметре signature_bbcode_uid
Описание: Microsoft Windows API использует функцию сценария usercp_register.php и может быть эксплуатиро-
CreateProcess() для создания нового процесса и его пер- вана посредством вставки произвольных выражений типа
вичной нити. Функция CreateProcessAsUser() выполняет та- «field=xxx» в запрос. Уязвимость существует при выключен-
кую же функцию, но позволяет процессу быть запущенным ной опции magic_quotes_gpc.
в контексте безопасности пользователя. 3. Уязвимость обнаружена при обработке входных
Функция CreateProcess() выглядит таким образом: данных в параметре signature_bbcode_uid сценария
BOOL CreateProcess(
usercp_register.php. Удаленный пользователь может изме-
LPCTSTR lpПриложениеName, нить значения, которые передаются в функцию preg_replace()
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
и выполнить произвольный PHP-код на целевой системе.
LPSECURITY_ATTRIBUTES lpThreadAttributes, URL производителя: www.phpbb.com.
BOOL bInheritHandles,
DWORD dwCreationFlags,
Решение: Установите последнюю версию (2.0.18) с сайта
LPVOID lpEnvironment, производителя.
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation Обход ограничений безопасности
); в SELinux unix_chkpwd
Переменная lpПриложениеName содержит имя испол- Программа: SELinux unix_chkpwd.
няемого модуля. Если эта переменная содержит значение Опасность: Низкая.
NULL, то имя исполняемого модуля будет состоять из пер- Описание: Уязвимость обнаружена в SELinux. Локальный
вого пробела и строки lpCommandLine. Например: пользователь может с помощью утилиты unix_chkpwd про-
CreateProcess( извести перебор паролей к системным учетным записям.
NULL, Неудачные попытки входа в систему не логируются.
c:\program files\sub dir\program.exe,
... Решение: В настоящее время способов устранения уязви-
); мости не существует.
В приведенном примере строка будет интерпретирова-
на функцией следующим образом: Переполнение буфера в VERITAS
c:\program.exe files\sub dir\program name NetBackup
c:\program files\sub.exe dir\program name Программа: VERITAS NetBackup Enterprise Server Server/
c:\program files\sub dir\program.exe
Client version 5.0 и 5.1.
Итак, если приложение program.exe существует в кор- Опасность: Средняя.
невом каталоге диска C:\, то оно будет выполнено вместо Описание: Уязвимость обнаружена в библиотеке, исполь-
целевого приложения. зуемой vmd (Volume Manager Daemon). Удаленный пользо-
Этот случай поведения функции описан непосредствен- ватель может вызвать отказ в обслуживании, прервав про-
но в документации API: http://msdn.microsoft.com/library/en- цесс резервного копирования или выполнить произвольный
us/dllproc/base/createprocessasuser.asp. код на целевой системе посредством vmd-демона.
Для успешной эксплуатации уязвимости злоумышлен- URL производителя: www.symantec.com.
нику необходимо внедрить злонамеренный код в файл Решение: Установите исправление с сайта производите-
C:\program.exe. Это может быть сделано с помощью соци- ля.
альной инженерии или посредством других уязвимостей. Составил Александр Антипов

№11, ноябрь 2005 53


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

Расширяем права доступа в Linux


с помощью ACL

Сергей Яремчук
Одноуровневой модели прав доступа пользователей, которая применяется в Linux
и во всех UNIX-подобных операционных системах, на сегодняшний день явно недостаточно.
Вам придётся очень постараться, чтобы правильно распределить права доступа к объекту.
Списки контроля доступа позволяют более гибко решить эту задачу.

евять бит плюс три специаль- но для любого другого пользователя стоящее время известны две разра-
ных бита позволяют опреде- или группы, без каких-либо ограниче- ботки, реализующие списки контроля
лить права доступа к файлу ний по количеству устанавливаемых доступа для Linux, о которых сегодня
(чтение, запись, исполнение) пользователей/групп. и поговорим.
только для трех класов пользовате- Кроме того, технология ACL может
лей – владелец, группа и остальные. использоваться, например, для досту- Проект Linux Extended
Такой механизм в большинстве случа- па к SUID-файлам, определяя пользо- Attributes and ACLs
ев не пригоден для решения даже от- вателей, которым действительно не- Этот проект [1] предоставляет пат-
носительно простых задач. Чтобы оп- обходим запуск таких файлов. Опера- чи к ядрам версий 2.4 (ext2, ext3, nfs)
ределить доступ к какому-нибудь доку- ционные системы Windows на ядре NT и 2.6 (nfs), реализующие расширен-
менту или ресурсу, пользователя обыч- и Novell Netware изначально поддержи- ные атрибуты (EA – Extended Attributes)
но включают в определенную груп- вают более гибкий механизм доступа и POSIX ACL, а также библиотеки
пу. Все, кто входит в эту группу, име- к файлу. В мир Linux эта технология и инструменты для работы с ними.
ют одинаковые права, т.е. использует- пришла относительно недавно (в ядре Напомню, что ядра версии 2.6 уже
ся принцип «всё или ничего». Списки поддержка ACL появилась с версии 2.5, поддерживают ACL для ext2, ext3, jfs
контроля доступа ACL (Access Control хотя патчи были доступны еще с вер- и xfs, поэтому необходимости в ис-
Lists) позволяют установить права до- сий 2.2.12), и сейчас она реализована пользовании патча для этих файловых
ступа к файлам не только для вла- для основных файловых систем ext2, систем нет, хотя на сайте можно полу-
дельца и группы, но и индивидуаль- ext3, XFS, ReiserFS, JFS и NFS. В на- чить ссылки на все текущие исправле-

54
администрирование
ния. Для ядра 2.4 доступен комбинированный патч, включа-
ющий все необходимые компоненты (ea+acl+nfsacl+sec), ли-
бо можно устанавливать каждый патч отдельно. Для вклю-
чения ACL при конфигурировании ядра необходимо
в «File System» активировать пункт «Extended Attributes»
и затем «POSIX Access Control Lists» выбранной файловой
системы (см. рис. 1).
Для тех, кто редактирует конфигурационный файл вруч-
ную, список параметров выглядит так:

# grep 'XATTR\|POSIX _ ACL' /usr/src/linux/.config

CONFIG _ EXT2 _ FS _ XATTR=y


CONFIG _ EXT2 _ FS _ POSIX _ ACL=y
CONFIG _ EXT3 _ FS _ XATTR=y Рисунок 1. Для включения POSIX ACL необходимо отметить
CONFIG _ EXT3 _ FS _ POSIX _ ACL=y при конфигурировании ядра соответствующие пункты
CONFIG _ REISERFS _ FS _ XATTR=y
CONFIG _ REISERFS _ FS _ POSIX _ ACL=y
CONFIG _ FS _ POSIX _ ACL=y ню, выполнение для каталога означает получение списка
CONFIG _ XFS _ POSIX _ ACL=y файлов). Опция -m (--modify) означает модификацию раз-
# CONFIG _ DEVPTS _ FS _ XATTR is not set
# CONFIG _ TMPFS _ XATTR is not set решений. В случае если нужно сразу установить несколько
# CONFIG _ CIFS _ XATTR is not set разрешений, то перечисляем их через запятую.

После того как ядро перекомпилировано, можно при- # mkdir test _ acl
# setfacl -dm user:sergej:rw,group:sales:rwx test _ acl
ступать к работе.
Работа Linux ACLs базируется на использовании EA Смотрим, что получилось.
для хранения данных о правах пользователей и групп
на файлы. Расширенные атрибуты представляют собой # getfacl test _ acl
произвольные пары имя/значение, которые навсегда при- # file: test_acl
вязаны к определенному inode (файлу, каталогу, устройс- # owner: root
# group: root
тву и пр.), подобно тому как строка запуска связана с про- user::rwx
цессом. EA могут быть использованы для загрузки систем- group::r-x
ных объектов, обеспечивающих, например, дополнитель- other::r-x
default:user::rwx
ные характеристики безопасности, ACL или объектов поль- default:user:sergej:rw-
зователя, а также типа MIME, кодировки и прочего. Подроб- default:group::r-x
default:group: sales: rwx
ности смотрите в man attr(5). default:mask::rwx
Пользователи ALTLinux могут получить необходимые default:other::r-x
утилиты, использовав apt-get.
В результате получим информацию о пользователе-вла-
# apt-get install acl attr дельце и группе-владельце. Строки user, group и other явля-
ются базовыми данными и соответствуют стандартным пра-
Мне неизвестно другое применение EA, кроме ACL вам доступа. Аналогичные строки, начинающиеся с default,
(ну разве метки каталогу присваивать), поэтому перейдем соответствуют значению по умолчанию ACL для каталога
непосредственно к теме статьи. (указываются с помощью опции -d), при создании ново-
Для создания EA используется утилита setfattr, получить го подкаталога или файла внутри этого каталога этот па-
информацию об EA можно, использовав getfattr из комплек- раметр наследуется. Естественно, файлы не могут иметь
та сoreutils (ранее fileutils). Но перед тем как начать рабо- по умолчанию ACL, только каталоги, поэтому такая коман-
тать, необходимо перемонтировать дисковый раздел, доба- да будет завершена с ошибкой.
вив опцию acl и/или user_xattr (по умолчанию раздел мон-
тируется с опциями noacl и nouser_xattr.). # setfacl -dm u:sergej:rw test _ file
setfacl: test_file: Only directories can have default ACLs
# mount /home -o remount,acl
Строка default:mask показывает маску эффективных
Соответственно, для того чтобы использовать ACL прав, которую не могут превысить пользователь или груп-
при загрузке, запись в /etc/fstab будет выглядеть прибли- па. Используя маску, можно задать общие права для всех
зительно так: пользователей и групп, например:

/dev/hda5 /home reiserfs defaults,acl 1 1 # setfacl -m m::rx file

Переходим в смонтированный раздел, создаем ката- Как видите, для пользователя sergej и группы sales уста-
лог и устанавливаем право на чтение/запись пользователю новлены отличные от всех остальных права. При этом, ес-
sergej и группе sales на чтение/запись/выполнение (напом- ли вы попытаетесь установить параметры для несущест-

№11, ноябрь 2005 55


администрирование
вующего пользователя или группы, утилита завершит вы- # mv test _ acl work
# getfacl work/test _ acl
полнение с ошибкой.
Кстати, установить новые разрешения в файловой сис- # file: work/test_acl
теме, смонтированной без опции ACL, не получится. # owner: root
# group: root
user::rwx
# setfacl -dm u:sergej:rw /home/sergej/acl group::r-x
other::r-x
setfacl: /home/sergej/acl: Operation not supported
default:user::rwx
default:user:sergej:rw-
Проверим наследование атрибутов. default:group::r-x
default:group: sales: rwx
default:mask::rwx
# mkdir test _ acl/subdir default:other::r-x
# getfacl test _ acl/subdir

И в качестве вывода получим: Все атрибуты на месте, т.е. команда mv перемещает


файлы вместе с привязанными к ним списками контроля
# file: test_acl/subdir
# owner: root
доступа. Теперь переместим тестовый каталог в раздел
# group: root смонтированный без ACL и проверим разрешения:
user::rwx
group::r-x
# mv test _ acl /home/sergej/
other::r-x # getfacl /home/sergej/test _ acl
default:user::rwx
default:user:sergej:rw- # file: home/sergej/test_acl
default:group::r-x # owner: root
default:group: sales: rwx # group: root
default:mask::rwx user::rwx
default:other::r-x group::r-x
other::r-x
Теперь пробуем создать файл в каталоге:
Из увиденного можно сделать однозначный вывод: без ука-
# mount /home -o remount,acl зания при монтировании дискового раздела опции ACL
списки контроля доступа работать не будут. Утилита getfacl
Смотрим атрибуты: при использовании на таком разделе выведет стандарт-
ные права доступа.
# getfacl test _ acl/test _ file А вот при копировании получились несколько другие
# file: test_acl/test_file результаты. Создадим файл и еще один тестовый каталог,
# owner: root но при установке разрешения для каталога не будем ис-
# group: root
user::rw- пользовать опцию -d:
user:sergej:rw- #effective:rwx
group::r-x # touch test _ acl _ file
group:sales:rwx #effective:r-x # setfacl -m u:vasja:rw,g:webmaster:rwx test _ acl _ file
mask::rw-
other::r— Проверяем:

Пользователь sergej и группа sales унаследовали права. Убе- # getfacl test _ acl _ file
димся, что стандартные права доступа все еще существуют. # file: test_acl_file
# owner: root
# ls -al test _ acl # group: root
user::rw-
итого 1 user: vasja:rw-
drwxr-xr-x 2 root root 80 Окт 22 16:10 . group::r--
drwxr-xr-x 21 root root 592 Окт 22 16:00 .. group:webmaster:rwx
-rw-rw-r-- 1 root root 0 Окт 22 16:10 test_file mask::rwx
other::r--
В некоторых дистрибутивах команда ls для файлов и ка-
талогов, в которых используется ACL, дополнительно выво- Теперь сделаем копию файла в текущем каталоге:
дит знак +, например drwxr-xr-x+. От чего зависит присутс-
твие плюса в выводе, мне, к сожалению, неизвестно. Ко- # apt-get install acl attr
манда chmod также работает с такими файлами и катало-
гами, только теперь изменяются не права доступа пользо- Проверяем разрешения:
вателей, а значение маски доступа.
# getfacl test _ acl _ 2
Сохранение расширеных прав # file: test_acl_2
при копировании и перемещении # owner: root
# group: root
В документации сказано, что при копировании и переме- user::rw-
щении расширенные права доступа должны сохраняться, group::r-x
что сейчас и проверим: other::r--

56
администрирование
Как видите, разрешения изменились и соответствуют стан- правильная» утилита может сделать бесполезной всю бе-
дартным установкам, определенным переменной umask. Те- зопасность с ACL.
перь копируем файл в каталог test_acl, в котором при со-
здании разрешений использовался параметр -d. Некоторые опции утилит
setfacl и getfacl
# cp test _ acl _ file test _ acl При помощи связки getfacl/setfacl можно сохранить и вос-
# getfacl test _ acl/test _ acl _ file
становить списки контроля доступа, это может понадо-
# file: test_acl/test_acl_file биться при архивировании данных или переносе в дру-
# owner: root
# group: root
гую систему.
user::rw-
user:sergej:rw- #effective:rwx # getfacl -R --skip-base . > backup.acl
group::r-x # setfacl --restore=backup.acl
group:sales:rwx #effective:r-x
mask::rw- Если для некоторого файла или каталога требуется ус-
other::r--
тановить разрешения, которые сходны с уже имеющими-
ся, то можно поступить так (опции, написанные с заглавной
Разрешения изменились и соответствуют файлу test_file, буквы, применяются при использовании в качестве ввода
который был создан в этом каталоге. результата работы другой утилиты).

# mkdir dir # getfacl -a dir | setfacl -M - dir


# setfacl -m u:fedja:rw,g:netadmin:rwx test _ acl _ file # getfacl file1 | setfacl -S- file2
# getfacl dir
Чтобы удалить разрешение, используйте опцию -х. На-
# file: dir
# owner: root пример, удалим права для группы sales:
# group: root
user::rwx # setfacl -x g:sales test _ acl
user: fedja:rw-
group::r-x
group:netadmin:rwx Опция -m модифицирует (а фактически сохраняет) ста-
mask::rwx
other::r-x рые разрешения, добавляя к ним новые. В некоторых слу-
чаях проще установить новые права на файл или ката-
Теперь копируем в этот каталог тестовый файл. лог, полностью затерев старые. Для этих целей использу-
ется флаг -s.
# cp test _ acl _ file dir
# setfacl -m u:fedja:rw,g:netadmin:rwx test _ acl _ file
И проверяем:
Установленную для каталога маску доступа, использу-
# getfacl dir/test _ acl _ file емую по умолчанию, можно изменить так:
# file: dir/test_acl_file
# owner: root # setfacl -m default:u::rx acldir
# group: root
user::rw-
group::r-x
other::r--
Поддержка ACL в NFS и Samba
Поддержка ACL в NFS еще не закончена, но 4 версия прото-
Если при создании каталога не использовался пара- кола уже поддерживает стандартизованные удаленные вы-
метр -d, разрешения не наследуются и при копировании зовы процедур на получение и установку разрешений ACL.
(создании) файлов и каталогов права доступа соответс- Причем правильно обрабатывает запросы демон, рабо-
твуют стандартным разрешениям UNIX, т.е. фактически тающий в пространстве ядра. Демон, работающий в про-
обнуляются. странстве пользователя, поддерживает только вторую вер-
И еще один интересный момент, о котором стоит упо- сию протокола и неправильно обслуживает запросы. Кли-
мянуть. Операции копирования и перемещения были про- енты, работающие со второй версией протокола, исполь-
деланы и другими инструментами. Результат эксперимента зуют традиционные девять бит, поэтому при передаче ин-
с Midnight Commander совпал с результатом использования формация об ACL искажается. Уже в третьей версии кли-
утилит ср и mv, а вот Konqueror при перемещении не сохра- енты для запроса прав пользователя опираются на вызов
нил расширенные права. Почти аналогично ведут себя kate ACCESS, и точное разрешение этого вопроса предоставля-
и Kwrite. Если сохранять результат в текущий файл, то пра- ется клиенту. Хотя стоит отметить, что существуют реше-
ва сохраняются, а если в новый, то теряются. Все это вы- ния, позволяющие использовать ACL поверх NFS, но это те-
глядит несколько странно, потому что за операции с права- ма другого разговора. Пока же разработчики рекомендуют
ми по идее должно отвечать ядро. Как видите, при исполь- использовать ACL при работе с NFS осторожно.
зовании ACL необходимо очень тщательно отбирать и инс- Зато списки контроля доступа могут использоваться
трументы, т.к. при работе с некоторыми утилитами права вместе с Samba, что позволяет объединить Linux-сервер
теряются. Ошибка может привести к тому, что любая «не- и Windows Active Directory. Хотя стоит отметить, что POSIX

№11, ноябрь 2005 57


администрирование
кой подход применен в trustees. В июне 2005 года стал на-
конец доступен стабильный релиз новой версии 3.0, о ко-
тором пойдет речь далее.
Trustees позволяет дать доступ пользователю или груп-
пе пользователей к дереву каталогов, а не единственному
файлу, что является отходом от стандарта POSIX ACL. В при-
нципе в большинтсве случаев создание каталога и опреде-
ление к нему доступа, является типичной задачей, доступ
к отдельному файлу регулируется реже и является частным
решением. Поэтому такой подход вполне себя оправдыва-
ет. К тому же в этом случае не требуется установка тысяч
разрешений для каждого файла, что может привести при
невнимательности к ошибке, и теперь администратору лег-
Рисунок 2. После пропатчивания в Security options появится че контролировать разрешения т.к. все ограничения для ка-
новый пункт Trustees ACLS, который необходимо включить
талога и подкаталогов записываются в одной строке. Кроме
ACL и Windows NT/2000/XP ACL имеют отличия, но сервер того в этом случае снимается зависимость от используемой
Samba достаточно близко может работать с разрешениями, файловой системы и сервиса. Поэтому Trustees в принципе
принятыми в Windows-среде, обеспечивая практически все можно использовать при работе с Samba, ftp, NFS, http.
действия. Для работы Samba с ACL необходимо не только ус- Кроме принципа организации доступа Novell Netware
тановить поддержку ACL в ядре, но и собрать Samba с опци- в проекте использованы наработки Java Security.
ей --with-acl-support. А в конфигурационном файле smb.conf В архиве размером 26.3 Кб содержатся патчи к ядрам
в разделе предоставляемого ресурса должно быть прописа- версии 2.6 (2.6.8-2.6.13-rc3), исходные тексты для компиля-
но nt acl support = yes. Для установки и просмотра разреше- ции модуля и утилиты settrustees. Trustees можно скомпили-
ний можно использовать не только утилиты администриро- ровать вместе с ядром или установить как модуль.
вания Windows, но и консольную утилиту smbcacls, запуска- Для первого варианта необходимы исходные тексты яд-
емую на стороне сервера. Формат запуска утилиты такой: ра с номером версии, для которого имеется патч (при от-
сутствии такового можно попробовать ближайший по но-
smbcacls //server/share filename [options] меру, с большой вероятностью он будет работать). Далее
поступаем обычным образом:
Неудобно, что опции несколько отличаются от setacl.
Так опция -А добавляет разрешение к файлу или каталогу # cd /usr/src/linux-2.6.11
# patch -p1 < ../2.6.11.diff
сохраняя предыдущее, опция -s устанавливает новые раз-
решения затирая старые. При помощи опции -M изменя- patching
patching
file
file
security/trustees/trustees.h
security/trustees/init.c
ется маска доступа, а опции -С и -G позволяют указать но- patching file security/trustees/funcs.c
вого владельца и группу-владельца. patching file security/trustees/fs.c
patching file security/trustees/Kconfig
Кроме стандартных rwx для файлов и каталогов можно patching file security/trustees/trustees_private.h
установить дополнительные права: patching file security/trustees/Makefile
D - разрешение на удаление. patching file security/trustees/security.c
patching file security/Kconfig
P – изменение разрешения ка объекту. patching file security/trustees/Kbuild
O - установка владельца. patching file security/Makefile

И комбинированные: При конфигурировании необходимо включить пункт


READ – эквивалентно RX. Trustees ACLS в Security options (рис. 2). При ручном ре-
CHANGE – эквивалентно RWXD. дактировании раскомментируем следующие строки в фай-
FULL – эквивалентно RWXDPO. ле .config:

Проект Trustees #
# Security options
Разработчикам проекта Trustees [2] схема, применяемая #
в POSIX ACL, показалась неудобной. Для поддержания в ра- CONFIG _ SECURITY=y
CONFIG _ SECURITY _ TRUSTEES=y
бочем состоянии системы POSIX ACL требуются инструмен-
ты, позволяющие рекурсивно обходить каталоги, необхо- После чего ядро компилируется и устанавливается
димые для установки или изменения разрешений. Кроме обычным образом.
того, при большом количестве объектов такая схема тре- При установке в качестве модуля необходимо наличие
бует особого внимания и контроля. Схема, используемая исходных текстов рабочего ядра (оно должно быть обяза-
в Novell Netware, несколько проще, т.к. для установки раз- тельно собрано с опцией CONFIG_SECURITY). Далее пе-
решений используется один конфигурационный файл, ко- реходим в каталог module распакованного архива trustees
торый будет полностью контролироваться системным ад- и вводим make install. Если при компиляции не будут най-
министратором и не потребует разработки дополнитель- дены исходные тексты, то следует указать их местонахож-
ного инструментария либо сложных скриптов. Именно та- дение вручную.

58
администрирование
# make KDIR=/usr/src/linux-2.6.11 install щий права доступа 777, и ограничимся одним уровнем ре-
курсии.
После успешной компиляции модуля переходим в под-
каталог src и вводим make, получившийся исполняемый [/dev/hda6]/win/test:sergej:REBO
файл settrustees копируем в /usr/sbin, чтобы он был досту-
пен только пользователю root. Теперь все готово к работе. Теперь создаем тестовый каталог и указываем моду-
Загружаем модуль modprobe trustees.ko, либо перегружа- лю на необходимость монтирования виртуальной файло-
ем систему с новым ядром. вой системы.
Для задания разрешения по умолчанию использует-
ся конфигурационный файл /etc/trustees.conf, но его мож- # mkdir /mnt/win/test
# mount -t trusteesfs none /mnt/win/test
но переопределить опцией -f. Все записи по одной в стро-
ку состоят из устройства с каталогом/файлом и парамет- Так монтируются каталоги индивидуально, если требу-
ров доступа к нему. ется смонтировать все каталоги из файла /etc/trustees.conf,
то вызывается утилита settrustees.
[/block/device]/any/path:usr1:flags:+grp1:flags... Можно проверить:
[/network/share]I/any/path:+grp2:flags:*:flags...

Обратите внимание на флаг I во втором примере. С его # mount | grep trusteesfs


помощью указываются на чувствительные к регистру букв none on /mnt/win/test type trusteesfs (rw)
устройства. Иначе для //smb/share/DIR и //smb/share/dir будут
установлены одни и те же права доступа. Каталоги, находя- Пробуем создать файл:
щиеся на определенном устройстве, описываются без ука-
зания точки монтирования, т.е. если прописывается ката- # touch /mnt/win/test/test _ file
лог /home/sergej, а раздел /home смонтирован на /dev/hda5, touch: невозможно выполнить touch для 'test_file': Permission denied
то указывается он так:
Что и следовало ожидать. Стоит отметить, что создание
[/dev/hda5]/sergej файла на уровень выше или ниже тестового каталога прой-
дет без проблем. Чтобы остановить использование вирту-
а не так: альной файловой системы, достаточно набрать:

[/dev/hda5]/home/sergej # settrustees -D

В качестве указания параметров доступа используют- Более жизненный пример. Позволим веб-серверу счи-
ся следующие флаги: тывать данные из каталога с документами, а веб-мастерам,
R – разрешение на чтение любых файлов; кроме того и изменение файлов:
W – разрешение на запись файлов и каталогов;
B – просмотр (Browse) списка файлов в каталоге (по- [/dev/hda3]/httpd/htdocs:apache:REBX
[/dev/hda3]/httpd/htdocs:+web _ editors:RWEBX
добно установке права на исполнение для каталогов);
E – чтение (rEad) каталогов;
X – выполнение (eXecute) файлов; Выводы
U – установка стандартных прав доступа UNIX (по умол- Итак, применение ACL позволяет использовать более слож-
чанию). ные модели доступа, чем традиционная реализация, приме-
няемая в UNIX-системах. Используя ACL, даже при неболь-
Пустой параметр означает запрет всех полномочий. шом количестве пользователей администратор может су-
Вместе с флагами могут использоваться следующие моди- щественно упростить процесс распределения полномочий
фикаторы, которые могут устанавливаться, например для пользователей. Но на сегодняшний день без боязни можно
временного переопределения прав: использовать лишь консольные утилиты, остальные нуж-
C – очистка (Clear) разрешений; даются в предварительном тестировании перед использо-
D – запрет (Deny) доступа; ванием в промышленной среде.
! – запись для всех, кроме указанных пользователей или
групп; Ссылки:
O – один уровень, т.е. все файлы и каталоги внутри, 1. Сайт проекта Linux Extended Attributes and ACLs – http://acl.
но без подкаталогов; bestbits.at.
* – означает всех пользователей. 2. Сайт проекта Trustees – http://www.aeruder.net/trustees.
3. SUSE Linux Administration Guide – http://www.suse.de/~agruen/
Пустые линии игнорируются, знак решетки (#) означа- acl/chapter/fs_acl-en.pdf.
ет комментарий. 4. POSIX Access Control Lists on Linux – http://www.suse.de/~agruen/
Для примера занесем в файл информацию, запреща- acl/linux-acls.
ющую пользователю sergej запись в каталог, находящийся 5. Сайт проекта Linux NFSv4 – http://www.citi.umich.edu/projects/
на разделе с файловой системой FAT, традиционно имею- nfsv4.

№11, ноябрь 2005 59


безопасность

Windows Script Host: проводим аудит


безопасности сети
Андрей Бирюков
Вам наверняка приходится тратить массу времени, чтобы найти в логах информацию
о попытках несанкционированного доступа к ресурсам сети. Для автоматизации
осуществления поиска информации о событиях аудита и построения отчетов предлагаем вам
использовать сценарии Windows Script Host.

Вступительное слово ников на рабочих местах с помощью ние учетной записи пользователя;
Думаю, любому из вас будет интерес- аудита событий Logon/Logoff. Но пре- задание или изменение пароля.
но узнать, кто, когда и с каких машин жде всего необходимо создать поли- Directory service access (доступ
пытался зайти в сеть вашей компании, тики аудита для нашей сети. к службе каталогов) – контроль со-
особенно это интересно в случаях, ког- бытий доступа пользователя к объ-
да для доступа в сеть использовалась Готовим сеть к аудиту екту каталога Active Directory, для ко-
учетная запись с администраторски- В Windows 2000/2003 по умолчанию ау- торого задана собственная систем-
ми правами. UNIX-системы для реше- дит всех категорий безопасности от- ная таблица управления доступом.
ния подобных задач обладают массой ключен. Администратор создает поли- Logon events (события входа) –
свободно распространяемых программ. тику аудита, определяя, для каких ти- подлежит ли аудиту каждая попыт-
Они позволяют администраторам, под- пов событий безопасности нужно вы- ка пользователя войти в систему
корректировав соответствующим об- полнять аудит. Исходя из требований или выйти из нее на данном ком-
разом исходный код сценария, произ- корпоративной политики безопаснос- пьютере, или подключиться к нему
водить аудит событий доступа к сети ти своей организации, администратор через сеть.
и получать отчет, содержащий все не- может также задать аудит доступа к от- Object access (доступ к объек-
обходимые сведения об удачных и/или дельным объектам. там) – контроль событий доступа
неудачных попутках проникновения Первым шагом в создании полити- пользователя к объекту – напри-
в систему и получения доступа к раз- ки является определение событий, для мер, к файлу, папке, разделу реес-
личным ресурсам сети. С Windows все которых должен выполняться аудит. тра, принтеру и т. п.
несколько сложнее, существующие ре- При этом доступны следующие ка- Policy change (изменение поли-
шения, как правило, являются коммер- тегории событий: тик) – осуществляется ли аудит из-
ческими и требуют от системных ад- Account logon events (аутенти- менений политик назначения прав
министраторов серьезной подготовки. фикация пользователей на кон- пользователей, политик аудита или
Также в силу недоступности исходного троллерах домена) – если аудит политик доверительных отноше-
кода их достаточно трудно, а зачастую успешных попыток входа в систе- ний.
и просто невозможно, изменять и дора- му включен на контроллере доме- Privilege use (использование при-
батывать для аудита своей сети. на, в журнал будет заноситься за- вилегий) – подлежит ли аудиту
В данной статье мы рассмотрим ре- пись о каждом пользователе, про- каждая попытка пользователя вос-
шение задачи аудита – события входа шедшем проверку на этом конт- пользоваться предоставленными
по учетной записи с помощью Windows роллере домена, несмотря на то ему правами.
Script Host. Вначале напишем сцена- что пользователь на самом деле Process tracking (отслеживание
рий на VBScript, который осуществля- входит в систему на рабочей стан- процесса) – аудит таких событий,
ет сбор нужных сообщений из жур- ции домена. как активизация программы, за-
нала событий и сохранение этих со- Account management (управление вершение процесса, повторение
бытий в базе данных MS SQL Server учетными записями) – аудит всех дескрипторов и косвенный доступ
2000, потом создадим сценарий, кото- событий, связанных с управлением к объекту.
рый генерирует отчеты за день для ад- учетными записями на компьютере. System events (системные собы-
министратора, содержащие информа- К таким событиям относятся, в част- тия) – производится ли аудит собы-
цию об удачных и неудачных попытках ности, следующие: создание, изме- тий перезагрузки или отключения
входа в сеть, и напоследок решим одну нение или удаление учетной записи компьютера, а также события, вли-
прикладную бизнес-задачу: реализу- пользователя или группы; переиме- яющие на системную безопасность
ем систему учета присутствия сотруд- нование, отключение или включе- или на журнал безопасности.

60
безопасность

Рисунок 1. Список политик аудита. Обведена «Account Logon Рисунок 2. Журнал событий. Выделены два сообщения: нижнее –
Events» неудачная попытка войти в систему и верхняя – удачный вход

Чтобы выбрать категории событий всего это ограниченность размера жур- резервного копирования и корпора-
для аудита, необходимо сначала оп- нала событий, из-за которой часть со- тивных антивирусов. Так что вполне
ределить, является ли данный сервер общений рано или поздно будут удале- логичным будет использование дан-
контроллером домена. ны. С настройками по умолчанию жур- ной СУБД в качестве хранилища на-
Если это рядовой сервер, то нужно нал событий при достижении заданного ших сообщений аудита. Сразу огово-
выбрать «Administrative tools → Local ограничения на размер затирает старые рюсь, что основы построения баз дан-
security policy → Audit policy». Если аудит сообщения новыми по принципу очере- ных и SQL-запросов не являются те-
производится на контроллере домена, ди (FIFO, First In First Out). При этом раз- мой статьи, эти аспекты будут снабже-
то нужно выбрать «Active Directory Users мер файла журнала Security по умол- ны лишь краткими комментариями. За
And Computers», затем открыть запись чанию равен 131072 Кб. Если за сут- более подробной информацией може-
для данного домена, выбрать меню ки в журнал заносится несколько ты- те обратиться к источникам справоч-
«Action → Properties → Group policy → сяч сообщений, то 128 Мб это не слиш- ной информации [2, 3].
Edit», далее надо открыть «Computer ком много. Можно также настроить, что- Наша база-хранилище сообщений
Configuration → Windows Settings → бы журнал затирал сообщения по про- будет иметь следующие поля:
Security Settings → Local Policies», пос- шествии определенного количествf Событие (Event ID).
ле чего выбрать «Audit Policy». дней или не затирал сообщения вооб- Дата и время.
При любом методе в результате вы- ще [1]. Правда, в последнем случае, ког- Имя пользователя (домен\пользо-
бора Audit policy в правой панели поя- да файл журнала достигнет ограниче- ватель, под которым осуществля-
вятся доступные для аудита категории ния по размеру, наш сервер может во- лась попытка входа).
событий. Для того чтобы модифици- обще прекратить функционировать, по- Workstation (имя машины, с кото-
ровать политику для какой-либо кате- ка не будет произведена ручная очис- рой осуществлялась попытка вхо-
гории аудита, щелкните правой кноп- тка. Согласитесь, особенно неприятно, да, может быть пустым).
кой на этом событии и выберите пункт если это произойдет, скажем, в суббо- IP-адрес (машина в локальной се-
«Security». Далее необходимо устано- ту ночью. Вторым недостатком исполь- ти, с которой осуществлялась по-
вить флажок для аудита успешных по- зования журнала событий для задач пытка входа).
пыток входа в сеть и/или аудита безу- аудита сети является то, что построе-
спешных. В нашем случае необходимо ние отчетов затруднено. Можно, конеч-
выбрать «Audit Account Logon Events» но, делать выборку каждый день вруч-
и отметить «Success» и «Failure». В ре- ную с помощью стандартного фильтра
зультате получаем окно, аналогичное Event Viewer, однако автоматизировать
изображенному на рис. 1. этот процесс с помощью VBScript будет
Таким образом, теперь в журна- крайне сложно и неудобно.
ле событий «Event Log», в разделе Таким образом, возникает необхо-
«Security» при каждой попытке входа димость в использовании базы данных
пользователя в систему будет появ- для хранения сообщений о событиях.
ляться соответствующее сообщение
(см. рис. 2). Настраиваем хранилище
Однако для решения нашей задачи сообщений аудита
использование журнала событий в ка- Microsoft SQL Server 2000, или его
честве хранилища информации о по- бесплатная урезанная реализация
пытках входа в сеть – не самый лучший MSDE, активно используются различ-
Рисунок 3. Сообщение об удачном входе
выход. Причин тому несколько, прежде ными приложениями от 1С до систем в систему

№11, ноябрь 2005 61


безопасность
Создадим в MS SQL Server базу Audit, а в ней таблицу ную функцию Substring. Как видно из рис. 3, записи в по-
Logons, эти действия можно осуществить, например, с помо- ле Description занесены построчно, и каждая строка имеет
щью Query Analyzer [3], выполнив следующий SQL-скрипт. следующий вид: «параметр: значение». Для того чтобы из-
влечь значение из определенной строки, необходимо пере-
Листинг 1. SQL-скрипт для создания таблицы Logons дать функции Substring значение «параметр».
CREATE TABLE [dbo].[Logons] (
[id] [int] IDENTITY (1, 1) NOT NULL , Листинг 2. Функция substring для поиска вхождений искомой
[Event_vch] [varchar] (50) COLLATE ↵ строки
Cyrillic_General_CI_AS NULL ,
[Date_dat] [datetime] NULL , Function SubString(Str1)
[User_vch] [varchar] (50) COLLATE ↵ strpos1=InStr(1,Str,str1)
Cyrillic_General_CI_AS NULL , strtemp=Right(Str, Len(str)-strpos1-Len(str1))
[WID_vch] [varchar] (50) COLLATE ↵ strpos2=InStr(1,Strtemp,Chr(10))
Cyrillic_General_CI_AS NULL , SubString=trim(Left(strtemp,strpos2))
[Address_vch] [varchar] (50) COLLATE ↵ End Function
Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO Следует отметить, что данная функция универсальная
и ее можно использовать для поиска вхождений при напи-
Итак, создали базу, в которой будет храниться инфор- сании своих сценариев, главное – соблюдать формат, при-
мация о попытках входа в систему. Думаю, не стоит напо- меняемый для поиска.
минать, что необходимо подумать о защите данной базы, Еще одним важным моментом является формат да-
так как в случае обнаружения и расследования несанкцио- ты и времени, используемые при сохранении сообщений
нированного проникновения в систему информация из базы в базе. Я не случайно использовал одно поле для хранения
может оказать неоценимую помощь администратору. в базе даты и времени, несмотря на то что в журнале собы-
Теперь приступим к написанию сценария, который бу- тий задействованы два поля. Если у нас поле типа datetime
дет осуществлять выборку сообщений из журнала собы- содержит дату и время, то к значениям этого поля можно
тий и сохранение их в базу. применять математические функции, в частности мы уже
использовали Max, а также <, = , > которые нам еще пот-
Кто пришел, когда пришел, ребуются в дальнейшем. Если бы мы использовали отде-
откуда пришел… льные поля для даты и времени, то математические функ-
Прежде всего подробно опишу структуру WSH-сценария, ции применять было бы гораздо сложнее. Однако тут воз-
для того чтобы при необходимости вы легко могли приспо- никает еще одна сложность: для полей типа datetime необ-
собить его для решения своих задач, например, аудита до- ходимо передавать данные строго в определенном фор-
ступа к объектам или аудита изменения политик. мате «мм.дд.гггг чч:мм:сс». При этом надо использовать
Итак, первым делом нам необходимо узнать, какую дату функцию SQL CONVERT. В результате работы этой функ-
и время имеет последняя запись в базе данных. Это нужно ции с определенными параметрами (110 – для даты и 114 –
для того, чтобы не копировать одно и то же по нескольку раз. для времени) мы получаем корректно сохраненную дату
Это можно сделать с помощью следующего запроса: в базе. Подробнее о команде CONVERT и кодах, исполь-
зуемых для форматирования дат, читайте в [2].
SELECT Max(Date_dat) AS Last FROM Logons Итак, мы завершили разбор сообщений журнала собы-
тий, и теперь остается только сохранить полученную инфор-
Данный запрос возвратит дату последней записи. Та- мацию в базе. Далее приводится полный текст сценария, ко-
ким образом, мы определили, после какого времени нуж- торый осуществляет сбор и сохранение данных в базу.
но сохранять в базе поступившие сообщения. Очевидно
при первом запуске сценария данный запрос возвратит пу- Листинг 3. Сценарий для поиска и сохранения искомых
сообщений в базе данных
стую строку и нам придется копировать все сообщения.
Скорее всего в журнале событий «Security», кроме собы- Dim Cnxn, strCnxn
Dim rsCustomers, strSQLCustomers
тий аудита «Account Logon Events», могут оказаться еще ка- Dim EventDate, EventTime, EventTmp
кие-то сообщения о других событиях в системе. В связи Dim objWMI, objItem ' Objects
Dim strComputer
с этим нам необходимо отфильтровывать нужные сооб- Dim intEvent,intRec, colLoggedEvents
щения (см. рис. 3). Dim Str, strtemp
Function SubString(Str1)
События, которые нас интересуют, имеют следующие strpos1=InStr(1,Str,str1)
Event ID: strtemp=Left(Right(Str, strpos1+2), Len(str1))
strpos2=InStr(1,Strtemp,Chr(10))
673 – Удачная попытка входа в систему. SubString=Left(strtemp,strpos2)
675 – Неудачная попытка входа в систему. End Function
strComputer="127.0.0.1"
538 – Выход из системы (Logoff). Set objWMI = GetObject("winmgmts:" _
Таким образом, будем осуществлять выборку событий & "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
с этими номерами. Затем нам необходимо извлечь инфор- Set colLoggedEvents = objWMI.ExecQuery _
мацию для занесения в базу. В частности Event ID, Date Time, ("Select * from Win32_NTLogEvent Where Logfile = 'Security'" )
Set Cnxn = wscript.CreateObject("ADODB.Connection")
а также из поля Description: User Name, WID и IP-адрес. Если strCnxn = "Provider='sqloledb';Data Source=" & _
с первыми двумя значениями все ясно и просто, то для по- "127.0.0.1;" & _
"Server=MyServer;Database=Audit;Trusted_Connection=yes"
лучения последних трех придется использовать специаль- // устанавливаем соединение с SQL-сервером

62
безопасность
Cnxn.Open strCnxn Этот сценарий нужно запускать с частотой как минимум
LastRec=""
Line=" SELECT Max(Date_dat) AS Last FROM Logons" один раз в сутки, чтобы журнал событий не переполнился
Set rs=Cnxn.execute(Line) и соответственно записи не начали затирать друг друга.
'wscript.echo rs("Last")
If not(rs.eof) Then LastRec=Left(rs("Last"),19)
// находим дату последней записи Отчетность прежде всего
rs.close
last=0 Сценарий написан, информация о попытках доступа в сеть
intRec=0 исправно заносится в нашу базу, теперь самое время на-
For Each objItem in colLoggedEvents
EventTmp=Mid(objItem.TimeWritten, 7,2)+"."+ ↵ чать получать подробные отчеты о том, кто, когда и откуда
Mid(objItem.TimeWritten, 5, 2)+"."+ ↵ пытался получить доступ в нашу сеть.
Mid(objItem.TimeWritten, 1,4)+" "+ ↵
Mid(objItem.TimeWritten, 9,2)+":"+ ↵ Наш отчет будет сохраняться в формате HTML и от-
Mid(objItem.TimeWritten, 11, 2)+":"+ ↵ крываться с помощью браузера. Сценарий очень похож
Mid(objItem.TimeWritten, 13,2)
// время каждого события на предыдущий, и расписывать его подробно, думаю, не-
If (EventTmp=LastRec) Then Last=1 обязательно.
// сравниваем
If Last=0 Then
// пока даты не равны, ищем соответствующие события Листинг 4. Сценарий для построения отчетов
If objItem.eventCode=675 Then
str=objItem.message strComputer="127.0.0.1"
IpAddr=substring("Client Address:") Set objWMI = GetObject("winmgmts:" _
UserName=substring("User Name:") & "{impersonationLevel=impersonate}!\\" _
UserID=substring("User ID:") & strComputer & "\root\cimv2")
EventDate=Mid(objItem.TimeWritten,5,2)+ ↵ Set colLoggedEvents = objWMI.ExecQuery _
"."+Mid(objItem.TimeWritten, 7, 2)+ ↵ ("Select * from Win32_NTLogEvent Where Logfile = 'Security'")
"."+Mid(objItem.TimeWritten, 1,4) Set objFso = CreateObject("Scripting.FileSystemObject")
EventTime=Mid(objItem.TimeWritten,9,2)+ ↵ ' open connection
":"+Mid(objItem.TimeWritten,11,2)+ ↵ Set Cnxn = wscript.CreateObject("ADODB.Connection")
":"+Mid(objItem.TimeWritten, 13,2) strCnxn = "Provider='sqloledb';Data Source=" & _
Str=objItem.message "127.0.0.1;" & _
Line=” INSERT INTO dbo.Logons ↵ "Server=MyServer;Database=Audit;Trusted_Connection=yes"
( Event_vch, Date_dat, User_vch, ↵ Cnxn.Open strCnxn
WID_vch, Address_vch)VALUES ↵ Set strFile = objFso.CreateTextFile("c:\report.htm", True)
( '675', CONVERT(DATETIME, ↵ strFile.WriteLine("<html><title>Аудит системы ↵
'"+EventDate+"', 110)+ CONVERT(DATETIME, ↵ </title><body>")
'"+EventTime+"', 114), '"+UserName+"','" ↵ strFile.WriteLine("<center><b>Отчет от "& Date &" ↵
+UserID+"','"+IpAddr+"')" </b><table><tbody><tr><td>Имя пользователя ↵
Set rs=Cnxn.execute(Line) </td><td>Время события</td><td>Событие ↵
End if </td><td>UserID</td><td>IP адрес</td></tr>")
If objItem.eventCode=673 Then DateNow=
str=objItem.message Line=" SELECT DISTINCT(User_vch) FROM Logons"
IpAddr=substring("Client Address:") Set rs1=Cnxn.execute(Line)
UserName=substring("User Name:") Do While not(rs1.eof)
UserID=substring("Service Name:") Line=" SELECT * FROM Logons WHERE ↵
EventDate=Mid(objItem.TimeWritten, 5,2)+ ↵ (Date_dat > CONVERT(DATETIME, '" & Date &" ↵
"."+Mid(objItem.TimeWritten, 7, 2)+ ↵ 00:00:00', 102)) AND (Date_dat < CONVERT(DATETIME, ↵
"."+Mid(objItem.TimeWritten, 1,4) '" & Date & " 23:59:59', 102)) AND ↵
EventTime=Mid(objItem.TimeWritten, 9,2)+ ↵ (User_vch = '"+rs1("User_vch")+"')"
":"+Mid(objItem.TimeWritten, 11, 2)+ ↵ Set rs2=Cnxn.execute(Line)
":"+Mid(objItem.TimeWritten, 13,2) strFile.WriteLine("<TR>")
Str=objItem.message strFile.WriteLine("<td> ")
Line=" INSERT INTO dbo.Logons ( Event_vch, ↵ strFile.WriteLine(rs2("User_vch"))
Date_dat, User_vch, WID_vch, Address_vch) ↵ strFile.WriteLine("</td> ")
VALUES ( '673', CONVERT(DATETIME, ↵ strFile.WriteLine("<td> ")
'"+EventDate+"', 110)+CONVERT(DATETIME, ↵ strFile.WriteLine(rs2("Date_dat"))
'"+EventTime+"', 114), '"+UserName+"', ↵ strFile.WriteLine("</td> ")
'"+UserID+"','"+IpAddr+"')" strFile.WriteLine("<td> ")
Set rs=Cnxn.execute(Line) If (rs2(“Event_vch”)="673") Then ↵
strFile.WriteLine("<FONT COLOR=red>Неудачная ↵
End if попытка входа</FONT>")
If objItem.eventCode=538 Then If (rs2("Event_vch”)="675") Then ↵
str=objItem.message strFile.WriteLine("<FONT COLOR=green>Удачный ↵
IpAddr=substring("User Name:") вход</FONT>")
EventDate=Mid(objItem.TimeWritten, 5,2)+ ↵ If (rs2("Event_vch")="538") Then ↵
"."+Mid(objItem.TimeWritten, 7, 2)+ ↵ strFile.WriteLine("<FONT COLOR=navy>Выход ↵
"."+Mid(objItem.TimeWritten, 1,4) из системы</FONT>")
EventTime=Mid(objItem.TimeWritten, 9,2)+ ↵ strFile.WriteLine("</td> ")
":"+Mid(objItem.TimeWritten, 11, 2)+ ↵ strFile.WriteLine("<td> ")
":"+Mid(objItem.TimeWritten, 13,2) strFile.WriteLine(rs2("WID_vch"))
Str=objItem.message strFile.WriteLine("</td> ")
Line=" INSERT INTO dbo.Logons ( Event_vch, ↵ strFile.WriteLine("<td> ")
Date_dat, User_vch, WID_vch, Address_vch) ↵ strFile.WriteLine(rs2("Address_vch"))
VALUES ( '538', CONVERT(DATETIME, ↵ strFile.WriteLine("</td> ")
'"+EventDate+"', 110)+CONVERT(DATETIME, ↵ strFile.WriteLine("</TR>")
'"+EventTime+"', 114), '"+UserName+"' ↵ rs2.close
,'','')" rs1.MoveNext
Set rs=Cnxn.execute(Line) loop
End if strFile.WriteLine("</tbody></table></center></html>")
rs1.close
End If Cnxn.close
intrec=intRec+1
Set WshShell = CreateObject("WScript.Shell")
Next
cnxn.close Return = WshShell.Run("iexplore.exe c:\report.htm", 1)

№11, ноябрь 2005 63


безопасность
Данный сценарий выводит информацию о попытках войти Листинг 6.Сценарий построения отчета для контроля
рабочего времени
в сеть, которые были произведены в течение текущих суток.
При этом сначала осуществляется выборка по всем пользо- strComputer="127.0.0.1"
Set objWMI = GetObject("winmgmts:" _
вателям, которые «засветились» в журнале событий, затем & "{impersonationLevel=impersonate}!\\" _
делается запрос для каждого пользователя. Вывод осущест- & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMI.ExecQuery _
вляется в html-файл. По окончании созданный файл автомати- ("Select * from Win32_NTLogEvent Where Logfile = 'Security'")
чески открывается в браузере. Если данный сценарий запус- Set objFso = CreateObject("Scripting.FileSystemObject")
Set Cnxn = wscript.CreateObject("ADODB.Connection")
кается автоматически по расписанию, то открывать браузер strCnxn = "Provider=’sqloledb’;Data Source=" & _
с отчетом не нужно, и две последние строки из исходного тек- "127.0.0.1;" & _
"Server=MyServer;Database=Audit;Trusted_Connection=yes"
ста можно удалить. Сообщения о неудачных попытках входа Cnxn.Open strCnxn
в сеть выводятся красным цветом, удачные – зеленым, а вы- Set strFile = objFso.CreateTextFile("c:\report.htm", True)
strFile.WriteLine("<html><title>Учет времени ↵
ходы из системы – темно-синим. Сообщения будут выводиться </title><body>")
в том порядке, в каком они попали в базу, однако SQL-запро- strFile.WriteLine("<center><b>Отчет</b><table> ↵
<tbody><tr><td>Имя пользователя</td><td> ↵
сы можно переписать, например, для вывода сообщений па- Время прихода</td><td>Время ухода</td></tr>")
рами вход-выход. О том, как это сделать, речь пойдет далее. Line=" SELECT DISTINCT(User_vch) FROM Logons"
// извлекаем имена пользователей
Итак, мы получили два сценария, один из которых осущест- Set rs1=Cnxn.execute(Line)
вляет выборку нужных данных из журнала событий, а второй Do While not(rs1.eof)
выполняет запрос, с помощью которого мы получаем инфор- For i=1 to 30 // Цикл по количеству дней в месяце
мацию о попытках входа в сеть за определенный период. Оба Line=" SELECT MAX(Date_dat) AS Last, ↵
MIN(Date_dat) AS First, User_vch FROM ↵
сценария можно последовательно выполнять в конце каждых Logons WHERE (Date_dat > CONVERT(DATETIME, ↵
суток, а полученные результаты выкладывать на внутренний '2005-11-"& i &" 00:00:00', 102)) AND ↵
(Date_dat < CONVERT(DATETIME, '2005-11-""& i ↵
веб-сервер, в соответствующую папку. Тогда сисадмин сети &" 23:59:59', 102)) AND (User_vch = ‘'"+rs1 ↵
каждое утро, приходя на работу, будет получать отчет о попыт- ("User_vch")+"') AND ((Event_vch='675') OR ↵
ках доступа к ресурсам сети за предыдущие сутки. (Event_vch='538')) GROUP BY User_vch"
Set rs2=Cnxn.execute(Line)
Задача аудита попыток доступа в сеть и построения удо- If not(rs2.eof) Then
бочитаемых отчетов для системного администратора нами strFile.WriteLine("<TR>")
strFile.WriteLine("<td> ")
успешно решена. Однако будет нелишним рассмотреть еще strFile.WriteLine(rs2("User_vch"))
одну возможность для применения сценариев WSH и политик strFile.WriteLine("</td> ")
strFile.WriteLine("<td> ")
аудита Account Logon Events – это построение системы уче- strFile.WriteLine(rs2("First"))
та рабочего времени. Решение данной задачи часто взвали- strFile.WriteLine("</td> ")
strFile.WriteLine("<td> ")
вают на плечи системных администраторов, особенно в не- strFile.WriteLine(rs2(«Last»))
больших компаниях. Если в вашей организации использу- strFile.WriteLine("</td> ")
strFile.WriteLine("</TR>")
ется домен Active Directory, то каждый день, приходя на свое End If
рабочее место, пользователи должны аутентифицироваться rs2.close
Next
в домене, введя свой логин и пароль (в нашей системе ауди- rs1.MoveNext
та это событие 675 Удачный вход в систему). А в конце рабо- loop
strFile.WriteLine("</tbody></table></center></html>")
чего дня пользователи должны корректно завершить рабо- rs1.close
ту системы (событие 538 Logoff). Таким образом, для полу- Set WshShell = CreateObject("WScript.Shell")
Return = WshShell.Run("iexplore.exe c:\report.htm", 1)
чения информации о времени прихода сотрудника на рабо- Cnxn.close
ту нам необходимо получить самое раннее время события
675, а для получения времени ухода – самое позднее вре- В результате работы данного WSH-сценария будет по-
мя события 538. Сделать это можно с помощью следующего лучаться HTML-документ, в котором для каждого пользо-
громоздкого с виду запроса. Тут следует сразу оговориться: вателя будут по дням расписаны дата и время входа в сеть
в данном случае мы предполагаем, что в нашей сети кругло- и выхода из нее, то есть фактически время прихода и ухо-
суточно работают сервера и все задачи, требующие продол- да на работу.
жительных расчетов, выполняются только на них, а рабочие Итак, теперь мы с помощью наглядных примеров сце-
станции включают сотрудники, приходя на работу. нариев на VBScript продемонстрировали возможнос-
ти Windows Script Host для решения задач аудита досту-
Листинг 5. Запрос, возвращающий самый ранний logon па в сеть.
и самый поздний logoff
Надеюсь, материал, изложенный в этой статье, приго-
SELECT MAX(Date_dat) AS Last, MIN(Date_dat) ↵ дится системным администраторам и поможет им сэконо-
AS First, User_vch FROM Logons WHERE ↵
(Date_dat > CONVERT(DATETIME, '2005-11-01 00:00:00', ↵ мить рабочее время, затрачиваемое на поиск событий, уг-
102)) AND (Date_dat < CONVERT(DATETIME, ↵ рожающих безопасности вверенной им сети.
'2005-11-01 23:59:59', 102)) AND ↵
(User_vch = '"+rs1("User_vch")+"') AND ↵
((Event_vch='675') OR (Event_vch='538')) ↵ Литература:
GROUP BY User_vch
1. Windows Server 2003. Справочник администратора.
Данный запрос возвратит два значения first и last, со- 2. Microsoft SQL Server Books Online.
ответствующие времени входа в систему и времени выхо- 3. Администрирование Microsoft SQL Server 2000. Сертифика-
да из нее. ционный экзамен 70-228.

64
безопасность

Проверяем защищенность сети и сервисов


сканером DragonSoft Secure Scanner

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

О
сновные усилия администра- являются постоянно, то исследования грамма производит проверку ассоци-
торов направлены на меропри- быстро потеряют свою актуальность. ированных уязвимостей. Для опреде-
ятия, которые можно охаракте- Поэтому такой вариант больше подхо- ления сервисов используется техноло-
ризовать как пассивные методы защи- дит для проведения всестороннего ау- гия intelligent protocol identification, ко-
ты, т.е. использование межсетевых эк- дита всей системы безопасности ком- торая распознает возможный сервис
ранов, виртуальных частных сетей, ан- пании. А для проверки защищенности не только по номеру открытого пор-
тивирусов, систем обнаружения атак, сетей и сервисов лучше использовать та, но и дополнительно анализируют-
обновление систем, установка пат- сканеры безопасности, что позволит ся входные данные, чтобы подтвердить
чей и прочее. Возможно, при постоян- проводить такие проверки постоян- свои выводы. Для работы DSS потре-
ном внимании этого бывает достаточ- но. Одним из таких сканеров являет- буется компьютер класса Pentium 266
но. Но опыт показывает, что отследить ся DragonSoft Secure Scanner тайвань- с 64 Мб ОЗУ (лучше 128 Мб) и 500 Мб
все моменты практически невозмож- ской DragonSoft Security Associates, ос- свободного места на жестком диске,
но. Особенно это актуально для боль- нованной в 2002 году. с установленной Windows NT 4.0 SP3,
ших сетей, в которых используется Разработчик позиционирует DSS Windows 2000/XP.
разнообразное программное обеспе- как комплексное решение для обна- На сайте проекта [1] можно полу-
чение. Программы быстро устарева- ружения уязвимых мест в сети уров- чить 30-дневную ознакомительную
ют, а заплатки можно установить цен- ня предприятия. Утилита позволя- версию DSS. Для ее получения необ-
трализованно не для всех. Со време- ет проверить компьютеры, в качест- ходимо первоначально зарегистриро-
нем в используемых сервисах навер- ве операционной системы использу- ваться, после чего на указанный поч-
няка будут обнаружены уязвимости ющие Windows 9x/NT/2000/XP/2003, товый адрес придет ссылка для закач-
или сервисы попросту могут быть не- Sun Solaris, BSD, Linux и некоторые он- ки. Примечательно, что кроме срока
правильно настроены, что приведет лайновые сервисы (HTTP, FTP, POP3, действия больше никаких ограниче-
к образованию слабых участков. По- SMTP). На момент написания статьи ба- ний нет, что позволяет наиболее пол-
этому наряду с пассивными метода- за DSS содержала информацию о 2145 но оценить продукт. К тому же этого
ми защиты необходимо периодичес- уязвимостях. Если сравнить с анало- времени достаточно, чтобы, например,
ки использовать и активные, а поп- гичными продуктами вроде XSpider перейдя на новую работу, провести ау-
росту говоря, работать с теми же инс- (http://www.ptsecurity.ru) или Shadow дит сети и устранить проблемы. При
трументами, что и взломщик, и, полу- Security Scanner (http://www.safety-lab.com), каждом запуске появляется меню (см.
чив результат, оценить уровень защи- то в заявленных цифрах DSS явно про- рис. 1), позволяющее выбрать вари-
щенности. Такой аудит можно провес- игрывает. С другой стороны, охватить ант предполагаемой работы. Как ви-
ти двумя способами. Первый, нанять все системы и уязвимости доволь- дите, имеется три варианта тестирова-
специалистов одной из компаний, за- но тяжело, и в настоящий момент на- ния (Vulnerability Scan, Password Check,
нимающихся информационной безо- блюдается «специализация» скане- DoS Test). Четвертый пункт позволя-
пасностью. Полученный в этом слу- ров безопасности, что позволяет на- ет открыть файл с расширением *.dss,
чае отчет будет наиболее полным, хо- иболее полно охватить определен- в котором сохранены настройки и ре-
тя бы потому, что на результат не бу- ный сегмент. Для уменьшения време- зультаты ранее проведенного тести-
дет влиять заинтересованность работ- ни сканирования и количества лож- рования, что дает возможность на-
ников компании, к тому же взгляд пос- ных срабатываний используется тех- пример продолжить незаконченную
тороннего всегда более свеж. Но с дру- нология FPP (False Positives Prevention). работу. По умолчанию DSS включа-
гой стороны, стоит это отнюдь не де- При этом сначала производится поиск ет 9 политик сканирования (Complete,
шево, а учитывая, что уязвимости по- имеющихся сервисов, а затем про- Database, NetBIOS, PortScan, SANS 20,

66
безопасность
Normal, BackDoor, UNIX и Windows). Та- бое удобное время.
кое разделение позволяет более гиб- Так как DSS являет-
ко выбрать действительно необходи- ся утилитой аудита,
мый в конкретном случае вариант тес- одним из требова-
та, ведь в больших сетях при исполь- ний к которой ско-
зовании всех политик получение ре- рость сканирова-
зультата может затянуться. При необ- ния, а не скрытость,
ходимости пользователь может отре- то паузу между по-
дактировать текущую политику скани- пытками перебора
рования либо создать на основе имею- пароля устанавли-
щихся свою. Так, при помощи редакто- вать нельзя. Прак-
ра политик можно изменить: диапазон тически также лег-
сканируемых портов, реакцию на от- ко ис пользовать
сутствие пинга, параметры NetBIOS, и DoS Test, кото-
вид аудита, сканирование по протоко- рый имитирует од-
лу UDP, файлы с логинами и паролями, ноименную атаку. Рисунок 2. Отчеты DSS позволяют оценить общую обстановку
которые будут использованы при до- Кроме указанных тестов дополни- та html, к сожалению, импорт в pdf, бо-
ступе к ftp, http, NetBIOS, и некоторые тельно в руки администратора попа- лее удобный для печати, не поддержи-
другие настройки. Интересно, что для дают полезные утилиты с графичес- вается. В этом случае DSS предлагает
NetBIOS возможно автоматическое за- ким интерфейсом вроде DNS Lookup, три типа отчетов: Complete, Executive
несение данных, исправляющих непра- IP Reverse, Traceroute. Для удобства и Technician. При этом каждый может
вильную настройку, в реестры клиент- можно использовать встроенный пла- иметь три стиля: Default, Modern и Lite.
ских машин. Для этого необходимо ак- нировщик и проводить проверку ав- Отчет Complete содержит всю инфор-
тивировать опцию «Automatic registry томатически, например ночью, когда мацию. Отчет Executive предназначен
bug fix», результат ее работы будет сеть не загружена. В этом случае ре- для неспециалистов и содержит ин-
отображен в отчете. зультат сканирования дополнительно формацию о просканированных уз-
В утилите удобно реализован им- можно отправить и по почте, для че- лах, «TOP 6» самых уязвимых узлов,
порт IP-адресов. Эту операцию мож- го в подпункте Config Alert заполняют- обобщенные результаты о защищен-
но проделать тремя способами: не- ся параметры SMTP сервера и заго- ности сети. Графики, представленные
посредственным введением, задани- ловок письма. этим отчетом, будут хорошим аргумен-
ем диапазона или использованием Кроме того, DSS позволяет запус- том при разговоре с начальством. От-
текстового файла, в котором поме- кать тест с командной строки. Для это- чет Technician предназначен для спе-
щен список. Естественно, в програм- го первоначально создается шаблон циалистов безопасности и системных
ме такого рода необходимо периоди- проверки, а затем набирается коман- администраторов и содержит опи-
чески обновлять базы, содержащие да dss_winnt.exe *.dss scan. сание уязвимостей и рекомендации
описание новых уязвимостей. Зайдя Сильной стороной DSS всегда были к их устранению. При желании, зай-
в «Tools → Options → Update», можно отчеты. После сканирования админист- дя в «Report → Configure», можно из-
установить автоматическое обновле- ратор получит полную информацию обо менить параметры отчетов, добавить
ние баз. Здесь же в пункте Protection всех найденных узлах и работающих свой логотип и заголовок. Кроме отче-
можно защитить настройки програм- на них серверах, программах и их вер- тов, всю информацию можно занести
мы паролем. сиях (если возможно), включая МАС-ад- в базу данных. По умолчанию в качес-
Следующий тест Password Check рес, NetBIOS-имя, имена пользователей тве источника установлен DSS2_DB
позволяет проверить устойчивость па- и прочее. Если будут найдены уязви- использующий Microsoft Access Driver
ролей в таких сервисах: ftp, http, pop3, мости, то будут указаны степень опас- и сохраняющий информацию в файл
imap, telnet, MSSQL и MySQL. Для это- ности (Info, Low, Medium, High) и крат- scandb.mdb. Как вариант для хранения
го указывается IP-адрес, опциональ- кое описание со ссылками на ресурсы информации можно использовать фай-
но порт и файлы с логинами и паро- BugTraq, DragonSoft, ISS X-Force и CVE- лы Microsoft Excel или dBASE (*.dbf).
лями и количес- ID (Common Vulnerability and Exposure), Сканер безопасности DragonSoft
тво потоков ска- где можно найти более подробное объ- Secure Scanner является удобным инс-
нирования. Гото- яснение. При оценке риска программа трументом, позволяющим оценить за-
вые файлы с па- следует стандарту BS7799. щищенность сети и избежать проблем.
ролями и логи- На отдельных страницах будет до- Выдаваемые отчеты помогут не толь-
нами можно най- ступна сборная информация, выво- ко убедить начальство в реальности
ти в подкатало- дящая общее количество уязвимос- проблем, но и оказать помощь в их ус-
ге Dic. Сос тоя- тей по адресам (см. рис. 2), по уров- транении.
ние текущей про- ню опасности, категориям, а также спи-
верки можно со- сок обнаруженных операционных сис- Ссылка:
Рисунок 1. Вначале
необходимо выбрать х ран и т ь и п р о - тем и открытых портов. Всю информа- 1. Сайт DragonSoft Security Associates –
тип будущей работы д о л ж и т ь в л ю - цию можно сохранить в файл форма- http://www.dragonsoft.com.

№11, ноябрь 2005 67


web-программирование

Расширения РHP:
пять шагов к написанию
Это намного проще,
чем кажется с первого раза

Александр Календарев
Расширение в PHP – это набор дополнительных функций, не входящих в ядро PHP-engine.
Расширения, как и само ядро PHP-engine, написаны на С, что значительно повышает
быстродействие системы, а также позволяет осуществлять доступ к внешним библиотекам
и создавать более эффективные веб-приложения. Так как же быстро и надежно разработать
расширение?

В
полне закономерный вопрос – зачем нужны допол- рения является модуль php_mysql, который реализует ин-
нительные расширения? Казалось бы, все что нужно терфейс с БД MySql. Интерфейсом взаимодействия меж-
скриптовому языку, в PHP уже охвачено. В последний ду внешними функциями и ядром PHP (PHP-engine) явля-
дистрибутив четвертой версии входит 74 РНР-расширения. ется PHP API, а начиная с версии 4.1.0 в качестве API ис-
На официальном сайте www.php.net есть раздел, специаль- пользуется Zend API.
но посвященный этой теме: www.pecl.php.net. На данноме
ресурсе находится библиотека исходных текстов еще 132-х Шаг первый
дополнительных расширений. Не стоит забывать, что PHP Создаем шаблон расширения (скелетон)
относится к языкам интерпритируемого типа, т.е. каждая ко- Для написания и компиляции расширений вам понадобится
манда языка интерпритируется во время исполнения, что дистрибутив PHP. Первоначально входим в директорию ext,
заметно проигрывает в скорости языкам компилируемого в которой находятся папки с исходными кодами всех расши-
типа. Практика показывает, что для ускорения части фун- рений. Внутри папки ext находится папка skeleton, которая
кционала (написание функций с использованием битовых представляет собой заготовку или шаблон для написания
операций, т.к. они медленно отрабатываются на PHP и очень расширений. В принципе, данная папка нам может и не по-
замедляют работу скрипта) приходится писать расшире- надобиться. Процесс написания шаблонов уже автомати-
ния, а также если необходимо обратиться к уже сущест- зирован, нам остается только запустить скрипт генерации
вующим C-библиотекам (например, криптографические шаблона расширения или, как его называют разработчи-
или ГИС-библиотеки). Наверное, у каждого из вас найдет- ки, «скелетона». Запуск скрипта без параметров приведет
ся своя причина, чтобы написать новое расширение. к выдаче на консоль перечня всех параметров:
Данная статья поможет вам понять основы построе-
ния расширений и освоить технику написания расширений # ./ext _ skel
под *nix-системы. Написание расширений под Windows от- ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]]

личается только способом компилирования и обращения


[--skel=dir] [--full-xml] [--no-help]

к внешним библиотекам. --extname=module


--proto=file
module is the name of your extension
file contains prototypes of functions to create
В двух словах, под расширением понимается часть PHP- --stubs=file generate only function stubs in file

функций, которые реализованы в виде отдельного модуля,


--xml generate xml documentation to be added to phpdoc-cvs
--skel=dir path to the skeleton directory
написанного на С. Данные функции могут либо подклю- --full-xml generate xml documentation for a self-contained extension
(not yet implemented)
чаться, как внешний модуль, либо скомпилированы ста- --no-help don’t try to be nice and create comments in the code
тически в исходный код PHP. Простым примером расши- and helper functions to test if the module compiled

68
web-программирование
Для создания модуля первоночально необходимо за- раскомментировать строки 10 и 12 с описанием макроса
пустить скрипт с параметром: PHP_ARG_WITH.
Для динамического модуля необходимо раскомменти-
# ./ext _ skel --extname=module ровать строчки с описанием макроса PHP_ARG_ENABLE
(это будут строки 16 и 18). Данный макрос устанавлива-
После отработки скрипта будет создана директория test ет соответствия переменным для макроса PHP_NEW_
с файлами шаблона («скелетон») модуля. EXTENSION как компиляция динамического модуля (shared
objects).
# ./ext _ skel --extname=test Первый аргумент макроса PHP_NEW_EXTENSION зада-
Creating directory test ет имя расширения. Второй аргумент – файл источника (ис-
Creating basic files: config.m4 .cvsignore test.c php_test.h CREDITS EXPERIMENTAL
tests/001.phpt test.php [done]. ходный файл описания с-функций), и третий – это имя внут-
To use your new extension, you will have to execute the following steps:
ренней переменной, которая используется в макросах.
Ниже будет приведен пример config.m4 для конфигу-
1. $ cd ..
2. $ vi ext/test/config.m4 рирования расширения под компиляцию динамическо-
3.
4.
$
$
./buildconf
./configure --[with|enable]-test
го модуля. Раскомментированные строки отмечены крас-
5. $ make ным шрифтом.
6. $ ./php -f ext/test/test.php
7. $ vi ext/test/test.c
8. $ make 1 dnl $Id$
2 dnl config.m4 for extension test
Repeat steps 3-6 until you are satisfied with ext/test/config.m4 and step 6 3
confirms that your module is compiled into PHP. Then, start writing code 4 dnl Comments in this file start with the string 'dnl'.
and repeat the last two steps as often as necessary.
5 dnl Remove where necessary. This file will not work
6 dnl without editing.
Мы с вами только что создали шаблон нашего первого 7
8 dnl If your extension references something external, ↵
расширения. В поддиректории test находятся следующие use with:
сгенерированные файлы: 9
10 dnl PHP _ ARG _ WITH(test, for test support,
-rw-r--r-- 1 4 Nov 2 00:01 CREDITS – текстовый, инфор- 11 dnl Make sure that the comment is aligned:
мационный. 12 dnl [ --with-test Include test support])
13
-rw-r--r-- 1 0 Nov 2 00:01 EXPERIMENTAL – текстовый, ин- 14 dnl Otherwise use enable:
формационный. 15
16 PHP _ ARG _ ENABLE(test, whether to enable test support,
-rw-r--r-- 1 1964 Nov 2 00:01 config.m4 – шаблон конфи- 17 dnl Make sure that the comment is aligned:
гурационного файла. 18 [ --enable-test Enable test support] )
19
-rw-r--r-- 1 2707 Nov 2 00:01 php_test.h – шаблон файла 20 if test "$PHP _ TEST" != "no"; then
заголовков (Н-файл). 21 dnl Write more examples of tests here...
22
-rw-r--r-- 1 5379 Nov 2 00:01 test.c – шаблон исходного 23 dnl # --with-test -> check with-path
файла на С. 24 dnl SEARCH _ PATH="/usr/local /usr" # you might ↵
want to change this
-rw-r--r-- 1 469 Nov 2 00:01 test.php – шаблон тестового 25 dnl SEARCH _ FOR="/include/test.h" # you most likely ↵
файла. want to change this
26 dnl if test -r $PHP _ TEST/; then # path given ↵
drwxr-xr-x 2 0 Nov 2 00:01 tests – директория для регрес- as parameter
сионных тестов. 27 dnl TEST _ DIR=$PHP _ TEST
28 dnl else # search default path list
29 dnl AC _ MSG _ CHECKING([for test files in default ↵
Шаг второй 30
path])
dnl for i in $SEARCH _ PATH ; do
Настраиваем конфигурацию config.m4 31 dnl if test -r $i/$SEARCH _ FOR; then
Следующий шаг в настройке нашего шаблона – это задание 32 dnl TEST _ DIR=$i
33 dnl AC _ MSG _ RESULT(found in $i)
конфигурационного файла. Модуль будущего расширения 34 dnl fi
может быть скомпилирован либо как внешний so-модуль 35 dnl done
36 dnl fi
(shared object), либо статически, как часть php. Для отлад- 37 dnl
ки расширения удобнее его собирать как внешний модуль. 38 dnl if test -z "$TEST _ DIR"; then
39 dnl AC _ MSG _ RESULT([not found])
Достоинство такого подхода в том, что при этом не нужно 40 dnl AC _ MSG _ ERROR([Please reinstall the test ↵
пересобирать PHP полностью, а достаточно лишь отдельно distribution])
41 dnl fi
перекомпилировать только одно исходное расширение. 42
Если модуль собирается статически, то при кон- 43 dnl # --with-test -> add include path
44 dnl PHP _ ADD _ INCLUDE($TEST _ DIR/include)
фигурировании ядра php необходимо задать ключи: 45
./configure --with-test или ./configure --enable-test. 46 dnl # --with-test -> check for lib and symbol ↵
presence
Как вы видите (пример config.m расположен ниже), 47 dnl LIBNAME=test # you may want to change this
большинство директив в файле config.m закомментиро- 48 dnl LIBSYMBOL=test # you most likely want to change ↵
this
вано символами dnl. Вам необходимо раскомментировать 49
те строки, которые указывают, в каком качестве (динами- 50 dnl PHP _ CHECK _ LIBRARY($LIBNAME,$LIBSYMBOL,
51 dnl [
ческого или статического модуля) в дальнейшем будет ис- 52 dnl PHP _ ADD _ LIBRARY _ WITH _ PATH($LIBNAME, ↵
пользовано расширение. В случае если вы будете конфи- $TEST _ DIR/lib, TEST _ SHARED _ LIBADD)
53 dnl AC _ DEFINE(HAVE _ TESTLIB,1,[ ])
гурировать наш модуль как статический, то необходимо 54 dnl ],[

№11, ноябрь 2005 69


web-программирование
55 dnl AC _ MSG _ ERROR([wrong test lib version or ↵ пировать или перенести скомпилированный файл модуля
lib not found])
56 dnl ],[ в директорию самого расширения.
57 dnl -L$TEST _ DIR/lib -lm -ldl
58 dnl ]) # cd modules
59 dnl # cp * ..
60 dnl
PHP _ SUBST(TEST _ SHARED _ LIBADD) # cd ..
61 # php test.php
62 PHP _ NEW _ EXTENSION(test, test.c, $ext _ shared)
63 fi Functions available in the test extension:<br>
confirm_test_compiled<br>
Для осуществления некоторых условий проверок <br>
Congratulations! You have successfully modified ext/test/config.m4.
(например, на наличие некоторых необходимых библиотек Module test is now compiled into PHP.
или соответствие допустимых версий) для положительной
компиляции на этапе конфигурирования, раскомментируй- Как вы видите, при запуске наш тестовый модуль выво-
те соответствующие строчки с 20 по 60. дит нам поздравление, что он успешно скомпилирован.
Если cli-версия PHP отсутствует, то необходимо наш
Шаг третий модуль переписать в директорию, определенную в php.ini
Компиляция (секция Paths and Directories) как директория для расши-
Как уже упоминалось, компиляция нашего расширения рений, а также дописать строчку, которая определяет под-
может быть как в модуль, который является частью само- ключение нашего расширения (строка выделена красным
го PHP, так и во внешний модуль, подгружаемый во вре- шрифтом).
мя исполнения. Строки в php.ini:
Для статической компиляции необходимо в домашней
директории php выполнить команды: ; UNIX: "/path1:/path2"
extension _ dir = ".;/usr/local/php/extension"
# ./buildconf ; Dynamic Extensions ;
# ./configure --enable-test [прочие опции] extension=test.so
# make
# make install Необходимо отметить, что при перекомпиляции модуля
достаточно выполнить только одну команду make.
Как упоминалось выше, для отладки лучше используй-
те компиляцию расширения как внешнего модуля (test.so). Шаг четвертый
Для этого необходимо выполнить следующие команды: Добавляем новую функцию
Вы научились компилировать шаблон php-расширения.
# cd test Но при разработке модуля, как правило, необходимо ис-
# phpize
# ./configure --enable-test=shared пользовать множество функций.
# make Прежде чем рассмотреть, как добавлять новую фун-
# make install
кцию, перейдем к рассмотрению сгенерированного кода
По окончании работы скрипта появляется директория на С (файл test.с) :
modules, в которой должен быть файл test.so. Если во время
компиляции происходят какие-то ошибки, то это, как пра- 1 #include "php.h"
2 #include "php _ ini.h"
вило, связанно с тем, что некоторые пути не прописаны, 3 #include "ext/standard/info.h"
или какие-то библиотеки не найдены. 4 #include "php _ test.h"
5
6 /* If you declare any globals in php _ test.h
Проверка 7
8
uncomment this: ZEND _ DECLARE _ MODULE _ GLOBALS(test)
*/
Как правило, если все удачно скомпилировано, то мож- 9
но сразу же осуществить тестовую проверку. Если на сер- 10 /* True global resources – no need for thread safety ↵
here */
вере установлена cli-версия PHP (версия PHP для коман- 11 static int le _ test;
дной строки), то вы можете прямо из консоли проверить, 12
13 /* {{{ test _ functions[]
как скомпилировалось наше расширение. 14* Every user visible function must have an entry ↵
in test _ functions[].
15 */
# php test.php 16 function _ entry test _ functions[] = {
Warning: dl(): Unable to load dynamic library './test.so' - ./test.so: cannot open 17 PHP _ FE(confirm _ test _ compiled, NULL) ↵
shared object file: No such file or directory in /usr/local/src/php-4.4.0/ext/test/ /* For testing, remove later. */
test.php on line 4 Functions available in the test extension:<br> 18 {NULL, NULL, NULL} /* Must be the last line ↵
Warning: Invalid argument supplied for foreach() in /usr/local/src/php-4.4.0/ext/ in test _ functions[] */
test/test.php on line 9<br> 19 };
Module test is not compiled into PHP
20 /* }}} */
21
22 /* {{{ test _ module _ entry
Не стоит сразу так расстраиваться, php просто не нашел 23 */
наш модуль, т.к. модуль лежит в поддиректории modules, 24 zend _ module _ entry test _ module _ entry = {
25 #if ZEND _ MODULE _ API _ NO >= 20010901
а php осуществляет поиск при отсутствии полного пути 26 STANDARD _ MODULE _ HEADER,
в текущей директории. 27 #endif
28 "test",
Для того чтобы проверить работу, достаточно лишь ско- 29 test _ functions,

70
web-программирование
30 PHP _ MINIT(test), 107 php _ info _ print _ table _ header(2, ↵
31 PHP _ MSHUTDOWN(test), "test support#, "enabled#);
32 PHP _ RINIT(test), /* Replace with NULL ↵ 108 php _ info _ print _ table _ end();
if there’s nothing to do at request start */ 109
33 PHP _ RSHUTDOWN(test), /* Replace with NULL ↵ 110 /* Remove comments if you have entries in php.ini
if there’s nothing to do at request end */ 111 DISPLAY _ INI _ ENTRIES(); */
34 PHP _ MINFO(test), 112 }
35 #if ZEND _ MODULE _ API _ NO >= 20010901 113 /* }}} */
36 "0.1", /* Replace with version number for your ↵ 114
extension */ 115
37 #endif 116 /* Remove the following function when you have succesfully
38 STANDARD _ MODULE _ PROPERTIES 117 modified config.m4 so that your module can be compiled
39 }; 118 into PHP, it exists only for testing purposes. */
40 /* }}} */ 119
41 120 /* Every user-visible function in PHP should ↵
42 #ifdef COMPILE _ DL _ TEST document itself in the source */
43 ZEND _ GET _ MODULE(test) 121 /* {{{ proto string confirm _ test _ compiled(string arg)
44 #endif 122 Return a string to confirm that the module is ↵
45 /* {{{ PHP _ INI compiled in */
46 */ 123 PHP _ FUNCTION(confirm _ test _ compiled)
47 /* Remove comments and fill if you need to have ↵ 124 {
entries in php.ini 125 char *arg = NULL;
48 PHP _ INI _ BEGIN() 126 int arg _ len, len;
49 STD _ PHP _ INI _ ENTRY("test.global _ value", "42", ↵ 127 char string[256];
PHP _ INI _ ALL, OnUpdateInt, global _ value, ↵ 128
zend _ test _ globals, test _ globals) 129 if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵
50 STD _ PHP _ INI _ ENTRY("test.global _ string", ↵ TSRMLS _ CC, "s", &arg, &arg _ len) == FAILURE) {
"foobar", PHP _ INI _ ALL, OnUpdateString, ↵ 130 return;
global _ string, zend _ test _ globals, test _ globals) 131 }
51 PHP _ INI _ END() 132
52 */ 133 len = sprintf(string, "Congratulations! You have ↵
53 /* }}} */ successfully modified ext/%.78s/config.m4. Module ↵
54 %.78s is now compiled into PHP.", "test", arg);
55 /* {{{ php _ test _ init _ globals */ 134 RETURN _ STRINGL(string, len, 1);
56 /* Uncomment this function if you have INI entries 135 }
57 static void php _ test _ init _ globals ↵ 136 /* }}} */
(zend _ test _ globals *test _ globals)
58 {
59 test _ globals->global _ value = 0; Рассмотрим более подробно содержание файла test.с.
60 test _ globals->global _ string = NULL; Все PHP-модули имеют общую структуру:
61 }
62 */ блок включения заголовков (макросы, определения API,
63 /* }}} */ внешние библиотеки);
64
65 /* {{{ PHP _ MINIT _ FUNCTION */ С-объявление функции экспорта;
66 PHP _ MINIT _ FUNCTION(test) блок объявлений функций (PHP) Zend;
67 {
68 /* If you have INI entries, uncomment these lines блок объявлений модуля (PHP) Zend;
69 ZEND _ INIT _ MODULE _ GLOBALS ↵ реализация get_module();
(test, php _ test _ init _ globals, NULL);
70 REGISTER _ INI _ ENTRIES(); реализация всех экспортных функций.
71 */
72 return SUCCESS;
73 } Объявление функции экспорта (строки) находится в за-
74 /* }}} */ головочном h-файле (php_test.h):
75
76 /* {{{ PHP _ MSHUTDOWN _ FUNCTION
77 */ /* For testing, remove later. */
78 PHP _ MSHUTDOWN _ FUNCTION(test) PHP _ FUNCTION(confirm _ test _ compiled);
79 {
80 /* uncomment this line if you have INI entries В нашем случае это только одна функция, которая бы-
81 UNREGISTER _ INI _ ENTRIES();
82 */ ла сгенерирована скриптом «скелетона»: confirm_test_
83 return SUCCESS; compiled().
84 }
85 /* }}} */ Если вам необходимо добавить новую функцию, то для
86 этого добавляйте макрос ее описания в заголовочный файл
87 /* Remove if there’s nothing to do at request start */
88 /* {{{ PHP _ RINIT _ FUNCTION */ php_test.h. Например, если вы хотите добавить новую функ-
89 PHP _ RINIT _ FUNCTION(test) цию add_string(), то должны дополнить заголовочный файл
90 {
91 return SUCCESS; (php_test.h) макросом описания экспортируемой функции
92 } (красным цветом помечен добавленный текст) :
93 /* }}} */
94
95 /* Remove if there’s nothing to do at request end */ PHP _ FUNCTION(confirm _ test _ compiled);
96 /* {{{ PHP _ RSHUTDOWN _ FUNCTION */ /* добавляем объявление экспортируемой функции */
97 PHP _ RSHUTDOWN _ FUNCTION(test) PHP _ FUNCTION(add _ string);
98 {
99 return SUCCESS;
100 } Блок объявлений функций Zend в коде (файл test.с)
101 /* }}} */ строки 16-19. Для каждой видимой для PHP-функции не-
102
103 /* {{{ PHP _ MINFO _ FUNCTION */ обходимо описывать ее в function_entry. Для того чтобы
104 PHP _ MINFO _ FUNCTION(test) добавить новую функцию, необходимо расширить опи-
105 {
106 php _ info _ print _ table _ start(); сание структуры (красным цветом помечен добавленный
текст):

№11, ноябрь 2005 71


web-программирование
16 function _ entry test _ functions[] = { Далее немного изменим файл test.php:
17 PHP _ FE(confirm _ test _ compiled, NULL)
PHP _ FE(add _ string, NULL)
/* добавляем объявление новой функций */ <?
18 {NULL, NULL, NULL} /* эта строка всегда должна print PHP _ SHLIB _ SUFFIX;
быть последней в описании*/ if(!extension _ loaded('test')) {
19 }; dl('test.' . PHP _ SHLIB _ SUFFIX);
}
$module = 'test';
Макрос PHP_FE(name,arg_types) определяет имя точки $functions = get _ extension _ funcs($module);
echo "Functions available in the test extension:<br>\n";
входа в описании function_entry. foreach($functions as $func) {
Если уже реализовано описание функции и мы хотим echo $func."<br>\n";
}
дополнить API нашего расширения еще одной точкой входа, echo "<br>\n";
т.е. создать псевдоним функции (или alias), тогда мы опреде-
print add _ string($module);
ляем alias с помощью макроса: PHP_FALIAS(name,alias,arg_ ?>
types).
Блок объявлений модуля Zend запоминается в струк- П р и в е р н о й ко м п и л я ц и и в ы з о в фу н к ц и и ad d _
туре zend_module_entry test_module_entry{} (строки 24-40) string($module) выдаст перечень доступных функций и свои
и содержит всю информацию о содержании нашего моду- поздравления: «Congratulations! You have successfully new
ля (расширения). Как правило, нам изменять код в данной function» – это и есть поздравления.
структуре не приходится.
Данные структуры test_module_entry: # php test.php
Functions available in the test extension:<br>
28 "test" , /* имя модуля */. confirm_test_compiled<br>
29 test _ functions, /* ссылка на блок объявлений add_string<br>
функций, стр 16 */ <br>
30 PHP _ MINIT(test), /* ссылка на описание функции Congratulations! You have successfully new function
инициализации модуля,
стр 65-74 */
31 PHP _ MSHUTDOWN(test), /* ссылка на описание функции
деинициализации модуля,
Шаг пятый
стр 76-85 */ Передача параметров
32 PHP _ RINIT(test), /* ссылка на описание функции Вы научились создавать шаблон модуля, добавлять в не-
при инициализации страницы,
стр 88-93 */ го функции. Конечно, функции нужны для того, чтоб что-то
33 PHP _ RSHUTDOWN(test), /* ссылка на описание функции вычислять или производить какие-то действия с данными.
при деинициализации страницы,
стр 96-101 */ Для этого в функцию необходимо передать какой-нибудь
34 PHP _ MINFO(test), ), /* ссылка на описание список параметров и получить результат.
функции, которая выдает
информацию для phpinfo() */ Для передачи параметров из PHP в модуль используют-
35 #if ZEND _ MODULE _ API _ NO >= 20010901 ся макросы. Макрос ZEND_NUM_ARGS() возвращает коли-
36 "0.1", )
/* Номер версии нашего расширения */ чество аргументов, переданное PHP-скриптом в модуль.
37 #endif Можно, например, для контроля количества аргументов
использовать следующий код:
Описание тела самой функции определяется макросом
PHP_FUNCTION (name). Описание функции confirm_test_ if(ZEND _ NUM _ ARGS() != 2) WRONG _ PARAM _ COUNT;
compiled() определено в строчках 121-136. Если вы хотите
добавить новую функцию add_string(), то необходмио скопи- Необходимо заметить, что макрос WRONG_PARAM_
ровать строчки 121-136 ниже и изменить имя функции и со- COUNT определен в $PHP_HOME/Zend/zend_API.h, поэто-
держание того, что она должна выводить (красным цветом му необходимо добавить заголовочный файл:
помечен измененный текст):
#include "zend _ API.h"
/* {{{ proto string confirm _ test _ compiled(string arg) */

PHP _ FUNCTION(add _ string) При выполнении макроса WRONG_PARAM_COUNT


{ будет выдано следующее предупреждение:
char *arg = NULL;
int arg _ len, len;
char string[256]; <b>Warning</b> Wrong parameter count for module test()in /usr/
local/src/php-4.4.0/ext/test/test.php on line 4
if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵
TSRMLS _ CC, "s", &arg, &arg _ len) == FAILURE) Макрос zend_parse_parameters производит анализ
{ return; }
(проверку) параметров.
len = sprintf(string, "Congratulations! You have ↵
successfully new function "); int zend _ parse _ parameters(
RETURN _ STRINGL(string, len, 1);
} /* количество аргументов. Может быть ZEND _ NUM _ ARGS() */
int num _ args TSRMLS _ DC,
/* }}} */
char *type _ spec, /* спецификация */
Нам остается повторить шаг 3 – компиляцию. Надеюсь, /* объявление аргумента в соответствии с его типом*/
arg _ type arg,
она прошла удачно. ...);

72
web-программирование
Рассмотрим наш пример (файл test.с), строка 129. char *arg = NULL;
int arg _ len, len;
В данном макросе для определения первого аргумен- int i = 0 ;
та – количество переданных параметров – используется char string[256];
ZEND_NUM_ARGS(). if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵
Вторым параметром стоит спецификация «s», кото- TSRMLS _ CC, "s|l", &arg, &arg _ len, ) == FAILURE)
{ return; }
рая указывает на тип передаваемого аргумента – стро-
ка. Третьим и четвертым параметрами являются значе- len = sprintf(string, "Congratulations! You pass ↵
parameters string: %s <br>\n integer: %l ", arg, i );
ния переменных, в которые передается содержание стро- RETURN _ STRINGL(string, len, 1);
ки и ее длины. }
Спецификация определяется символами типа и спец- /* }}} */
символами. Символы типа определяют тип переменной,
притом первый символ типа определяет тип первого аргу- Запуск тестового скрипта выдаст следующие резуль-
мента, второй – второго и так далее… таты:
В PHP API определены следующие символы типа:
l – long; # php test.php
d – double; Congratulations! You pass parameters string: test <br>
s – string (с заключающим нетерминальным ‘\0’) и его Integer: 12

длина;
b – boolean; В случае если на этапе обработки параметров вычис-
r – ресурс; ляются какие-либо ошибки или несоответствия, то можно
a – массив; использовать макрос:
o – объект;
O – объект, определенный как точка входа zval*; php _ error(
E _ WARNING, /* тип сообщения, в данном случае WARNING,
z – Zend – объект(zval*). для ошибки тип E _ ERROR */
message , /* сообщение */
/* имя вызываемой функци */
Ресурс, массив и объект должны иметь тип zval*. [ get _ active _ function _ name( TSRMLS _ C )]
Специальные символы дополняют спецификацию ти- );
пов:
| – определяет границу между обязательными и необя- И последнее, без чего не было бы логического завер-
зательными (опциональными) параметрами. Необяза- шения, так это возвращаемые значения функций. Каждая
тельные параметры в этом случае инициализируются определенная в РНР функция может что-либо возвращать:
значениями по умолчанию. в нашем примере файл test.с возвращает в строке 134 стро-
/ – при анализе параметра вызывает функцию ковое значение (строку string_value длиной lenght_string)
SEPARATE_ZVAL_IF_NOT_REF(), которая предостав- используя Макрос RETURN_STRINGL(string_value, lenght_
ляет копию параметра, если он не является ссылкой. string, duplicate_flag).
! – следующий параметр может специфицировать тип У всех макросов тип возвращаемого значения понятен
или значение NULL (применимо только к типам a, o, O, из их названия. Например, макрос RETURN_LONG(long_
r и z). Если будет значение NULL, то будет установлен value) возвращает значение, определенное типом long.
указатель на переменную параметра в NULL. Существуют следующие макросы:
RETURN_BOOL (bool)
Примеры спецификаций: RETURN_NULL
«ssl|a» – передается три обязательных парамет- RETURN_FALSE
ра («string», «string», «long») и один опциональный, RETURN_TRUE
тип «array». RETURN_DOUBLE(double)
«a/» – передается раздельный массив. RETURN_STRING(string_value, duplicate_flag)
RETURN_EMPTY_STRING()
В качестве примера изменим строку в файле test.php: RETURN_RESOURCE (resource)

<? Следует отметить отличие макроса RETURN_STRINGL()


if(!extension _ loaded('test')) {
dl('test.' . PHP _ SHLIB _ SUFFIX); от RETURN_STRING() в том, что первый макрос работает
} быстрее второго за счет явного определения количества
$module = 'test';
$i = 12; выводимых символов.
print add _ string($module, $i );
?> Вместо заключения
В принципе данных знаний вам будет достаточно для на-
А в файле test.с изменим тело функции add_string: писания простых функций, которые можно использовать
в РНР. Более подробную информацию по данной теме мож-
/* {{{ proto string confirm _ test _ compiled(string arg) */ но найти на официальном сайте: http://ru.php.net/streams
PHP _ FUNCTION(add _ string)
{ или http://zend.com/apidoc/zend.php.

№11, ноябрь 2005 73


программирование

Редактор для создания скриптов:


PrimalScript 4.0

Иван Коробко
Существует множество редакторов, позволяющих создавать скрипты. Как правило,
они поддерживают один-два языка программирования. Редактор PrimalScript 4.0, имеет
встроенную поддержку более чем 30 языков программирования, начиная от HTML, XML
и VBScript, и заканчивая узкоспециализированными, такими как KIXTart.

О
том, как пользоваться этим редактором, вы мо- как осуществляется подключение и чтение данных из AD,
жете узнать из встроенной справки в редактор см. статью «Программное управление ADSI: LDAP», №3,
или из официальной документации, опубликованной 2004 г.):
на сайте разработчика (http://www.sapien.com). Мы погово-
рим о недокументированных возможностях, вы сможете са- domain = "LDAP://" + ↵
GetObject("LDAP://RootDSE").Get("defaultNamingContext")
мостоятельно интегрировать в редактор свои собственные Set objConnection = CreateObject("ADODB.Connection")
шаблоны, создавать описание новых языков программиро- Set objCommand = CreateObject("ADODB.Command")
objConnection.CommandTimeout = 120
вания, при необходимости вносить изменения в объектную objConnection.Provider = "ADsDSOObject"
модель, отображаемую в виде подсказки. objConnection.Properties("ADSI Flag")=1+2
objConnection.Properties("User ID")="msk\adminstrator"
objConnection.Properties("Password")="password"
Интегрируем собственные шаблоны objConnection.Properties("Encrypt Password")=TRUE
objConnection.Open "Active Directory Provider"
Каждый программист имеет собственные наработки, кото- Set objCommand.ActiveConnection = objConnection
рые позволяют ему быстро и качественно создавать раз- objCommand.properties("Page size")=10000
objCommand.properties("Timeout")=300
личные скрипты. Получив возможность интегрировать их objCommand.properties("Cache Results")=false
в редактор, он сможет еще быстрее их создавать, не тра- Set st=objconnection.execute("SELECT Samaccountname, ↵
description FROM ' " & Domain & " ' ↵
тя время на поиск нужного файла, содержащего шаблон. WHERE objectClass='person')
Словом, это позволит сделать работу в редакторе еще при-
st.Movefirst
ятнее и эффективнее. Temp=""
Создадим шаблон, в котором осуществляется соеди- Do Until st.EOF
SamAccountName=""
нение с Active Directory с помощью ADODB-соединения. SamAccountName= St.Fields("Samaccountname").Value
За основу шаблона примем сценарий, с помощью которо-
Description=""
го осуществляется чтение всех пользователей в AD (о том, A _ Description= St.Fields("Description").Value

74
программирование
For Each AA in A _ Description
Description= Description+AA
Next

Temp=Temp+ "Имя: "+ SamAccountName + "Описание: " + ↵


Description +chr(13)+chr(10)
st.MoveNext
Loop

Wscript.Echo Temp

Из приведенного сценария можно сделать несколько


шаблонов: шаблон определения длинного имени домена,
соединения с AD, SQL-запрос обращения к объекту, чте-
ния данных строка и массив.
Однако ограничимся созданием только одного шабло-
на. По местоположению в скрипте соединение с AD распо-
лагается в самом начале и сразу после него формирует-
ся SQL-запрос.
Выбор создания именно такого шаблона не случаен. Де-
Рисунок 1. Файловая структура PrimalScript
ло в том, что для успешного соединения с AD и чтения/запи-
си данных необходимы административные права доступа.
Как следствие, эти значения параметров необходимо ука-
зать, и они не статичны, поэтому для формирования шаб-
лона скрипт необходимо трансформировать:

Admin _ Name=" "


Password=" "
Set Domain= GetObject("LDAP://RootDSE"). ↵
Get("defaultNamingContextм)
Short _ Domain = mid(Domain, instr(Domain,"=")+1, ↵
instr(Domain,",")-instr(Domain,"=")-1)
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.CommandTimeout = 120
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("ADSI Flag")=1+2
objConnection.Properties("User ID")= Short _ Domain + ↵
"\"+Admin _ Name
objConnection.Properties("Password")=Password
objConnection.Properties("Encrypt Password")=TRUE
objConnection.Open "Active Directory Provider"
Рисунок 2. Вид окна Tools для управления отображения меню Set objCommand.ActiveConnection = objConnection
с шаблонами objCommand.properties("Page size")=10000
objCommand.properties("Timeout")=300
objCommand.properties("Cache Results")=false

Именно такой шаблон, в котором имя и пароль пользо-


вателя перенесены в начало скрипта, будет просто и удоб-
но использовать.
Определившись с содержанием шаблона, обратим-
ся к файловой структуре редактора PrimalScript. Шаб-
лон представляет собой текстовый файл с расширением
snippet, расположенном в папке «C:\Program Files\SAPIEN\
PrimalScript Professional\Snippets\», если программа уста-
новлена по умолчанию. Иерархическую структуру распо-
ложения шаблонов и описания функций различных язы-
Рисунок 3. Snippet Browser. Пример использования шаблонов ков определяет структура каталогов и файлы с расшире-
нием snippet (см. рис. 1).
Итак, создадим в каталоге «Snippets» подкаталог «Шаб-
лоны на VBScript», а в нем файл «AD Connection.snippet», ко-
торый является текстовым. Все его содержимое представ-
ляет собой шаблон.
После создания файла и заполнения его содержимым
необходимо перезапустить PrimalScript, чтобы внесенные
в файловую структуру изменения вступили в силу.
Войдя в редактор, необходимо вызвать меню «Snippets
Windows», в котором находятся все шаблоны. Для этого не-
Рисунок 4. Тестовая объектная модель обходимо в меню «Tools» выбрать пункт Options, а в поя-

№11, ноябрь 2005 75


программирование
вившемся окне войти в «Environment/Nexus Windows» и одинаковыми цветами. На-
сделать активным меню «Snippet Browser», как это показа- правления связей (дочер-
но на рис. 2. Чтобы сделанные изменения вступили в си- ний /родительский объ-
лу, необходимо перезапустить редактор. ект) показаны на рисунке
Затем в навигаторе «Snippet Browser» (см. рис. 3) по- стрелками.
мимо 10 встроенных подразделов появится еще один После того как создан-
– «Шаблоны на VBScript», в котором будет один шаблон ный текст добавлен в ко-
«AD Connection». Для его использования необходимо со- нец файла VBScript.sense,
Рисунок 5. Описание объектной
здать файл с расширением VBS и два раза нажать мыш- необходимо перезагрузить модели в файле
кой по файлу. Содержимое файла «AD Connection.snippet», редактор и создать или от-
содержащее шаблон, будет добавлено в сценарий. крыть любой файл с расширением VBS. Итак, пробуем: на-
бираем Root и видим, что можем выбрать один из объек-
Описываем новую объектную модель тов: Object_1 или Object_2, или одно из свойств объекта
Создание собственных объектных моделей поможет вам Root – Property_1 или Property_2 (см. рис. 6). Продолжим
избежать ошибок при создании кода. тест. Выберем объект Object_2. В нем мы увидим еще два
Разберем простой пример. На рис. 4 изображена некая свойства и объект – выберем его. У выбранного объекта
объектная модель, которую предстоит описать. В ней при- Object_2_1 есть единственное свойство Property_2_1_1, ко-
сутствует ряд объектов, которые имеют свойства. торое мы и выберем.
Существует несколько правил описания модели.
По структуре файл представляет собой INI-файлы, которые Добавляем новые функции
раньше активно использовались. Иерархии описываются в существующие языки
с помощью имени раздела. Сами параметры, которые мо- программирования
гут быть объектами или свойствами, различаются симво- Существует масса языков программирования, набор фун-
лами «P» или «M» соответственно. Синтаксис строки вы- кций которых расширяется до сих пор: выходят новые вер-
глядит следующим образом: сначала пишется идентифи- сии. Ярким примером представителя такого языка програм-
катор P или M. Затем пишется название объекта или свойс- мирования является KIXTart, который уже несколько лет на-
тва, после него уточняющие параметры. Обратите внима- ходится в активной разработке. С выходом новой версии
ние, что в названии раздела и описании значения раздела в нем становятся доступны новые функции, которые хоте-
между идентификатором и именем объекта символ пробе- лось бы сделать «понятными» для редактора. Для этого нам
ла не допускается! опять же придется отредактировать соответствующий файл
Итак, объектная модель любых объектов описывается с расширением «sense», например, KIXTart.sense.
в текстовых файлах с расширением «sense», расположенных Приведу пример добавления абстрактной функции
в корневом каталоге программы. Как правило, объектная мо- WriteToXml(), которая имеет три параметра: имя файла, за-
дель используется при создании скрипта на том или ином писываемый текст и кодировку. Причем кодировка – не обя-
языке программирования. В корневом каталоге редактора зательный параметр. Исходя из этих условий, функция име-
присутствует несколько файлов с расширением «sense». Для ет синтаксис:
описания нового языка программирования необходимо со-
здать новый файл с таким расширением и описать его в на- WriteToXml("filename", "doby" [, "encoding"])
стройках программы. Мы же отредактируем файл, предна-
значенный для создания сценариев на VBScript. Для того чтобы редактор воспринял «WriteToXml» как
Отображенная иерархическая модель описывается служебное слово, необходимо в файл Kixtart.sense доба-
в файле, как показано на рис. 5, там же показана иерар- вить строку:
хическая связь объектов. Связанные объекты выделены
M, WriteToXml("filename", "doby" [, "encoding"])

Обратите внимание, что пробел между «M» и названи-


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

Заключение
Теперь, когда вы знаете, как создать собственные шабло-
ны, добавлять описания новых функций и объектные моде-
ли различных объектов для разных языков, хочется наде-
яться, что программирование станет для вас еще большим
удовольствием, поскольку сделан огромный шаг по предуп-
реждению синтаксических ошибок и удобству использова-
Рисунок 6. Демонстрация работы тестовой объектной модели ния созданных вами же шаблонов.

76
итоги IT-турнира

Сетевой проект для небольшой компании


Наедавно завершился студенческий IT-турнир «Кубок сетевых проектов Microsoft», который
был организован компаниями SoftLine, Microsoft, ZyXEL и Учебным центром ВМК МГУ & SoftLine
Academy (www.it-university.ru). В результате акции по одному и тому же техническому заданию
студенческими командами были разработаны и реализованы различные варианты сетевой
инфраструктуры предприятия, один из которых представлен в статье.

Ольга Земскова,
Олег Ширнин, Егор Цюрюпа
Слово команды «H0lid@ys» вер для хранения и обмена документами между сотруд-
Наша команда принимала участие в студенческом турнире никами офиса, а также для обмена документами между
«Кубок сетевых проектов Microsoft», и по совокупности оце- офисами. Этот сервер предназначен только для хране-
нок наш проект занял первое место. В этой статье мы пред- ния деловых документов, запись на него музыкальных
ставляем вам свое решение, а также комментарии специ- и видеофайлов запрещена. Обмен документами между
алистов, обратите внимание, что проект содержит некото- офисами должен осуществляться только через локаль-
рые недочёты. На них по ходу статьи оставят свои коммен- ный или удаленный файловый сервер. Прямой обмен
тарии специалисты комиссии, принимавшей у нас этот про- документами между клиентскими станциями разных
ект. Полную документацию ищите на сайте организатора, офисов должен быть заблокирован. Доступ сотрудни-
где проходил этот турнир (http://www.it-university.ru/center/it- ков офиса к файловому серверу, расположенному в дру-
project/windescr.asp). гом офисе, должен быть «прозрачным», т.е. не должны
Состав команды: запрашиваться имя и пароль.
Руководитель проекта – Земскова Ольга (студентка 5 кур- 2. Защитить информацию при обмене между офиса-
са МИЭМ, Microsoft Certified Systems Administrator). ми. Для защиты передаваемой между офисами ин-
Исполнитель решения – Цюрюпа Егор (студент 4 курса формации должно быть организовано шифрование
МИЭТ). на этапе передачи данных через Интернет. При этом
Составитель проектной документации и демонстра- длина ключа шифрования должна составлять не ме-
тор решения – Ширнин Олег (студент 5 курса МИЭМ, нее 128 бит.
Microsoft Certified Systems Administrator). 3. Обеспечить безопасную и эффективную работу
с Интернетом. Организации требуется решение, поз-
Техническое задание: описание сетевой воляющее:
инфраструктуры компании Ограничивать доступ в Интернет для отдельных
Сетевая инфраструктура компании до начала проектиро- групп пользователей.
вания и схема сети уже были приведены в прошлом номе- Вести журнал доступа в Интернет и проводить ана-
ре журнала (№10), и, чтобы не повторяться, здесь укажем лиз использования Интернета (наиболее попу-
только самые необходимые данные. лярные сайты, объем загруженный из Интернета
До недавнего времени у компании был один офис с одно- тем или иным пользователем и т. д.).
ранговой сетью, не подключенной к Интернету. Недавно был Безопасно публиковать внутренние серверы (веб-
арендован новый офис, при этом планируется, что оба офи- серверы и сервер электронной почты) для обеспе-
са будут подключены к Интернету с помощью высокоско- чения доступа к ним из Интернета.
ростного ADSL-соединения. Компания уже закупила 5 сер- 4. Обеспечить удобство администрирования сети.
веров с OC Microsoft Windows Server 2003 Standard Edition. Предложенное решение должно максимально сокра-
Три из них установлены в основном офисе и два – в дополни- щать издержки на администрирование и поддержку
тельном офисе. Все клиентские компьютеры – Windows XP IT-инфраструктуры. Типичные задачи администриро-
Professional. Приобретено также беспроводное и ADSL-обо- вания (создание новых пользователей, разграничение
рудование компании ZyXEL (P-662HW и P-2602HW), заклю- доступа, развертывание приложений и т. д.) должны вы-
чен договор с провайдером и выполнено подключение офи- полняться максимально просто.
сов к Интернету на скорости 7,5 Мбит/с с выделением по од- 5. Внедрить систему электронной почты. Компании
ному статическому IP-адресу на каждый офис. требуется внедрение системы электронной почты, поз-
воляющей обмениваться электронной почтой как внут-
Техническое задание: требования ри организации, так и за ее пределами. Поскольку в ор-
к проекту ганизации уже давно используется Microsoft Office,
1. Организовать обмен документами между офиса- большинство клиентов будут работать с электронной
ми. В каждом из офисов должен быть файловый сер- почтой с помощью Microsoft Outlook, но должна быть

78
итоги IT-турнира
также предусмотрена возможность применения и дру-
гих клиентов электронной почты. Для упрощения пере-
писки крайне желательно, чтобы для любого пользова-
теля был доступен общий адресный список, содержа-
щий электронные адреса всех пользователей органи-
зации.
6. Реализовать беспроводное подключение в офи-
сах. В обоих офисах решено организовать беспровод-
ной доступ к сети организации для приезжающих тор-
говых представителей и партнеров. Всех беспроводных
клиентов можно разделить на два класса:
Беспроводные клиенты, которым требуется ограни-
ченный доступ к документам организации (доступ
к определенным общим папкам) и доступ к Интерне- Рисунок 1. Схема сети предприятия, предложенная командой
H0lid@ys
ту. Обычно это партнеры, приезжающие на несколь-
ко дней и работающие в офисе. гого офиса, как если бы они просто находились в разных
Беспроводные клиенты, которым не требуется до- сегментах одной локальной сети.
ступ к документам организации, но требуется до-
ступ к Интернету. Требование 3
Для обоих классов клиентов беспроводной доступ дол- Поскольку стоит задача устанавливать разный уровень
жен быть аутентифицированным. Беспроводное реше- доступа к Интернету для различных пользователей и вес-
ние также должно обеспечивать конфиденциальность ти удобный журнал использования Интернета, необходи-
передаваемого беспроводного трафика путем шифро- мо выбрать подходящее решение. Если в качестве уст-
вания. Длина ключа шифрования – не менее 128 бит. ройства-шлюза будет использован интернет-центр ZyXEL,
При шифровании беспроводного трафика требуется то в полном объеме требование выполнить не удастся. По-
периодическая смена ключа шифрования для затруд- этому следует применить специализированный Firewall/
нения криптографических атак. Proxy server. В качестве такого решения командой был вы-
7. Установить веб-сервер организации. Веб-студией бран MS ISA Server 2004. Его основное достоинство – обес-
разработан веб-сайт компании, который должен быть печение контроля доступа в Интернет не по IP-адресам ком-
размещен на одном из серверов основного офиса и к ко- пьютеров, а по пользователям Active Directory. Причем при
торому требуется обеспечить доступ из Интернета. попытке пользователя выйти в Интернет с использовани-
Запись www.eurostroy-m.ru внесена в DNS-зону ем любой программы (браузер, FTP-клиент, ICQ и т. д.) ау-
eurostroy-m.ru, которая поддерживается DNS-сервером тентификация пользователя проходит для пользователя
провайдера. Эта запись соответствует статическому абсолютно незаметно. Это достигается путем установки
IP-адресу, выделенному провайдером при подключении на каждом клиентском компьютере специального ПО, на-
основного офиса к Интернету через ADSL-соединение. зываемого «Firewall Client». Важно заметить, что установка
По предварительным оценкам, объем информации, за- Firewall Client не является обязательной, она лишь позволя-
гружаемый с сайта, не превысит 300 Мб в сутки. ет обеспечить аутентификацию для любых Winsock-прило-
жений, а не только для веб-браузеров.
Реализация проекта Также ISA Server позволяет анализировать трафик, ко-
После анализа технических требований проекта командой торый передается между офисами по VPN-туннелю и кон-
были приняты следующие решения: тролировать доступ между ними. Так можно выполнить
требование: «Прямой обмен документами между клиент-
Требования 1 и 2 скими станциями разных офисов должен быть заблоки-
Согласно ТЗ выделено только по одному «реальному» рован». ISA Server 2004 может ввести журнал как в файл,
IP-адресу на каждый из офисов, поэтому в офисах ком- так и в базу данных, а также имеет удобные средства пос-
пании будет применена частная IP-адресация (согласно троения отчетов.
RFC1918). Для подключения к Интернету будет исполь- Поскольку ISA Server 2004 используется как шлюз для
зовано устройство, выполняющее функции NAT (network доступа в Интернет, он должен быть расположен меж-
address translator). Для маршрутизации между сетями офи- ду сетью офиса и Интернетом и выполнять функции NAT.
сов, каждая из которых находится за NAT-устройством, Тем не менее подключение к Интернету уже выполнено с ис-
между этими устройствами будет установлен шифрован- пользованием интернет-центра ZyXEL, который также яв-
ный VPN-туннель. В качестве кандидатов на VPN-прото- ляется NAT-устройством. Решить проблему можно несколь-
кол могут рассматриваться PPTP, L2TP или IPSec в тун- кими способами, например, запросив у провайдера допол-
нельном режиме. Командой был выбран протокол PPTP нительные IP-адреса и организовав маршрутизацию, или
как более простой в настройке и обеспечивающий требо- перевести интернет-центр в режим моста (если это позво-
вания ТЗ. После настройки VPN-туннеля серверы и рабо- ляет провайдер). Команда решила просто настроить на ин-
чие станции одного офиса смогут непосредственно взаи- тернет-центре трансляцию всех портов (port translation) для
модействовать с серверами и рабочими станциями дру- входящих запросов. В этом случае все запросы, поступаю-

№11, ноябрь 2005 79


итоги IT-турнира
щие на внешний IP-адрес интернет-центра ZyXEL, перена- Простота настройки и поддержки. В минимальном вари-
правляются на внешний IP-адрес компьютера MS ISA Server анте настройки после установки MS Exchange достаточ-
2004 и тот же самый порт. но задать почтовый домен организации (@eurostroy-m.ru)
При отправке клиентом пакета в Интернет, этот пакет и можно приступать к созданию почтовых ящиков.
идет следующим путем: Наличие встроенного доступа к электронной почте через
1. Клиент. веб-браузер по протоколу HTTP – Outlook Web Access.
2. ISA Server 2004 (NAT+контроль доступа в Интернет). Этот метод может применяться, например, сотрудником
3. Интернет-центр ZyXEL (NAT). компании для доступа к почте из интернет-кафе, если
4. Маршрутизатор провайдера и далее – в сеть Интернет. сотрудник находится в командировке.

Требование 4 Комментарий экспертов


Служба каталогов Active Directory (AD) позволит сократить Для повышения безопасности электронной почты можно размес-
затраты на администрирование по сравнению с одноранго- тить SMTP Relay на отдельном компьютере, расположенном в сети
вой сетью. С помощью единой системы AD можно органи- 10.1.1.0. Эту роль может выполнить компьютер – веб-сервер, если
зовать прозрачный доступ пользователя ко всем ресурсам он будет перемещен из внутренней сети в DMZ (см. ниже коммен-
(общим папкам, принтерам, своему хранилищу электрон- тарий к «Требованию 7»). На этом же компьютере можно устано-
ной почты), а также обеспечить централизованное управле- вить программу блокирования спама и проверки почты на виру-
ние клиентскими компьютерами с помощью Групповой по- сы. Это позволит затруднить атаки, явно направленные против
литики (Group policy). При внедрении AD в сети с несколь- MS Exchange Server. Вся входящая почта будет приходить снача-
кими офисами встает вопрос о количестве доменов. Можно ла на SMTP Relay, где будет проверяться на вирусы и спам, а за-
внедрить в компании один домен или два домена – по одно- тем уже будет пересылаться на MS Exchange Server. Это изме-
му домену в каждый офис (в одном лесу AD). Команда вы- нение конфигурации также потребует изменения правил транс-
брала вариант с одним доменом. К преимуществам этого ляции портов на интернет-центре и изменения правил публика-
варианта можно отнести простоту и надежность. Отказоус- ции на ISA Server.
тойчивость AD достигается установкой по одному контрол-
леру домена в каждом офисе. Для оптимизации трафика Требование 6
репликации AD и трафика входа пользователей в сеть со- Беспроводной доступ клиентов к сети организации обес-
здано 2 сайта (site) AD, которые включают IP-адреса соот- печивается с помощью интернет-центра ZyXEL. Для аутен-
ветствующего офиса. тификации применяется механизм 802.1x (с применени-
ем протокола PEAP), поддерживаемый современным бес-
Требование 5 проводным оборудованием и клиентскими операционны-
Внедрение системы электронной почты требует установ- ми системами Windows 2000 и Windows XP. С использова-
ки одного или нескольких почтовых серверов. Основную нием 802.1x (PEAP) аутентификация выполняется следую-
проблему представляет наличие единого адресного спис- щим образом:
ка всей организации. Этот список должен храниться в од- Клиентский компьютер пересылает на беспроводную
ном экземпляре, чтобы все изменения, вносимые в него, точку доступа имя и пароль для аутентификации.
сразу были видны всем клиентам. Поскольку в компании Точка доступа пересылает эти учетные данные на сер-
используется MS Office, в качестве сервера был выбран вер RADIUS, адрес которого задается при настройке
MS Exchange Server 2003 Standard Edition. Эта редакция точки доступа.
имеет ограничение 16 Гб на максимальный размер поч- Сервер RADIUS проверяет имя и пароль любым подде-
тового хранилища (mailbox store), что вполне достаточно рживаемым им способом. В случае успешной провер-
для нужд этой компании. ки сервер RADIUS с помощью пакета Access-Accept со-
Выбор MS Exchange Server 2003 в качестве системы общает точке доступа, что доступ для клиента разре-
электронной почты предоставляет компании следующие шен. После этого точка доступа разрешает обмен кад-
преимущества: рами между клиентом и проводной сетью, а также дру-
Единый адресный список всей компании (формируется гими беспроводными клиентами.
на основе учетных записей в Active Directory). При со-
здании для пользователя почтового ящика его адрес Сервер RADIUS (известный в Windows как IAS – Internet
немедленно становится доступен в общем адресном Authentication Service) входит в состав ОС Windows Server
списке. 2003. При этом проверка имени и пароля проводится ли-
Интеграция с Active Directory. Доступ к почтовому ящи- бо с использованием локальной базы учетных записей
ку осуществляется «прозрачно», без запроса отдельно- Windows, либо с использованием базы учетных записей
го имени и пароля, так как для аутентификации пользо- Active Directory (по умолчанию). Для работы 802.1x (PEAP)
вателя используются его доменные учетные данные. необходимо также наличие цифрового сертификата на сер-
Хранение всей электронной почты, личных контактов, вере RADIUS, поэтому для выписки сертификатов на од-
задач, заметок и т. д. на сервере. При этом все выше- ном из компьютеров установлена служба сертификации
перечисленные элементы будут доступны пользовате- (Certificate Services), которая также входит в состав Windows
лю с любого компьютера и даже за пределами органи- Server 2003.
зации (через Outlook Web Access). Плюсами технологии 802.1x (PEAP) являются:

80
итоги IT-турнира
Аутентификация по именам и паролям, что позволяет
вести журнал подключений и отслеживать попытки до-
ступа к беспроводной сети.
Лучшая управляемость, поскольку для смены пароля
достаточно изменить его в Active Directory и не требу-
ется перенастройка точки доступа.
Автоматическое согласование ключей шифрования тра-
фика (WEP) между точкой доступа и клиентом при под-
ключении, что позволяет повысить безопасность бес-
проводного доступа и выполнить требование ТЗ.

Для шифрования беспроводного трафика был приме-


нен протокол шифрования WEP 128 бит.
Доступ к сети для беспроводных пользователей контроли- Рисунок 2. Схема сети предприятия с учетом предложенных
экспертами изменений
руется политикой удаленного доступа, созданной на сервере
RADIUS. Эта политика разрешает подключение к беспровод- сервере, не входящем в домен. Сервер публикуется на ISA
ной сети членам группы безопасности WLAN Access в рабочее Server 2004 основного офиса с помощью стандартного пра-
время по рабочим дням. Эта группа в свою очередь включает вила публикации веб-серверов.
две глобальные группы безопасности: WLAN Users и WLAN
Computers. Группа WLAN Users включает в себя группы WLAN Комментарий экспертов
Users Visitors (включает пользователя wlan_visitor) и WLAN Размещение веб-сервера во внутренней сети организации не
Users Partners. Группа WLAN Computers не используется в сце- является хорошей практикой. Рекомендуется перенос веб-сер-
нарии, однако спроектирована с расчетом на то, что компа- вера в сеть 10.1.1.0, которая находится между интернет-центром
ния в будущем будет владеть беспроводными компьютерами – и ISA Server. При этом необходимо будет перенастроить интернет-
членами домена. Кроме того, политика беспроводного досту- центр так, чтобы выполнялась не полная трансляция всех пор-
па предусматривает повторную аутентификацию пользовате- тов на адрес ISA Server, а только трансляция портов для прото-
ля в сети каждые 15 минут (Session Timeout), что является ре- кола PPTP. После этого на интернет-центре нужно будет задать,
комендуемым временем для смены пароля WEP. что порты 80 TCP (HTTP) и 25 TCP (SMTP) будут транслировать-
Беспроводному клиенту, которому требуется только ся на IP-адрес веб-сервера.
доступ к Интернету, сообщается имя и пароль пользова-
теля wlan_visitor. Этому пользователю явно запрещен до- Заключение экспертов
ступ к общим ресурсам. Если же клиенту требуется доступ Команда очень тщательно подошла к планированию про-
как к Интернету, так и к сети организации, ему сообщается екта. В качестве положительных моментов можно отме-
имя и пароль учетной записи, специально созданной для тить использование одного домена (согласно ТЗ приме-
этого человека администратором и включенной в группу нение двух доменов видится неоправданным) и реали-
WLAN Users Partners. В обоих случаях беспроводной пользо- зованную полную отказоустойчивость основных служб
ватель попадает в сеть 10.x.x.x, для которой на соответству- (AD, DNS, DHCP). Тем не менее решение получилось до-
ющем шлюзе ISA Server публикуется внутренний файловый вольно дорогим (стоимость операционных систем соглас-
сервер, расположенный на контроллере домена (ISA Server но ТЗ не учитывалась). Дополнительные затраты потребо-
2004 Server Publishing rule, протокол CIFS Server). вались на приобретение 2-х экземпляров ISA Server 2004
Standard Edition и MS Exchange Server Standard Edition. При-
Комментарий экспертов мерная стоимость решения составила $6935 (MS Exchange
Применение криптографически слабого протокола WEP в данном Server Standard Edition + 35 Клиентских лицензий + 2 шт.
сценарии ничем не оправдано. Рекомендуется применение прото- MS ISA Server 2004 Standard Edition). Для сравнения – не-
кола WPA, поддержка которого имеется как в оборудовании ZyXEL, которые команды реализовали проект, используя толь-
так и в ОС Windows XP. Это потребует всего лишь выбора соот- ко встроенные возможности оборудования ZyXEL и ОС
ветствующей опции при настройке интернет-центра ZyXEL и при Microsoft Windows (правда, в ущерб некоторой функцио-
настройке беспроводных клиентов. нальности).
Публикация на ISA Server протокола CIFS для беспроводных Рекомендуемая схема сети предприятия с учетом пред-
клиентов (для обеспечения доступа к общим папкам на контрол- ложенных экспертами изменений приведена на рис. 2.
лере домена) не кажется хорошей идеей. На наш взгляд, лучше В целом сложность проекта соответствовала квали-
было бы создать на самом компьютере ISA Server отдельную об- фикации Сертифицированного Системного Админист-
щую папку, открыть к ней доступ из сети 10.x.x.x и использовать ратора Microsoft (MCSA), а большинство настроек изу-
ее для обмена данными между сотрудниками организации и бес- чалось в учебных курсах Microsoft «MS-2273 Управле-
проводными клиентами. ние и поддержка среды Microsoft Windows Server 2003»
(http://www.it-university.ru/courses/ms-2273.asp) и «MS-2277
Требование 7 Внедрение, управление и сопровождение сетевой ин-
По соображениям безопасности веб-сервер в основном фраструктуры Windows Server 2003: сетевые службы»
офисе (MS IIS 6.0) было решено разместить на отдельном (http://www.it-university.ru/courses/ms-2277.asp).

№11, ноябрь 2005 81


хобби
Глядя в унылое осеннее

Десять красок неба небо Петербурга, я знаю,


почему герой нашего
очерка выбрал себе такое
увлечение. Ему захотелось
разукрасить стылую
панораму небес, уронить
на нее кляксу яркой краски,
чтобы ожил и зацвел сам
воздух. Чтобы возникла
перед взором радуга
детства. Предполагаю,
что отсылка в пору юной
беззаботности будет
оспорена нашим героем,
но, скажите, какие
ассоциации возникают
у вас при словосочетании
«воздушный змей»?

К
онечно, солнце, луг и веселые Именно так его и зовут – Ара. Пото- ных змеев демонстрируют собствен-
босые пятки автора затеи. Ни- му что змей переливается неправдо- ные произведения. Здесь изготовле-
куда не деться – картина де- подобно сочными красками. В закат- ние небесных птиц сродни искусству,
тства. Впрочем, Дмитрий Репин начал ном свете солнца он пурпурно-чер- поэтому формы, цвета, узоры не удив-
делать воздушных змеев не в босоно- ный, и при взгляде на его двухметро- ляют – поражают.
гую пору, а будучи взрослым челове- вый размах крыльев охватывает поч- – Меня воздушные змеи интере-
ком, серьезным компьютерным спе- ти мистический восторг. суют не с точки зрения их летных ка-
циалистом. Он так и говорит: полгода Ира смеется – их птицы раз от ра- честв, – признается Дмитрий, – а с эс-
назад вдруг посетила уверенность, что за становятся крупнее в размерах, тетической точки зрения. Да, есть
в его руках обретут жизнь воздушные на что Дмитрий резонно отвечает: стандартные геометрические формы,
птицы. Не откладывая дело в долгий чем больше воздушный змей, тем эф- есть планы их построения, но воздуш-
ящик, наш герой нашел оконные шта- фектнее он смотрится в небе. А вооб- ный змей – это не летательный аппа-
пики, связал и заклеил бумагой. Со- ще, когда в воздух поднимается не- рат. Если хотите, это способ самовы-
оружение даже полетало немного во сколько змеев – это зрелище гран- ражения, способ отразить свой внут-
дворе. С этого, можно сказать, и на- диозное. ренний мир. В частности поэтому, из-
чалась жизнь петербургских небесных В Японии и Китае устраиваются це- готовление змеев было бы полезным
змеев. Пока их в коллекции Дмитрия лые фестивали, где создатели воздуш- занятием для детей.
около десятка. Увы, самого первого Я смотрю на фотографию послед-
сохранить не удалось, зато некоторые него воздушного змея Дмитрия и Иры,
его детали пригодились другим небес- который демонстрировался на автовы-
ным собратьям. ставке, и соглашаюсь с нашим героем.
Как человек, у которого уже есть Банальным треугольником или ромбом
полугодичный опыт создания воз- трудно выразить свои мироощущения.
душных змеев, Дмитрий утверждает, Человек создан, чтобы творить. Пос-
что взлететь может все. Даже аллюми- ледний змей Дмитрия и Иры – это на-
ниевая крышка от кастрюли. Главное, стоящее творение. Голова китайско-
правильно привязать веревки и пой- го дракона из папье-маше, длинное
мать сильный ветер. В Японии, к при- туловище, окольцованное лоскутами
меру, запускают змеев до 800 кило- огненной ткани. Ни дать, ни взять ска-
граммов весом! Я, безусловно, восхи- зочный персонаж.
щаюсь гигантоманией японцев, но бли- – Сколько времени уходит на созда-
же сердцу все же двух-трехметровые ние воздушного змея?
красавцы Дмитрия. Он и его жена Ира, – Всегда по-разному. От одного дня
которая работает системным админис- до нескольких недель. Саму конструк-
тратором, показывают фотографии цию соорудить несложно, гораздо тя-
летнего полета воздушного змея Ара. Китайский дракон желее придумать и воплотить в жизнь

82
хобби

Воздушный змей – это не летательный аппарат, а способ Запуск воздушного змея из кальки
самовыражения
декор. Занятие простое, но занимает Самое любопытное, что ни Дима, рассказать себе и миру, как прекрас-
очень много времени. Как правило, ин- ни Ира сами никогда не парили в не- но, в сущности, бытие.
женерная идея – моя, а Ира занимает- бе: не прыгали с парашютом. Хотя Ди- – Есть ли у вас единомышленни-
ся дизайном. ма мечтает об этом. А еще подумы- ки в городе?
– Следующий воздушный змей, ка- вал сделать дельтаплан, но очень уж – Ни в городе, ни в России не встре-
ким он будет? ответственность большая. Надо быть чал. Оказывается, воздушными зме-
– Сейчас я размышляю над конс- профессионалом, поскольку дельтап- ями никто в нашей стране серьезно
трукцией, которая могла бы склады- лан – это крылья для человека. Диле- не увлекается.
ваться. Причём так, чтобы с ней мог тантство в данном случае может сто- – А за рубежом?
управиться человек, который в пер- ить кому-то жизни. – Думал о том, чтобы завязать пе-
вый раз держит в руках змея. До этого Я спрашиваю Дмитрия, не меша- реписку с иностранными создателя-
все наши змеи были практически не- ет ли увлечение работе системным ми воздушных змеев, но пока не пы-
разборными. Это неудобно и нетранс- администратором. Нет, отрицатель- тался, хочется сначала научиться де-
портабельно. Если змей будет склады- но кивает головой, наоборот, хобби – лать что-то достойное, достигнуть оп-
ваться, его можно отвезти, выпустить это отдушина. ределенного мастерства, чтобы было
в поле. Был бы ровный ветер. Что ж, вполне понимаю и даже не стыдно показать, скажем, китайс-
– На какую высоту поднимается представляю, как приятно прийти ве- ким «змееводам».
воздушный змей? чером в теплый уют квартиры и уви- – Мне кажется, Дмитрию и Ире
– Насколько хватает нити на катуш- деть на стене, на диване, на полу час- это обязательно удастся – выйти
ке – пятьдесят метров. ти еще не сложенного, не склеенного, на высокий уровень мастерства. Не-
– И свободно парит? но уже рожденного персонажа тво- д аром фамилии у них харак тер -
– Да. ей жизни. Приблизиться к нему и па- ные… Репин и Сурикова. Вы соглас-
– Птицы удивляются? рой движений определить его черты ны со мной?
– Не то слово, – улыбается Ира. – и формы и уже мысленно проследить,
Изумлены! как возносится в небо твоя попытка Наталья Алексютина

Чем занимаются системные администраторы


в свободное от работы время?
Давно известно, что если единствен- виться с ежедневной рутиной, а заодно
ный интерес человека в жизни – ра- с пользой и интересом провести име-
бота, то спустя довольно непродол- ющееся свободное время. Пора поло-
жительное время этот человек чахнет жить конец «цивилизованному» отды-
и для общества пропадает. Ежеднев- ху перед монитором (или телевизором)
ный маршрут «работа-дом» становится и «национальному спорту» по продав-
мягкой клеткой, из который выбрать- ливанию дивана. Мы надеемся, что ка-
ся подчас не так-то просто. Редакция кая-то из статей поможет вам най-
журнала с удовольствием представ- ти своё увлечение, которое позволит
ляет вашему вниманию новую руб- в редкие свободные от забот часы от-
рику «Хобби». В этой рубрике мы бу- дыхать душой и телом. Если у вас есть
дем рассказывать о том, как прово- хобби или увлечение, о котором вы хо-
дят свое свободное ваши коллеги, ка- тели бы рассказать – пишите на адрес
кие хобби и увлечения помогают спра- sekretar@samag.ru. Полет Ары под Павловском

№11, ноябрь 2005 83


ретроспектива

Alpha, или История одной архитектуры

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

П
олулегендарная архитектура пускниками Массачусетского техноло- высокий однокамерный холодильник)
Alpha, в прошлом долгое вре- гического института, Кеннетом Ольсе- и умеренной стоимости (около 18 тыс.
мя лидировавшая в плане про- ном (Kenneth Olsen) и Харланом Андер- долл. США за базовую конфигурацию
изводительности среди многочислен- соном (Harlan Anderson). в ценах 1965 года).
ных RISC- и CISC-архитектур, своим Первое время они проектировали Ещё 4 года спустя был запущен
существованием была обязана аме- и выпускали разного рода элементар- в производство 36-битный PDP-10,
ные модули для компьютерной техни- потомок экспериментального PDP-6,
риканской Digital Equipment Corporation
(сокращённо DEC). Прежде чем при- ки того времени. позиционируемый для требователь-
ступить к рассмотрению этой инте- Но уже в 1960 году был выпущен ных к производительности научных,
их первый компьютер, 18-битный промышленных и военных расчётов.
ресной архитектуры, стоит кратко рас-
сказать об истории компании-основа- PDP-1 (Portable Data Processor – 1), спо- Несмотря на высокую цену, модифи-
собный производить около 100 тыс. кации оригинального PDP-10 успеш-
тельницы, хотя бы потому, что она то-
го вполне заслуживает. операций в секунду. но продавались вплоть до середины
В 1964 году был представлен 1980-х годов.
PDP и VAX, 12-битный PDP-8, который справедли- Другой интересной разработкой
или Древние времена во считают первым серийно выпускае- компании того времени был 16-бит-
Корпорация была основана в 1957 го- мым «мини-компьютером» из-за отно- ный PDP-11, потомок PDP-8. Благо-
ду двумя инженерами, бывшими вы- сительно небольших размеров (с не- даря сбалансированной архитекту-

84
ретроспектива
ре, имеющей в своей основе систем- ных и военных структурах, что уже го- 64-битной архитектуры (в противовес
ную шину Unibus (или её модификации ворит о многом. MIPS, SPARC, PA-RISC и POWER, быв-
под названием Q-bus), а также вследс- ших изначально 32-битными и только
твие простого набора команд и относи- PRISM и Alpha, со временем расширенных до 64-бит-
тельно невысокой себестоимости мо- или Наступление RISC ных), оперировавшей инструкциями
дельный ряд PDP-11 быстро обретал Тем не менее начало 1980-х годов оз- фиксированной длины (по 32 бита),
популярность. наменовалось наступлением RISC-ар- обладал 32 целочисленными 64-бит-
Стоит отметить, что клоны PDP-11 хитектур. Хотя первые из них, MIPS ными и 32 вещественными 64-битны-
выпускали и в странах бывшей Орга- и SPARC, всё ещё не могли сущест- ми регистрами, работал с 43-битными
низации Варшавского Договора: СМ-4, венно потеснить VAX, но в перспекти- виртуальными адресами (с расшире-
СМ-1420, СМ-1600, ИЗОТ-1016, ДВК... ве их потенциал был более значителен. нием вплоть до 64-битных в перспек-
Хотя PDP-11 был очень успешной Разумеется, это не означало неизбеж- тиве для архитектуры) и использовал,
разработкой (к слову, на нём и на PDP-7 ное поражение VAX в ближайшем бу- как VAX, little-endian порядок следова-
было осуществлено первое издание дущем, но в долгосрочной перспекти- ния байт (то есть, когда младший байт
ОС UNIX в Bell Laboratories в 1971 го- ве её шансы на удержание большой регистра занимает при записи млад-
ду), но обладал одним существенным доли рынка рабочих станций и сер- ший адрес в памяти), который тради-
недостатком: ограничением на макси- веров были сомнительны, а на толь- ционно поддерживался Intel в противо-
мальный размер адресного пространс- ко что сформировавшемся рынке пер- вес к big-endian (где младший байт ре-
тва в 64 Кб, следующим из его 16-бит- сональных компьютеров хозяйничали гистра занимает при записи старший
ности. Поэтому в 1975 году внутри ком- Intel и Motorola (с постепенным преоб- адрес в памяти), внедрённому Motorola
пании началась работа двух конкури- ладанием первой). и поддерживаемому конкурентными
рующих проектов, призванных опре- Поэтому руководство DEC с 1982 RISC-архитектурами того времени.
делить направление будущих разра- года финансировало несколько внут- Стоит отметить, что блок вещест-
боток. ренних проектов по RISC-разработ- венных вычислений поддерживал про-
Один из них назывался «Едино- кам (Titan, SAFE, HR-32, CASCADE), извольный доступ к вещественным
рог» (Unicorn) и развивал идеи, зало- а в 1985 году свело их в один под на- регистрам в отличие от процессоров
женные в PDP-10. званием PRISM (PaRallel Instruction Set архитектуры x86, которые работали
Второй проект, «Звезда» (Star), на- Machine), находившийся под руководс- с примитивным стековым доступом.
ходился под руководством Гордона твом Дэвида Катлера (David Cutler). Хо- В целом новая архитектура выгля-
Белла (Gordon Bell) и работал над усо- тя к 1988 году проект 32-битного RISC- дела серьёзным заделом на будущее,
вершенствованием PDP-11. процессора всё ещё находился в про- поэтому заявленный срок её подде-
После анализа результатов обоих цессе разработки, руководство ком- ржки и развития в 25 лет особого удив-
направлений проект «Единорог» был пании сочло дальнейшее финанси- ления не вызывал.
закрыт, как и разработка 36-битной рование нецелесообразным и закры- С точки зрения набора инструкций,
архитектуры PDP-10 в целом, а про- ло его. В знак протеста Катлер ушёл архитектура шла по пути достаточного
ект «Звезда» дал начало новой 32-бит- в Microsoft, где возглавил подразделе- минимализма, чтобы облегчить скоро-
ной архитектуре VAX (Virtual Address ние по разработке Windows NT (тогда стное декодирование и облегчить кон-
eXtension), являвшейся улучшенной ещё именовавшейся OS/2 3.0). вейеризацию вычислений. Например,
реализацией PDP-11. В середине 1989 года руководство инструкции целочисленного деления
В октябре 1977 года было пред- компании приняло решение возобно- аппаратно отсутствовали, так как бы-
ставлено первое материальное воп- вить работу над собственным RISC- ли наиболее сложными из целочислен-
лощение этой архитектуры – модель процессором, но на этот раз постанов- ных и плохо поддавались конвейери-
11/780, а в феврале следующего го- ка задачи была несколько иная. Новый зации, а потому просто эмулировались,
да была выпущена новая операцион- процессор должен был быть изначаль- так как на практике необходимость
ная система для этой аппаратной плат- но 64-битным, но в то же время иметь в их использовании возникала относи-
формы – VMS (Virtual Memory System), минимум несовместимостей с архи- тельно редко. Все инструкции условно
вскоре переименованная в VAX/VMS, а тектурой VAX, что должно было облег- подразделялись на 5 категорий:
позже и в OpenVMS. На машины архи- чить портирование под него существу- для целочисленных вычислений;
тектуры VAX также была портирована ющей программной базы. К тому же для вещественных вычислений;
классическая ОС UNIX. конкуренты в лице MIPS и Sun были для отработки условных и безу-
Если кратко подвести итоги, то мож- уже в процессе перехода на 64-бит- словных переходов, а также срав-
но уверенно сказать, что архитектура ные решения. нения;
VAX была достойным наследником Была создана рабочая группа под для загрузки и сохранения дан-
PDP-11. Её модельный ряд насчиты- руководством Ричарда Витека (Richard ных;
вал несколько десятков наименова- Witek) и Ричарда Сайтса (Richard Sites), д ля специфических за дач
ний – от компактных рабочих стан- которая разработала процессор под (PALcode).
ций до 6-процессорных тяжёлых сер- кодовым названием Alpha, представ-
веров. По сей день тысячи VAX рабо- ленный 25 февраля 1992 года в То- В целом ставка делалась на до-
тают в многочисленных промышлен- кио. Он был представителем «чистой» стижение высоких тактовых частот,

№11, ноябрь 2005 85


ретроспектива
но не в ущерб надёжности или масш- В ноябре 1994 года была пред-
табируемости. Кроме того, новая ар- ставлена почти аналогично модифи-
хитектура была «настоящей» RISC. цированная версия LCA4 – 21066A
Для облегчения понимания концеп- (LCA45).
туальных различий между RISC-про- Стоит отметить, что привычка мар-
цессорами (Reduced Instruction Set кетологов DEC добавлять букву к мо-
Computing) и CISC-процессорами дели процессора при перепроектиров-
(Complex Instruction Set Computing) ке под новый техпроцесс сохранилась
приводятся следующие ключевые мо- и в дальнейшем.
менты: В то время как LCA45 архитектур-
длина инструкции: фиксированная но почти не отличался от LCA4, то раз-
в RISC (вне зависимости от харак- меры I-cache и D-cache у EV45 были
тера инструкции), но произвольная удвоены, что не могло не отразиться
в CISC (в зависимости от характе- Первый процессор Alpha – 21064 (EV4)
на производительности. К тому же бла-
ра инструкции); годаря новым техпроцессам удалось
набор инструкций: сбалансирован- кодера и планировщика (I-box), бло- поднять тактовые частоты процессо-
ный в RISC (подбираемый с точки ка загрузки/сохранения (A-box), конт- ров: до 300 МГц у EV45 и до 233 МГц
зрения удобства выполнения про- роллера кэш-памяти и системной ши- у LCA45. Для сравнения, самые быст-
цессором) и широкий в CISC (под- ны (C-box). Расчёт виртуальных ад- рые процессоры архитектуры x86 то-
бираемый с точки зрения удобства ресов, обычно входящий в функции го времени, Intel Pentium и Intel 486DX4,
программиста); A-box, производился на целочислен- соответственно работали на такто-
доступ к памяти: разрешён только ном конвейере E-box. вых частотах в 66 МГц и 100 МГц мак-
для инструкций загрузки/сохране- Процессор содержал 8 Кб кэша симум.
ния в RISC, но без подобного огра- инструкций (I-cache, instruction cache) Первые наборы системной логики
ничения в CISC. и 8 Кб кэша данных (D-cache, data (чипсеты) для EV4 были спроектиро-
cache), а также поддерживал вне- ваны для использования периферий-
Alpha 21064, шний кэш 2-го уровня (B-cache, back- ных шин TURBOchannel, FutureBus+
или Штурм рынка up cache) размером до 16 Мб (обыч- и XMI. Несмотря на то что эти шины
Первый Alpha-процессор предпо- но от 512 Кб до 2 Мб), хотя шина до- были весьма скоростными для свое-
лагалось запустить в производство ступа к нему мультиплексировалась го времени (около 100Мб/с на шину),
на очень высокой тактовой часто- с системной, что несколько ограничи- они не получили широкого распро-
те – 150 МГц, а впоследствии довести вало производительность, но упроща- странения.
до 200 МГц при тех же производствен- ло разводку (сокращало количество Поэтому DEC начала активно раз-
ных нормах. С этой задачей конструк- требуемых выходных контактов про- рабатывать поддержку стандартных
торы и технологии DEC успешно спра- цессора и проводников на материнс- шинных интерфейсов, таких как PCI
вились. Процессор получил рыноч- кой плате). Кроме всего прочего, при- и ISA (EISA). В начале 1994 года был
ное название 21064 («21» указывал, сутствовала поддержка многопроцес- выпущен чипсет DEC Apecs в двух ис-
что он являлся представителем архи- сорного режима. полнениях (для 128-битной и 64-бит-
тектуры XXI века, «0» – процессорное Несмотря на отличные показате- ной 33 МГц системной шины, модели
поколение, «64» – разрядность в би- ли производительности, EV4 был до- 21072 и 21071 соответственно), под-
тах), а архитектура получила название вольно дорог для многих потенциаль- держивающий 32-битную 33 МГц ши-
Alpha. Процессоры этой архитектуры ных покупателей, поэтому в сентябре ну PCI. Между прочим, 21072 состоял
также часто можно встретить и под ко- 1993 года был представлен его уде- из 6 микросхем, а 21071 – из 4. Под-
довыми именами. Например, у 21064 шевлённый собрат – 21066 (он же LCA4 держка шины ISA или EISA добавля-
оно было EV4 («EV» предположитель- или LCA4S). Будучи основан на яд- лась установкой стандратного мос-
но является аббревиатурой «Extended ре EV4, этот процессор дополнитель- та на шину PCI типа i82378IB (ISA)
VAX», а «4» – поколением техпроцесса, но включал поддержку контроллеров или i82378EB (EISA).
CMOS4, что в свою очередь есть аб- PCI и оперативной памяти, а также не- Что касалось ценовой политики,
бревиатура Complementary Metal Oxide которых менее важных функций. Одна- то первые системы на основе про-
Semiconductor). ко разрядность системной шины была цессоров Alpha стоили весьма нема-
EV4 поступил в производство на пе- урезана со 128 до 64 бит, а тактовые ло. Например, выпущенная в октябре
редовом для того времени 3-слой- частоты были занижены (от 100 МГц 1992 года рабочая станция DEC 3000
ном 0,75 мкм техпроцессе, который до 166 МГц). В остальном процессор Model 500 AXP (кодовое имя Flamingo)
был впоследствии модифицирован производился по тому же CMOS4S тех- в комплекте с 19-дюймовым монито-
до 0,675 мкм (CMOS4S). В архитек- процессу, что и поздние EV4, хотя уже ром стоила 39 тыс. долл. США, а пред-
турном плане процессор состоял из месяц спустя был анонсирован 21064A ставленные в июле 1994 года рабочие
одного целочисленного конвейера (EV45), модифицированный вариант станции на EV45 DEC 3000 Model 900
(E-box, 7 стадий), одного веществен- EV4, производимый по 4-слойному 0,5 AXP и Model 700 AXP (кодовые имена
ного конвейера (F-box, 10 стадий), де- мкм CMOS5 техпроцессу. Flamingo45 и Sandpiper45) предлага-

86
ретроспектива
лись по цене в 43,4 тыс. и 27,7 тыс. $ щая логика, хотя размер I-cache был
соответственно. увеличен вдвое. В конечном итоге пло-
щадь ядра уменьшилась ещё на треть,
Alpha 21164, а максимальная тактовая частота со-
или Битва за лидерство ставила 533 МГц. Со временем на про-
Информация о процессоре архитекту- изводственных мощностях Samsung
ры Alpha следующего поколения, 21164 был начат выпуск 0,28мкм вариант это-
(EV5), была впервые озвучена на кон- го процессора (PCA57), который отли-
ференции в Пало-Альто (Калифорния, чался удвоенными размерами I-cache
США) 14 августа 1994 года, хотя офи- и D-cache, планка максимальной так-
циальный выход датировался 7 сен- товой частоты была поднята до 666
тября того же года. Процессор являл- МГц, а площадь ядра опять удалось
ся экстенсивной модификацией ядра сократить на треть. Между прочим, у
EV45, что выражалось в удвоенном ко- PCA56 и PCA57 было ещё одно, на
личестве целочисленных и веществен- Процессор Alpha – 21164A (EV56)
этот раз позитивное, отличие от EV56:
ных конвейеров, причём число стадий новый набор инструкций MVI (Motion
последних было сокращено с 10 до 9. влять операции загрузки/сохранения Video Instructions), нацеленный на ус-
Тем не менее функционально конвейе- не только квантами по 32 или 64 би- корение обработки видео- и аудио-
ры всё же были несколько неоднород- та, изначально поддерживаемые ар- данных путём векторизации вычисле-
ны, что экономило транзисторы логики хитектурой, но и по 8 или 16 бит. В ос-ний, подобно набору инструкций MMX
и в то же время обеспечивало эффек- новном это было вызвано падением для процессоров архитектуры x86.
тивную балансировку нагрузки. Впол- производительности при эмуляции Для процессоров поколения EV5
не логично, что возможности I-box бы- кода архитектуры x86. EV56 отличал- было разработано несколько стандар-
ли также расширены вдвое (выборка ся от EV5 более новым техпроцессом, тных чипсетов. Первый из них, 5-чи-
и декодирование 4 инструкций за такт), 4-слойным 0,35 мкм CMOS6, который повый DEC Alcor (21171), поддержи-
иначе бы этот блок стал «узким мес- позволил довести тактовую частоту до вал 128-битную 33МГц системную ши-
том» процессора. Что касалось кэш- 600МГц. Samsung, лицензировавший ну и 256-битную шину памяти, a так-
памяти, то размеры и организация I- EV56 июне 1996 года, производил его же 64-битную 33МГц шину PCI. Встро-
cache и D-cache остались аналогичны по аналогичному техпроцессу, но чуть енный контроллер IDE отсутствовал,
таковым у EV4, зато появился интег- более успешно – максимальная такто- равно как и мост PCI-ISA(EISA), то есть
рированный кэш 2-го уровня (S-cache, вая частота составляла 666 МГц. Кро- они по-прежнему устанавливались от-
secondary cache) размером в 96 Кб, ко- ме того, переход на новый техпроцесс дельными микросхемами. Так как для
торый в значительной мере компен- означал и уменьшение площади ядра реализации BWX требовалась под-
сировал недостатки I-cache и D-cache. (приблизительно на треть), что зна- держка со стороны чипсета, то одно-
Стоит отметить, что EV5 был первым чительно сократило стоимость про- временно с выпуском EV56 появился
в истории процессором с S-cache. изводства по сравнению с EV5. В це- DEC Alcor 2 (21172), только этим и от-
Впридачу была сохранена подде- лом EV56 всё ещё оставался лиде- личавшийся от 21171. Следующей раз-
ржка B-cache, размеры которого мог- ром по производительности, но ему работкой стал DEC Pyxis (21174), кото-
ли составлять вплоть до 64 Мб (обыч- было всё сложнее конкурировать рый уже поддерживал 66 МГц систем-
но от 1 Мб до 4 Мб), принцип мульти- с 64-битными RISC-соперниками в ли- ную шину той же разрядности и вдвое
плексирования сохранялся, равно как це Hewlett-Packard PA-8000 и PA-8200, более узкую (128-битную) шину памя-
поддержка 128-битной системной ши- Sun UltraSPARC I и UltraSPARC II, MIPS ти, хотя это компенсировалось под-
ны и многопроцессорного режима ра- R10000 и IBM POWER3. Первое поколе- держкой оперативной памяти SDRAM
боты. Хотя EV5 и производился по то- ние процессоров Alpha было легче про- вместо морально устаревшей и более
му же техпроцессу, что и EV45, коли- двигать на рынке, так как его единс- медленной FPM DRAM. Также имелся
чество транзисторов в его ядре увели- твенными 64-битными соперниками чипсет не от DEC, предназначенный
чилось более чем 3 раза, в основном были процессоры MIPS, которые ока- в поддержку PCA57 – VLSI Polaris.
за счёт S-cache. Максимальная такто- зались первыми на этом поприще.
вая частота составила только 333МГц, К тому же с выходом Intel Pentium Pro Что случилось с DEC?
что было вполне предсказуемо, так пришлось начать серьёзную борьбу за 28 января 1998 года произошло собы-
как использовался всё тот же техпро- место под солнцем и с CISC-процессо- тие, ставшее одним из ключевых в ис-
цесс (CMOS5). рами архитектуры x86, которые были тории архитектуры Alpha: DEC, буду-
В октябре 1995 года вышел в свет в лучшем положении по количествен- чи в тяжёлом финансовом положении,
несколько доработанный вариант EV5 ным и ценовым показателям. находится в процессе покупки извес-
под названием 21164A (EV56), основ- Однако, стремясь ещё более уде- тным сборщиком компьютерной тех-
ным архитектурным отличием кото- шевить EV56, DEC в сотрудничестве ники – Compaq Computer Corporation.
рого была поддержка дополнительно- с Mitsubishi выпустила 17 марта 1997 Вскоре сделка была утверждена соб-
го набора инструкций BWX (Byte-Word года 21164PC (PCA56), у которого от- раниями акционеров обеих компаний,
eXtension), позволяющего осущест- сутствовал S-cache и соответствую- и уже менее чем через полгода DEC

№11, ноябрь 2005 87


ретроспектива
официально прекратила своё сущес- тва компании в 1970-х годах, остался рентоспособность архитектуры Alpha.
твование, когда 11 июня того же года проигнорированным. Осталось только Тем не менее, DEC разрабатывала ма-
её акции были сняты с торгов на Нью- заметить, что архитектура VAX на про- теринские платы для массового рынка
Йоркской фондовой бирже. В целом тяжении всей истории её существова- (так называемые Evaluation Board или
размер покупки составил 9,6 млрд. $. ния оставалась закрытой, другими сло- AlphaPC), которые производились как
Так сказать, факт имеет место, но как вами – жила своей жизнью внутри ком- на мощностях компании, так и други-
могло случиться, что одна из крупней- пании. Естественно, что за конкуренто- ми производителями (Aspen, Polywell,
ших компаний IT-индустрии (по состоя- способными альтернативами от других Enorex и пр.), поскольку схемотехни-
нию на 1989 год имевшая 130 тыс. че- производителей дело не стало. ка этих плат была в свободном досту-
ловек персонала и годовой объём про- Что касалось непосредственно ар- пе. Только одна компания, DeskStation,
даж в 14 млрд. $, что было вторым по- хитектуры Alpha, то несмотря на то, разработала свой дизайн, отличный
казателем по отрасли после IBM) бы- что первые процессоры показывали от стандартного. Однако серверный
ла вынуждена продать себя другой производительность, значительно опе- рынок Alpha-систем, как наиболее при-
компании? На этот вопрос есть мно- режающую любые решения из мира быльный, DEC держала под своим еди-
го ответов. персональных компьютеров, DEC-та- ноличным контролем.
Наиболее часто упоминаемой ки упустила шанс вернуть былое мо- Несмотря на то, что архитектура
ошибкой руководства DEC является гущество в массовых решениях. Пос- Alpha, в отличие от архитектуры VAX,
тот факт, что компания так и не смог- ле того, как первые образцы EV4 были была объявлена открытой, консорци-
ла адаптироваться к изменению тре- представлены на конференции в фев- ум по её развитию так и не был со-
бований рынка в 1980-х и 1990-х годах, рале 1991 года, ими очень заинтересо- здан, поэтому исследовательско-про-
вызванных так называемой революци- вались присутствовавшие там инже- ектировочные работы велись усилия-
ей персоналок. Со слов Кеннета Оль- неры Apple Computer, занимавшиеся ми DEC, иногда совместно с Mitsubishi.
сена (Kenneth Olsen), основателя, пре- поиском новой архитектуры для буду- В конечном итоге получалось, что клю-
зидента и главного исполнительного щих компьютеров компании, которые чевые разработки патентовались со-
менеджера компании почти до само- в то время базировались на процессо- ответствующим образом и подлежа-
го её конца, «хорошие с инженерной рах семейства Motorola 68K. В июне то- ли платному лицензированию, если
точки зрения продукты продают себя го же года с Ольсеном связался Джон вообще подлежали. Излишне уточнять,
сами» и «нет причины, из-за которой Скалли (John Sculley), главный испол- что такая политика мало способство-
каждый захотел бы иметь компьютер нительный менеджер Apple, с предло- вала успешному продвижению архи-
у себя дома». Как показывает практи- жением об использовании EV4 и буду- тектуры на рынке.
ка, с эволюцией рынка компьютерной щих процессоров в компьютерах Apple. Далее, архитектура Alpha офици-
техники и его проникновением во все- Однако Ольсен отклонил это предло- ально поддерживала три операци-
возможные области деятельности че- жение, мотивируя тем, что процессор онные системы: Windows NT, Digital
ловека, повышением интеграции от- ещё не готов для рынка, а архитектура UNIX (также известная как OSF/1, поз-
дельных компонентов и уменьшени- VAX ещё не исчерпала свой потенциал. же как Tru64 UNIX) и OpenVMS, при-
ем стоимости отдельно взятых компью- Несколько месяцев спустя было объяв- чём именно в таком порядке приори-
терных систем оба вышеприведённых лено, что новые компьютеры Apple бу- тетности. Разумеется, Windows NT бы-
выражения полностью утратили свой дут использовать процессоры PowerPC ла продуктом от Microsoft, в то время
смысл. А вместе с ними таяли и пози- от альянса Apple, IBM и Motorola. как две другие ОС были разработаны
ции компании на рынке. Немаловажным фактором в про- в DEC. Однако недостатков у Windows
В то же время, если какое-либо движении архитектуры Alpha на рын- NT было немало. Эта ОС не поставля-
движение нельзя подавить, то его сто- ке была ценовая политика DEC, а так- лась с набором средств для разработ-
ит возглавить. В начале 1980-х годов, же поддержка партнёров и рядовых ки программного обеспечения (компи-
когда рынок персональных компьюте- сборщиков готовых систем. DEC про- ляторами, ассемблерами, отладчика-
ров ещё только формировался, хотя изводила процессоры и чипсеты этой ми, пр.), а потому зависела от готово-
и очень быстрыми темпами, DEC рас- архитектуры на своих производствен- го ПО, преимущественно коммерчес-
полагала всей необходимой финансо- ных мощностях в Хадсоне (Массачу- кого. Фактически же количество до-
вой и технической базой, чтобы громко сетс). Она также производила мно- ступного ПО для архитектуры Alpha
заявить о своём присутствии. Вместо гочисленную периферию для Alpha- было в несколько раз меньше ана-
этого компания продолжала концент- систем (TGA-видеокарты, сетевые логичного показателя для архитекту-
рировать усилия на рынке серверов адаптеры и пр.). Основная масса ры i386. Правда, в 1996 году коман-
и рабочих станций, преимуществен- Alpha-систем производилась на сбо- дой Антона Чернова (Anton Chernoff)
но на основе архитектуры VAX, не ве- рочных мощностях компании и про- был выпущен FX!32, замечательный
ря в то, что примитивные дешёвые давалась под её именем. Несмотря эмулятор и транслятор кода архитек-
«персоналки» будут способны пошат- на то, что качество комплектующих туры i386 в «родной» для архитекту-
нуть устои рынка в целом и позиции и сборки было на высоте, цены на го- ры Alpha, однако падение производи-
DEC в частном. Очевидно, тот факт, товые решения были значительно вы- тельности по сравнению с изначально
что именно массовые решения в стиле ше сопоставимых на основе архитекту- «родным» кодом как минимум на 40%
PDP-11 создали основу для могущес- ры x86, что серьёзно ухудшало конку- было неизбежным. Ещё хуже обстоя-

88
ретроспектива
ло с драйверной поддержкой, так как
немногие производители сочли нуж-
ным поддерживать архитектуру Alpha.
Для полноты картины осталось заме-
тить, что Windows NT (3.51 и 4.0) была
32-битной ОС, даже несмотря на то,
что работала на 64-битной архитекту-
ре. Вполне естественно, что это отнюдь
не прибавляло производительности.
Что касается Digital UNIX и OpenVMS,
то эти 64-битные ОС так и не смогли
составить достойной альтернативы
Windows NT в силу дороговизны (свы-
ше 1000 $ за одну копию), а также ещё Процессор Alpha – 21264 (EV6) Процессор Alpha – 21264B (EV68C)
более узкой аппаратной и програм-
мной поддержки. Другие же UNIX-по- от пропускной способности кэшей ся как массовому решению, несмотря
добные ОС с открытым кодом (NetBSD, и оперативной памяти. Как необхо- на приблизительно вдвое более высо-
Linux, OpenBSD и FreeBSD) не подде- димое дополнение к этой технологии, кую производительность в расчёте на
рживались DEC вообще. Мотивы не процессор поддерживал переименова- единицу тактовой частоты, чем у EV56.
совсем ясны, но определённо эти ОС ние регистров (register renaming). Ито- Да и собственно максимальная часто-
могли составить достойную конкурен- го, EV6 мог переупорядочивать в лю- та была немалой – 600 МГц.
цию Digital UNIX и OpenVMS. бой момент времени до 80 инструк- Архитектура EV6 была настоль-
В мае 1997 года DEC подала в суд ций, а также располагал дополнитель- ко удачной, что пережила несколь-
на Intel, обвиняя последнюю в нару- ными 48 целочисленными и 40 физи- ко технологических воплощений в
шении 10 патентов на архитектуру ческими регистрами (количество ло- том же конструктиве. В конце 1999
Alpha при проектировании процессо- гических, то есть программных, оста- года появился 21264A (EV67) на ос-
ров Pentium, Pentium Pro и Pentium II. лось прежним – по 32). Количество це- нове 0,25 мкм CMOS7 процесса от
В сентябре того же года Intel ответи- лочисленных конвейеров было увели- Samsung, располагавший частотным
ла встречным иском, обвиняя в нару- чено до 4, из которых 2 могли рассчи- потенциалом в 833МГц. В 2000 году
шении 14 своих патентов. Примирение тывать виртуальные адреса. Что ка- IBM воплотила EV6 в своём 0,18 мкм
произошло 27 октября 1997 года, ког- салось логики C-box, то её ожида- CMOS8 процессе с медными про-
да обе компании отозвали свои пре- ли кардинальные изменения: разме- водниками под названием 21264B
тензии. По условиям «мирного догово- ры I-cache и D-cache были увеличены (EV68C), что позволило пересечь гига-
ра» DEC предоставила Intel производс- до 64 Кб каждый, S-cache был упраз- герцевый барьер и достичь 1250 МГц.
твенные права на всю свою продукцию днён, a внешний B-cache размером Несколько запоздавшая альтернати-
(кроме непосредственно относящейся от 1 Мб до 16 Мб подключался через ва от Samsung при тех же 0,18мкм, но
к архитектуре Alpha), также согласи- независимую 128-битную шину дан- с морально устаревшими алюминие-
лась поддерживать в будущем архи- ных с 20-битной шиной адреса и ра- выми проводниками, смогла добрать-
тектуру IA-64, в то время как Intel вы- ботал на частоте от 1/8 до 2/3 часто- ся только до 940 МГц.
купила у DEC за 625 млн. долл. США ты ядра. Для формирования B-cache Для EV6 и его прямых потомков
её фабрику в Хадсоне вместе с про- обычно использовались микросхемы было спроектировано два чипсета:
ектными центрами в Остине (Техас) синхронной статической памяти с от- DEC Tsunami (21272, он же Typhoon)
и Иерусалиме (Израиль), а также обя- ложенной записью (late-write), а позд- и AMD Irongate (AMD-751), хотя пос-
залась производить процессоры Alpha нее и с применением технологии DDR. кольку AMD Athlon использовал почти
в будущем. Для полноты картины был Был полностью заменён системный аналогичную системную шинную ар-
подписан договор о кросс-лицензиро- шинный интерфейс: шина данных ста- хитектуру, не должно было быть про-
вании патентов сроком на 10 лет. ла 64-битной, но использовала техно- блемой адаптировать чипсеты других
логию DDR, а кроме того, использова- производителей, но этого не произош-
Alpha 21264, лась звездообразная топология под- ло. DEC Tsunami был высокомасшта-
или Время реванша ключения (то есть каждый процессор бируемым чипсетом, так как состоял
В феврале 1998 года был выпущен подключался к чипсету по выделенно- из нескольких микросхем и позволял
в кремнии процессор следующего по- му каналу). Технологически EV6 про- строить как однопроцессорные, так
коления архитектуры, 21264 (EV6). изводился по тому же процессу, что двух- и четырёхпроцессорные систе-
В архитектурном плане этот процес- и EV56, но с дополнительными дву- мы (от 1 до 4 C-chips). Ширина кана-
сор сильно отличался от предыдущего мя слоями металлизации, хотя пло- ла данных шины памяти могла быть от
поколения, так как поддерживал вне- щадь его ядра была на треть больше, 128 до 512 бит (от 2 до 8 D-chips), так-
очередное выполнение (out-of-order что предполагало более высокую се- же могло подключаться несколько кон-
execution), что позволило снизить за- бестоимость и автоматически не да- троллеров шин PCI (по одному P-chip
висимость функциональных устройств вало шансов процессору состоять- на шину). AMD Irongate был одночипо-

№11, ноябрь 2005 89


ретроспектива
вым решением, хотя и предполагал ществлено к началу 2002 года. К слову, лась 0,13мкм версия EV7 под названи-
подключение южного моста. Он под- Hewlett-Packard была ещё меньше, чем ем EV79, которая должна была харак-
держивал только однопроцессорный Compaq, заинтересована в развитии теризоваться более низкой себестои-
режим и узкий 64-битный канал дан- и продвижении архитектуры на рын- мостью и более высокими тактовыми
ных шины памяти, поэтому мог пре- ке, так как обладала собственной ар- частотами, но её выпуск так и не со-
тендовать только на звание относи- хитектурой PA-RISC, а также состояла стоялся. Компания ограничилась за-
тельно недорогого решения для рабо- в альянсе с Intel по развитию архитек- пуском в августе 2004 года чуть бо-
чих станций. туры IA-64. Если коротко, то дни архи- лее быстрой версии EV7 под названи-
тектуры Alpha были сочтены, а её офи- ем EV7z, работавшей с тактовой час-
Compaq и Hewlett-Packard, циальная кончина стала вопросом не- тотой в 1250 МГц и производимой со-
или Cмена хозяев далёкого будущего. гласно прежним технологическим нор-
Как показала история, Compaq доволь- мам. Как следовало из официально-
но своеобразно распорядилась насле- Alpha 21364, го пресс-релиза, это был последний
дием в виде архитектуры Alpha. Стоит или Кризис жанра процессор архитектуры Alpha, под-
заметить, что приобретение DEC мо- Однако в феврале 2002 года всё-таки тверждением чего служила буква «z»
тивировалось вовсе не достоинства- был выпущен запоздавший процес- в названии. Также было объявлено,
ми и перспективами этой архитекту- сор 21364 (EV7), которому предстояло что Hewlett-Packard будет продавать
ры, а широкой сетью дистрибьюции стать основателем последнего поколе- сервера и рабочие станции архитекту-
компьютерной техники (в 98 странах), ния архитектуры. Этот процессор был ры Alpha до 2006 года, а поддерживать
кросс-лицензионным соглашением основан на почти неизменённом ядре до 2011 года, но не более того. Факти-
с Intel (позволяющим строить тяжёлые EV6, к которому было добавлено не- чески, на этом и можно было бы пос-
сервера), а также всё ещё значитель- сколько новых функциональных уст- тавить точку в этом повествовании,
ными сборочными мощностями. Поэто- ройств: два контроллера Direct Rambus но хотелось бы сделать завершаю-
му уже в июне 1998 года был заключён DRAM PC800 (два Z-box), многофунк- щее лирическое отступление. Так и не
альянс с Samsung, а также была сов- циональный маршрутизатор для свя- состоявшийся процессор 21464 (EV8),
местно образована компания Alpha зи с соседними процессорами и пери- разрабатываемый Compaq вплоть до
Processor Inc., в ведение которой бы- ферией (R-box) и вновь появившийся 25 июня 2001 года, должен был стать
ли предоставлены маркетинговые ас- S-cache размером в 1,75 Мб, а B-cache действительно новым поколением ар-
пекты развития архитектуры. был упразднён. Каждый Z-box подде- хитектуры, а не довешиванием новых
Однако уже в начале 1999 года рживал 5 каналов памяти (4 основ- функций к старому ядру, как это случи-
Compaq охватил внутренний кризис, ных и 1 вспомогательный), шириной лось с EV7. По имеющейся информа-
результатом которого стал уход глав- по 18 бит каждый (16 бит для данных ции, он должен был располагать удво-
ного исполнительного менеджера Эк- и 2 бита для кодов ECC), а суммарная енным количеством основных конвейе-
харда Пфайфера (Eckhard Pfeiffer) теоретическая пропускная способ- ров (8 целочисленными и 4 веществен-
и падение курса акций приблизитель- ность памяти одного 1150 МГц процес- ными), а для их эффективной загруз-
но в 2 раза. Компания начала свора- сора составляла 12,3 ГБ/с (оба Z-box ки должна была присутствовать под-
чивать финансирование неприори- и R-box работали на 2/3 частоты яд- держка технологии SMT (Simultaneous
тетных сфер деятельности, в которых ра). Каждый процессор в системе мог Multi-Threading), которая позволила
числился и сегмент продукции Alpha. работать как с оперативной памятью, бы одновременное выполнение 4 про-
23 августа 1999 года было объявлено подключённой непосредственно к его граммных потоков. Размер S-cache
о прекращении участия в разработке контроллерам, так и с подключённой предполагалось довести до 3 Мб. Ожи-
Windows 2000 для Alpha, что вскоре к контроллерам других процессоров. даемая тактовая частота должна бы-
подтвердила Microsoft. Это означало Функцию связи между процессорами, ла составить 1,8 ГГц, что должно было
уход с рынка рабочих станций, кото- которых в одной системе могло быть вновь вывести архитектуру Alpha в ли-
рый из-за пассивных действий Compaq до 128, выполнял R-box, поддержи- деры по производительности. Однако
и Samsung к тому времени фактичес- вающий 4 скоростных канала с про- не сложилось.
ки состоялся. пускной способностью в 6 ГБ/с каж- История знает немало случаев, ког-
В последующие два года шла ба- дый, а также 1 дополнительный канал да товар с лучшими техническими ха-
нальная распродажа имеющейся аппа- для связи с периферией. Технологи- рактеристиками уступал место на рын-
ратной и программной базы архитек- чески EV7 производился по тому же ке более или менее ущербному това-
туры, пока 25 июня 2001 года Compaq 7-слойному 0,18 мкм CMOS8 процессу, ру. Причины могут быть совершенно
официально не заявила о переводе что и EV68C, но благодаря большому S- разными, хотя чаще всего преоблада-
своих серверных решений с архитек- cache площадь его ядра достигла ре- ет ценовой фактор. Потребителя ма-
туры Alpha на IA-64 (то есть Itanium) кордных размеров, на треть превысив ло интересуют технические преиму-
к 2004 году. В принципе, на этом мес- площадь и без того немассового EV6. щества того или иного решения. Та-
те можно было бы опустить занавес, Это предрешило судьбу EV7, исполь- кова жизнь.
но 3 сентября того же года Hewlett- зовавшегося исключительно в очень
Packard заявила о своих намерениях дорогих рабочих станциях и серверах Редактор рубрики
приобрести Compaq, что и было осу- Hewlett-Packard. Хотя в планах и значи- Кирилл Тихонов

90
bugtraq

Отказ в обслуживании в диссекторе Отказ в обслуживании в Cisco


IRC-протокола в Ethereal при обработке ISAKMP IKE-сообщений
Программа: Ethereal 0.10.13. Программа: Cisco IOS versions based on 12.2SXD, 12.3T,
Опасность: Средняя. 12.4 and 12.4T, Cisco PIX Firewall версии до 6.3(5), Cisco
Описание: Уязвимость существует при обработке диссек- PIX Firewall/ASA версии до 7.0.1.4, Cisco Firewall Services
тора IRC-протокола. Удаленный пользователь может с по- Module (FWSM) версии до 2.3(3), Cisco VPN 3000 Series
мощью специально сформированного IRC-пакета вызвать Concentrators версии до 4.1(7)H и 4.7(2)B, Cisco MDS Series
зацикливание приложения и потребить все доступные ре- SanOS версии до 2.1(2).
сурсы на системе. Опасность: Средняя.
URL производителя: www.ethereal.com. Описание: Уязвимость существует при обработке Phase 1
Решение: Установите последнюю версию (0.10.13-r1) до- протокола обмена сообщениями IKEv1. Удаленный пользо-
ступную по CVS. ватель может вызвать отказ в обслуживании.
URL производителя: www.cisco.com.
Обход каталога в веб-консоли Решение: Установите исправление с сайта производите-
в продуктах F-Secure ля.
Программа: F-Secure Anti-Virus for Microsoft Exchange 6.40,
F-Secure Internet Gatekeeper 6.42, 6.41, 6.40. Повышение привилегий
Опасность: Низкая. в F-Secure Anti-Virus
Описание: Уязвимость существует из-за ошибки в веб-кон- Программа: F-Secure Internet Gatekeeper for Linux вер-
соли. Удаленный пользователь может с помощью символов сии до 2.15.484, F-Secure Anti-Virus Linux Gateway версии
обхода каталога просмотреть произвольные файлы на сис- до 2.16.
теме. В конфигурации по умолчанию веб-консоль разреша- Опасность: Низкая.
ет подключения только с localhost. Описание: Уязвимость существует из-за того, что програм-
URL производителя: www.f-secure.com. мное обеспечение устанавливает на некоторые сценарии
Решение: Установите последнюю версию с сайта произ- (/opt/f-secure/fsigk/cgi/*suid.cgi и /home/virusgw/cgi/*suid.cgi)
водителя. SUID-бит и делает их исполняемыми для всех пользовате-
лей. Локальный пользователь может с помощью этих сце-
Обход каталога и межсайтовый нариев повысить свои привилегии на системе.
скриптинг в GNUMP3d URL производителя: www.f-secure.com.
Программа: GNUMP3d версии до 2.9.6. Решение: Установите последнюю версию с сайта произ-
Опасность: Средняя. водителя.
Описание: 1. Межсайтовый скриптинг существует из-за
недостаточной обработки входных данных при отображе- Отказ в обслуживании при обработке
нии страницы с ошибкой 404 в браузере жертвы. Удален- RPC-запросов в Microsoft Windows
ный пользователь может выполнить произвольный HTML- Программа: Microsoft Windows 2000, Microsoft Windows
сценарий в браузере жертвы в контексте безопасности уяз- XP SP1.
вимого сайта. Опасность: Средняя.
2. Обход каталога возможен из-за недостаточной филь- Описание: Уязвимость существует при обработке RPC-за-
трации входных данных при обработке ссылки. Удаленный просов в Microsoft Windows. Удаленный пользователь мо-
пользователь может с помощью специально сформирован- жет с помощью специально сформированного RPC-за-
ного URL, содержащего символы обхода каталога, просмот- проса вызвать отказ в обслуживании системы или заста-
реть произвольные файлы на системе. вить процесс services.exe потребить все доступные ресур-
URL производителя: www.gnu.org/software/gnump3d. сы на системе.
Решение: Установите последнюю версию (2.9.6) с сайта URL производителя: www.microsoft.com.
производителя. Решение: В настоящее время способов устранения уязви-
мости не существует.
Переполнение буфера в Freeftpd
Программа: Freeftpd 1.0.8. Переполнение буфера в CHM Lib
Опасность: Высокая. Программа: CHM Lib 0.36 и более ранние версии.
Описание: Уязвимость существует при обработке входных Опасность: Высокая.
данных в команде USER. Удаленный пользователь может Описание: Переполнение стека обнаружено в функции
послать серверу слишком длинную строку, вызвать пере- _chm_decompress_block() при обработке входных данных.
полнение стека и выполнить произвольный код на целевой Удаленный пользователь может с помощью специально
системе. Удачная эксплуатация уязвимости возможна при сформированного .chm-файла выполнить произвольный
включенном логировании. код на целевой системе.
URL производителя: www.freeftpd.com. Решение: Установите последнюю версию (0.37) с сайта
Решение: Установите последнюю версию (1.0.9) с сайта производителя.
производителя. Составил Александр Антипов

№11, ноябрь 2005 91


книжная полка

Linux. Сетевая архитектура. Структура


и реализация сетевых протоколов в ядре
Клаус Вейрле, Франк Пэльке, Хартмут Риттер,
Даниэль Мюллер, Марк Бехлер
роядра, процессы ядра Linux, блоки- экранах, NAT. Также упомянуто о PIv6.
ровка – атомарные операции, модули Часть книги, посвященная транспорт-
ядра, драйверы устройств, управление ному уровню, представлена тремя гла-
памятью в ядре, синхронизация, фай- вами, в которых рассказано о TCP/UDP
ловая система proc и контроль версий. и концепции сокетов. Весь вышеизло-
После вводного экскурса начинается женный материал сопровождается до-
материал, непосредственно связан- статочно большим количеством приме-
ный с сетями. Архитектура сетевой ре- ров, как та или иная вещь реализована
ализации – система связи, управление в системе. Книга – настоящая находка
сетевыми пакетами в ядре, сетевые ус- для программистов, пишущих или же-
тройства, сетевые драйверы. Из треть- лающих начать писать сетевые прило-
ей части книги вы узнаете о канальном жения под Linux, юных «хакеров» ядра
Книга по сути является очень подроб- уровне, протоколах SLIP, PPP, техно- и просто людей, которым интересно,
ным справочником для программиста логии PPP поверх Ethernet, асинхрон- как устроено ядро изнутри.
по сетевой подсистеме Linux. Матери- ном режиме передачи ATM, Bluetooth
ал четко и грамотно структурирован. и прозрачных мостах. В части, посвя- Издательство: «КУДИЦ-ОБРАЗ»
Всего в книге семь частей, повество- щенной сетевому уровню, рассказано Год издания: 2006
вание идет от простого к более сложно- о протоколах TCP/IP, IPv4, реализацию, Количество страниц: 656
му. В первой части вы познакомитесь опции и маршрутизацию протокола IP, ISBN: 5-9579-0094-X
с общим устройством ядра, узнаете arp, управлении трафиком для подде- Цена: ≈ 456 руб.
его структуру. Среди рассмотренных ржания качества обслуживания, от- К н и г а п р е д о с т а в л е н а и з д а т е л ь с т в о м
тем: монолитные архитектуры и мик- слеживании соединений, межсетевых «КУДИЦ-ОБРАЗ».

Волоконная оптика. Теория и практика


Девид Бейли, Эдвин Райт
рии волоконной оптики и смогут срав- об оценке растяжения волокон, струк-
нить оптоволоконные и кабельные сис- турных элементах кабеля, компонен-
темы. Основные определения и фун- тах усиления, волоконном футляре
даментальные принципы вы узнаете, и водоотталкивающем барьере. Сре-
прочитав вторую часть книги, в кото- ди прочего в книге рассказано про со-
рой рассказано про передатчики, при- единение волокон, оптические генера-
емники, каналы связи и их типы, ре- торы и детекторы. Практическая часть
жимы передачи данных, свет, элект- представлена материалом о проклад-
ромагнитный спектр, факторы, влия- ке волоконно-оптических кабелей. За-
ющие на производительность тради- вершает книгу раздел, посвященный
ционных кабелей (коаксиальный, ви- тестированию оптоволоконных систем.
тая пара), а также о источниках помех В качестве дополнительных сведений
и шума в кабелях. Достаточно подроб- представлена информация о том, ка-
Уникальное в своем роде издание. но освещена теория волоконно-опти- кие технологии используют оптические
Единственная доступная на русском ческой оптики – фундаментальные волокна. Книгу можно рекомендовать
языке книга, в которой так удачно принципы действия, природа переда- сетевым администраторам и монтаж-
и грамотно изложены все основные чи света стеклом, числовая апертура, никам локальных сетей.
концепции работы с оптическим во- модовое распространение в волок-
локном. Материал излагается в хро- нах, полоса пропускания, спектраль- Издательство: «КУДИЦ-ОБРАЗ»
нологическом порядке, начиная от про- ное уплотнение, эффекты при пере- Год издания: 2005
ектирования и заканчивая тестирова- даче оптического сигнала, производс- Количество страниц: 320
нием сети. тво волокон. ISBN: 5-9579-0093-1
В разделе «Введение» люди, толь- Часть, посвященная конструктив- Цена: ≈ 212 руб.
ко начинающие знакомиться с новой ным элементам волоконно-оптическо- Книга предоставлена издательством
для себя технологией, узнают о исто- го кабеля, представлена материалом «КУДИЦ-ОБРАЗ».

92
книжная полка

Архитектура программного
обеспечения на практике
Лен Басс, Пол Клементс, Рик Кацман
ложены основные проблемы и зада- архитектуры. Среди рассмотренных
чи, с которыми сталкиваются разра- тем глав, посвященных анализу архи-
ботчики на этапе проектирования ПО. тектуры, рассмотрены метод анализа
Изложенная информация представля- компромиссных архитектурных реше-
ет собой описания собственного опы- ний и анализ стоимости и эффектив-
та авторов книги. ности. В качестве примера представ-
Освещены три основные ступени: лена «всемирная паутина». Послед-
планирование, создание и анализ ар- няя часть книги посвящена такой ак-
хитектуры. Основные темы части, пос- туальной теме, как использование од-
вященной планированию: архитек- ной и той же архитектуры в несколько-
турно-экономический цикл, что такое их проектах. Действительно, на раз-
«программная архитектура», в качест- работку архитектуры для конкретного
ве практического примера использова- продукта уходит достаточно большое
Несомненно, одним из важнейших ния архитектурных структур рассмот- количество времени, так почему бы
(если не самым важным) этапом в со- рена авиационная система A-7E. Раз- не адаптировать полученный резуль-
здании того или иного ПО является дел «Создание архитектуры» пред- тат для другого проекта.
разработка архитектуры программы. ставлен следующим материалом: ат-
C этой задачи должен начинаться лю- рибуты и реализация качества, управ- Издательство: «Питер»
бой серьезный проект. К сожалению, ление воздушным движением – при- Год издания: 2006
количество информации по этой те- мер разработки, ориентированный Количество страниц: 575
ме очень ограничено. Вашему вни- на высокую готовность, проектирова- ISBN: 5-469-00494-5
манию предлагается издание, в кото- ние архитектуры, процесс документи- Цена: ≈ 510 руб.
ром простым и доступным языком из- рования, реконструкция программной Книга предоставлена издательством «Питер».

Citrix MetaFrame Access Suite


для Windows Server 2003
Стив Каплан, Тим Ризер, Алан Вуд
ний предприятия: серверные вычис- ского доступа, печать, вопросы, свя-
ления и предприятия по требованию, занные с отказоустойчивостью и про-
службы терминалов Windows и Citrix блемами, связанными с восстановле-
MetaFrame Access Suite. Далее авто- нием после сбоев. Подводя итог, мож-
ры повествуют о проектировании SBC- но сказать, что эта книга заслужива-
решений для предприятия. Среди рас- ет внимания по нескольким причинам:
смотренных тем: подготовка организа- во-первых, это перевод официального
ции к внедрению «предприятия по тре- руководства (что само по себе немало-
бованию», архитектура информаци- важно), плюс ко всему прочему изло-
онного центра и проектирование сети женный материал действительно ох-
для серверных вычислений, клиент- ватывает все (или почти все) вопросы
ская среда, управление сетями. Также и проблемы, с которыми вам, возмож-
не оставлены без внимания вопросы, но, предстоит столкнуться в процессе
В настоящее время тема внедрения связанные с безопасностью. Процесс миграции на тонкие клиенты.
тонких клиентов актуальна как никог- внедрения серверной вычислитель-
да. Все большее число организаций ной среды по требованию рассмот- Издательство: «Питер»
и предприятий переходят на подоб- рен очень подробно: конфигурация Год издания: 2006
ную схему работы. Авторы последо- сервера службы терминалов Windows Количество страниц: 687
вательно описывают процесс созда- и Citrix Metaframe Presentation Server, ISBN: 5-94723-961-2
ния и внедрения новой инфраструк- установка и настройка приложений, Цена: ≈ 978 руб.
туры. В начале книги вы познакоми- профили и политики, защита клиент- Книга предоставлена издательством «Питер».
тесь с общими концепциями техно-
логии. Обзор серверных вычисле- Обзор книжных новинок подготовил Александр Байрак

№11, ноябрь 2005 93


подписка на 2006 год
Российская Федерация Казахстан – по каталогу «Российская Пресса» через
Подписной индекс: годовой – 20780, полугодовой – 81655 ОАО «Казпочта» и ЗАО «Евразия пресс»
Каталог агентства «Роспечать» Беларусь – по каталогу изданий стран СНГ через РГО
Подписной индекс: 87836 «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
Объединенный каталог «Пресса России» Узбекистан – по каталогу «Davriy nashrlar» российские
Адресный каталог «Подписка за рабочим столом» издания через агентство по распространению печати
Адресный каталог «Библиотечный каталог» «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик,
Альтернативные подписные агентства: 5/3, офис 33)
Агентство «Интер-Почта» (095) 500-00-60, курьерская Армения – по списку номенклатуры «АРЗИ» через ГЗАО
доставка по Москве «Армпечать» (375005, г. Ереван, пл. Сасунци Давида,
Агентство «Вся Пресса» (095) 787-34-47 д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Са-
Агентство «Курьер-Прессервис» рьяна, 22)
Агентство «ООО Урал-Пресс» (343) 375-62-74 Грузия – по списку номенклатуры «АРЗИ» через АО
Подписка On-line «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29)
http://www.arzi.ru и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-3300,
СНГ г. Тирасполь, ул. Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номен- (2012, г. Кишинев, бул. Штефан чел Маре, 134)
клатуры АРЗИ: Подписка для Украины:
Азербайджан – по объединенному каталогу российских Киевский главпочтамп
изданий через предприятие по распространению печа- Подписное агентство «KSS»
ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Телефон/факс (044)464-0220

Подписные
индексы:

20780*
81655**
по каталогу
агентства
«Роспечать»

87836
по каталогу
агентства
«Пресса
России»
*
годовой
**
полугодовой

94
подписка на 2006 год
Редакционная подписка
Открыта подписка через редакцию. Вы можете оформить №3(28) март 2005
№4
подп (29)
ww исно апре
w.s й л
am инде ь

подписку на любое количество номеров 2006 года. Редак-


ag.r 2 00
подписной индекс
81655 По u
кс
8165 5
www.samag.ru хорошо, Alt чтов 5
один монитор -N ая
Linux Xinerama: Ба MD си
aem сте
а много лучше ма зова on ма

ция не высылает журналы за пределы Российской Феде- кая редакция рш я н


Knop pix – русс Win р у т ст а
удаленных файл
ов dow изато ройк
Восстановление Ap
ach s Ser
ра а
Cis
под Linux
рации.
ows Ви eк ver co
не Microsoft Wind рту ак Up
FreeBSD в доме Ар ал
ь
про
кси
dat
eS
on: с п хиви н ая erv
Практикум Pythов по электронной почте ом руе ма
ши
-се
рве ice
s
отправка файл За ощ м на р
– щ ью да
ых в Linux Win ита Ba нны SV
Шифрование данн на аппаратные
ключи dow ко cula е IST
A
и новый взгляд Си
с s M мму №5

Для юридических лиц:


и д т o н (30
ц оку ема bile ика по
цеп

я процесса
д
ww писн
о н Авто мати заци м е с ц и w.s ой ай 2
к баз 1С Оп нта озд й По amag индек 005
200
5 ие подключения под тими ции ани Ищ чем .ru с 8165
аль 5 бщ
евр 8165 я –о при помо щи QEMU Lin зац PO я ем у M 5
ф и яция u и D пр S S

Отправьте заявку по факсу (095) 928-82-53 или по e-mail:


) кс ц Эмул x яц Ст
(27 инде
№2 исной .ru т е гра н о вка р на shell ик W ро
и
ич QL
ин м
ин ание лов
подп .sam
ag
ная ста ия рве Программиров х условиях PA м
-En защ ы едл
w
я у емы чен -се в экстремальны На ен
тем
ww
ска систбеспе кси стр ter ищ но
Сис ч е й о п р о аи
pris ен ра
ати но о
info1@samag.ru.
й C Ка ва e, ную бо
ом ион ног ьны TIN уд к во ем 80 тае
Авт ерац рамм сал ьс ал сс UP 2. бес т?
оп прог вер сет Чт ен та
ны но S п 1x EA пров
и – уни ь н ую D
ов е ф вит од P-T од
BS а Lin LS ную

Укажите наименование и банковские реквизиты своей


KS л Ус жн ай ь
SOC и р туа F ree в тан оз лы ux се
в с ть:
о им е л иза кур s t
tf fiixx ы
ко ав
рп ли
на
ть по
д
р й Эф ор ва BS
Ст ие
р
одн
ы еP
o тод №7(32 ати ем об
D
дан баз ме подп ) ИЮЛЬ по фек IP-
: вв вн Sy

организации, почтовый индекс и адрес доставки журна- Соз на ые ис


ww w. ной ин 2005 ля ти ой ma тел
инг ер (31) ИЮиНЬ 2005н
ель 81655 x sama де
g.ru кс 8165 Ко ми вн
се nte еф
-р оум с ерв №6 л н тg.ru
ной индекс
inu 5
с п нтро
по о у
ль пр ти c он
и
IP й подопис
п ama L Настр ом ли зо ав A ntiv и
вы Доwww.s и под ностируем сти аива ощ ру ва ля
что м. циfix: диаг D: правно ем K Ин ью ем тел ем iru

ла, телефон и e-mail контактного лица, период подпис-


По спа Open- erbe соз терв ей s9
ем мPoизаst анreяеeBмSнеис Xchan ros пода ью OS без
SIM оп вA .0
Реж пти и устр F
на ySQLLinux: Есть ge – ветрх елLDс Л ас D
ао ик + ris без ли жиз
своб ем A P ар но
е хник ра фAs te
rl
Mk и
ле фо ния ан нь
оду
гр я з р и
сть
т IP-те тиви уппа

ки и количество номеров. Редакция выставит вам счет,


Т e ык Уо се
та ем t + Pмиссия им а Зап руса
?
м! а P лл ти
c зв
Счи_ipac ько не
уя
ая сеть
? на Frускаем erl ом

ng Насколбеспроводн роли eeBS spam
ваша вые па Про D d
норазоа на сервер
после оплаты которого вы начнете получать журналы зуем од од HTTPверяем
Испольаленного вх

-тра по 8(3
rprinting? фик ww дпи 3) а
для уд ge Н ас на
ся от fin
w сн вгу
траи лету С .samaой ин ст 2
щитить дескто
па? ваем к мож g.ru декс 0805

по почте. Необходимые бухгалтерские документы вы-


Как за честве
Уста WSU
с L онку ет
10 в ка Postf навлив S
inu ри ли
16
55
Solaris м! ix + аем св О р
Exchan яз С цен
x-д ва PC-
о
Пробуе rver Удал ge ку ис т BS
SQL Se BIOS енно уп и п чита ите т ь D

сылаются почтой.
ем MS Setup равл ро ем Wr рибу
Ускоря BIOS яем Н к т S ти
цируем Автом ва астр си-с раф py! ва
Модифи ые баз атизир ш аи ер ик ми
9.2 ительн 1С но уе П ли в ве п ?
дополн вой м под с п рово чны аем ро оч
nal я Ищем ики дохода верс клю
й с DS в то
sio ни источн
ии 8. чени ом ди вы
ro fes а тле е
0 е
A
Уп
р
ощ м
а па PAM х
5 ч и ste ощ ью уд м- –
00
ь 2 655 S EP впе ч ен а и фи

Для физических лиц:


р u е е O ris м е SNA си т
нв
а 81
аS вы есп в е penM k-се уп
ль
) я декс
(26 ин тив ер об рв рав E тем
R с тр
№1 писной ag.ru ибу :п ое ди o
стр ps мн C ны six ер ле ы
д
по w.sam
ди oo ам ко D, н йс –п ом ни
ww ер огр el
зор рв п е
Ад иров под
уп ре е

Заполните нижеприведенную квитанцию, оплатите в лю- Об и -се т пр


в Exc ер вр
с ю l 16 и м а л в к а
ок ищ
а er bit нск нию аст
ом ти
Пр ащ зP ны пью се
м
кз еи ed ие те ть
Ка ви itio ск й
ест р!

бом банке и пришлите в редакцию копию с отметками то! n аз


теш rl пр
ос ие
ки
Пу в Pe о л ен
э т ав
ти
Ни O T– у пр ой

банка. TS
P ое ем t
HO мн ист crip й
ам й с BS S па ени 6
огр во ю V NTF сту рж ll
Пр айло ощь ие до вто ewa
ф пом ен его от Fir
После поступления платежа редакция начнет отправ- с
Во
сс
та н овл
ац
общ иты oute
ия защ WinR
из ет и rio
ган рн Ke
Ор Инт е нове
лять вам номера. в ос
на

Стоимость
подписки через
редакцию:

900* руб.
за 6 номеров

1800* руб.
за 12 номеров

При оформлении
подписки
до 1 января
2006 года –
скидка 10%

* Включая НДС
и почтовую доставку

№11, ноябрь 2005 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№11(36), Ноябрь, 2005 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин Неисполняемый стек – ных. Ведь вы лишаетесь основного инс-
Редакторы победа или поражение? трумента (вашей любимой операцион-
Андрей Бешков Технологии защиты от переполнения, ной системы), с помощью которого мож-
Валентин Синицын встроенные в XP SP2, рекламируются но было бы прояснить и исправить сло-
Алексей Барабанов как абсолютно надежное средство жившуюся ситуацию. Тем не менее без-
Кирилл Тихонов от проникновения в систему, обеща- выходных ситуаций не бывает.
Кирилл Сухов ющее покончить с червями, хакерами
и прочими вредителями раз и навсегда. Защищаем электронную
РЕКЛАМНАЯ СЛУЖБА Cами хакеры, впрочем, придерживаются почту с помощью
тел./факс: (095) 928-8253 совершенно другого мнения на этот счет MailScanner
Дарья Хохлова и добровольно уходить со сцены не со- Тяжело представить сегодняшний биз-
reсlama@samag.ru бираются. Давайте отбросим реклам- нес без электронной почты, которая поз-
ные буклеты и посмотрим, как выглядят воляет оперативно обмениваться ин-
Верстка и оформление эти защитные механизмы изнутри. формацией с минимальными затрата-
maker_up@samag.ru ми. В то же время в ящик пользователя
Дизайн обложки Круговорот почты в сети, помимо полезных писем попадает спам,
Николай Петрочук или Архитектура а почта часто используется для распро-
современных почтовых странения компьютерных вирусов.
По вопросам распространения систем
обращайтесь по телефону: Знание основ освобождает от необхо- Доставку гарантируем:
(095) 928-8253 (доб. 120) димости запоминать тысячи фактов. качество обслуживания
Попробуем подойти к построению поч- в пакетных сетях
107045, г. Москва, товой системы, опираясь на этот при- Если вы частенько работаете по ssh уда-
Ананьевский переулок, дом 4/2, стр. 1 нцип, и сделаем акцент не на настрой- ленно, слушаете интернет-радио или
тел./факс: (095) 928-8253 ку компонентов почтового сервера просто играете в on-line-игры, то навер-
Сайт журнала: www.samag.ru (об этом и так достаточно написано), няка замечали, что получаемое от этого
а на взаимосвязь между компонента- удовольствие прямо пропорционально
РУКОВОДИТЕЛЬ ПРОЕКТА ми и на протоколы, по которым они об- нагрузке на вашу сеть. Будь то Windows
Петр Положевец щаются между собой. Update с вашей же машины или FlashGet
УЧРЕДИТЕЛИ с соседней, все равно приложениям на-
Владимир Положевец Загрузка и загрузчики до будет «поделиться». Вот вам и «изю-
Александр Михалев Любая система, прежде чем начнет ра- минка» совместного использования ин-
ИЗДАТЕЛЬ ботать, должна загрузиться. Если на ва- тернет-канала – постоянные скачки, рыв-
ЗАО «Издательский дом шей машине установлено несколько ОС, ки и задержки. Иными словами – ваши
«Учительская газета» еще нужно как-то выбрать, что именно данные не получают соответствующе-
загружать. И проблемы с загрузкой и за- го качества обслуживания (Quality of
Отпечатано типографией грузочными секторами, пожалуй, мож- Service). И к несчастью, это так же неиз-
ГП «Московская Типография №13» но отнести к одним из самых неприят- бежно, как налоги.
Тираж 9000 экз.
Уважаемые читатели!
Журнал зарегистрирован
в Министерстве РФ по делам печати, Спешите оформить подписку
телерадиовещания и средств массо- на первое полугодие 2006 года!
вых коммуникаций (свидетельство
ПИ № 77-12542 от 24 апреля 2002 г.). Приобрести новые и старые номера журнала
вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
За содержание статьи ответственность
несет автор. За содержание рекламно-
го объявления ответственность несет
рекламодатель. Все права на опубли-
кованные материалы защищены. Доставка почтой в любую точку России.

96

Вам также может понравиться