036 Системный Администратор 11 2005

Page 1

ТР О ТИ РАС РА КУ Ж ПИ

НИ НО КУ ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ

ЛИ

СЬ

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

КО НЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И

Поговорим через Интернет? Расширяем права доступа в Linux с помощью ACL

ЗА

ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ

УЕ ХА Л

ВО ТП

УС К

КА

БЫ С

№11(36) ноябрь 2005 подписной индекс 20780 www.samag.ru

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

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

Ещё один способ восстановить MBR Тонкий клиент – шаг к мэйнфреймам? Разрабатываем документацию в NPJ: эффективно и удобно!

ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60

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

Используем возможности ftpd Расширения РHP: пять шагов к написанию Как сисадмины проводят свободное время



оглавление 2 ТЕНДЕНЦИИ

БЕЗОПАСНОСТЬ

ИНТЕРВЬЮ

60 Windows Script Host: проводим аудит безопасности сети

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

Интервью с главой проекта MiniMo – Дугом Тернером. Антон Борисов a.borisov@tesv.tmb.ru

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

66 Проверяем защищенность сети и сервисов сканером DragonSoft Secure Scanner

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

Анализ наиболее популярных сетей интернет-телефонии. Михаил Платов platov@cs.vsu.ru

16 FreeBSD tips: какими возможностями обладает ftpd

Ftpd вполне пригоден для решения большинства типовых задач по обмену файлами. Сергей Супрунов amsand@rambler.ru

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

С проблемой специальных драйверов мы сталкиваемся, когда оборудование выходит за стандартную архитектуру простеньких компьютеров. Алексей Барабанов alekseybb@mail.ru

26 GRUB на CD, или Ещё один способ восстановить MBR

Восстанавливаем MBR минимальными средствами. Алексей Мичурин alexey@office-a.mtu-net.ru

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

Сегодня снова экономически выгодно использовать мэйнфреймы с подключением легких терминалов – тонких клиентов. Антон Борисов a.borisov@tesv.tmb.ru

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

Обзор системы коллективной работы Net Project Journal. Алексей Коршунов akeeper@akeeper.ru

46 Развертываем сервер Subversion на платформе FreeBSD

Современная замена устаревшей системы CVS. Андрей Шетухин shetuhin@corp.mail.ru Ольга Никулина nikulina@yandex-team.ru

54 Расширяем права доступа в Linux с помощью ACL

ACL позволяет использовать более сложные модели доступа, чем традиционная реализация, применяемая в Unix-системах. Сергей Яремчук grinder@ua.fm Оформили подписку!

Мужики, где журнал взяли?

Почему я до сих пор этого не сделал?!

№11, ноябрь 2005

Летим скорее на почту!

Я забыл подписаться!

Чтобы не тратить массу времени на поиск в логах информации о попытках несанкционированного доступа к ресурсам сети, используем сценарии WSH. Андрей Бирюков mex_inet@rambler.ru

Принес номер на работу, «увели» почитать

Обзор сканера безопасности.

Сергей Яремчук grinder@ua.fm

WEB-ПРОГРАММИРОВАНИЕ 68 Расширения РHP: пять шагов к написанию Как быстро разработать надежное расширение PHP. Александр Календарев akalend@mail.ru

ПРОГРАММИРОВАНИЕ 74 Редактор для создания скриптов: Primal Script 4.0

Рассматриваем недокументированные возможности редактора. Иван Коробко ikorobko@prosv.ru

ИТОГИ IT-ТУРНИРА 78 Сетевой проект для небольшой компании

Сетевая инфраструктура предприятия, разработанная командой-победительницей конкурса «Кубок сетевых проектов Microsoft». Земскова Ольга zo13@rol.ru Ширнин Олег oshirnin@yandex.ru Цюрюпа Егор egts@land.ru

ХОББИ 82 Десять красок неба

Чему посвящают свое свободное от работы время системные администраторы? Наталья Алексютина info1@samag.ru

РЕТРОСПЕКТИВА 84 Alpha, или история одной архитектуры Павел Болотов walter@alasir.com

КНИЖНАЯ ПОЛКА 92 Обзор книжных новинок Александр Байрак x01mer@pisem.net

52, 53, 91 BUGTRAQ Информация о подписке на 94 стр.

Лучше каждому получать отдельный экземпляр журнала И у меня такая же беда

А можно ещё успеть?

Как же я без любимого журнала?

1


тенденции Microsoft укрепляет позиции в индустрии IT-образования

ставленной информации; повышением ках организации портала «Сеть творквалификации преподавателей и со- ческих учителей» (www.it-n.ru), ортрудников сферы образования зани- ганизация всевозможных конкурсов 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 можно най(Microsoft, SAP, Oracle); для ниши раз- ти по адресу http://www.microsoft.com/ вивающегося и специализированного Rus/Education. программного обеспечения (например, Андрей Филиппович системы автоматизации составления расписания) выбираются лучшие по результатам анализа; для исследо- Oracle выпускает вательских или маленьких локальных бесплатную редакцию задач выполняются собственные раз- СУБД работки; для использования студента- Тридцать первого октября 2005 гоми выбираются приложения, ориенти- да корпорация Oracle анонсировала рованные на технологию тонкого кли- выход бета-версии новой редакции ента; при разработке сервисно-ори- Oracle Database 10g Express Edition ентированной архитектуры (SOA) ис- (Oracle Database XE). Данная редакпользуются открытые стандарты на ция СУБД распространяется бесвеб-сервисы. платно, и независимые разработчиПри организации 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, что доступен и в старших репреимуществу такой организации до- дакциях, плюс интерфейс к ряду языкладчик также отнес удобство органи- ков программирования, включая Java, зации вычислительных кластеров. .NET и PHP. Oracle Database XE доступна для 32разрядных платформ Linux и Windows, Курьезы Microsoft В целом конференция вызвала боль- и на нее накладываются следующие шой интерес среди специалистов и бы- ограничения: ла проведена на высоком техническом Используется только один ЦП. уровне, однако без курьезов не обошИспользуется не более 1 Гб ОЗУ. лось. Во время демонстрации решеДопускается работа только одного ний Microsoft сначала не удалось выйэкземпляра БД. ти в Интернет для получения доступа Не более 4 Гб пользовательских к Microsoft Learning Gateway, а затем данных на жестком диске. при попытке запуска системы Learning Network Manager после перезагрузки Для зарегистрировавшихся на сайоперационной системы всплыло со- те корпорация Oracle предоставляет общение о необходимости активации бесплатный доступ к форуму, который используемой копии Windows. Это со- сопровождают специалисты компабытие, произошедшее после слов Оль- нии. Скачать Oracle Database XE можги Дергуновой о необходимости про- но по ссылке: www.oracle.com/database/ ведения воспитательной работы сре- xe.html. ди молодежи по использованию лиАндрей Маркелов цензионного программного обеспечения, с одной стороны, вызвало бурную радость большей части посетите- Завершено тестирование лей конференции, а с другой – позво- нового программного лило осознать значимость того факта, продукта по созданию что в России количество пиратских ко- веб-ресурсов пий программного обеспечения снизи- Первого ноября 2005 года компании «Битрикс», «QSOFT» и ФОРС объявилось с 99% до 87%.

№11, ноябрь 2005

ли об успешном завершении нагрузочного тестирования продукта «Битрикс: Управление сайтом 4.0». Этот программный продукт предназначен для создания, управления и развития веб-проектов и ориентирован на сегмент малого и среднего бизнеса (SMB). В качестве тестовой системы был выбран сервер начального уровня «Kraftway GEG Express 100» с операционной системой Red Hat Enterprise Linux AC Release 3, а в качестве базы данных использовалась Oracle 10g Release 2 (Standard Edition One). Для тестирования были выбраны Oracle-версии продукта «Битрикс: Управление сайтом – «Старт» (включающая в себя минимальный набор модулей для управления корпоративными сайтами) и «Бизнес» (полнофункциональная версия продукта, предназначенная для создания и управления корпоративными порталами, интернетмагазинами, сайтами СМИ и другими интернет-проектами). В результате суточного тестирования данных продуктов были получены следующие результаты. Версия «Старт», включающая 4 модуля, «выдержала» 1 117 956 уникальных пользователей (3 879 336 хитов), а состоящая из 18 модулей версия «Бизнес» – 465 160 уникальных пользователей (1 614 103 хита). Среднее время ожидания д ля «Старта» и «Бизнеса» составило 0,265 и 1,107 секунд соответственно. Количество же ответов, время ожидания которых от 3 до 7 секунд, составило 0,04% и 0,55% от общего числа запросов. Добиться столь высоких показателей удалось благодаря 2-уровневой конфигурации сервера («frontend» (прокси-сервер nginx 0.1.44) + «back end» (apache 1.3.33 + php 4.3.11 + e-accelerator 0.9.3)) и использованию в качестве базы данных Oracle 10g Release 2. В то же время версия программного продукта, использующая в качестве базы данных MySQL, продемонстрировала гораздо более скромные результаты – «всего» 30 000 уникальных пользователей.

Николай Никульшин

3


тенденции Unisys ставит на «зрелость» Open Source Компания Unisys сообщила о том, что рассматривает программное обеспечение с открытым кодом как «ключевую область» для роста, и объявила о намерении продвижения ОС Linux в крупные предприятия. По словам Питера Блэкмора, исполнительного вице-президента и президента по мировым продажам в Unisys, Open Source уже является «созревшей технологией», готовой предоставить разумные и экономичные решения для многих заказчиков. Unisys уже занимается внедрением проектов с открытым кодом в IT-структуры крупных компаний: «Сейчас Linux действительно пользуется спросом. Мы работаем с одним клиентом (европейским туристическим предприятием), для которого обратились к услугам Open Source в масштабной серверной среде. Мы можем доказать надежность и готовность данного решения, а оно сохранит им 30 процентов итоговых затрат».

OpenSync и KDE готовят ПО синхронизации телефонов Энтузиасты из проектов OpenSync и KDE занимаются разработкой библиотеки, с помощью которой можно будет синхронизировать мобильный телефон, КПК, работающий под управлением Windows CE или Palm, со своим настольным ПК под управлением ОС Linux. Код старых программ синхронизации, среди которых пакеты KitchenSync, KSync, Kandy, libksync, уже удален из KDE (все они будут отсутствовать в следующем major-релизе KDE – 4.0). Появление первой стабильной версии библиотеки OpenSync ожидается к началу 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

ставления для популяризации Linux. Финансовую поддержку проекту оказали компании IBM, Novell, Philips, Red Hat и Sony. «Открытая совместная работа критична для создания инноваций, обеспечивающих глобальный экономический рост. Препятствия коллаборации для операционной системы Linux подвергает серьезной опасности возможные инновации. Для поддержания развития инноваций в программном обеспечении для Linux должна быть установлена новая модель управления интеллектуальной собственностью – вне зависимости от размера и типа бизнеса или организации», – пояснил смысл создания OIN ее исполнительный директор Джерри Розенталь.

Novell меняет политику по GNOME и KDE для SUSE Linux В начале ноября компания Novell объявила о смене стандартной графической оболочки для SUSE Linux (и Novell Linux Desktop) с KDE на GNOME, объявив о том, что отныне поддержкой пакетов KDE будет заниматься проект OpenSUSE. Однако вскоре планы были несколько изменены: из-за широкого резонанса, что вызвало известие в сообществе, и большого числа отзывов своих пользователей Novell уступила и сообщила, что в дальнейшем будет уделять равное внимание поддержке KDE и GNOME в своих Linux-дистрибутивах.

Составил Дмитрий Шурупов по материалам www.nixp.ru


интервью

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


интервью Что представляет из себя MiniMo?

ся Internet Explorer, то для мобильных устройств это далеко не так: здесь присутствуют такие имена, как Opera, NetFront, Obigo, Nokia Series 40/60 Browser, Openwave, Pocket Internet Explorer, NicheView, Picsel, RocketBrowser, Wapaka, Thunderhawk, Skweezer, Andromeda и некоторые другие. Сфера применений пока, на мой взгляд, достаточно узкая – помимо непосредственного отображения веб-страниц и удобной интеграции с Google Maps на этом функционал и заканчивается. Технология MiniMozilla построена таким образом, что в принципе можно отделить интерфейс пользователя (UI) от ядра браузера Mozilla и построить новые приложения под конкретные требования заказчика, но пока об этом мало что слышно. Также мало слышно и об активном использовании в MiniMo подключаемых модулей. Впрочем, не буду заострять внимание на том, чего пока нет. Отмечу, что проект MiniMo идет вперед семимильными шагами. И лозунгом развития Mozilla Foundation отчасти может служить фраза Криса Хофмана (Chris Hofmann) – «Создавайте хорошие продукты, которые приятны для использования, а остальное приложит-

ся» («Make good software that people like to use, and the rest will take care of itself»). Коллектив Mozilla Foundation сложился в июле 2003 года в основном из бывших участников корпорации Netscape [10]. Он разрабатывает не только MiniMo, но и такие продукты, как Mozilla FireFox, Mozilla Thunderbird, Mozilla SeaMonkey, и многие другие. Большинство из них, конечно же, напрямую не связано с MiniMo, но от каждого зависит общее развитие продукта. В частности, технологический темп для развития MiniMo задает Дуг Тернер, Крис Хофман координирует бизнес-планирование. Официально Дуг Тернер начал работать на Mozilla Foundation с декабря 2004 года. Хотя послужной список данными персонами не афишируется, но удалось узнать, что до прихода в Netscape в 1996 году Дуг Тернер работал в компании Apple Computer Inc. Первое упоминание об успешном портировании MiniMo на КПК датируется 8 декабря 2003 года, когда Дуг Тернер пишет в своем блоге – о запуске Firebird на iPAQ 5555 [4].

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

Что касается запуска MiniMo на Opie, то здесь потребуется переписать код под QT. Как вы знаете, сейчас Mozilla основана на GTK-коде, поэтому закономерно, что и MiniMo зависит от GTK. Портирование на QT-основу происходит (см. http://dot.kde.org/1094924433). Как только оно завершится, то появится причина для перестраивания дерева MiniMo, чтобы в дальнейшем выпускать исполняемые файлы и в формате MiniMo/QT.

После того как в январе 1998 года были выпущены в свет исходные коды Netscape Navigator [1], началась новая ветка в истории развития браузеров. Одним из «побочных» эффектов стало появление MiniMo (MiniMozilla) – мини-браузера для КПК и мобильных устройств [2]. Что из себя представляет MiniMo? Это в первую очередь исходный код браузера Mozilla, который можно собрать для мобильной платформы, например, для КПК iPAQ. Вполне очевидно, что полная функциональность настольной Mozilla для мобильных устройств не требуется. На первый план выходит компактность браузера и повышенные требования к распределению памяти (в КПК количество ОЗУ всетаки отличается от настольных ПК). Второй немаловажный фактор – это умение отображать html-страницы для экранов КПК-устройств (разрешение в пределах 160x240 пикселов или более; сейчас уже типичны устройства с разрешением экрана 640х480 пикселов) [3]. Если для настольных ПК доминирующим браузером являет-

6

Я попробовал запустить MiniMo 0.07 в Windows CE 2002 (WinCE 3.0), однако все попытки оказались неудачными. В чем может быть проблема, в WinCE 3.0 или все-таки в MiniMo? Есть ли планы выпускать MiniMo в виде одного инсталлятора, а не в виде архива файлов? Для использования в Windows CE 2002 требуется перекомпиляция кода MiniMo с использованием SDK от WinCE 2002. Сейчас мы сфокусированы в основном на Windows CE 2003, так что и для более старой версии WinCE в скором времени будет релиз. Что касается инсталляторов, то для себя мы используем как коммерческие, так и собствен-


интервью Какие планы развития MiniMo? И как сил бы развитие MiniMo, если на рынпроисходит тестирование дополни- ке было что-то стоящее. тельного функционала? Для MiniMo также существует план Насколько мне известно, с Nokia развития [5]. Что же касается дополни- и с T-Mobile подписаны контракты тельного функционала, то он, как пра- по поставке MiniMo вместе с их провило, появляется в качестве расши- дукцией. Насколько это верно? рений к продукту. Например, Spatial У меня не входит в практику распроNavigation – это расширение, кото- страняться, кто собирается, а кто рое я написал для Pioneer Research. не собирается что-то поставлять, поЕго цель – использовать клавиши вверх, ка не выпущен официальный прессвниз и т. д. для навигации по докумен- релиз. Так что, извините, говорить ту (см. 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. Дуг Тернер – соавтор первой антиспам программы SpamBlaster, созданной в 1997 году. Сотруд ник компании Netscape Communications c 1996 года. Занимался развитием объектной модели XPCOM, проработкой вопросов поддержки сети и потоковых (thread) вопросов в браузерах серии Netscape, а в последствии и в серии Mozilla. В декабре 2004 года возглавил разработку браузера MiniMozilla в компании Mozilla Foundation.

№11, ноябрь 2005

7


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

Поговорим через Интернет? Анализ наиболее популярных сетей интернет-телефонии

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

Михаил Платов «А в чем, собственно, вопрос?» За последние несколько месяцев рынок компьютерной телефонии пережил несколько значительных событий. Наиболее интересными среди них являются запуск проекта Gizmo Project, а также открытие голосового сервиса компанией Google. Сразу после этого в сети появились многочисленные статьи, рассказывающие о преимуществах новых сетей перед старыми конкурентами. Как ни странно, сколь-нибудь единого мнения о том, какая же сеть на данный момент является лучшей, представлено не было. Более того, мнения различных обозревателей зачастую оказывались диаметрально противоположными. Для внесения ясности в этот вопрос было произведено небольшое исследование, с результатами которого вы сможете ознакомиться в этой статье. Итак, кандидат №1 – Skype.

Skype, «Let the whole world talk for free» В недалеком 2003 году, основатели сети KaZaA Николас Зенстром и Янус Фрис создали революционную для своего времени программу для интернет-телефонии с совершенно непонятным названием – Skype. Ее изюминка заключалась в том, что для передачи «голоса» использовались идеи пи-

8

ринговых сетей, широко используемых для обмена файлами (Napster, KaZaA, Gnutella и др.). С тех пор в течение почти трех лет сеть Skype активно развивается, а количество пользователей программы неуклонно продолжает расти. За первый год работы сеть набрала свой первый миллион активных пользователей, за второй год – еще два, сейчас их количество медленно, но верно приближается к отметке в 5 миллионов… Последним значимым этапом в истории Skype стало слияние с известными и популярными сервисами электронной коммерции e-bay и PayPal [1]. Что же лежит в основе успеха Skype? Для ответа на этот вопрос достаточно посмотреть на список основных возможностей программы: Передача речи, мгновенных сообщений и файлов. Высокое качество речи. Проведение конференций. Связь с традиционной телефонной сетью (через сервисы SkypeIn и SkypeOut). Дополнительные возможности (интеграция с MS Outlook, Firefox, работа с сетями wi-fi хот-спотов, возможности «корпоративного» управления счетами и др.). Шифрация всех передаваемых данных (алгоритмы AES, RC4). Отличная работа из-за NAT и брандмауэров.

П о д д е р ж к а р а з л и ч н ы х п л а тформ (Windows, Mac OS X, Linux, PocketPC). Наличие API для разработки собственных расширений программы. 27 различных языков в интерфейса клиента Skype.

Как работает Skype Для того чтобы понять техническую часть, обратимся к рис. 1. Сеть состоит из программных клиентов Skype, работающих на компьютерах пользователей. В зависимости от условий работы один и тот же клиент может выступать либо как «обычный узел», либо как «суперузел» сети [2]. У последних есть по меньшей мере два характерных признака: Они всегда имеют реальный интернет-адрес. Они принимают непосредственное участие в поддержке работы сети Skype. Собственно, благодаря наличию «суперузлов» Skype и относят к децентрализованным сетям. Поиск абонентов, отслеживание их текущего состояния (активен/не активен), обмен мгновенными сообщениями и файлами – все это производится с участием «супер узлов». Впрочем, их самой важной функцией является то, что каждый из них может выступать посред-


администрирование ником при передаче голосового тра- нивались качество фика между другими клиентами се- передаваемой рети 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). в Швейцарии, подключенный к ИнтерПервое, что мы сделаем, – найдем нету с помощью беспроводной техчеловека, с которым будем общатьнологии 802.11. (провайдер Monsoon ся (можно искать по skype-именам Networks). Думаю здесь комментарии или просто найти пользователей в реизлишни. жиме Skype-me, желающих поболтать), При тестировании по второй схеи добавим его в список контактов. Посме поведение клиента полностью соле этого, нажав на зеленую кнопку вниответствовало ожидаемому – данные зу экрана, мы начнем звонить. В мопередавались напрямую между учасем случае вызов проходил достаточно тниками (см. вариант «2» на рис. 1). долго – около 10 сек. Кроме того, когда Субъективно качество речи было лучу вызываемого абонента было запущеше, чем при разговоре по обычному тено несколько skype-клиентов на разлефону, но все-таки хуже, чем у конкуных компьютерах (для Skype такая сирентов (см. ниже). туация допускается), звонок иногда доТретья схема (см. «3», рис. 1) полходил только до одного из них. ностью повторила результаты первой, разве что география в этот раз быМетодика тестирования ла другой – Великобритания, Япония Для каждой из рассматриваемых сеи США. Качество речи сильно менягодня программ проводился определось от звонка к звонку – от полной ленный набор испытаний. В процесневозможности разговора, до редсе каждого теста субъективно оцеРисунок 2. Интерфейс skype-клиента

№11, ноябрь 2005

9


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

10


администрирование го, но интенсивного тестироются на указанный в систевания Call Out качество речи ме e-mail. было несколько хуже, чем при Таким образом, сообщевнутрисетевых звонках. Приния голосовой почты также чиной этому, судя по всему, можно централизованно храявлялось транскодирование. нить на любом почтовом серДело в том, что подавляювере. В параметрах настройщее большинство оборудоки Gizmo можно указать втования операторов не поддерой e-mail адрес, на который рживает даже открытый кобудут отсылаться уведомледек iLBC, не говоря уже о комния о пришедших голосовых мерческом ISAC и его собрасообщениях (так предлагаеттьях из пакета GIPS. Поэтося реализовывать SMS-опому звонки перед терминацивещения). При желании можРисунок 5. Отображение положения участников разговора ей скорее всего подвергаются но настроить безусловную на карте мира транскодированию на одном переадресацию входящих звонков на другой номер, в том чис- места – реализованные возможности из серверов SipPhone, которое и приле и номер ТФОП (в этом случае або- STUN оптимальны с точки зрения сов- водит к некоторому ухудшению качеснент будет оплачивать все переадре- местимости с другими устройствами тва речи. С другой стороны, благодаря суемые звонки по соответствующему сети. Впрочем, это вовсе не означает, транскодированию даже пользователи что специальные расширения функци- с низкоскоростными интернет-каналатарифу для Call Out). Другой приятной особенностью ональности для лучшей совместной ми могут делать call-out-звонки с приGizmo является отображение учас- работы Gizmo из-за NAT невозможны емлемым качеством. Для услуг междугородной и межтников разговора на карте мира в принципе… дународной телефонии SipPhone, (см. рис. 5). Для этого используеткак и другие подобного рода компании, ся интерфейс системы 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


администрирование ке), причем перед повторным запуском часто требовалось вручную завершить процесс gizmo.exe. Небольшой осадок оставила функция отображения звонков на карте при вызовах в ТФОП. В некоторых специфичных условиях клиент просто не мог подключиться к сети. Однако с учетом того, что программа активно развивается и все еще имеет официальный статус «бета», можно надеяться, что в скором времени эти и другие недочеты будут успешно устранены..

Google Talk

руется обмен сообщениями с другими jabber-серверами в рамках проекта IM Federation [7]. Передача речи на данный момент возможна только между родными клиентами Google Talk. В будущих версиях заявлена поддержка протокола SIP. Помимо этого Google также обещает открыть сообществу детали использования XMPP для передачи голоса в Google Talk [8].

Работа с NAT При работе с клиентами, находящимися за NAT, Gtalk также использует STUN. Качество реализации STUN от Google впечатляет – во всех рассматриваемых сегодня схемах с NAT Gtalk всегда удавалось передавать голосовые данные напрямую между участниками. Как вы помните, Skype в этом случае использовал «суперузел», а Gizmo – специализированный сервер в США. Субъективная оценка качества речи лишь подтвердила объективные данные – среди всех рассмотренных участников наилучшее качество речи было у Google Talk.

24 августа 2005 года состоялся официальный анонс еще одной голосовой службы, на этот раз от компании Рисунок 6. Интерфейс Google Talk Google, известной миру своей одноименной поисковой системой. Назва- почтовый адрес не является адресом ние простое – Google Talk или сокра- почтовой системы Google, то вам будет предложено пригласить этого пользощенно – Gtalk. вателя в Gmail прямо из Google Talk. Основные возможности: Передача голоса и мгновенных со- С пользователями, имеющими статус «Available», можно общаться. При голообщений. Отображение качества разговора совых сеансах качество речи в реальном времени отображается индикатов реальном времени. Уведомления о непрочитанных ром верхней панели, причем достаточно корректно. письмах в почтовом ящике. Связь с телефонными сетями Интерфейс клиента вылизан до ме- В настоящее время официально таБыстрое открытие ящика Gmail. лочей. Приятные меню, автодополне- кой услуги нет. Информации о ее возКак видим, список невелик, но да- ния при вводе адресов, моменталь- можном появлении также нет. Однако вайте воздержимся от поспешных вы- ное открытие ящика Gmail (без ввода изучение сигнальных сообщений, певодов, ведь, как известно, больше пароля), удобные уведомления о но- редаваемых между сервером и клиенвой почте, ненавязчивое звуковое со- тами Gogle Talk, обернулось нескольне значит лучше… провождение – и все это при размере ко неожиданным сюрпризом – помидистрибутива в 900 Кб! За интерфейс мо декларирования поддержки кодеЗнакомство Первой приятной особенностью про- Google Talk без разговоров получает ков GIPS и двух стандартных вариаций G711 в сообщениях также присутствограммы стал ее размер – всего лишь свои заслуженные 5 баллов. вала следующая запись: 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 На сегодняшний день подавляющее число компьютеров подключено к Интернету с использованием протокола четвертой версии протокола IP. Одной из известных проблем этой версии является нехватка адресного пространства. Так, для адресации в IPv4 используется 32 разряда, что позволяет обращаться к 4 294 967 296 устройств. Для Интернет на стадии его зарождения (20 лет назад) эта цифра казалось огромной. С позиции настоящего времени эта цифра уже не кажется столь большой, напротив, многие говорят о грядущей нехватке IP-адресов, особенно когда начнут появляться бытовые устройства (телефоны, холодильники и другие предметы бытовой техники), подключенные к Интернету. Сейчас же для «экономии» часто используется механизм NAT – Network Address Translation. Общую идею NAT можно описать так: преобразование адресов одной сети в адреса другой сети. В наиболее популярном частном случае (подключение локальной сети к Интернету) это будет трансляция внутренних адресов локальной сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) в один внешний интернетадрес, полученный от провайдера. Обрабатывая пакеты, NAT-сервер будет просто заменять «локальные» адреса клиентов своим интернет-адресом, а при получении ответных данных из Интернета будет проводить обратное преобразование. При этом для служб, работающих на уровне IP, никаких проблем не возникает – NAT прозрачно меняет заголовки IP-пакетов. С протоколами более высокого уровня, к сожале-

нию, возникают проблемы. Так, при установке соединения с помощью SIP участники диалога внутри SIP-сообщений указывают IP-адреса и номера портов, которые будут использоваться для передачи RTPпакетов. Если NAT-сервер не занимается анализом содержимого пакетов на уровне протокола (а именно так все известные реализации и поступают), то RTP-пакеты просто не дойдут до адресата, ведь в SIPсообщениях будут указаны внутренние немаршрутизируемые адреса участников. Для решения этой проблемы используется протокол STUN – Simple Traversal of UDP through NAT [9]. Его основная идея заключается в том, чтобы дать возможность клиенту определить, что он находится за NAT, а также сообщить ему IP-адрес и номер порта, которые получатся после трансляции внутреннего адреса сервером NAT. Имея эту информацию, клиент сможет сам правильно указать в SIP-сообщениях внешний адрес и номер порта для передачи RTP-данных на сервере NAT. С точки зрения STUN выделяются 4 основных типа реализации NAT-серверов: Динамический неограниченный NAT. В этом случае все запросы от определенного внутреннего IP-адреса и порта отображаются на один и тот же внешний IP-адрес и порт. Кроме того, различные узлы Интернета могут послать пакеты узлу за NAT, отправляя их на соответствующий порт NAT-сервера. Динамический NAT, ограниченный по IP-адресам. То же, что и предыдущее, за исключением того, что внешние узлы могут посылать пакеты

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

Чего в Gtalk нет

№11, ноябрь 2005

только в том случае, если узел за NAT сам предварительно посылал им какиелибо пакеты. Динамический NAT, ограниченный по IP-адресам и портам. То же, что и предыдущее, только ограничения заданы более жестко: узел в Интернет может отсылать пакеты только с того порта, на который он предварительно чтото получил от узла из-за NAT. Симметричный NAT – все пакеты от внутреннего IP-адреса и порта к внешнему IP-адресу и порту преобразуются в один и тот же IP-адрес и порт NATсервера. Отличие заключается в том, что при обращении к различным внешним IP-адресам порты на NAT-сервере тоже будут изменяться. Таким образом, только один интернет-узел может посылать пакеты узлу, находящемуся за NAT-сервером. Для первых трех типов NAT можно с успехом использовать внешний STUN-сервер, а вот для четвертого типа этот метод уже не поможет – номера портов, назначаемые для пакетов к STUN-серверу и второму участнику разговора, будут разными. Единственным возможным здесь вариантом является интеграция функциональности STUN-сервера в прокси-сервер голосового трафика. В этом случае номера портов будет возможно определить, и соединение будет установлено. Вам это еще ничего не напоминает? Правильно! Именно так и работает механизм «суперузлов» сети Skype, позволяющий успешно работать даже из-за симметричного сервера NAT.

ализована не вся желаемая функциональность.

Российский путь Некоторое представление о том, как развивается интернет-телефония в мире, мы получили, но что происходит у нас? Говоря об интернет-телефонии в России, можно упомянуть, как минимум, два проекта – Mail.Ru Agent и сеть sipnet.ru.

Mail.ru Agent Детальное изучение MRA показало, что он скорее является очередным ICQ-клоном, ориентированным в первую очередь на обмен мгновенными сообщениями. Голосовые функции номинально имеются, но качество

13


администрирование «Sound by Global IP Sound» Такую фразу можно встретить в описании большинства рассмотренных сегодня систем (кроме сети Тарио и агента Mail.Ru). Некоторые пояснения по поводу смысла этой фразы можно найти на сайте [10]. Согласно размещенной там информации, предметом деятельности компании Global IP Sound является разработка и лицензирование речевых кодеков IP-телефонии, обладающих высоким качеством речи и более устойчивых к потерям IP-пакетов. Наиболее известным кодеком этой компании является iLBC – Internet Low Bitrate Codec (см. [11]), описание алгоритма работы которого можно найти в RFC-3951. Другими, но уже закрытыми, кодеками GIPS являются – iSAC, Enhanced G711, iPCM-wb. Более подробное описание их особенностей можно найти в [12], кратко информацию, приводимую в данном документе, можно выразить так: «Закрытые кодеки при определенных условиях могут обеспечить луч-

шее, по сравнению с конкурентами, качество передачи речи». А теперь, как говорится, вопрос на засыпку – если все рассмотренные сегодня сети для передачи речи используют один и тот же набор кодеков от GIPS (а судя по официально доступной информации, так оно и есть), то почему же так отличается качество передачи речи в различных сетях? Можно привести два варианта ответа на этот вопрос: Используются различные алгоритмы выбора конкретного кодека из пакета, предоставляемого GIPS. Реально это может означать следующее – там, где одна программа выбирает, например, iLBC с размером потока 13.3 кБит/с, другая благодаря использованию более совершенных методов определения имеющейся пропускной способности выбрала менее требовательный ISAC с битрейтом 10 кБит/с.

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

14

Как результат, при нехватке пропускной способности качество речи у второго клиента будет лучше. Благодаря выбору более оптимального маршрута удалось найти такой путь доставки пакетов, что задержка и процент потерь оказались меньше, чем у конкурентов. Первый случай скорее является крайностью, и его суть кратко можно выразить так – «ошибка проектировщиков и программистов». Второй вариант, при прочих равных условиях, может оказывать очень сильное влияние на качество. Так, разговаривать через неизвестный узел в Японии или беспроводного клиента в Швейцарии (Skype), как правило, оказывалось хуже, чем через выделенный сервер в США (Gizmo). Лучшее же качество достигалось при передаче данных напрямую между участниками разговора (Google Talk).

ля он запросто может поставить в тупик – «интуитивного понимания» нет. Прежде чем что-либо сделать, рекомендуется обязательно ознакомиться с соответствующим разделом встроенной системы помощи. Кроме того, часть настроек учетной записи доступна в свойствах учетной записи сервера CommuniGate PRO. Описание этих настроек приводится уже в другом месте. Другими словами, в плане «дружелюбного» интерфейса spinet еще есть чему поучиться… Второй вариант использует те же узлы сети Tario, но уже для вызова абонентов sipnet. Позвонив на номер узла Tario в вашем городе и набрав добавочный SIP-номер абонента, вы можете позвонить любому пользователю сети sipnet. Если же абонент занят или недоступен, вы можете оставить ему сообщение голосовой почты (для реализации этой возможности используется платформа CommuniGate PRO). Список городов и номеров телефонов узлов доступа на данный момент приводится только в личном кабинете абонента sipnet. Звонок на узел Тарио тарифицируется как звонок на обычный городской телефон.

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


администрирование Таблица 1. Сводная таблица возможностей Возможности

Skype

Gizmo Project (Beta)

Google Talk (Beta)

Sipnet.ru*

Связь с телефонными сетями

Да

Да

Да

Да

Возможность проведения конференций

Да

Да

Нет

Нет

Мгновенные сообщения

Да

Да

Да

Нет

Голосовая почта

Да, за дополнительную плату

Да, бесплатно

Нет

Да, бесплатно

Дополнительные услуги (переадресация, автоответчик и т. д.)

Да, за дополнительную плату

Да

Нет

Да, средствами платформы CommuniGate PRO

Передача файлов

Да

Нет

Нет

Нет

Возможность работы с другими сетями

Нет

Да

Нет

Да

Шифрация трафика

Да

Нет

Нет

Нет

Субъективная оценка работы с NAT (максимум – 5 баллов)

4

3

5

2

«Прямые звонки» между абонентами локальной сети

Нет

Да, с помощью Bonjour

Да, с помощью STUN

Неизвестно

Возможность записи разговоров

Да, с использованием средств 3-х фирм

Да, с помощью самой программы

Да, с использованием средств 3-х фирм

Нет

Набор речевых кодеков от Global IP Sound

Да

Да

Да

Нет

Используемый протокол

Собственный

SIP

XMPP

SIP

Возможность контроля качества речи в реальном времени

Нет

Номинально присутствует, но работает некорректно

Есть, работает достаточно корректно

Нет

Отображение собеседников на карте

Нет

Да

Нет

Нет

Возможность расширения функциональности

Да, через API

Нет

Нет

Нет

Размер дистрибутива

7,2 Мб

9,3 Мб

960 Кб

Неприменимо

Потребление памяти при работе

18,4 Мб

14 Мб

2,6 Мб

Неприменимо

Windows 2000/XP, MacOS X, Linspire

Windows 2000/XP

Неприменимо

Beta

Beta

Неприменимо

Поддерживаемые платформы

Windows, MacOS X, Linux, Pocket PC

Статус

Release

* Приводятся возможности только для сети Sipnet.ru. Sipnet – это не клиент, а открытая сеть и некоторые пункты к нему (как к сети) не применимы

ном сайте имеются инструкции по настройке Microsoft Windows Messenger и CounterPath X-lite. При работе с этими программами скорее всего придется использовать самые неэкономичные кодеки G711A и G711U (MS Messenger других и не знает, а все остальное, что входит в x-lite, на практике не поддерживается терминирующими шлюзами провайдеров). Как мы помним из [11], для такой связи нам понадобится канал связи около 80 кБит/c в каждую сторону (пользователям dial-up можно не беспокоиться). Если же взять SIP-клиент или аппаратный шлюз с поддержкой G723 или G729, то можно без проблем пользоваться междугородной связью, а вот при разговорах с другими абонентами сети трудности останутся – из-за ограничений нашего канала мы не сможем говорить с пользователями x-lite и MS Messenger. В принципе эта проблема могла бы решаться использованием централизованного перекодирования (как это, например, делает sipphone при терми-

№11, ноябрь 2005

нации), но, насколько мне известно, такого сервиса у sipnet.ru пока нет.

Нет четкой политики относительно использования мгновенных сообщений. Общие недочеты в реализации служб (неполная локализация), отсутствие https в личном кабинете, нетипичный интерфейс форума.

Вместо выводов В заключение подведем краткий итог. Самое большое преимущество Skype – количество пользователей. Согласитесь, довольно сложно использовать Gizmo, если все знакомые в Skype, а если вспомнить, что Skype еще и закрыт, то надеяться на «мягкую» миграцию и вовсе не приходится. Если же раньше вы и ваши друзья не пользовались интернет-телефонией, посмотрите на Gizmo Project или Google Talk. С помощью первого можно звонить на обычные телефоны, второй же может прийтись по вкусу тем, кто дополнительно хочет сменить (или получить) e-mail. Владельцам широкополосного подключения к Интернету (128 кбит/с и выше) можно посмотреть в сторону sipnet, особенно если вам часто приходится звонить, а в плане мгновенных сообщений устраивает и ICQ. Более подробное сравнение возможностей всех рассмотренных сегодня клиентов можно найти в Таблице 1.

Краткий итог Основные плюсы sipnet.ru: Бесплатные внутрисетевые звонки и голосовая почта. Дешевые междугородные и международные звонки. Возможность звонков абонентам сети sipnet через выделенные городские номера. Возможность пополнения счета через российские системы интернетрасчетов. Дополнительные возможности (настройки маршрутизации, заказ звонков). Возможности группового использования. Основные минусы sipnet.ru Нет удобного и интуитивно понятного интерфейса пользователя. Нет четких правил относительно используемых кодеков. Сложности в работе dial-up-клиентов.

Литература и ссылки: 1. http://investor.ebay.com/event.cfm. 2. Salman A Baset, Henning Schulzrinne, An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol, September 2005. 3. http://www.connect.ru/article.asp?id=4997. 4. http://www.imfederation.com. 5. http://www.voipuser.org/forum_topic_ 2567.html. 6. http://www.google.com/talk/otherclients. html. 7. http://www.imfederation.com. 8. http://www.google.com/talk/developer. html#protocols. 9. Rosenberg J, STUN – Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs), RFC3489, march 2003. 10. http://www.globalipsound.com. 11. Платов М. Что важно знать об IP-телефонии. – Журнал «Системный администратор», №5, май 2005 г. – 20-25 c. 12. Global IP Sound GIPS Codecs – http://www. globalipsound.com/datasheets/Codecs.pdf.

15


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

FreeBSD tips: какими возможностями обладает ftpd

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

П

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

Начнем с теории

В активном режиме процесс установления соединения между сервером и клиентом выглядит следующим образом: Клиент с непривилегированного порта (с номером больше 1024) отправляет запрос на порт 21 сервера (порт управления). После процедуры авторизации (команды USER и PASS) клиент начинает прослушивать порт N и отправляет на сервер команду PORT, сообщающую ему, какой именно порт открыт. Сервер, получив команду PORT, устанавливает соединение с указанным портом N со своего порта 20. Это соединение используется для передачи данных.

рограмма ftpd представляет собой достаточно простой ftp-сервер. В отличие от таких инструментов, как ProFTPd, PureFTPd и других, ftpd не имеет развитых средств конфигурирования, работы с правами доступа и т. д. Однако если вы не собираетесь строить публичный ftp-сервер, то его возможностей вам вполне хватит для организации «бытовых» функций, таких как обмен файлами между сервером и вашей рабочей машиной, например, для размещения HTML-страниц на веб-сервере или настройки простейшего резервирования.

Для начала давайте коротко ознакомимся с самим протоколом FTP. Он описывается довольно объемным документом RFC 959 и определен только для транспортного протокола TCP; UDP-реализации, в отличие от TFTP, нет. Характерной отличительной особенностью FTP от других протоколов является то, что он для своей работы задействует два порта – порт данных и порт управления. Порт управления используется для установления соединения между клиентом и сервером, для управления режимами работы и т. д. В то время как порт данных служит для передачи запрашиваемой информации.

16

Активный режим работы FTP

Посмотрим, как это происходит на практике. Для эмуляции работы управляющего соединения вполне подойдет стандартная утилита telnet. Чтобы посмотреть, как работает порт данных, воспользуемся небольшой программкой на Python:


администрирование #!/usr/local/bin/python # lystener – скрипт для прослушивания указанного порта import sys, socket host = str(sys.argv[1]) port = int(sys.argv[2]) s = socket.socket() s.bind((host, port)) s.listen(1) m = s.accept() print 'Connected on', m[1] while(1): rsv = str(m[0].recv(256)) print rsv if rsv == '': print 'No data more. Connection is closed.' break; m[0].close() s.close()

Теперь по команде LIST, запрашивающей список файлов в текущем каталоге, сервер устанавливает соединение с указанным портом (со стороны сервера используется порт 20) и передает запрошенные данные, которые и фиксирует наш сценарий. После выполнения команды соединение по порту данных разрывается, но управляющее соединение сохраняется, пока не будет подана команда QUIT. Как видите, активный режим удобен для администратора сервера, поскольку при этом задействуются только порты 20 и 21 (причем инициализация соединения – только на 21 порту), а остальные можно смело закрыть брандмауэром. С другой стороны, для клиента этот режим крайне неприятен, так как вынуждает держать открытыми непривилегированные порты. Поскольку общепринятой практикой является запрет любых входящих соединений на клиентские машины (а в случае работы через NAT вообще требуется выполнять «проброс» внешних соединений до клиента либо организовывать работу в режиме прокси-сервера), то в этом плане более удобным является пассивный режим.

Этот скрипт будет прослушивать соединение на указанном в параметрах командной строки порту и выводить на экран всю полученную через созданный сокет информацию. Пассивный режим работы FTP Откроем две терминальные сессии, которые услов- В этом случае все соединения инициируются клиентом, но назовем cmd (порт управления, обмен данными пока- что позволяет обойти ограничения, налагаемые обычно зан зеленым шрифтом) и data (порт данных, соответству- брандмауэром и серверами NAT. Процесс организации соющие строки – серые). Ввод пользователя выделен крас- единения теперь выглядит следующим образом: ным шрифтом. На приведенном ниже листинге строки обоКлиент с непривилегированного порта (с номером больих терминалов показаны вперемежку, отображая хронолоше 1024) отправляет запрос на порт 21 сервера (порт упгию их работы: равления). После процедуры авторизации (команды USER и PASS) cmd: serg$ telnet localhost 21 клиент отправляет на сервер команду PASV, информиcmd: Trying 127.0.0.1... рующую о том, что он намерен работать в пассивном 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 Клиент со своего порта N инициирует соединение на укаcmd: 230 User username logged in, access restrictions apply. занный сервером порт, который и используется для обdata: serg$ ./lystener localhost 25623 cmd: PORT 127,0,0,1,100,23 мена данными. cmd: cmd: cmd: data: data: data: data: data: data: data: data: data: cmd: cmd: cmd: cmd:

200 PORT command successful. LIST 150 Opening ASCII mode data connection for '/bin/ls'. Connected on ('127.0.0.1', 20) total 8 drwxr-xr-x 2 0 0 512 Jun 4 2001 bin drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdata drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankit drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updata

No data more. Connection is closed. 226 Transfer complete. QUIT 221 Goodbye. Connection closed by foreign host.

Итак, сначала мы устанавливаем соединение с портом 21 сервера, проходим процедуру аутентификации. Затем запускаем во втором терминале наш скрипт lystener на порту 25623 хоста localhost. Теперь даем серверу команду PORT, сообщая, на каком именно порту мы ждем соединения. Обратите внимание на синтаксис команды: в качестве аргументов указываются шесть октетов (первые четыре соответствуют IP-адресу хоста, последующие два – старший и младший байты номера порта). В нашем случае порт данных – 100*256 + 23 = 25623.

№11, ноябрь 2005

Чтобы смоделировать работу FTP-клиента в пассивном режиме достаточно двух telnet-сессий: cmd: cmd: cmd: cmd: cmd: cmd: cmd: cmd: cmd: cmd: cmd: data: data: data: data: cmd: cmd: data: data: data: data: data: data: cmd: cmd:

serg$ telnet localhost 21 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 myserver.ru FTP server (Version 6.00LS) ready. USER username 331 Password required for username. PASS userpasswd 230 User username logged in, access restrictions apply. PASV 227 Entering Passive Mode (127,0,0,1,245,5) serg$ telnet localhost 62725 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. LIST 150 Opening ASCII mode data connection for '/bin/ls'. total 8 drwxr-xr-x 2 0 0 512 Jun 4 2001 bin drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdata drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankit drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updata Connection closed by foreign host. 226 Transfer complete. QUIT

17


администрирование cmd: 221 Goodbye. cmd: Connection closed by foreign host.

На этот раз оба соединения устанавливаются со стороны клиента. Порт, на котором следует открывать соединение для передачи данных, сервер указывает в ответ на команду PASV (в данном случае 245*256 + 5 = 62725). Однако на сервере при этом должны быть разрешены соединения на непривилегированные порты, что не позволяет достаточно жестко ограничивать доступ. Как вы, должно быть, заметили, в пассивном режиме 20 порт не используется.

Расширенные режимы В дополнение к описанным выше, документ RFC 2428 определяет так называемые расширенные режимы, которые позволяют работать в сетях IPv6. В расширенных режимах вместо команд PORT и PASV используются EPRT и EPSV соответственно. Синтаксис EPRT следующий:

Если по соображениям безопасности вы не используете inetd, а также если FTP-доступ к вашему серверу выполняется достаточно часто, то выгоднее запустить ftpd в режиме демона (с ключом -D). В этом случае сервер будет постоянно находиться в памяти. В стартовых сценариях FreeBSD не предусмотрено запуска ftpd в режиме демона, но нужный скрипт несложно написать самостоятельно. Поместите в каталог /etc/rc.d такой файл ftpd: #!/bin/sh # # PROVIDE: ftpd # REQUIRE: DAEMON LOGIN # KEYWORD: shutdown . /etc/rc.subr name="ftpd" rcvar=`set _ rcvar` command="/usr/libexec/${name}" 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 Сервер ftpd, входящий в состав FreeBSD, по умолчанию может обслуживать как активные, так и пассивные соединения (в том числе и расширенные), режим работы для конкретного сеанса определяется клиентом. Работать ftpd может как в режиме демона (постоянно присутствует в памяти и самостоятельно обслуживает соединения на 21 порт), так и в сотрудничестве с супердемоном inetd, который осуществляет вызов сервера при получении входящего соединения на порту 21. Если доступ на ваш сервер по FTP требуется довольно редко, то более удобным выглядит использование inetd для запуска сервера (если, конечно, этот демон у вас используется). В этом случае не придется держать в памяти сервер ftpd постоянно – он будет загружаться лишь для обслуживания конкретного соединения. Типичная строка запуска в /etc/inetd.conf выглядит следующим образом: #ftp stream tcp

nowait root /usr/libexec/ftpd ftpd -l

Снимите с нее комментарий, пошлите сигнал HUP процессу inetd, и вы получите работающий ftp-сервер, настроенный по умолчанию. О том, что это за настройки и как их можно изменить, мы поговорим в следующем разделе.

18

# /etc/rc.d/ftpd start # /etc/rc.d/ftpd stop

Теперь ftpd будет вести себя так же, как и любой другой сервис. Поговорим о его работе и настройке.

Как работает ftpd Сервер ftpd поддерживает авторизованный и анонимный доступ. В любом случае в начале каждого сеанса проводится аутентификация пользователя, после чего пользователь авторизуется для работы в соответствие со следующими условиями: Если пользователь имеет пустой пароль, либо его оболочка по умолчанию отсутствует в /etc/shells, либо его имя (или наименование группы, членом которой он является) указано в файле /etc/ftpusers, то соединение разрывается – такому пользователю запрещен доступ по ftp. Когда имя пользователя или его группа указаны в файле /etc/ftpchroot, то разрешается ограниченный доступ – пользователь может работать только в пределах своего домашнего каталога. В случае, когда в качестве имени указано ftp или anonymous, соединение рассматривается как анонимное (подробнее об анонимном доступе рассказано в следующем подразделе).


администрирование Если же ни одно из приведенных выше условий не выполнено, то в случае указания правильного пароля пользователь получает ftp-доступ ко всей файловой системе согласно имеющимся у него правам.

Анонимный доступ Чтобы разрешить анонимный доступ по FTP, вам потребуется вручную создать системного пользователя с именем ftp. У этого пользователя должна быть «легальная» оболочка (одна из указанных в /etc/shells), и он должен иметь домашний каталог, в котором и будут размещаться файлы, доступные анонимному пользователю. Также у него не может быть пустого пароля. По умолчанию, анонимный пользователь не может модифицировать или удалять существующие файлы. Разрешено только создавать новые при условии, что пользователь ftp будет иметь достаточно прав на запись. Дополнительно регулировать доступ к каталогам и файлам (например, полностью запретить запись в определенную папку) можно силами операционной системы, выставляя соответствующие права пользователю ftp. В частности, рекомендуется запрещать для пользователя ftp запись в его домашний каталог, чтобы исключить возможность переполнения раздела, на котором он размещен.

Ограниченный доступ В том случае, если имя пользователя присутствует в файле /etc/ftpchroot, то соответствующий процесс запускается в chroot-окружении, ограничивая пользователю доступ только его домашним каталогом (или тем, который указан во втором поле файла ftpchroot). При необходимости организовать такую работу для большого числа пользователей (например, дать всем абонентам доступ для обновления своих домашних веб-страничек), в ftpchroot можно указать общую для них группу, предварив ее имя символом @. Во втором поле дополнительно может быть указан каталог, который следует использовать в качестве корневого для соответствующего пользователя или группы. Вот пример такого файла: vasya petya /var/db/petya @dialup

Теперь Вася и все пользователи группы dialup смогут работать только в пределах своих домашних каталогов, а для Пети в качестве рабочей будет определена указанная папка /var/db/petya. С помощью разделителя /./ можно указать каталог, отличающийся от корневого, который станет текущим:

командной строки. Если вы запускаете ftpd из inetd, добавьте нужные параметры в соответствующей строке файла inetd. conf (по умолчанию там записан только ключ -l). Если же предпочтете воспользоваться приведенным выше сценарием для запуска ftpd в режиме демона, то дополнительные ключи можно указать в файле rc.conf, в строке ftpd_flags. Некоторые ключи, которые могут быть полезны: -D: запускать ftpd в режиме демона. -a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес. -d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP). -h: не выводить информацию о системе в сообщениях сервера. -l: протоколировать все сессии (обычно используется /var/log/xferlog). -A: разрешить только анонимный доступ. -M: запретить анонимным пользователям создавать папки. -m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав). -o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено. -r: перевести сервер в режим «только для чтения». Любая модификация размещенных данных будет запрещена. Дополнительную информацию всегда можно найти на странице руководства man ftpd(8).

Заключение Как видите, ftpd вполне пригоден для решения большинства типовых задач по обмену файлами. Если ваши потребности не выходят за пределы его возможностей, то вряд ли имеет смысл обременять систему установкой дополнительных пакетов. Однако если вам требуется создать «промышленный» FTP-сервер, позволяющий более гибко управлять правами доступа, пользователями, параметрами передачи файлов, то воспользуйтесь более серьезным решением.

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], не затронуты вопросы автоматической установки драйверов. В большинстве случаев это не мешает работе, так как используемая операционная система славится тем, что имеет в своем дистрибутиве очень широкий набор драйверов. И традиционно каждый изготовитель нового устройства стремится, чтобы его драйвер был представлен в дистрибутиве MS Windows. А если попадается «несчастливое» устройство, которое там отсутствует, то драйвер можно поставить и после, хотя это и переведет установку из статуса автоматической в рукотворную. Но, увы, дело оборачивается полным крахом, если в качестве «незнакомого» для этой чудной ОС выступает устройство, на которое далее предполагается установка, то есть дисковый накопитель или его контроллер. Далее всё будем рассматривать на примере созданного ранее, как указано в перечисленных выше статьях, дистрибутивного диска MS Windows XP Professional для автоматической установки, запускаемой в виртуальной машине VMWare. Но все сделанные выводы и рассмотренные приемы справедливы и для других архитектур. Например, для широко распространенных компьютеров на основе схемных решений для процессоров AMD. Итак, в дистрибутиве MS Windows XP отсутствует драйвер контроллера BusLogic SCSI, и если в настройках VMWare выбрать в качестве дискового устройства SCSIдиск, то попытка поставить ОС в среде такой виртуальной машины завершится неудачей (рис. 1), так как именно контроллер BusLogic эмулируется в VMWare. Иначе говоря, система не нашла, куда ставиться. Но есть штатный ход – в процессе установки подгрузить драйвера. Для этого надо «поймать» на экране установки предложение нажать <F6> как указание о применении незнакомого

20

системе устройства и нажать нужную клавишу. Тогда система остановит процесс установки и «попросит» установить дискету с драйверами (рис. 2). Увы, такой дискеты нет в дистрибутиве эмулятора, и использование SCSI-диска не рекомендовано для виртуальных машин MS Windows XP. Хотя, сам драйвер присутствует в составе VMWare Tools. Тогда подготовим дискету вручную. Сначала вставим чистый диск и сформатируем его: # 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 mkdosfs 2.10 (22 Sep 2003)

# mount /dev/fd0

Теперь примонтируем диск с VMWare Tools и скопируем в корень чистого диска файлы с драйверами: # mount -t iso9660 -o ro,loop ↵ /usr/lib/vmware/isoimages/windows.iso /mnt # cp -v /mnt/program\ files/VMware/VMware\ ↵ Tools/Drivers/scsi/win2k/* /media/floppy `/mnt/program `/mnt/program `/mnt/program `/mnt/program `/mnt/program

files/VMware/VMware files/VMware/VMware files/VMware/VMware 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' Tools/Drivers/scsi/win2k/vmscsi.cat' -> `/media/floppy/vmscsi.cat' Tools/Drivers/scsi/win2k/vmscsi.inf' -> `/media/floppy/vmscsi.inf' Tools/Drivers/scsi/win2k/vmscsi.sys' -> `/media/floppy/vmscsi.sys'

# umount /dev/fd0

Полученный диск можно использовать при установке MS Windows. Вставим его в привод в ответ на приглаше-


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

Рисунок 1. Не найдено ни одного дискового устройства

Добавляем драйверы устройств загрузки Итак, проблема заключена в том, что установщик ОС должен использовать драйвера применяемых дисковых устройств в процессе установки и далее. В данном случае все нужные файлы содержатся в /mnt/program\ files/VMware/ VMware\ Tools/Drivers/scsi/win2k. Обычно драйвера поставляются в виде исполняемого бинарного файла с суффиксом sys, далее обязательно есть файл с описанием и суффиксом inf, и возможно еще некоторые файлы. Но все они должны быть упомянуты в строках inf-файла обычно в секции [SourceDiskFiles]. Иногда все это еще и сопровождается файлом с цифровой подписью – файл с суффиксом cat. Точно следуя первой части рецепта с [8], внесем необходимые изменения в файл TXTSETUP.SIF. Нахождение этого файла и все сопутствующие проблемы сборки готового диска с ним уже обсуждались в [1,2,3,4] и здесь мы не будем еще раз это рассматривать. Вот модификация в формате, пригодном для автоматического патчирования:

Рисунок 2. Запрос дискеты с драйверами

Рисунок 3. Выбор драйвера с дискеты

# diff -Naur TXTSETUP.SIF.orig TXTSETUP.SIF

+

--- TXTSETUP.SIF.orig 2005-10-27 10:15:56.000000000 +0400 +++ TXTSETUP.SIF 2005-10-29 21:32:40.000000000 +0400 @@ -206,6 +206,9 @@ isapnp.sys = 1,,,,,,3 _ ,4,1,,,1,4

*PNP0300 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318} *PNP0301 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318} *PNP0302 = "i8042prt",{4D36E96B-E325-11CE-BFC1-08002BE10318} @@ -19281,6 +19286,7 @@ dac2w2k = dac2w2k.sys,4

+vmscsi.sys = 1,,,,,, _ x,4,1,,,1,4 + + ksecdd.sys = 100,,,,,, _ 5,4,0,0,,1,4 mountmgr.sys = 100,,,,,,3 _ ,4,0,0,,1,4 mrxdav.sys = 100,,,,,,,4,0,0 @@ -18836,6 +18839,8 @@ *PNP0E02 = "pcmcia" *PNP0700 = "fdc" +PCI\VEN _ 104B&DEV _ 1040 = "vmscsi"

№11, ноябрь 2005

+vmscsi = vmscsi.sys,4 [BootBusExtenders.Load] @@ -21639,6 +21645,7 @@ perc2 = "Dell PERC 2|3 RAID-╙╝╜БЮ╝╚╚╔Ю" perc2gat = "Dell PERC 2/3 RAID-╙╝╜БЮ╝╚╚╔Ю (Gatling)" +vmscsi

= "VMware SCSI Controller"

[BootBusExtenders] pci = "└Ю═╘╒╔Ю Х╗╜К PCI",files.pci,pci

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], например так: дите, формат строки немного отличается от предложенPCI\VEN _ 1106&DEV _ 3249 = "viamraid" ного в [8]. Полностью все опции управления описаны в [9]. 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, можно найти в примонтированном образе 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

Первая строка укажет путь поиска файлов, а вторая позволит проигнорировать несоответствие подписей драйверов доверенным сертификатам, размещенным в дистрибутиве. В целевой директории должны собраться следующие файлы: # ls -l /uawsp2/\$OEM\$/\$1/Drivers/Very _ looooong _ filename total 204 drwxr-xr-x drwxr-xr-x -r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--

2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

root root root root root root root root root root root root root root root root root

root root root root root root root root root root root root root root root root root

4096 4096 1929 5452 7890 1312 3904 7900 3561 79584 2400 9044 2396 14912 7860 3567 22528

Oct Oct Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar Mar

29 29 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23

17:48 17:48 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005

. .. vmmemctl.inf vmmemctl.sys vmmouse.cat vmmouse.inf vmmouse.sys vmware-nic.cat vmware-nic.inf vmx_fb.dll vmx_mode.dll vmx_svga.cat vmx_svga.inf vmx_svga.sys vmxnet.cat vmxnet.inf vmxnet.sys

Рисунок 7. Vmscsi.sys установлен в систему

Рисунок 8. Устанавливаем дополнительные драйверы

ции [Display] файла WINNT.SIF. Все перечисленные драйверы вместе со всеми необходимыми файлами были скопированы из директории C:\Drivers\Very_looooong_filename внутрь установочной директории MS Windows XP, что видно на рис. 8 в окошке поиска. Здесь можно сделать вывод, что директорию с драйверами можно в конце установки удалять, так же как и директорию с дистрибутивами устанавливаемых программ в секции [GuiRunOnce]: # grep -n rmdir WINNT.SIF 539:"%windir%\system32\cmd.exe /c rmdir ↵ %systemdrive%\InstData /s /q" 540:"%windir%\system32\cmd.exe /c rmdir ↵ %systemdrive%\Drivers /s /q"

А вот парочка драйверов vmmemctl.sys и vmmouse.sys так и не нашла себе применения. И поэтому осталась только в C:\Drivers\Very_looooong_filename. Еще одно интересное наблюдение было сделано в [10]. Установщик не ищет драйвера и их INF-файлы во вложенных директориях от указанной в OemPnPDriversPath, но если записать несколько путей через точку с запятой, то они После установки наблюдаем следующую картину будут обрабатываться в порядке сортировки имен. То есть если некоторые драйвера, например чипсета, требуется (рис. 8). Автоматически были установлены драйверы SCSI, SVGA установить первыми, то директорию с ними надо назвать (и теперь экран настроен в разрешение 800х600), специаль- именем с использованием символов с меньшими номераный драйвер сетевой карты, то есть так как задано в сек- ми в кодировке.

№11, ноябрь 2005

23


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

Рисунок 9. Установка драйвера vmmouse

total 180 drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--

4 6 5 5 1 1 3 1 1 1 1

root root root root root root root root root root root

root 4096 Mar 22 2005 $$ root 4096 Oct 31 00:11 $1 root 4096 Oct 30 22:21 . root 4096 Apr 21 2005 .. root 118272 Dec 31 2002 AutoIt3.exe root 27 Mar 28 2005 Cmdlines.txt root 4096 Oct 30 22:21 Drivers root 264 Oct 5 22:51 Drivers.au3 root 20992 Dec 31 2002 SetupCopyOEMInf.exe root 3584 Dec 31 2002 WatchDriverSigningPolicy.exe root 113 Mar 28 2005 mkusers.cmd

В формате WINNT.SIF используется 8-битная кодировка. Для России это cp866. Хотя достаточно добавить цифровой префикс к имени директории с драйверами, поскольку порядок цифр в всех кодировках совпадает. По мнению Как уже было сказано, в 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") ProcessClose("WatchDriverSigningPolicy.exe") sys и vmmouse.sys таким путем не решается. Так как эти 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


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

Практические выводы Как уже было сказано выше, с проблемой специальных драйверов приходится сталкиваться лишь только оборудование выйдет за стандартную Intel-архитектуру простеньких компьютеров общего применения. Можно подготовиться заранее, а можно принять меры сразу же после получения нового оборудования. Первым делом надо взять диск с драйверами, поставляемый с оборудованием, и найти там драйверы дисковых устройств и контроллеров. Их следует устанавливать методом, описанным в разделе «Добавляем драйверы устройств загрузки». Все файлы *.sys копируются в $OEM$, и, пользуясь информацией из соответствующих *.inf, вносятся модификации в TXTSETUP.SIF. Здесь еще одна подсказка. Все, кто внимательно читал, должны были уже догадаться, что установщик ОС считывает файл TXTSETUP.SIF целиком и анализирует его. Другими словами, нет необходимости выискивать в этом полумегабайтном файле требуемые секции и добавлять в них строчки, как предлагается в [6, 7]. Достаточно просто дописать к файлу новые секции с нужными ключами. Система сама во всем разберется и соединит все одноименные секции в одну. Драйверы остальных периферийных устройств, видеоадаптеры, сетевые карты, модемы и прочее копируются вместе со всеми сопутствующими файлами внутрь директории с любым мнемоническим именем, располагаемой в $OEM$\Drivers так, как описано в разделе «Добавление драйверов устройств через DetachedProgram». И соответственно модифицируется WINNT.SIF для запуска установочного скрипта Drivers.au3, который также вместе со всеми прилагаемыми программами помещается в $OEM$. Узнать заранее, какие драйверы будут проигнорированы в процессе автоматической установки, невозможно, и поэтому на начальном этапе подготовку установочного диска можно было бы считать завершенной. Если после инсталляции ОС на жесткий диск компьютера выяснится, что некоторые особенно нужные драйверы не были установлены, то их следует далее устанавливать так, как описано в разделе «Добавление драйверов устройств через OemPnPDriversPatch», но при этом запретить удаление директории с драйверами из WINNT.SIF в секции [GuiRunOnce]. Тогда нужные драйверы зарегистрируются и далее можно будет их доставить прямо с жесткого диска компьютера в сеансе удаленного подключения к рабочему столу. И здесь снова подсказка. Поскольку есть категория устройств, которые подключаются динамически, – модемы, сканеры, принтеры, и драйвера таких устройств могут быть затребованы работающей системой в процессе эксплуатации, то их тоже следует разместить в неудаляемой директории $OEM$\$1\Drivers. Будучи зарегистрированными, эти драйверы установятся при первом использовании подключаемого устройства. Таким образом, в каждой локальной сети должен находиться установочный диск, модифицированный согласно

№11, ноябрь 2005

составу используемого оборудования. Ну а поскольку все работы по созданию такого диска выполнялись в среде GNU Linux, то после приобретения нового и неизвестного компьютера нужно лишь попросить установить диск с драйверами от него в локальный привод компьютера с GNU Linux, затем в сеансе удаленного подключения через SSH добавить новые драйвера в рабочую директорию для создания загрузочного CD и записать новую версию диска автоматической установки для этой локальной сети с учетом нового компьютера. Вот и все! Далее все операции автоматизированы, как описано в [3, 4]. И ваше удаленное администрирование станет безграничным настолько, что его можно будет осуществлять даже с пляжа Мондраго на острове Майорка через GPRS-роуминг с мобильного телефона с Nokia 6670. Правда, придется купить к телефону беспроводную клавиатуру, но... это уже детали!

Литература и ссылки: 1. Барабанов А. Автоматизация MS Windows, или Autoit как мечта эникейщика. Часть 1. – Журнал «Системный администратор», №4, апрель 2005 г. – 11-15 с. 2. Барабанов А. «Автоматизация MS Windows, или Autoit как мечта эникейщика. Часть 2. – Журнал «Системный администратор», №5, май 2005 г. – 54-58 с. 3. Барабанов А. «Автоматизация MS Windows, или Autoit как мечта эникейщика. Часть 3. – Журнал «Системный администратор», №6, июнь 2005 г. – 25-31 с. 4. Барабанов А. «Автоматизация MS Windows, или Autoit как мечта эникейщика. Часть 4. – Журнал «Системный администратор», №7, июль 2005 г. – 46-47 с. 5. Оригинальная информация по созданию дисков автоматической установки MS Windows – http://www.microsoft.com/ resources/documentation/WindowsServ/2003/all/techref/en-us/ Default.asp?url=/Resources/Documentation/windowsserv/2003/ all/techref/en-us/W2K3TR_unatt_how.asp?frame=true&hidetoc= 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. 10. Перевод статьи об установке через WINNT.SIF – http://oszone. net/display.php?id=2781. 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/ 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.

25


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

GRUB на CD, или Ещё один способ восстановить MBR

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

М

ы обсудим пути решения проблем, возникающих при загрузке системы. Поэтому сперва вкратце рассмотрим этот процесс.

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

26

Первое, что загружает BIOS с жёсткого диска, – это MBR, самый первый сектор диска. В MBR содержатся таблица разделов диска и небольшая программа, которой и передаёт управление BIOS. Этот загрузчик анализирует таблицу разделов и считывает загрузочный раздел одной из партиций. Обычно выбирается активная партиция, хотя есть

и исключения (например, Boot Easy – стандартный загрузчик для FreeBSD). Загрузочная запись партиции обычно составляет один сектор – 512 байт (однако и тут есть исключения, например, QNX). Нередко этот загрузчик уже «умеет» работать с файловой системой, он в состоянии подгрузить собственные модули и способен загрузить ядро или другую программу,


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

Возможные сбои при загрузке

Систематизировать сбои проще всего по фазам загрузки, на которых они случаются.

Первый шаг загрузки С утратой главного загрузчика (MBR) сталкиваются все, кто устанавливает Windows. Эта ОС не предоставляет никакого выбора и всегда устанавливает

№11, ноябрь 2005

Второй шаг загрузки Следующий этап более «интеллектуален», и здесь могут случиться самые разные поломки. Этот загрузчик уже считывает данные, расположенные в файловой системе (он может «знать» физическое расположение данных или с файлами), поэтому он может потерять работоспособность из-за того, что вы поме-

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

Другие отказы Некоторые системы (например, FreeBSD) используют дополнительные фазы загрузки. На этих фазах тоже могут возникнуть проблемы. Но из своего опыта могу сказать, что чаще всего страдакоторых ют ранние фазы, которые делят между собой разные ОС. Экзотические промежуточные загрузчики как раз мало кому известны, и их практически никто «не трогает». Когда отработали все загрузочные секторы, могут возникнуть проблемы с ядром. В этой статье мы не будем детально рассматривать эти вопросы, сосредоточившись только на процессе загрузки. А проблемы ядра отнесём к разряду проблем ОС.

Live CD: он ли нам нужен? Итак, ваша ОС цела, но загрузчик испорчен, и загрузиться вы не можете. Вам требуется восстановить загрузчик. Решение «всё переустановить» не подходит, ведь при этом вы потеряете данные. Первое, что приходит на ум, – воспользоваться загрузочным диском. Если у вас имеется «спасательный» CD от вашей ОС, то скорее всего он вам поможет. После загрузки можно смонтировать партицию с «потерянной» ОС и выполнить команду chroot. После этого вы окажетесь в привычной среде. К сожалению, этот приём может не сработать. Чаще всего, магического диска просто не оказывается под рукой в нужный момент. Для комфортной работы вам скорее всего придётся скорректировать переменные окружения PATH, PAGER, EDITOR, LANG и другие. Могут понадобиться и другие (порой неожиданные и не очевидные)

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 дётся внимательно изучить документацию. Напомню такrootnoverify (hd0,0) же, что при использовании Live-CD у вас не будет выбора, 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 нумерует устройства от нуля и партиции тоже от нуля(!). Команда kernel загружает и выполняет загрузСоздаём GRUBable CD за пять минут Чтобы установить GRUB на CD, нужно совсем немного. Пер- чик ядра FreeBSD. Аналогично построена и секция «Linux». Здесь тоже вым делом раздобудьте бинарный дистрибутив GRUB. Скорее всего, он уже есть или на вашем диске, или среди дис- имеется четыре подобные записи. Следует сделать тольтрибутивов. (Как скомпилировать GRUB самостоятельно, ко одну оговорку относительно директивы kernel. В Linux мы ещё обсудим.) Найдите в нём файл-образ stage2_eltorito. нет чёткого места в файловой системе для ядра. В старых дистрибутивах ядро находилось в корне файловой систеВсё, больше от GRUB вам ничего не понадобится. мы /vmlinuz. Именно на это ориентировались создатели документации на GRUB. Но сейчас, как мне кажется, ядро чаСоздаём конфигурационный файл Теперь создадим файл-меню. Предлагаю рассмотреть сле- ще хранится в директории /boot. Имя vmlinuz тоже уходит в прошлое. Сейчас можно встретить имя bzImage и друдующий вариант:

28


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

Если вы планируете загружать другие ОС, то рекомендую обратиться к документации на GRUB. Практически любая ОС имеет собственную специфику. Linux допускает исполь-

№11, ноябрь 2005

Обратите внимание, файл stage2_ eltorito должен быть доступен для записи, а утилита mkisofs этой доступностью непременно воспользуется и слегка его изменит(!). Позаботьтесь о резервной копии этого файла. Давайте рассмотрим опции по порядку.

Опция -R подключает расширение Rock Ridge. Опция -jcharset эквивалентна паре опций -J и -input-charset. Первая – включает использование Jolietзаписей, хранящих имена файлов и директорий в Unicode, а вторая – задаёт исходную кодировку для корректного преобразования в Unicode. Эти опции всем хорошо знакомы. Опция -b указывает имя файла-образа загрузчика (все пути указываются относительно корня файловой системы компакт-диска). Опция -c задаёт имя служебного файла, который будет создан самой mkisofs. Он в какой-то степени выполняет роль первого загрузчика. Эту опцию можно и не использовать, тогда файл будет создан в корне файловой системы. Опция -no-emul-boot говорит о том, что при загрузке не надо эмулировать дисковод. Существуют процедуры загрузки, при которых CD-ROM рассматривается как дисковод «A:», что позволяет старым загрузчикам чувствовать себя как дома. У нас другой случай. Опция -boot-load-size указывает длину загрузчика, вернее, части загрузчика, которую следует считать в память. Опция -boot-info-table говорит о том, что в образе загрузчика (у нас это файл stage2_eltorito) следует разместить служебную таблицу. Поэтому файл и изменяется при создании образа. Надо сказать, что при таком наборе опций эта опция совершенно не обязательна – таблица всё равно была бы создана. Последняя опция -o указывает имя iso-файла. Итак, образ boot.iso готов.

Записываем CD и загружаемся с него Записать полученный образ на CD можно любым, привычным для вас, способом. Под Linux: cdrecord -dev=0,1,0 -data boot.iso

Или под FreeBSD:

29


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

Рисунок 2. Меню GRUB burncd -v -f /dev/acd0 data boot.iso fixate

Можно воспользоваться и любыми Windows-утилитами. Теперь при загрузке с этого диска вы увидите меню (см. рис. 2). Вы можете выбрать нужный пункт и загрузиться или воспользоваться дополнительными возможностями, доступными, как вы видите, по клавишам «e» (редактирование меню) и «c» (командная строка).

Дополнительные возможности

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

строки в рамках одной статьи просто невозможно. Да это и не нужно. Список команд вы можете получить, набрав help (см. рис. 3). Подробную справку по любой команде можно получить, набрав: «help команда». Большинство команд покажутся знакомыми и понятными пользователям UNIX. За подробной информацией обращайтесь к документации.

Что можно усовершенствовать

Наш первый 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 очень неприхотлив и собирается практически любыми средствами. Так, например, в INSTALL написано, клавишу «Tab», то GRUB выдаст вам подсказку: что для сборки нужен 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) как ни в чём ни бывало смонтирует эту партицию как ляет загружать и выполнять код. Не это ли основные признаки операционной системы? Все эти качества GNU GRUB коревую файловую систему, и запустит процесс init. С такого диска можно загрузить 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 2. ACPI table 04F6Fh(19.86K)01A60h(6.59K)ACPITBL.BIN нечного пользователя[8]. Но перед тем как начнем сборку 3. EPA LOGO 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

Добавляем LAN ROM в системный BIOS

7. OEM1 CODE 8. OEM0 CODE

02410h(9.02K)00DF3h(3.49K)BSMICODE.ROM 01F26h(7.79K)01787h(5.88K)SBF.BIN

Total compress code space = 34000h(208.00K)

В случае, если вы счастливый обладатель старых ПЭВМ Total compressed code size = 2F6A4h(189.66K) Remain compress code space = 0495Ch(18.34K) и/или сетевых карт без дополнительного слота с микросхе** Micro Code Information ** мой, содержащей PXE-код, то единственный способ для до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. PCI ROM - - - [A] : NVRAID.ROM [PCI-A] ROM is release

Удалили ненужный компонент. CBROM.EXE BIOS.BIN /PCI netboot.rom CBROMV2.15 (C)Award Software 2001 All Rights Reserved. Adding netboot.rom .... 68.5%

Добавили PXE-код от сетевой карты. И еще раз посмотрим на структуру BIOS. CBROM.EXE BIOS.BIN /D 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 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 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. 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 ** Update ID CPUID | Update ID CPUID | Update ID CPUID | Update ID CPUID ------------------+--------------------+--------------------+-------------------

Теперь остается записать BIOS во flash-память. FLASH879 BIOS.ROM /A /B /E /R

Опции, которые используются в примере, обозначают: /R – произвести перезагрузку, после операции записи во flash-память. /E – очистить CMOS-память во избежание возможных недоразумений после перезаписи. /B – также произвести перезапись секции BootBlock во flash-памяти (опционально). /A – не запускать GUI-режим, а работать в командной строке. Сохранять/изменять системный BIOS можно также утилитами: awdflash [12], uniflash [13], phlash [14] или другими. Добавлять код от сетевой платы в системный BIOS нужно следующими утилитами: cbrom – если используется AwardBIOS. amimm – если используется AMIBIOS. prepare – если используется PhoenixBIOS. Экзотику, такую как SystemSoftBIOS, DELLXBIOS, ACERBIOS, HPBIOS, я не рассматриваю, так как по сути такие ПЭВМ встречаются достаточно редко, и утилит для изменения этих BIOS практически не существует для конечных пользователей. Изменение flash-памяти достаточно непростая процедура, поэтому:

34

Предупреждение о потенциальной опасности рекомендуемых действий. Внимание! Описанные в журнале действия по изменению содержимого flash-памяти материнской платы потенциально опасны. Ответственность за корректное и/или некорректное модифицирование BIOS лежит полностью на плечах владельца ПЭВМ. Использование BIOS Savior [5] и источника бесперебойного питания позволит избежать многих подводных камней и практически полностью избежать негативных последствий от пропадания питания на вашем рабочем месте по время перезаписи микросхемы flash-памяти. После добавления сетевого кода в системный BIOS следует записать последний в микросхему Flash-памяти. Следует делать это осторожно, т.к. испортив и/или записав некорректно код, вы на выходе получите неработающую материнскую плату. Лично для меня самым удобным вариантом является использование утилиты amiflash. С ее помощью можно автоматически определить используемый чипсет материнской платы, а соответственно не ломать голову, как называется микросхема flash-памяти, и проверить, насколько правильно была произведена запись в данную микросхему. В целом, интерфейс достаточно симпатичный, а самое главное – утилита небольшая (умещается на системную дискету), для своей работы требует DOS и стабильно работает. Если по каким-либо причинам она не удовлетворяет вашим требованиям, то попробуйте использовать uniflash. Она также работает под DOS, размером несколько меньше amiflash, но по личным ощущениям является несколько перегруженной. Записали обновленный BIOS в материнскую плату, перезагрузили ПЭВМ – работает. Если не работает – записываем во flash-память предварительно сохраненный, неизмененный файл BIOS на программаторе. Хотя при наличии BIOS Savior такие проблемы не должны вас особо расстраивать – просто переключите на резервную микросхему и попробуйте еще раз. В BIOS Setup выбираете приоритетность загрузки – ставите LAN ROM. Если нет пункта с упоминанием сетевой загрузки, то скорее всего конфигурация сетевого кода произойдет непосредственно после POST-процедур. Однако, если вы формируете терминальные клиенты на основе VIA EPIA-M, то PXE-код уже интегрирован в составе системного BIOS. Нужно всего лишь выставить в BIOS Setup приоритетность загрузки ОС – начинать с загрузки по LAN. Терминальные клиенты на VIA EPIA-M используются, например, в техническом университете Дании. Mike Eriksen использовал именно эти аппаратные решения, когда описал свой опыт [15]. Правда, он реализовывал загрузку клиентов с твердотельных накопителей compact-flash.

Загружаем PXE-код Будем считать, что сетевая плата на клиенте корректно работает, и PXE-код посылает DHCP-запросы в окружающий эфир. Следует оправдать ожидания сетевой платы и обработать DHCP-пакеты с помощью службы dhcpd (более подробно, см. /usr/doc/Linux-HOWTOs/DHCP,


администрирование /usr/doc/dnsmasq-2.8/FAQ). Для этого в загрузочный скрипт /etc/rc.d/rc.local добавляем строчку «/usr/sbin/dhcpd eth0», либо запускаем данный сервис в виде отдельной службы, например, через /etc/rc.d/rc.dhcpd. Или в случае, когда для старта службы dhcp используется скрипт /etc/init.d/rc.dhcpd, настроим запуск как «invoke.rc dhcpd start». Не забудем также раскомментировать (если она, конечно же, закомментирована) в /etc/inetd.conf строчку, упоминающую сервис tftp. В конечном виде строка выглядит следующим образом: tftp dgram udp wait root ↵ /usr/sbin/in.tftpd in.tftpd -s /tftpboot -vv

Для обладателей RedHat-систем, где используется xinetd.conf, добавление выглядит примерно так: service tftp { socket_type protocol wait user server server_args disable }

= = = = = = =

dgram udp yes root /usr/sbin/in.tftpd -l -s /tftpboot no

Именно по протоколу tftp будет происходить загрузка файлов тонкого клиента ThinStation. Чтобы суперсервер inetd перечитал свой конфигурационный файл, подадим следующую команду: # killall -HUP inetd

Отредактируем файл /etc/dhcpd.conf или создадим его заново, в случае, если он отсутствует. У меня он выглядит примерно так: ddns-update-style

none;

subnet 10.0.0.0 netmask 255.0.0.0 { option broadcast-address 10.0.255.255; max-lease-time 7200; default-lease-time 600; } host TS_EPIA_M_01 { hardware ethernet 00:40:63:d6:69:d7; fixed-address 10.0.0.50; filename "pxelinux.0"; }

Функционирование сервера dhcp возможно в двух режимах – либо с внесением изменений в DNS-сервер, либо без внесения таких изменений. Естественно, что подразумевается не прямое изменение DNS-записей, а путем отправки пакетов на DNS-сервер. В любом случае, динамическое изменение записей в DNS-сервере нам не требуется, поэтому выставляем глобальный параметр ddns-update-style как none. Чтобы dhcp-сервер смог корректно обслуживать сеть 10.0.0.0 с маской 255.0.0.0 добавляем конструкцию subnet {}. Время ожидания (в секундах) запросов от PXE-клиентов выставляется опциями max-lease-time, default-lease-time. В конструкции host {} объявляется об узле TS_EPIA_M_01, с MAC-адресом 00:40:63:d6:69:d7, которому будет назначен

№11, ноябрь 2005

IP-адрес 10.0.0.50. Для сетевой загрузки этого узла служит файл pxelinux.0, размещенный на tftp-сервере. После таких приготовлений необходимо подготовить файлы, которые будут загружаться по сети. Итак, переходим непосредственно к приготовлению тонкого клиента – ThinStation.

Генерируем загрузочный образ Я предлагаю остановить свой выбор на версии 2.1.3. Во-первых, эта версия является самой последней из стабильных. Во-вторых, используется хорошо зарекомендовавшее себя Linux-ядро линейки 2.4. В-третьих, и это, пожалуй, самая объективная причина – для ThinStation 2.1.3 скомпилировано самое большое количество приложений, среди которых Mozilla Firefox, Sylpheed, MPlayer. # wget Thinstation-2.1.3.tar.gz # tar xzvf Thinstation-2.1.3.tar.gz # cd Thinstation-2.1.3

Конфигурация для сборки тонкого клиента представлена файлом build.conf. В принципе, для любой x86-системы можно подготовить рабочий вариант. Количество поддерживаемых сетевых карт более 20, включены драйверы для более 15 звуковых карт. Видеоподсистема поддерживается для более 20 разновидностей видео-карт. Названия модулей говорят сами за себя: xorg6-i740, xorg6-i810, xorg6-savage, xorg6-via, xorg6-vesa. В любом случае, даже если специализированный драйвер не подошел, у вас остается возможность использовать VGA- или VESA-драйвер. Список доступных прикладных пакетов указан ниже: rdesktop – RDP-клиент для подключения к терминальным серверам на основе Microsoft Windows. rdesktop_svga – тот же самый клиент, используемый в случае, когда на терминальной машине экстремально мало ОЗУ. vncviewer – VNC-клиент. ica – Citrix-клиент. xnest – XDM-клиент. rxvt – облегченный xterm-клиент. ssh – клиент Secure Shell. tn5250 – терминальный эмулятор 5250. blackbox – оконный менеджер. xtdesk – приложение для обработки пиктограмм на рабочем столе. icewm – еще один легкий оконный менеджер. lp_server – сервис удаленной печати (с поддержкой JetDirect). tftpd – встроенный tftp-сервер. samba-server – smb-сервер. И завершается данный конфигурационный файл списком параметров, включая пароли для vncviewer, пароль для доступа к терминальной станции по сети, а также разрешение для графической подсистемы и некоторые другие. В качестве примера рассмотрим мой вариант build.conf: 1 2 3 4

module module module module

agpgart 3c59x 8139too e100

35


администрирование В файле build.conf он фигурирует в такой форме: package ica param icaurl http://download2.citrix.com/files/en ↵ /products/client/ica/current/linuxx86.tar.gz

Рисунок 1. IP-адрес получен от DHCP-сервера и происходит загрузка ядра Linux

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

Рисунок 2. Указываем расположение сервера приложений 5 module via-rhine 6 module usb-hid 7 module usb-storage 8 module smbfs 9 package xorg6-vesa 10 package keymaps-en_us 11 12 13 14 15

package package package package package

rdesktop vncviewer rxvt xterm ssh

16 package blackbox 17 package xtdesk

В строчках 11-15 подключаю необходимые для демонстрационной работы утилиты. Следующие две строки означают, что оконным менеджером будет blackbox, а за появление ярлыков на рабочем столе – отвечает пакет xtdesk. В строках 18-19 выставляем пароли для доступа к данной терминальной станции и для доступа с терминальной станции на VNC-сервер. По умолчанию картинка проекта ThinStation включена во время загрузки (см. строчку 20). Разрешение X-сервера на стороне терминального клиента выставлено в 1024x768 (см. строчку 21). И, наконец, в 22 строчке указано, что требуется отображать сообщения, относящиеся к процессу загрузки, инициализации и за начальную настройку сетевых конфигурационных параметров. Далее запускаем сборку: # ./build

И переписываем приготовленные файлы в каталог tftpсервера: # su # cp -R ./boot-images/pxe /tftpboot

В принципе, на этом этапе можно запускать терминальный клиент и смотреть, как происходит процесс загрузки. 18 param rootpasswd root В качестве визуального примера я привожу, как процесс 19 param xorgvncpasswd vnc загрузки происходит в виртуальной машине. 20 param bootlogo true С момента включения VIA EPIA-M до момента определе21 param bootresolution 1024x768 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. Экран удаленного сервера

Было отрадно также увидеть дейсЧто касается хранимых профилей миться с готовыми решениями, котопользователей, в случае, если наду- рые доступны на рынке на сегодня- твительно сверхкомпактные терминалы с аппаратной начинкой, аналогичмаете включать в загружаемый образ ший день. Итак, начнем, пожалуй, с тонких кли- ной, что и у «старших» братьев [1]. браузер Mozilla Firefox, то хочу обратить На рынке тонких клиентов рабоваше внимание на секцию 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 рубежных коллег. и Citrix Client под Win32. Максимальное для X-сервера задается именно там. видеоразрешение одинаково для всех Выводы Аппаратные альтернативы моделей данного ряда и составляет Я не агитирую вас пересматривать ситуацию, которая, как иногда утверждаВ случае, если у вас за спиной нет 1600x1200. Если вы внимательно смотрите ют старожилы, «исторически сложиобоза старой техники и вы начинаете комплектовать предприятие, что го- на названия приведенных моделей, лась» на ваших рабочих местах в ту ворится с нуля, то предлагаю ознако- то видите, что последний клиент ос- или иную сторону – оставить всё как нован на Windows XPe. Новая опера- есть или обратить внимание на новые Таблица 1. Цены на тонкие клиенты от Neoware [18] ционная система от Microsoft? Вовсе возможности. В любом случае решеНазвание модели Цена нет – это урезанная версия Windows ние всегда остается за вами. СледуNeoware e100 (Linux) от 369 у.е. XP для встраиваемых систем. Кстати ет учесть, что ThinStation – это консговоря, у этой корпорации также есть труктор, у которого есть, естественNeoware e100 (Windows CE) от 399 у.е. планы на использование старой техни- но, и плюсы и минусы. Плюс – можNeoware e100 (Windows XPe) от 599 у.е. но сконструировать практически люки в качестве тонких клиентов [19]. Таблица 2. Цены на тонкие клиенты бую конфигурацию для рабочей станСимпатично выглядят с эстетичесот HP [20] ции (в рамках терминального варианкой точки зрения и тонкие клиенты Название модели Цена та). Минус, и достаточно жирный, заот компании Hewlett-Packard. ФункциHP Thin Client t5710 от 509 у.е. ключается в том, что добавление собсональность у продукции от 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


администрирование тория. Если вам требуется всего лишь ваться на сервере, применяйте, напосмотреть на ThinStation, то позво- пример, следующие цифры (в каждом лю себе смелость порекомендовать конкретном случае они будут, естествам сайт [21], где вы можете выбрать венно, разные) – минимальный объна веб-форме необходимые вам паке- ем для каждого клиента начинается ты и получить уже скомпонованный за- со 100-150 Мб памяти. Умножаем на количество подключаемых пользовагружаемый образ. Впрочем, если ваше добавляемое телей и получаем ОЗУ терминальноприложение не использует видео-аксе- го сервера. лерацию, (а под ней я понимаю прямой доступ к видеокарте, например, с по- Благодарности мощью SDL-библиотеки), то разумнее Спасибо Mike Eriksen за любезное преразместить его на сервере, и задача доставление идеи по использованию сводится к банальной правильной на- VIA EPIA-M в качестве легковесного стройке ThinStation, которую мы с вами терминального решения. уже провели. В противном случае, придется долго тянуть за ниточки и добав- Литература и ссылки: лять все необходимые пакеты. Впро- 1. http://www.windowsfordevices.com/news/ чем, если ваше приложение того стоNS3139003780.html. ит, то почему бы и нет? 2. http://en.wikipedia.org/wiki/Total_cost_of_ Отдельной графой необходимо ownership. упомянуть о терминальном сервере. 3. http://www.darwinmag.com/read/110103/ Это одна из ключевых фигур на предquestion74.html. приятии, на которую ложится основ- 4. http://www.ibusiness.ru /marcet /CIO/ ная нагрузка. Как и всё в природе не 19102. убывает и не прирастает на пустом 5. Борисов А. Используем LinuxBIOS месте, так и в этом случае надо помна системах VIA EPIA-M. – Журнал нить, что, уменьшив производитель«Системный администратор», №8, авность на терминалах, следует нарасгуст 2005 г. – 76-80 с. тить функционал на терминальном 6. http://thinstation.sf.net. сервере [22]. Это большая отдельная 7. Маркелов А. Использование бездискотема. Для оценки суммарного коливых Linux-станций с загрузкой по сети. – чества ОЗУ, которое будет использоЖурнал «Системный администратор»,

№11, ноябрь 2004 г. – 12-14 с. 8. ht tp://peterhost.dl.sourceforge.net / sourceforge /thinstation / Thinstation2.1.3.tar.gz. 9. Касперски К. Модифицируем BIOS. – Журнал «Системный администратор», №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/ awdflash/awdflash826b.zip. 13. http://www.uniflash.org/download/uf140. zip. 14. ftp://ftp.support.acer-euro.com/utilities/ winphlash/winphlash-utility.zip. 15. http://struktur.kemi.dtu.dk/thinstation – Thinstation and VIA Epia – a perfect match. 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 / mainboards/display/ami-bios-update.html. 17. http://www.neoware.com. 18. http://www.neoware.com/thin-clients/e100. html. 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 / mseiger0505.asp – Microsoft Preps Thin Client for XP. 20. http://h10010.www1.hp.com/wwpc/us/en/ sm/WF04a/12454-321959-89307-33892789307.html. 21. http://struktur.kemi.dtu.dk/thinstation/TS. 22. http://www.entry.kiev.ua/systems/citrix/ index.html.

Редакция нового электронного приложения к журналу «Системный администратор», полностью посвященного программному обеспечению с открытым кодом, представила первые выпуски «Open Source»

На данный момент файл с «Open Source» 001 скачали около 4000 пользователей, а в начале декабря выйдет второй выпуск электронного приложения. Среди ожидаемых материалов – руководство для начинающих по установке Linux-дистрибутива Gentoo, сравнение двух многопротокольных клиентов обмена мгновенными сообщениями с открытым кодом (Gaim и SIM), обзор кросс-платформенной системы пакетов для UNIX/Linux-систем OpenPKG. Редакция «Open Source» напоминает, что продолжает принимать любые отзывы, пожелания, поправки и рекомендации читателей, уже успевших ознакомиться с первым выпуском электронного приложения, и по вопросам концепции приложения в целом. Мы с удовольствием рассмотрим предложения по сотрудничеству, а также всегда рады видеть новых авторов, желающих опубликовать свои материалы. Связаться с нами можно по электронной почте osa@samag.ru.

14 ноября свет увидел «Open Source» 001 – 9-страничный файл в формате PDF (сами материалы заняли 8 страниц) и сейчас доступен для свободного скачивания (после регистрации) на сайте http://osa.samag.ru. В первом выпуске электронного приложения можно найти новости мира Open Source и краткий анонс OpenBSD 3.8 (автором этих материалов стал Дмитрий Шурупов), а также четыре статьи: 5 Ubuntu 5.10 – первый взгляд на «Линукс для людей». Обзор от Владимира Якубовского, посвященный недавно вышедшей версии GNU/Linux-дистрибутива на базе Debian, сумевшего быстро завоевать популярность среди пользователей настольных ПК.

38

5 VIM! Начни! Константин Фадеев рассказывает начинающим пользователям об основах использования легендарного свободного консольного текстового редактора. 5 GTK+ 2 в Free Pascal 2. Материал Владимира Кемпика о создании графических приложений (на базе библиотеки с открытым кодом GTK+) на языке программирования Pascal с использованием компилятора проекта Free Pascal. 5 Firefox: триумфальное восхождение. Андрей Коврин освещает всю историю революционного веб-браузера проекта Mozilla (от появления Phoenix до наших дней), раскрывая подробности достигнутого (и, возможно, еще предстоящего) успеха Firefox.



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

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

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

О

собенно если сеть состоит из более чем одного сервера и пяти рабочих станций. В случае с Linux-серверами это правило действительно вдвойне, потому как

40

способов настроить один и тот же сервис может быть не два и даже не три. Очень часто работа с Open Sourceпроектом (не важно, его разработка или установка) тесно связана с чте-

нием и написанием документации. Все мы знаем, что память человека обладает избирательностью и имеет свойство убирать «на дальнюю полку» неиспользуемые в данный момент зна-


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

Рисунок 1. Пример внешнего вида личного пространства

ния. Количество же таких знаний напрямую зависит от вашего опыта работы и размера серверного парка вашей компании. По своему опыту могу сказать, что пара десятков грамотно написанных (собственноручно) документов по настройке «типовых» решений – сильно облегчают жизнь и навсегда избавляют от мучительных воспоминаний. Больше нет раздумий о том, что же я на этот раз забыл куда прописать и какой нюанс, встретившийся когда-то, никак не может всплыть из глубин моей памяти. Не стану отрицать, наверное, существуют супер-профессионалы, которые помнят всё и всегда, но мне такие не известны. Гуру, с которыми мне приходилось общаться, нет-нет да и говорили в ответ на вопрос «Что-то такое было... Я точно не помню». К чему я всё это? А к тому, что привычку писать (хотя бы даже для себя) документацию о настройке сервисов, в которых столкнулись с проблемами, о встретившихся тонкостях и особенностях – можно смело назвать весьма полезной привычкой и крайне необходимой практикой. Это логическое продолжение привычки многих людей – записывать в КПК, документы и другие менее удобные для поиска информации источники.

но выделить «НетПроектЖурнал» или просто NPJ. Он построен на принципах работы любого Open Sourceпроекта. Люди объединяются в сообщества (рабочие группы) и работают над какой-либо документацией. Для примера ведения проекта могу привести весьма простой, но от того не менее удобный биллинг «cake» (http://npj.ru/cake). В данном случае сайт проекта является и его главной страницей, и местом разработки документации, и местом поддержки проекта, так как NPJ – гибкий инструмент и фактически может выступать в любом качестве. Для примера ресурса, основная цель которого

разработка и сбор документации, могу привести npj.akeeper.ru. Учитывая весьма продвинутые средства поиска по узлу NPJ – это крайне удобный инструмент. Суть удобств: Установка и настройка, как правило, занимает 5-10 минут. Гибкость архитектуры позволяет создавать на вашем узле практически всё что угодно – от банального блога (есть ресурс, где NPJ используется для ведения личных дневников livejournal) до серьёзного ресурса по разработке, представлению и ведению проекта. Сквозная авторизация на узлах других систем (о ней чуть ниже) позволяет вам принимать участие в работе на любых узлах, подключённых к общей сети NPJ-узлов. На одном узле может быть создано сколь угодно много рабочих групп, каждой из которых допустимо заниматься своим независимым проектом. Рабочие группы могут быть публичные, премодерируемые, скрытые. Любая страница внутри узла может выступать в любом качестве – от обычного документа, до формы форума (об этом тоже чуть позже). Помимо участия в рабочих группах пользователь узла всегда имеет собственный личный журнал и возможность создания своих документов.

Что такое NPJ Для разработки документации из наиболее удобных инструментов мож-

№11, ноябрь 2005

Рисунок 2. Начинать творить можно отсюда

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-узел). лей, ленту всех анонсов, список нения созданной страницы можно пе- Единственное, обращу ваше внимание изменений в дайджестах и так да- рейти на эту ссылку и тут же создать на две настройки. Если вы хотите полудокумент, который будет по ней рас- чать уведомления на почту, то придётлее. полагаться. И только вам решать, бу- ся создать почтовый аккаунт для NPJ Поддержка RSS. дет это документом или очередным ог- и обеспечить Есть багтрекер. лавлением, каталогом, индексом, гос- к нему pop3д о с т у п. Н а Выше я упоминал сквозную авто- тевой книгой или чем-то ещё. Потенциальный «минус», кото- стройки для ризацию на разных узлах. Дело в том, что каждый узел «НетПроектЖурна- рый довольно скоро бросается в гла- э т о г о п р о ла» имеет возможность войти в объ- за, – отсутствие возможности загруз- п и с ы в а ю т Рисунок 3. Типичное единённую общую сеть. Это произ- ки на сервер узла файлов через веб- с я в ф а й л е оформление главной водится нажатием пары ссылок в на- интерфейс. Другими словами, если вы config_tunes. страницы узла

42


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

№11, ноябрь 2005

в своём личном пространстве. Для сведения, рабочая группа может существовать в скрытом виде для единственного пользователя. Это весьма полезно, когда ваш узел публичный и на нём присутствует много людей, а вы по какимто причинам не хотите разглашать информацию, с которой работаете. (Я это использовал для ведения документации на всю сеть компании на своём узле, который доступен всему Интернету.) Рабочие группы на узлах NPJ – это фактически разграничение прав между пользователями узла. Они существуют для определения политики выдачи (отображения) информации, с которой работают члены группы, а также для определения прав доступа каждого члена. Группы могут быть публичными, премодерируемыми, а также, как уже упоминалось, скрытыми. Члены групп могут обладать разными правами, от читательских до менеджерских (администраторских). Разумеется, в пределах своих групп. Если пользователь является менеджером пусть даже основной рабочей группы node@имяузла – это не означает, что он становится администратором узла. Если вы создали рабочую группу (или же решили использовать уже существующую), то можете сразу приступить к оформлению и наполнению её материалами. Для этого достаточно зайти на страницу группы, которая, как правило, выглядит http://имяузла/имярабгруппы и точно так же, как на центральной странице, кликнуть на ней дважды. Откроется уже знакомое окно редактирования. Оформление первой страницы рабочей группы может состоять из рубрикатора материалов, алфавитного списка и т. п. Причем для использования, например, рубрикатора, вам потребу-

Рисунок 5. Начинаем мять «пластилин»

43


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

Рисунок 6. Две инкарнации одинаковых страниц

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

Выводы Рисунок 7. Структура рабочей группы «Город-Инфо»

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

44

димым. От обычных html-текстов их отличает только удобство использования, удобство редактирования и прочие «полезности», что уже были озвучены выше.

Использование NPJ в работе Какую конкретно документацию вести в NPJ, решать вам. От себя я могу поделиться той схемой, благодаря которой у меня навсегда исчезла проблема ответа на вопрос (начальству или самому себе), что где находится и как оно работает. Эта схема использовалась в компании «Город-Инфо» (см. рис. 7). Как видно из рисунка, фактически все области работы службы системных администраторов компании здесь освещены. Разумеется, часть информации не отображена на схеме и включена в пункты «прочее», но и того, что отображено, более чем достаточно для понимания. Стрелками отображены ссылки между разделами. Множество перекрёстных ссылок находится и внутри документов, но отобразить это на схеме не представляется возможным. Там же системными администраторами компании велась разработка документации, которая впоследствии предоставлялась клиентам и заказчикам. NPJ позволяла не только вместе выполнять такие работы, но и отслеживать изменения в документе. А также предоставляла площадь для дебатов по поводу внесения тех или иных изменений. Впоследствии там же должна была начаться разработка целого пакета документации, так как именно это средство было признано наиболее

Способов применения в работе узла NPJ ровно столько, сколько вы сможете придумать. Может быть, вы предпочтёте записывать в собственный журнал интересные находки «на будущее», а в документах сохранять, к примеру, особо удачные конфигурационные файлы или же их описание. Может быть, вы создадите отдельную рабочую группу, где будете вести всю документацию по своей сети. А может, вы посвятите свой узел поддержке какого-либо проекта, разработкой которого в данный момент занимаетесь или только планируете заняться. Многие тонкости работы NPJ остались за рамками статьи. Причин для этого несколько. Во-первых, несмотря на то, что я давно пользуюсь этой системой, для меня ещё не все тонкости раскрыты. Во-вторых, многое из оставленного за рамками статьи относится к редко используемому, и далеко не всем будет интересно. Например, работа с «Сообществами», внутри которых создавать документы нельзя. Эта такая дискуссионная форма, но применения ей я не нашёл, поэтому в своём рассказе пропустил. А самую сложную проблему в использовании NPJ, понимание, как это работает, хочется надеяться, я помог вам разрешить. Одно могу сказать вам точно, после того, как привыкаешь пользоваться в работе таким удобным инструментом, он становится незаменимым помощником. И это неудивительно. Вы не тратите время на поиск места для сохранения мыслей или целого документа, не мучаетесь с построением красивой структуры, не страдаете от некорректно работающего поиска, который никак не хочет выдать требуемое – вы просто делаете свою работу.



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

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

Что такое Subversion? Если коротко, Subversion – это свободно распространяемая система контроля версий, призванная заменить собой устаревшую систему CVS. Subversion используется такими программистскими коллективами, как команда разработчиков компиляторов GNU, KDE Development Team, разработчиками СУБД Ingres, Apache Software Foundation, Samba и многими, многими другими. Далеко не полный список проектов, исходные коды которых хранятся в Subversion, доступен по ссылке: http:// subversion.tigris.org/testimonials.htm.

CVS vs Subversion Поскольку Subversion разрабатывалась как продвинутая замена CVS, изначально ставилась задача: сохранить всю привычную функциональность при добавлении новых возможностей. Поэтому большинство широкоиспользуемых команд Subversion имеют такой же синтаксис, как и CVS. Переход на Subversion несложен и не требует долгого привыкания. Атомарное принятие изменений. Поддержка атомарных коммитов позволяет либо принимать весь измененный код, либо не принимать изменения вовсе, если транзакция по каким-либо причинам (например, из-за падения канала) не была завершена. Subversion поддерживает такой режим работы и гарантирует, что репозиторий не будет содержать в себе несовместимых данных – либо репозиторий останется неизмененным, либо обновление будет полным. Переименование, перенос и копирование файлов и каталогов

46

без потери версионирования и истории изменений. В отличие от CVS, которая требует вмешательства администратора сервера и ручного копирования файлов, Subversion изначально обладает такой возможностью, а при установке модуля SVN::Mirror, разработанного Chia-Ling Kao, Subversion также «обучается» клонировать данные из текущего в произвольный удаленный репозиторий. Права доступа к репозиторию. Вы можете назначать пользователям права доступа к различным частям репозитория, простым редактированием текстового конфигурационного файла. Комментарии к каждому измененному объекту. Теперь вы можете оставлять комментарий в журнале коммита к любому измененному вами файлу. Простота развертывания системы. Для построения полноценной работоспособной системы Subversion в большинстве случаев необходим только веб-сервер Apache2 и интерпретатор PHP, а минимальный набор утилит Subversion, позволяющий работать по протоколам SVN и SVN + SSH, вообще не требует установки стороннего ПО. Простота интеграции в существующую инфраструктуру сети. Доступ к репозиторию Subversion может осуществляться по протоколам HTTP, HTTPS, SVN, SVN+SSH, из набора которых вы сможете легко выбрать наиболее подходящий для заданной конфигурации сети. Разнообразные веб-интерфейсы для доступа к репозиторию. На те-

кущий момент доступно около десятка программ для работы с репозиторием SVN: ViewCVS, SVN::Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac, SVN::RaWeb::Ligh, SVN Browser, Insurrection и т. д. В данной статье мы рассмотрим настройку WebSVN как наиболее простого и в то же время функционального инструмента. Кроме утилит командной строки, доступны также графические интерфейсы: кроссплатформенный RapidSVN, TortoiseSVN – плагин для MS Windows Explorer, а также – Jsvn, написанный на Java и доступный везде, где есть Java-машина. Ну и, наконец, лицензия. Subversion – программное обеспечение с открытым кодом и распространяется по лицензии Apache/BSD-style.

Что входит в состав пакета Subversion svn – клиент Subversion. Представляет собой утилиту командной строки, осуществляющую доступ к репозиторию Subversion. svnversion – программа, показывающая состояние компонент текущего репозитория. svnlook – утилита для контроля репозитария Subversion. svnadmin – утилита для создания, управления и восстановления репозитария Subversion. svndumpfilter – программа фильтрации дампов репозитория Subversion. mod_dav_svn – модуль для веб-сервера Apache2, предоставляющий доступ в репозиторий Subversion по протоколам HTTP и HTTPS.


администрирование svnserve – программа-сервер, запускающаяся как одиночный демон или из inetd и предоставляющая доступ к репозиторию Subversion по протоколу SVN или SSH.

План установки Subversion Установка необходимого ПО. В этом разделе будут описаны установка и запуск FreeBSD Jail, установка вебсервера Apache 2.X, Subversion, PHP4 и WebSVN. Создание сертификатов и конфигурация серверного ПО. Здесь мы рассмотрим создание собственного самоподписанного сертификата (Certificate Authority, CA), создание сертификата сервера и создание клиентских сертификатов. Настройка клиентов SVN на *nix и Windows. Этот раздел посвящен работе с Subversion на платформе *nix (Linux/FreeBSD/Solaris ), а также установке на Windowsмашину клиента TortoiseSVN.

Создаем и устанавливаем Jail

либо: # 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

Для удобства работы присваиваем пользователю группу 0 (wheel) и разрешаем в jail запуск sshd. В файл /usr/home/ jails/svn/etc/rc.conf добавляем строчку sshd_enable=”YES” и запускаем jail командой /etc/rc.d/jail start. Если все сделано правильно, команда jls(8) выведет примерно следующее: # jls JID IP Address 1 XX.YY.XX.TT

Hostname svn.reki.ru

Path /usr/home/jails/svn

Заходим в jail по ssh, получаем права суперпользователя, выкачиваем и разворачиваем архив дерева портов: # # # #

ssh XX.YY.XX.TT -l admin su - root cd /usr fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports ↵ /ports.tar.gz # tar -xzf ports.tar.gz

Jail необходим для того, чтобы система контроля версий жила в собственном мире и никак не пересекалась с остальными приложениями. Кроме того, используя 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 CN=stellar/emailAddress=stellar@reki.ru. Понятно, что нали# make buildworld # make installworld DESTDIR=/usr/home/jails/svn чие в двух ипостасях одного и того же пользователя никого # cd etc устроить не может и хорошим решением было бы взять в ка# make distribution DESTDIR=/usr/home/jails/svn честве логина часть строки данных сертификата. Для этого в Apache предусмотрена директива SSLUserName и... увы В файл /etc/rc.conf добавляем следующие строчки: и ах, мир несовершенен: без исправлений кода mod_ssl опjail _ enable="YES" # Включаем загрузку jail ции FakeBasicAuth и SSLUserName вместе не работают. # Список всех jail, которые есть в системе К счастью, по URL http://reki.ru/products/subversion/patchjail _ list="svn" # Запрещаем изменение 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 SSLUserName надо скачать патч и положить его в каталог jail _ sysvipc _ allow="NO" /usr/ports/www/apache2/files. Если предполагается, что репо# Для jail с именем "svn" зиторий Subversion будет храниться в BerkeleyDB, нам такjail _ svn _ rootdir="/usr/home/jails/svn" # Каталог jail jail _ svn _ hostname="svn.reki.ru" # Имя хоста jail же будет необходимо включить поддержку BerkeleyDB jail _ svn _ ip="XX.YY.XX.TT" # IP адрес для Apache. jail _ svn _ exec="/bin/sh /etc/rc" # Скрипт инициализации jail _ svn _ devfs _ enable="YES" # Монтировать devfs в jail Итак, устанавливаем необходимые переменные окружения и запускаем установку Apache. Добавляем пользователя, под которым мы будем захо# cd /usr/ports/www/apache2 дить в jail. Для этого можно воспользоваться командой: # vipw -d /usr/home/jails/svn/etc

№11, ноябрь 2005

# setenv WITH _ BERKELEYDB db42 # cd files # fetch http://reki.ru/products/subversion ↵

47


администрирование /patch-server-ssl _ engine _ kernel.c # cd ../ # make install clean

Устанавливаем систему контроля версий Subversion Поскольку предполагается, что доступ к SVN будет осуществляться по протоколу HTTPS, нам следует установить модуль mod_dav_svn. По умолчанию репозиторий SVN создается в каталоге /home/svn/repos. # # # #

cd /usr/ports/devel/subversion setenv WITH _ MOD _ DAV _ SVN yes setenv WITH _ APACHE2 _ APR yes make install clean

Если требуется подсветка синтаксиса исходных файлов, устанавливаем программу enscript. В этом случае в файле конфигурации WebSVN следует включить поддежку enscript. # cd /usr/ports/print/enscript-a4 # make install clean

Устанавливаем PHP4 PHP4 нам понадобится для WebSVN – веб-фронтэнда репозитория. Для работы WebSVN необходимо установить расширения PHP для поддержки zlib и pcre. # # # #

cd /usr/ports/lang/php4 make install clean cd /usr/ports/lang/php4-extensions make install clean

Устанавливаем и настраиваем WebSVN По умолчанию WebSVN устанавливается в /usr/local/www/ data/WebSVN. Для наших целей придется скопировать его содержимое в каталог /usr/home/www/svn/svn.reki.ru/www. # # # # #

cd /usr/ports/devel/websvn make install clean mkdir -p /usr/home/www/svn/svn.reki.ru/www mkdir -p /var/log/apache/www/svn.reki.ru 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

Примерный вид файла конфигурации следующий: // Указываем пути к программам svn, diff, sed, tar и gzip $config->setSVNCommandPath("/usr/local/bin"); $config->setDiffPath("/usr/bin"); $config->setSedPath("/usr/bin"); $config->setTarPath("/usr/bin"); $config->setGZipPath("/usr/bin"); // Перечисляем все те репозитории, которые должны быть // доступны через фронтэнд $config->addRepository("Example Repository #1", ↵ "/usr/home/svn/example"); $config->addRepository(«Example Repository #2", ↵ "/usr/home/svn/example2"); // Язык веб-интерфейса include("languages/russian.inc"); // Кодировки веб-интерфейса $config->setInputEncoding("windows-1251"); $config->setOutputEncoding("windows-1251"); // Включить кэширование данных для фронтэнда $config->setCachingOn();

48

// Разрешить скачивание проекта в виде tar.gz-архива $config->allowDownload(); // Включить подсветку синтаксиса программой enscript $config->setEnscriptPath("/usr/local/bin"); $config->useEnscript();

Создаем сертификаты и конфигурируем серверное ПО Создаем собственный самоподписанный сертификат (Certificate Authority, CA). Используя этот сертификат, мы будем подписывать сертификат сервера и все клиентские сертификаты. # openssl req -new -newkey rsa:1024 -x509 -days 3650 -nodes ↵ -out ca.crt -keyout ca.key -subj /C=RU/ST=- ↵ /L=Moscow/O=Reki.ru/OU=Certificate _ Issuer ↵ /CN=reki.ru/emailAddress=admin@reki.ru

Перечислим список команд: req – запрос на создание нового сертификата. -new – cоздание запроса на сертификат (Certificate Signing Request, CSR). -newkey rsa:1024 – длина RSA ключа сертификата. -x509 – создание самоподписанного сертификата вместо создания CSR. -days 3650 – срок действия сертификата (10 лет). Это значение должно быть больше срока действия создаваемого сертификата сервера и клиентских сертификатов. -nodes – флаг, указывающий не шифровать ключ. -out ca.crt – сертификат. -keyout ca.key – закрытый ключ сертификата. -subj – данные сертификата. Строка subj имеет следующие поля: С – код страны (Country). Двухбуквенная аббревиатура. ST – название республики, региона или округа (State Name). L – название города/деревни (Locality Name). O – организация (Organization Name). OU – отдел организации (Organization Unit). CN – имя. Для сервера – ServerName; для клиентского сертификата – что угодно. emailAddress – почтовый адрес администратора сервера. Для создания серверного и клиентских сертификатов вам понадобится либо воспользоваться стандартным файлом конфигурации openssl.cnf, который, как правило, находится в каталоге /etc/ssl, либо вручную создать собственный файл конфигурации (название файла – ca.config): [ca] default _ ca

= CA _ CLIENT

[CA _ CLIENT] # Рабочий каталог для базы данных клиентских ключей dir = ./db # Каталог для новых сертификатов certs = $dir/certs # Каталог, куда будут складываться выписанные сертификаты new _ certs _ dir = $dir/newcerts # Индекс базы данных выписанных ключей database = $dir/index.txt # Номер текущего ключа serial = $dir/serial # Собственный самоподписанный сертификат CA


администрирование certificate = ./ca.crt # Закрытый ключ сертификата CA private _ key = ./ca.key # Время, на которое выписывается клиентский сертификат default _ days = 365 default _ crl _ days default _ md

= 7 = md5

# Срок действия CRL # Алгоритм подписи

# Название секции политики policy = policy _ anything [policy _ anything] # Разрешаем не указывать код страны countryName = optional # ------ // ------- название штата или округа stateOrProvinceName = optional # ------ // ------- название города/деревни localityName = optional # ------ // ------- название организации organizationName = optional # ------ // ------- название отдела organizationalUnitName = optional # Обязательно указать имя. commonName = supplied # Почтовый адрес можно не указывать emailAddress = optional

Создаем структуру каталогов, описанную в секции [CA_CLIENT] # mkdir -p /usr/local/etc/crt # cd /usr/local/etc/crt // Создаем и редактируем файл конфигурации # vi ca.config # mkdir ./db # mkdir ./db/certs # mkdir ./db/newcerts # touch ./db/index.txt # echo "01" > ./db/serial

Создаем сертификат сервера: # openssl req -new -newkey rsa:1024 -nodes ↵ -keyout server.key -out server.csr ↵ -subj /C=RU/ST=-/L=Moscow/O=Reki.ru/OU=SVN ↵ /CN=svn.reki.ru/emailAddress=svn@svn.reki.ru

Для сертификата сервера тег CN должен содержать его ServerName. В данном случае – это svn.reki.ru. Подписываем сертификат собственным CA: # openssl ca -config ca.config -in server.csr ↵ -out server.crt -batch

Устанавливаем сертификаты: # cp server.crt /usr/local/etc/apache2/ssl.crt/server.crt # cp server.key /usr/local/etc/apache2/ssl.key/server.key # cp ca.crt /usr/local/etc/apache2/ssl.crt/ca.crt

Конфигурируем веб-сервер. Создаем необходимую структуру каталогов: # 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 прописываем конфигурацию виртуального веб-сервера: <VirtualHost *:443> DocumentRoot /usr/home/www/svn/svn.reki.ru/www ServerName svn.reki.ru:443 ServerAdmin admin@svn.reki.ru

№11, ноябрь 2005

ErrorLog /var/log/apache/www/svn.reki.ru/error _ log CustomLog /var/log/apache/www/svn.reki.ru/access _ log ↵ "%t %h %{SSL _ PROTOCOL}x ↵ %{SSL _ CIPHER}x \"%r\" %b" SSLEngine on SSLCipherSuite ↵ ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+ ↵ LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile ↵ /usr/local/etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile ↵ /usr/local/etc/apache2/ssl.key/server.key SSLCACertificateFile ↵ /usr/local/etc/apache2/ssl.crt/ca.crt SSLVerifyClient require # Пускаем только тех пользователей, которые имеют # подписанные нами сертификаты SSLVerifyDepth 1 <Location /> SSLVerifyClient require # Для совместной работы этих опций SSLOptions +FakeBasicAuth SSLUserName SSL _ CLIENT _ S _ DN _ CN # необходим патч AuthName "SVN" AuthType Basic AuthUserFile ↵ /usr/home/www/svn/svn.reki.ru/.htpasswd _ ssl require valid-user </Location> <Location /svn> DAV svn # Обработчик DAV - svn # общий каталог для репизиториев SVNParentPath /usr/home/svn AuthzSVNAccessFile ↵ /usr/home/www/svn/svn.reki.ru/.htauth _ svn require valid-user </Location> SetEnvIf User-Agent «.*MSIE.*» nokeepalive ↵ ssl-unclean-shutdown downgrade-1.0 ↵ force-response-1.0 </VirtualHost>

Строчки, выделенные красным, указывает серверу, что принимать соединение необходимо только для тех клиентов, которые имеют «правильный», то есть выданный нами сертификат. В строках, выделенных зеленым, мы имитируем авторизацию по паролю. Это необходимо для того, чтобы разрешить доступ к репозиторию SVN только тем пользователям, которым выдан личный сертификат SSL. Для этого мы указываем «файл паролей», находящийся по адресу: /usr/home/www/svn/svn.reki.ru/.htpasswd_ssl. Его содержимое состоит из строки CN (commonName), которую мы задавали при создании пользовательского ключа, и магического заклинания «xxj31ZMTZzkVA», являющегося DESхэшем слова «password». stellar:xxj31ZMTZzkVA oniks:xxj31ZMTZzkVA

Заметим, что поскольку это не настоящая авторизация (по-настоящему мы авторизуемся через сертификат), у всех пользователей один и тот же пароль: «xxj31ZMTZzkVA»: «password». Синие строки указывают, какой путь будет использоваться для https-доступа к SVN. Для нашего случая это https:// svn.reki.ru/svn. Ввиду того, что мы планируем использовать Subversion для нескольких разных проектов одновременно,

49


администрирование нам потребуется при помощи директивы SVNParentPath указать общий родительский каталог для всех репозиториев. Все репозитории из каталога /usr/home/svn будут доступны как https://svn.reki.ru/svn/имя_репозитория. Теперь нам остается только раздать пользователям права доступа к проектам. Для этого используется директива AuthzSVNAccessFile, указывающая файл с описанием прав доступа к тому или иному репозиторию. Формат файла следующий: # имя репозитория:/путь [example:/] # Имена пользователей = права доступа stellar = rw oniks = rw

33928 81260 81261 81262 81263 81264 81271

?? ?? ?? ?? ?? ?? ??

SsJ IJ IJ IJ IJ IJ IJ

0:03.31 0:00.01 0:00.00 0:00.00 0:00.00 0:00.00 0:00.01

/usr/local/sbin/httpd /usr/local/sbin/httpd /usr/local/sbin/httpd /usr/local/sbin/httpd /usr/local/sbin/httpd /usr/local/sbin/httpd /usr/local/sbin/httpd

-k -k -k -k -k -k -k

start start start start start start start

-DSSL -DSSL -DSSL -DSSL -DSSL -DSSL -DSSL

На этот момент настройка сервера Subversion завершена.

Отправка информации о коммитах по почте

До и после каждого события (commit, lock, unlock) Subversion выполняет так называемые скрипты-зацепки (hook-scripts). Они располагаются в каталоге имя_репозитория/hooks. [example2:/] Скрипты, выполняющиеся до действия, имеют префикс stellar = rw «pre-», а после – соответственно «post-». Так, скрипт, запусoniks = r кающийся перед процессом коммита, будет иметь название Пользователь stellar имеет полный доступ к репозито- «pre-commit», а скрипт, вызывающийся после завершения риям example и example1, а пользователь oniks – полный до- процедуры коммита – «post-commit». Соответственно, поместуп к example и право на чтение из example2. щая в эти скрипты вызов программы svnmailer, мы будем рассылать информацию о проведенных в проекте изменениях. Установка программы svnmailer не представляет сложСоздаем репозитории Поскольку мы условились, что будем использовать ности: Subversion для двух проектов с именами example и example2, # cd /usr/ports/mail/svnmailer создаем два репозитория в каталоге /usr/home/svn: # make install clean

# svnadmin create /usr/home/svn/example # svnadmin create /usr/home/svn/example2 # chown -R www:www /usr/home/svn/

Структура проекта может быть произвольной, но общепринято создавать три основных каталога: branches – для веток, tags – для тегов проекта и trunk – непосредственную рабочую область для коммитов. Чтобы каждый раз не делать одну и ту же работу, создаем шаблон проекта с основными каталогами и импортируем его в созданные репозитории: # svnadmin create /usr/home/svn/example # mkdir -p /usr/local/share/svn/skel // Каталог с шаблоном репозитория # cd /usr/local/share/svn/skel # mkdir branches tags trunk # svn import /usr/local/share/svn/skel/tree ↵ file:///usr/home/svn/example -m "initial import"

В дальнейшем можно создавать каталоги внутри проекта посредством команды «svn add», удалять их – командой «svn delete». Права на каталоги репозиториев должны принадлежать пользователю, от которого запущен Apache. В файл /etc/rc.conf добавляем строчки: apache2 _ enable="YES" apache2ssl _ enable="YES"

и запускаем Apache:

Для рассылки оповещений о проведенных коммитах, создаем в каталогах репозиториев файл hooks/post-commit и добавляем в него строчки: #!/bin/sh REPOS="$1" 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, содержащий конфигурацию списка рассылки по проектам. [example] # Имя репозитория for _ repos = .*/example from _ addr = %(author)s # Список рассылки to _ addr = test-developersA@example.ru [examle2] for _ repos = .*/example2 from _ addr = %(author)s to _ addr = test-developersB@example.ru [maps] # Список подстановок from _ addr = [authors] # Авторы to _ addr = [mailing-lists] # Подписчики [authors] oniks = nikulina@example.ru stellar = stellar@example.ru [mailing-lists] oniks = nikulina@example.ru stellar = stellar@example.ru test-developersA = test-developersA@example.ru test-developersB = test-developersB@example.ru test-developersC = test-developersC@example.ru

# /usr/local/etc/rc.d/apache2.sh start

Если все сделано правильно, команда ps(1) покажет нечто похожее на это: # ps axw | grep httpdvv

50

Настройка клиентов SVN Создаем и подписываем клиентский сертификат. Рассмотрим создание клиентского сертификата на примере пользователя stellar.


администрирование # openssl req -new -newkey rsa:1024 -nodes ↵ -keyout stellar.key -out stellar.csr ↵ -subj /C=RU/ST=-/L=Moscow/O=Reki.ru ↵ /OU=SVN/CN=stellar/emailAddress=stellar@reki.ru Generating a 1024 bit RSA private key .++++++ .....++++++ writing new private key to 'stellar.key'

Подписываем созданный сертификат. # openssl ca -config ca.config -in stellar.csr ↵ -out stellar.crt -batch Using configuration from ca.config DEBUG[load_index]: unique_subject = "yes" Check that the request matches the signature Signature ok The Subject’s Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'-' localityName :PRINTABLE:'Moscow' organizationName :PRINTABLE:'Reki.ru' organizationalUnitName:PRINTABLE:'SVN' commonName :PRINTABLE:'stellar' emailAddress :IA5STRING:'stellar@reki.ru' Certificate is to be certified until Sep 15 14:57:05 2006 GMT (365 days) Write out database with 1 new entries Data Base Updated

Подготавливаем сертификат для передачи пользователю. Для этого выполняем следующую команду:

Если импорт произведен успешно, при заходе на https:// svn.reki.ru появляется диалог выбора сертификата p12.

Проверка работы Subversion из *nix Для доступа к репозиторию используется утилита svn. Ее синтаксис во многом повторяет синтаксис команды cvs. Например, чтобы получить список файлов, необходимо указать ключ list и через пробел – URL-репозитории Subversion: svn list URL. При первом запуске svn выдаст достаточно большое количество информации: # svn list https://svn.reki.ru/svn/example/ Authentication realm: https://svn.reki.ru:443 Client certificate filename: /usr/home/stellar/stellar.p12 Error validating server certificate for 'https://svn.reki.ru:443': - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually! Certificate information: - Hostname: svn.reki.ru - Valid: from Sep 15 09:23:00 2005 GMT until Sep 13 09:23:00 2006 GMT - 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 (R)eject, accept (t)emporarily or accept (p)ermanently? p branches/ tags/

При следующих запусках svn количество выводимой информации будет много меньшим: # svn list https://svn.reki.ru/svn/example/

# openssl pkcs12 -export -in stellar.crt ↵ -inkey stellar.key -certfile ca.crt -out server.p12 ↵ -passout pass:

При необходимости можно защитить передаваемый сертификат паролем, указав его в поле «-passout pass:пароль:». Сертификат готов к передаче клиенту. Вносим сертификат в список авторизации на сервер. Для этого в файл /usr/home/www/svn/svn.reki.ru/.htpasswd_ssl добавляем строчку: stellar:xxj31ZMTZzkVA

Настройка клиентов SVN на *nix и Windows Рассмотрим настройку клиентов SVN на различных ОС. Вы увидите насколько это легко. Также проверим работу Subversion из-под этих ОС.

Установка сертификатов в браузерах Firefox и Microsoft Internet Explorer Передаем полученный сертификат на машину клиента любым известным защищенным способом. Это можно сделать, воспользовавшись SSH или sFTP. Для установки сертификата следует выполнить следующие действия: Для Microsoft Internet Explorer: зайти в меню «Tools → Internet Options → Content → Certificates → Import» и выбрать файл сертификата. Для Mozilla Firefox – ненамного сложнее. Зайти в меню «Инструменты → Настройки → Сертификаты → Упорядочить сертификаты → Восстановить» и также выбрать файл сертификата.

№11, ноябрь 2005

Authentication realm: https://svn.reki.ru:443 Client certificate filename: /usr/home/stellar/stellar.p12 branches/ tags/

Проверка работы Subversion из Windows Для работы с Subversion из-под Windows лучше всего воспользоваться программой TortoiseSVN. Узнать больше об этой программе можно на сайте http://tortoisesvn.tigris.org. После установки TortoiseSVN в меню, вызываемом по правому клику мышки, будет доступен пункт «SVN Checkout». При попытке первого checkout программа потребует ввести URL репозитория и файл сертификата p12. Отсутствие ошибок во время checkout – признак того, что система настроена правильно.

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

Литература, ссылки: 1. Subversion Book. Доступна в виде HTML, XML Docbook и PDF на английском и русском языках – http://svnbook.red-bean.com. 2. Сравнение систем контроля версий. Довольно полное описание семнадцати систем контроля версий, как коммерческих, так и open source. Доступно на английском языке – http://better-scm.berlios.de/comparison/comparison.html. 3. TortoiseSVN. FAQ и описание Windows-клиента Subversion – http://tortoisesvn.tigris.org.

51


bugtraq Переполнение кучи в системных таймерах в Cisco IOS Программа: Cisco IOS 10.x, Cisco IOS 11.x, Cisco IOS 12.x, Cisco IOS R11.x, Cisco IOS R12.x. Опасность: Высокая. Описание: Уязвимость обнаружена в системных таймерах на Cisco IOS. Злоумышленник может вызвать переполнение кучи и выполнить произвольный код на целевой системе или произвести DoS-атаку. URL производителя: www.cisco.com. Решение: Установите исправление с сайта производителя.

Множественные уязвимости в NetBSD Программа: NetBSD 1.x. Опасность: Высокая. Описание: 1. Удаленное переполнение буфера в telnet-клиенте на различных платформах BSD. 2. Множественные уязвимости в CVS. Удаленный пользователь может вызвать отказ в обслуживании или выполнить произвольный код на целевой системе. Локальный пользователь может повысить свои привилегии на системе. 3. Целочисленное переполнение в коде совместимости с FreeBSD может привести к повреждению динамической памяти. Локальный пользователь может вызвать отказ в обслуживании или выполнить произвольные код на системе с root-привилегиями. 4. Небезопасное создание временных файлов в утилите imake во время генерации страниц помощи. Локальный пользователь может с помощью специально сформированной символической ссылки повысить свои привилегии на системе. 5. Уязвимость в OpenSSL позволяет злоумышленнику обойти некоторые ограничения безопасности. 6. Обход ограничений безопасности обнаружен в ntpd. Приложение может быть запущено с некорректными групповыми привилегиями. 7. Ошибка обнаружена в функции ptrace() при проверке привилегий процесса перед присоединением к другим процессам. Локальный пользователь может подключить suidпроцесс, который вызывает функцию exec() и произвести дополнительные системные вызовы. URL производителя: www.netbsd.org. Решение: Установите исправления с сайта производителя.

Отказ в обслуживании в Serv-U FTP Server Программа: Serv-U FTP Server версии до 6.1.0.4. Опасность: Средняя. Описание: Удаленный пользователь может послать специально сформированный пакет приложению и вызвать отказ в обслуживании. Подробности уязвимости не сообщаются. URL производителя: www.serv-u.com. Решение: Установите последнюю версию (6.1.0.4) с сайта производителя.

52

Множественные уязвимости в PHP Программа: PHP 4.4.0 и более ранние версии, PHP 5.0.5 и более ранние версии. Опасность: Средняя. Описание: 1. Массив GLOBALS является недостаточно защищенным. Удаленный пользователь может переопределить глобальные переменные с помощью multipart/form-data POST-запроса со специально сформированным полем file upload или посредством сценария, вызывающего функцию extract() или import_request_variables(). Удачная эксплуатация уязвимости требует, чтобы опция register_globals была включена в конфигурационном файле PHP. 2. Обнаружена ошибка при обработке входных данных в функции parse_str(), когда эта функция вызывается только с одним параметром. Злоумышленник может отключить memory_limit во время обработки входных данных в функции parse_str() путем отправки уязвимой функции большого количества переменных. Функция parse_str() на время обработки входных данных включает опцию register_globals, и если во время выполнения функции произойдет отключение memory_limit, то опция register_globals останется включенной до перезагрузки веб-сервера. 3. Межсайтовый скриптинг возможен при обработке входных данных в функции phpinfo(). Удаленный пользователь может с помощью специально сформированного URL выполнить произвольный HTML-сценарий в браузере жертвы в контексте безопасности уязвимого сайта. 4. Удаленный пользователь может обойти механизмы безопасности «safe_mode» и «open_basedir» с помощью модулей ext/curl и ext/gd. 5. Неопределенная ошибка при вызове функции virtual() в Apache 2 может быть использована для обхода ограничений безопасности директив «safe_mode» и «open_basedir». URL производителя: www.php.net. Решение: Установите последнюю версию (4.4.1) с сайта производителя.

Уязвимость форматной строки в OpenVPN Программа: OpenVPN версии до 2.0.3. Опасность: Средняя. Описание: Уязвимость форматной строки обнаружена в функции foreign_option() в файле options.c при обработке входных данных. Удаленный пользователь, контролирующий VPN-сервер, может выполнить произвольный код на OpenVPN-клиенте. Для удачной эксплуатации уязвимости опция pull должна быть разрешена в конфигурационном файле клиента. Ошибка разыменования нулевого указателя обнаружена при неудачном вызове функции accept() в OpenVPN-сервере, работающем в TCP-режиме. Удаленный пользователь может вызвать отказ в обслуживании приложения. URL производителя: www.openvpn.net. Решение: Установите последнюю версию (2.0.3) с сайта производителя.

Составил Александр Антипов


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 с помощью специального приложения, десериализирующего объекты их недоверенных источников. URL производителя: www.sun.com. Решение: В настоящее время способов устранения уязвимости не существует.

Успешная эксплуатация уязвимости позволит злоумышленнику выполнить произвольный код на целевой системе с привилегиями пользователя, запустившего уязвимое приложение. Решение: В настоящее время способов устранения уязвимости не существует.

Множественные уязвимости в phpBB

Программа: phpBB 2.0.17 и более ранние версии. Опасность: Высокая. Описание: 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 уязвимого сайта. 2. SQL-инъекция возможна из-за недостаточной обра(Beta 1), VMWare Workstation 5.0.0 build-13124. ботки входных данных в параметре signature_bbcode_uid Опасность: Средняя. Описание: Microsoft Windows API использует функцию сценария usercp_register.php и может быть эксплуатироCreateProcess() для создания нового процесса и его пер- вана посредством вставки произвольных выражений типа вичной нити. Функция CreateProcessAsUser() выполняет та- «field=xxx» в запрос. Уязвимость существует при выключенкую же функцию, но позволяет процессу быть запущенным ной опции magic_quotes_gpc. 3. Уязвимость обнаружена при обработке входных в контексте безопасности пользователя. данных в параметре signature_bbcode_uid сценария Функция CreateProcess() выглядит таким образом: usercp_register.php. Удаленный пользователь может измеBOOL CreateProcess( нить значения, которые передаются в функцию preg_replace() LPCTSTR lpПриложениеName, LPTSTR lpCommandLine, и выполнить произвольный PHP-код на целевой системе. LPSECURITY_ATTRIBUTES lpProcessAttributes, URL производителя: www.phpbb.com. LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, Решение: Установите последнюю версию (2.0.18) с сайта DWORD dwCreationFlags, производителя. LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation

);

Переменная lpПриложениеName содержит имя исполняемого модуля. Если эта переменная содержит значение NULL, то имя исполняемого модуля будет состоять из первого пробела и строки lpCommandLine. Например: CreateProcess( NULL, c:\program files\sub dir\program.exe, ... );

В приведенном примере строка будет интерпретирована функцией следующим образом: c:\program.exe files\sub dir\program name c:\program files\sub.exe dir\program name c:\program files\sub dir\program.exe

Итак, если приложение program.exe существует в корневом каталоге диска C:\, то оно будет выполнено вместо целевого приложения. Этот случай поведения функции описан непосредственно в документации API: http://msdn.microsoft.com/library/enus/dllproc/base/createprocessasuser.asp. Для успешной эксплуатации уязвимости злоумышленнику необходимо внедрить злонамеренный код в файл C:\program.exe. Это может быть сделано с помощью социальной инженерии или посредством других уязвимостей.

№11, ноябрь 2005

Обход ограничений безопасности в SELinux unix_chkpwd Программа: SELinux unix_chkpwd. Опасность: Низкая. Описание: Уязвимость обнаружена в SELinux. Локальный пользователь может с помощью утилиты unix_chkpwd произвести перебор паролей к системным учетным записям. Неудачные попытки входа в систему не логируются. Решение: В настоящее время способов устранения уязвимости не существует.

Переполнение буфера в VERITAS NetBackup Программа: VERITAS NetBackup Enterprise Server Server/ Client version 5.0 и 5.1. Опасность: Средняя. Описание: Уязвимость обнаружена в библиотеке, используемой vmd (Volume Manager Daemon). Удаленный пользователь может вызвать отказ в обслуживании, прервав процесс резервного копирования или выполнить произвольный код на целевой системе посредством vmd-демона. URL производителя: www.symantec.com. Решение: Установите исправление с сайта производителя.

Составил Александр Антипов

53


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

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

Сергей Яремчук Одноуровневой модели прав доступа пользователей, которая применяется в Linux и во всех UNIX-подобных операционных системах, на сегодняшний день явно недостаточно. Вам придётся очень постараться, чтобы правильно распределить права доступа к объекту. Списки контроля доступа позволяют более гибко решить эту задачу. евять бит плюс три специальных бита позволяют определить права доступа к файлу (чтение, запись, исполнение) только для трех класов пользователей – владелец, группа и остальные. Такой механизм в большинстве случаев не пригоден для решения даже относительно простых задач. Чтобы определить доступ к какому-нибудь документу или ресурсу, пользователя обычно включают в определенную группу. Все, кто входит в эту группу, имеют одинаковые права, т.е. используется принцип «всё или ничего». Списки контроля доступа ACL (Access Control Lists) позволяют установить права доступа к файлам не только для владельца и группы, но и индивидуаль-

54

но для любого другого пользователя стоящее время известны две разраили группы, без каких-либо ограниче- ботки, реализующие списки контроля ний по количеству устанавливаемых доступа для 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 хотя патчи были доступны еще с вер- и xfs, поэтому необходимости в иссий 2.2.12), и сейчас она реализована пользовании патча для этих файловых для основных файловых систем ext2, систем нет, хотя на сайте можно полуext3, XFS, ReiserFS, JFS и NFS. В на- чить ссылки на все текущие исправле-


администрирование ния. Для ядра 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 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 # CONFIG _ DEVPTS _ FS _ XATTR is not set # CONFIG _ TMPFS _ XATTR is not set # CONFIG _ CIFS _ XATTR is not set

Рисунок 1. Для включения POSIX ACL необходимо отметить при конфигурировании ядра соответствующие пункты

ню, выполнение для каталога означает получение списка файлов). Опция -m (--modify) означает модификацию разрешений. В случае если нужно сразу установить несколько разрешений, то перечисляем их через запятую.

После того как ядро перекомпилировано, можно приступать к работе. Работа Linux ACLs базируется на использовании EA для хранения данных о правах пользователей и групп на файлы. Расширенные атрибуты представляют собой произвольные пары имя/значение, которые навсегда привязаны к определенному inode (файлу, каталогу, устройству и пр.), подобно тому как строка запуска связана с процессом. EA могут быть использованы для загрузки системных объектов, обеспечивающих, например, дополнительные характеристики безопасности, ACL или объектов пользователя, а также типа MIME, кодировки и прочего. Подробности смотрите в man attr(5). Пользователи ALTLinux могут получить необходимые утилиты, использовав apt-get. # apt-get install acl attr

Мне неизвестно другое применение EA, кроме ACL (ну разве метки каталогу присваивать), поэтому перейдем непосредственно к теме статьи. Для создания EA используется утилита setfattr, получить информацию об EA можно, использовав getfattr из комплекта сoreutils (ранее fileutils). Но перед тем как начать работать, необходимо перемонтировать дисковый раздел, добавив опцию acl и/или user_xattr (по умолчанию раздел монтируется с опциями noacl и nouser_xattr.).

# mkdir test _ acl # setfacl -dm user:sergej:rw,group:sales:rwx test _ acl

Смотрим, что получилось. # getfacl test _ acl # file: test_acl # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:sergej:rwdefault:group::r-x default:group: sales: rwx default:mask::rwx default:other::r-x

В результате получим информацию о пользователе-владельце и группе-владельце. Строки user, group и other являются базовыми данными и соответствуют стандартным правам доступа. Аналогичные строки, начинающиеся с default, соответствуют значению по умолчанию ACL для каталога (указываются с помощью опции -d), при создании нового подкаталога или файла внутри этого каталога этот параметр наследуется. Естественно, файлы не могут иметь по умолчанию ACL, только каталоги, поэтому такая команда будет завершена с ошибкой. # setfacl -dm u:sergej:rw test _ file setfacl: test_file: Only directories can have default ACLs

# mount /home -o remount,acl

Соответственно, для того чтобы использовать ACL при загрузке, запись в /etc/fstab будет выглядеть приблизительно так: /dev/hda5

/home

reiserfs defaults,acl 1

1

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

№11, ноябрь 2005

Строка default:mask показывает маску эффективных прав, которую не могут превысить пользователь или группа. Используя маску, можно задать общие права для всех пользователей и групп, например: # setfacl -m m::rx file

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

55


администрирование вующего пользователя или группы, утилита завершит выполнение с ошибкой. Кстати, установить новые разрешения в файловой системе, смонтированной без опции ACL, не получится. # setfacl -dm u:sergej:rw /home/sergej/acl setfacl: /home/sergej/acl: Operation not supported

Проверим наследование атрибутов. # mkdir test _ acl/subdir # getfacl test _ acl/subdir

И в качестве вывода получим: # file: test_acl/subdir # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:sergej:rwdefault:group::r-x default:group: sales: rwx default:mask::rwx default:other::r-x

# file: work/test_acl # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:sergej:rwdefault:group::r-x default:group: sales: rwx default:mask::rwx default:other::r-x

Все атрибуты на месте, т.е. команда mv перемещает файлы вместе с привязанными к ним списками контроля доступа. Теперь переместим тестовый каталог в раздел смонтированный без ACL и проверим разрешения: # mv test _ acl /home/sergej/ # getfacl /home/sergej/test _ acl

Теперь пробуем создать файл в каталоге: # mount /home -o remount,acl

Смотрим атрибуты: # getfacl test _ acl/test _ file # file: test_acl/test_file # owner: root # group: root user::rwuser:sergej:rwgroup::r-x group:sales:rwx mask::rwother::r—

# mv test _ acl work # getfacl work/test _ acl

# file: home/sergej/test_acl # owner: root # group: root user::rwx group::r-x other::r-x

Из увиденного можно сделать однозначный вывод: без указания при монтировании дискового раздела опции ACL списки контроля доступа работать не будут. Утилита getfacl при использовании на таком разделе выведет стандартные права доступа. А вот при копировании получились несколько другие результаты. Создадим файл и еще один тестовый каталог, но при установке разрешения для каталога не будем использовать опцию -d:

#effective:rwx #effective:r-x

Пользователь sergej и группа sales унаследовали права. Убедимся, что стандартные права доступа все еще существуют. # ls -al test _ acl итого 1 drwxr-xr-x 2 root root 80 Окт 22 16:10 . drwxr-xr-x 21 root root 592 Окт 22 16:00 .. -rw-rw-r-- 1 root root 0 Окт 22 16:10 test_file

В некоторых дистрибутивах команда ls для файлов и каталогов, в которых используется ACL, дополнительно выводит знак +, например drwxr-xr-x+. От чего зависит присутствие плюса в выводе, мне, к сожалению, неизвестно. Команда chmod также работает с такими файлами и каталогами, только теперь изменяются не права доступа пользователей, а значение маски доступа.

# touch test _ acl _ file # setfacl -m u:vasja:rw,g:webmaster:rwx test _ acl _ file

Проверяем: # getfacl test _ acl _ file # file: test_acl_file # owner: root # group: root user::rwuser: vasja:rwgroup::r-group:webmaster:rwx mask::rwx other::r--

Теперь сделаем копию файла в текущем каталоге: # apt-get install acl attr

Проверяем разрешения: # getfacl test _ acl _ 2

Сохранение расширеных прав при копировании и перемещении В документации сказано, что при копировании и перемещении расширенные права доступа должны сохраняться, что сейчас и проверим:

56

# file: test_acl_2 # owner: root # group: root user::rwgroup::r-x other::r--


администрирование Как видите, разрешения изменились и соответствуют стандартным установкам, определенным переменной umask. Теперь копируем файл в каталог test_acl, в котором при создании разрешений использовался параметр -d. # cp test _ acl _ file test _ acl # getfacl test _ acl/test _ acl _ file # file: test_acl/test_acl_file # owner: root # group: root user::rwuser:sergej:rw#effective:rwx group::r-x group:sales:rwx #effective:r-x mask::rwother::r--

Разрешения изменились и соответствуют файлу test_file, который был создан в этом каталоге. # mkdir dir # setfacl -m u:fedja:rw,g:netadmin:rwx test _ acl _ file # getfacl dir # file: dir # owner: root # group: root user::rwx user: fedja:rwgroup::r-x group:netadmin:rwx mask::rwx other::r-x

Теперь копируем в этот каталог тестовый файл.

правильная» утилита может сделать бесполезной всю безопасность с ACL.

Некоторые опции утилит setfacl и getfacl При помощи связки getfacl/setfacl можно сохранить и восстановить списки контроля доступа, это может понадобиться при архивировании данных или переносе в другую систему. # getfacl -R --skip-base . > backup.acl # setfacl --restore=backup.acl

Если для некоторого файла или каталога требуется установить разрешения, которые сходны с уже имеющимися, то можно поступить так (опции, написанные с заглавной буквы, применяются при использовании в качестве ввода результата работы другой утилиты). # getfacl -a dir | setfacl -M - dir # getfacl file1 | setfacl -S- file2

Чтобы удалить разрешение, используйте опцию -х. Например, удалим права для группы sales: # setfacl -x g:sales test _ acl

Опция -m модифицирует (а фактически сохраняет) старые разрешения, добавляя к ним новые. В некоторых случаях проще установить новые права на файл или каталог, полностью затерев старые. Для этих целей используется флаг -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 # group: root user::rwgroup::r-x other::r--

Если при создании каталога не использовался параметр -d, разрешения не наследуются и при копировании (создании) файлов и каталогов права доступа соответствуют стандартным разрешениям UNIX, т.е. фактически обнуляются. И еще один интересный момент, о котором стоит упомянуть. Операции копирования и перемещения были проделаны и другими инструментами. Результат эксперимента с Midnight Commander совпал с результатом использования утилит ср и mv, а вот Konqueror при перемещении не сохранил расширенные права. Почти аналогично ведут себя kate и Kwrite. Если сохранять результат в текущий файл, то права сохраняются, а если в новый, то теряются. Все это выглядит несколько странно, потому что за операции с правами по идее должно отвечать ядро. Как видите, при использовании ACL необходимо очень тщательно отбирать и инструменты, т.к. при работе с некоторыми утилитами права теряются. Ошибка может привести к тому, что любая «не-

№11, ноябрь 2005

Установленную для каталога маску доступа, используемую по умолчанию, можно изменить так: # setfacl -m default:u::rx acldir

Поддержка ACL в NFS и Samba Поддержка ACL в NFS еще не закончена, но 4 версия протокола уже поддерживает стандартизованные удаленные вызовы процедур на получение и установку разрешений ACL. Причем правильно обрабатывает запросы демон, работающий в пространстве ядра. Демон, работающий в пространстве пользователя, поддерживает только вторую версию протокола и неправильно обслуживает запросы. Клиенты, работающие со второй версией протокола, используют традиционные девять бит, поэтому при передаче информация об ACL искажается. Уже в третьей версии клиенты для запроса прав пользователя опираются на вызов ACCESS, и точное разрешение этого вопроса предоставляется клиенту. Хотя стоит отметить, что существуют решения, позволяющие использовать ACL поверх NFS, но это тема другого разговора. Пока же разработчики рекомендуют использовать ACL при работе с NFS осторожно. Зато списки контроля доступа могут использоваться вместе с Samba, что позволяет объединить Linux-сервер и Windows Active Directory. Хотя стоит отметить, что POSIX

57


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

Рисунок 2. После пропатчивания в Security options появится новый пункт Trustees ACLS, который необходимо включить

ACL и Windows NT/2000/XP ACL имеют отличия, но сервер Samba достаточно близко может работать с разрешениями, принятыми в Windows-среде, обеспечивая практически все действия. Для работы Samba с ACL необходимо не только установить поддержку ACL в ядре, но и собрать Samba с опцией --with-acl-support. А в конфигурационном файле smb.conf в разделе предоставляемого ресурса должно быть прописано nt acl support = yes. Для установки и просмотра разрешений можно использовать не только утилиты администрирования Windows, но и консольную утилиту smbcacls, запускаемую на стороне сервера. Формат запуска утилиты такой: smbcacls //server/share filename [options]

Неудобно, что опции несколько отличаются от setacl. Так опция -А добавляет разрешение к файлу или каталогу сохраняя предыдущее, опция -s устанавливает новые разрешения затирая старые. При помощи опции -M изменяется маска доступа, а опции -С и -G позволяют указать нового владельца и группу-владельца. Кроме стандартных rwx для файлов и каталогов можно установить дополнительные права: D - разрешение на удаление. P – изменение разрешения ка объекту. O - установка владельца. И комбинированные: READ – эквивалентно RX. CHANGE – эквивалентно RWXD. FULL – эквивалентно RWXDPO.

Проект Trustees

кой подход применен в trustees. В июне 2005 года стал наконец доступен стабильный релиз новой версии 3.0, о котором пойдет речь далее. Trustees позволяет дать доступ пользователю или группе пользователей к дереву каталогов, а не единственному файлу, что является отходом от стандарта POSIX ACL. В принципе в большинтсве случаев создание каталога и определение к нему доступа, является типичной задачей, доступ к отдельному файлу регулируется реже и является частным решением. Поэтому такой подход вполне себя оправдывает. К тому же в этом случае не требуется установка тысяч разрешений для каждого файла, что может привести при невнимательности к ошибке, и теперь администратору легче контролировать разрешения т.к. все ограничения для каталога и подкаталогов записываются в одной строке. Кроме того в этом случае снимается зависимость от используемой файловой системы и сервиса. Поэтому Trustees в принципе можно использовать при работе с Samba, ftp, NFS, http. Кроме принципа организации доступа Novell Netware в проекте использованы наработки Java Security. В архиве размером 26.3 Кб содержатся патчи к ядрам версии 2.6 (2.6.8-2.6.13-rc3), исходные тексты для компиляции модуля и утилиты settrustees. Trustees можно скомпилировать вместе с ядром или установить как модуль. Для первого варианта необходимы исходные тексты ядра с номером версии, для которого имеется патч (при отсутствии такового можно попробовать ближайший по номеру, с большой вероятностью он будет работать). Далее поступаем обычным образом: # cd /usr/src/linux-2.6.11 # patch -p1 < ../2.6.11.diff patching patching patching patching patching patching patching patching patching patching patching

file file file file file file file file file file file

security/trustees/trustees.h security/trustees/init.c security/trustees/funcs.c security/trustees/fs.c security/trustees/Kconfig security/trustees/trustees_private.h security/trustees/Makefile security/trustees/security.c security/Kconfig security/trustees/Kbuild security/Makefile

При конфигурировании необходимо включить пункт Trustees ACLS в Security options (рис. 2). При ручном редактировании раскомментируем следующие строки в файле .config: # # Security options # CONFIG _ SECURITY=y CONFIG _ SECURITY _ TRUSTEES=y

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

58


администрирование # make KDIR=/usr/src/linux-2.6.11 install

После успешной компиляции модуля переходим в подкаталог src и вводим make, получившийся исполняемый файл settrustees копируем в /usr/sbin, чтобы он был доступен только пользователю root. Теперь все готово к работе. Загружаем модуль modprobe trustees.ko, либо перегружаем систему с новым ядром. Для задания разрешения по умолчанию используется конфигурационный файл /etc/trustees.conf, но его можно переопределить опцией -f. Все записи по одной в строку состоят из устройства с каталогом/файлом и параметров доступа к нему. [/block/device]/any/path:usr1:flags:+grp1:flags... [/network/share]I/any/path:+grp2:flags:*:flags...

Обратите внимание на флаг I во втором примере. С его помощью указываются на чувствительные к регистру букв устройства. Иначе для //smb/share/DIR и //smb/share/dir будут установлены одни и те же права доступа. Каталоги, находящиеся на определенном устройстве, описываются без указания точки монтирования, т.е. если прописывается каталог /home/sergej, а раздел /home смонтирован на /dev/hda5, то указывается он так: [/dev/hda5]/sergej

а не так: [/dev/hda5]/home/sergej

В качестве указания параметров доступа используются следующие флаги: R – разрешение на чтение любых файлов; W – разрешение на запись файлов и каталогов; B – просмотр (Browse) списка файлов в каталоге (подобно установке права на исполнение для каталогов); E – чтение (rEad) каталогов; X – выполнение (eXecute) файлов; U – установка стандартных прав доступа UNIX (по умолчанию). Пустой параметр означает запрет всех полномочий. Вместе с флагами могут использоваться следующие модификаторы, которые могут устанавливаться, например для временного переопределения прав: C – очистка (Clear) разрешений; D – запрет (Deny) доступа; ! – запись для всех, кроме указанных пользователей или групп; O – один уровень, т.е. все файлы и каталоги внутри, но без подкаталогов; * – означает всех пользователей. Пустые линии игнорируются, знак решетки (#) означает комментарий. Для примера занесем в файл информацию, запрещающую пользователю sergej запись в каталог, находящийся на разделе с файловой системой FAT, традиционно имею-

№11, ноябрь 2005

щий права доступа 777, и ограничимся одним уровнем рекурсии. [/dev/hda6]/win/test:sergej:REBO

Теперь создаем тестовый каталог и указываем модулю на необходимость монтирования виртуальной файловой системы. # mkdir /mnt/win/test # mount -t trusteesfs none /mnt/win/test

Так монтируются каталоги индивидуально, если требуется смонтировать все каталоги из файла /etc/trustees.conf, то вызывается утилита settrustees. Можно проверить: # mount | grep trusteesfs none on /mnt/win/test type trusteesfs (rw)

Пробуем создать файл: # touch /mnt/win/test/test _ file touch: невозможно выполнить touch для 'test_file': Permission denied

Что и следовало ожидать. Стоит отметить, что создание файла на уровень выше или ниже тестового каталога пройдет без проблем. Чтобы остановить использование виртуальной файловой системы, достаточно набрать: # settrustees -D

Более жизненный пример. Позволим веб-серверу считывать данные из каталога с документами, а веб-мастерам, кроме того и изменение файлов: [/dev/hda3]/httpd/htdocs:apache:REBX [/dev/hda3]/httpd/htdocs:+web _ editors:RWEBX

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

Ссылки: 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. 5. Сайт проекта Linux NFSv4 – http://www.citi.umich.edu/projects/ nfsv4.

59


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

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

Вступительное слово Думаю, любому из вас будет интересно узнать, кто, когда и с каких машин пытался зайти в сеть вашей компании, особенно это интересно в случаях, когда для доступа в сеть использовалась учетная запись с администраторскими правами. UNIX-системы для решения подобных задач обладают массой свободно распространяемых программ. Они позволяют администраторам, подкорректировав соответствующим образом исходный код сценария, производить аудит событий доступа к сети и получать отчет, содержащий все необходимые сведения об удачных и/или неудачных попутках проникновения в систему и получения доступа к различным ресурсам сети. С Windows все несколько сложнее, существующие решения, как правило, являются коммерческими и требуют от системных администраторов серьезной подготовки. Также в силу недоступности исходного кода их достаточно трудно, а зачастую и просто невозможно, изменять и дорабатывать для аудита своей сети. В данной статье мы рассмотрим решение задачи аудита – события входа по учетной записи с помощью Windows Script Host. Вначале напишем сценарий на VBScript, который осуществляет сбор нужных сообщений из журнала событий и сохранение этих событий в базе данных MS SQL Server 2000, потом создадим сценарий, который генерирует отчеты за день для администратора, содержащие информацию об удачных и неудачных попытках входа в сеть, и напоследок решим одну прикладную бизнес-задачу: реализуем систему учета присутствия сотруд-

60

ников на рабочих местах с помощью аудита событий Logon/Logoff. Но прежде всего необходимо создать политики аудита для нашей сети.

Готовим сеть к аудиту В Windows 2000/2003 по умолчанию аудит всех категорий безопасности отключен. Администратор создает политику аудита, определяя, для каких типов событий безопасности нужно выполнять аудит. Исходя из требований корпоративной политики безопасности своей организации, администратор может также задать аудит доступа к отдельным объектам. Первым шагом в создании политики является определение событий, для которых должен выполняться аудит. При этом доступны следующие категории событий: Account logon events (аутентификация пользователей на контроллерах домена) – если аудит успешных попыток входа в систему включен на контроллере домена, в журнал будет заноситься запись о каждом пользователе, прошедшем проверку на этом контроллере домена, несмотря на то что пользователь на самом деле входит в систему на рабочей станции домена. Account management (управление учетными записями) – аудит всех событий, связанных с управлением учетными записями на компьютере. К таким событиям относятся, в частности, следующие: создание, изменение или удаление учетной записи пользователя или группы; переименование, отключение или включе-

ние учетной записи пользователя; задание или изменение пароля. Directory service access (доступ к службе каталогов) – контроль событий доступа пользователя к объекту каталога Active Directory, для которого задана собственная системная таблица управления доступом. Logon events (события входа) – подлежит ли аудиту каждая попытка пользователя войти в систему или выйти из нее на данном компьютере, или подключиться к нему через сеть. Object access (доступ к объектам) – контроль событий доступа пользователя к объекту – например, к файлу, папке, разделу реестра, принтеру и т. п. Policy change (изменение политик) – осуществляется ли аудит изменений политик назначения прав пользователей, политик аудита или политик доверительных отношений. Privilege use (использование привилегий) – подлежит ли аудиту каждая попытка пользователя воспользоваться предоставленными ему правами. Process tracking (отслеживание процесса) – аудит таких событий, как активизация программы, завершение процесса, повторение дескрипторов и косвенный доступ к объекту. System events (системные события) – производится ли аудит событий перезагрузки или отключения компьютера, а также события, влияющие на системную безопасность или на журнал безопасности.


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

Рисунок 1. Список политик аудита. Обведена «Account Logon Events»

Рисунок 2. Журнал событий. Выделены два сообщения: нижнее – неудачная попытка войти в систему и верхняя – удачный вход

Чтобы выбрать категории событий всего это ограниченность размера жур- резервного копирования и корпорадля аудита, необходимо сначала оп- нала событий, из-за которой часть со- тивных антивирусов. Так что вполне ределить, является ли данный сервер общений рано или поздно будут удале- логичным будет использование данны. С настройками по умолчанию жур- ной СУБД в качестве хранилища наконтроллером домена. Если это рядовой сервер, то нужно нал событий при достижении заданного ших сообщений аудита. Сразу огововыбрать «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, однако автоматизировать этот процесс с помощью VBScript будет изображенному на рис. 1. Таким образом, теперь в журна- крайне сложно и неудобно. Таким образом, возникает необхоле событий «Event Log», в разделе «Security» при каждой попытке входа димость в использовании базы данных пользователя в систему будет появ- для хранения сообщений о событиях. ляться соответствующее сообщение (см. рис. 2). Настраиваем хранилище Однако для решения нашей задачи сообщений аудита использование журнала событий в ка- Microsoft SQL Server 2000, или его честве хранилища информации о по- бесплатная урезанная реализация пытках входа в сеть – не самый лучший MSDE, активно используются различРисунок 3. Сообщение об удачном входе выход. Причин тому несколько, прежде ными приложениями от 1С до систем в систему

№11, ноябрь 2005

61


безопасность Создадим в MS SQL Server базу Audit, а в ней таблицу Logons, эти действия можно осуществить, например, с помощью Query Analyzer [3], выполнив следующий SQL-скрипт. Листинг 1. SQL-скрипт для создания таблицы Logons CREATE TABLE [dbo].[Logons] ( [id] [int] IDENTITY (1, 1) NOT NULL , [Event_vch] [varchar] (50) COLLATE ↵ Cyrillic_General_CI_AS NULL , [Date_dat] [datetime] NULL , [User_vch] [varchar] (50) COLLATE ↵ Cyrillic_General_CI_AS NULL , [WID_vch] [varchar] (50) COLLATE ↵ Cyrillic_General_CI_AS NULL , [Address_vch] [varchar] (50) COLLATE ↵ Cyrillic_General_CI_AS NULL ) ON [PRIMARY] GO

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

Кто пришел, когда пришел, откуда пришел… Прежде всего подробно опишу структуру WSH-сценария, для того чтобы при необходимости вы легко могли приспособить его для решения своих задач, например, аудита доступа к объектам или аудита изменения политик. Итак, первым делом нам необходимо узнать, какую дату и время имеет последняя запись в базе данных. Это нужно для того, чтобы не копировать одно и то же по нескольку раз. Это можно сделать с помощью следующего запроса: SELECT Max(Date_dat) AS Last FROM Logons

Данный запрос возвратит дату последней записи. Таким образом, мы определили, после какого времени нужно сохранять в базе поступившие сообщения. Очевидно при первом запуске сценария данный запрос возвратит пустую строку и нам придется копировать все сообщения. Скорее всего в журнале событий «Security», кроме событий аудита «Account Logon Events», могут оказаться еще какие-то сообщения о других событиях в системе. В связи с этим нам необходимо отфильтровывать нужные сообщения (см. рис. 3). События, которые нас интересуют, имеют следующие Event ID: 673 – Удачная попытка входа в систему. 675 – Неудачная попытка входа в систему. 538 – Выход из системы (Logoff). Таким образом, будем осуществлять выборку событий с этими номерами. Затем нам необходимо извлечь информацию для занесения в базу. В частности Event ID, Date Time, а также из поля Description: User Name, WID и IP-адрес. Если с первыми двумя значениями все ясно и просто, то для получения последних трех придется использовать специаль-

62

ную функцию Substring. Как видно из рис. 3, записи в поле Description занесены построчно, и каждая строка имеет следующий вид: «параметр: значение». Для того чтобы извлечь значение из определенной строки, необходимо передать функции Substring значение «параметр». Листинг 2. Функция substring для поиска вхождений искомой строки Function SubString(Str1) strpos1=InStr(1,Str,str1) strtemp=Right(Str, Len(str)-strpos1-Len(str1)) strpos2=InStr(1,Strtemp,Chr(10)) SubString=trim(Left(strtemp,strpos2)) End Function

Следует отметить, что данная функция универсальная и ее можно использовать для поиска вхождений при написании своих сценариев, главное – соблюдать формат, применяемый для поиска. Еще одним важным моментом является формат даты и времени, используемые при сохранении сообщений в базе. Я не случайно использовал одно поле для хранения в базе даты и времени, несмотря на то что в журнале событий задействованы два поля. Если у нас поле типа datetime содержит дату и время, то к значениям этого поля можно применять математические функции, в частности мы уже использовали Max, а также <, = , > которые нам еще потребуются в дальнейшем. Если бы мы использовали отдельные поля для даты и времени, то математические функции применять было бы гораздо сложнее. Однако тут возникает еще одна сложность: для полей типа datetime необходимо передавать данные строго в определенном формате «мм.дд.гггг чч:мм:сс». При этом надо использовать функцию SQL CONVERT. В результате работы этой функции с определенными параметрами (110 – для даты и 114 – для времени) мы получаем корректно сохраненную дату в базе. Подробнее о команде CONVERT и кодах, используемых для форматирования дат, читайте в [2]. Итак, мы завершили разбор сообщений журнала событий, и теперь остается только сохранить полученную информацию в базе. Далее приводится полный текст сценария, который осуществляет сбор и сохранение данных в базу. Листинг 3. Сценарий для поиска и сохранения искомых сообщений в базе данных Dim Cnxn, strCnxn Dim rsCustomers, strSQLCustomers Dim EventDate, EventTime, EventTmp Dim objWMI, objItem ' Objects Dim strComputer Dim intEvent,intRec, colLoggedEvents Dim Str, strtemp Function SubString(Str1) strpos1=InStr(1,Str,str1) strtemp=Left(Right(Str, strpos1+2), Len(str1)) strpos2=InStr(1,Strtemp,Chr(10)) SubString=Left(strtemp,strpos2) End Function strComputer="127.0.0.1" Set objWMI = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colLoggedEvents = objWMI.ExecQuery _ ("Select * from Win32_NTLogEvent Where Logfile = 'Security'" ) Set Cnxn = wscript.CreateObject("ADODB.Connection") strCnxn = "Provider='sqloledb';Data Source=" & _ "127.0.0.1;" & _ "Server=MyServer;Database=Audit;Trusted_Connection=yes" // устанавливаем соединение с SQL-сервером


безопасность 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)+":"+ ↵ Mid(objItem.TimeWritten, 11, 2)+":"+ ↵ Mid(objItem.TimeWritten, 13,2) // время каждого события If (EventTmp=LastRec) Then Last=1 // сравниваем If Last=0 Then // пока даты не равны, ищем соответствующие события If objItem.eventCode=675 Then str=objItem.message IpAddr=substring("Client Address:") UserName=substring("User Name:") UserID=substring("User ID:") EventDate=Mid(objItem.TimeWritten,5,2)+ ↵ "."+Mid(objItem.TimeWritten, 7, 2)+ ↵ "."+Mid(objItem.TimeWritten, 1,4) EventTime=Mid(objItem.TimeWritten,9,2)+ ↵ ":"+Mid(objItem.TimeWritten,11,2)+ ↵ ":"+Mid(objItem.TimeWritten, 13,2) Str=objItem.message Line=” INSERT INTO dbo.Logons ↵ ( Event_vch, Date_dat, User_vch, ↵ WID_vch, Address_vch)VALUES ↵ ( '675', CONVERT(DATETIME, ↵ '"+EventDate+"', 110)+ CONVERT(DATETIME, ↵ '"+EventTime+"', 114), '"+UserName+"','" ↵ +UserID+"','"+IpAddr+"')" Set rs=Cnxn.execute(Line) End if If objItem.eventCode=673 Then str=objItem.message IpAddr=substring("Client Address:") UserName=substring("User Name:") UserID=substring("Service Name:") EventDate=Mid(objItem.TimeWritten, 5,2)+ ↵ "."+Mid(objItem.TimeWritten, 7, 2)+ ↵ "."+Mid(objItem.TimeWritten, 1,4) EventTime=Mid(objItem.TimeWritten, 9,2)+ ↵ ":"+Mid(objItem.TimeWritten, 11, 2)+ ↵ ":"+Mid(objItem.TimeWritten, 13,2) Str=objItem.message Line=" INSERT INTO dbo.Logons ( Event_vch, ↵ Date_dat, User_vch, WID_vch, Address_vch) ↵ VALUES ( '673', CONVERT(DATETIME, ↵ '"+EventDate+"', 110)+CONVERT(DATETIME, ↵ '"+EventTime+"', 114), '"+UserName+"', ↵ '"+UserID+"','"+IpAddr+"')" Set rs=Cnxn.execute(Line) End if If objItem.eventCode=538 Then str=objItem.message IpAddr=substring("User Name:") EventDate=Mid(objItem.TimeWritten, 5,2)+ ↵ "."+Mid(objItem.TimeWritten, 7, 2)+ ↵ "."+Mid(objItem.TimeWritten, 1,4) EventTime=Mid(objItem.TimeWritten, 9,2)+ ↵ ":"+Mid(objItem.TimeWritten, 11, 2)+ ↵ ":"+Mid(objItem.TimeWritten, 13,2) Str=objItem.message Line=" INSERT INTO dbo.Logons ( Event_vch, ↵ Date_dat, User_vch, WID_vch, Address_vch) ↵ VALUES ( '538', CONVERT(DATETIME, ↵ '"+EventDate+"', 110)+CONVERT(DATETIME, ↵ '"+EventTime+"', 114), '"+UserName+"' ↵ ,'','')" Set rs=Cnxn.execute(Line) End if End If intrec=intRec+1 Next cnxn.close

№11, ноябрь 2005

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

Отчетность прежде всего Сценарий написан, информация о попытках доступа в сеть исправно заносится в нашу базу, теперь самое время начать получать подробные отчеты о том, кто, когда и откуда пытался получить доступ в нашу сеть. Наш отчет будет сохраняться в формате HTML и открываться с помощью браузера. Сценарий очень похож на предыдущий, и расписывать его подробно, думаю, необязательно. Листинг 4. Сценарий для построения отчетов strComputer="127.0.0.1" Set objWMI = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colLoggedEvents = objWMI.ExecQuery _ ("Select * from Win32_NTLogEvent Where Logfile = 'Security'") Set objFso = CreateObject("Scripting.FileSystemObject") ' open connection 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>") strFile.WriteLine("<center><b>Отчет от "& Date &" ↵ </b><table><tbody><tr><td>Имя пользователя ↵ </td><td>Время события</td><td>Событие ↵ </td><td>UserID</td><td>IP адрес</td></tr>") DateNow= Line=" SELECT DISTINCT(User_vch) FROM Logons" Set rs1=Cnxn.execute(Line) Do While not(rs1.eof) Line=" SELECT * FROM Logons WHERE ↵ (Date_dat > CONVERT(DATETIME, '" & Date &" ↵ 00:00:00', 102)) AND (Date_dat < CONVERT(DATETIME, ↵ '" & Date & " 23:59:59', 102)) AND ↵ (User_vch = '"+rs1("User_vch")+"')" Set rs2=Cnxn.execute(Line) strFile.WriteLine("<TR>") strFile.WriteLine("<td> ") strFile.WriteLine(rs2("User_vch")) strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") strFile.WriteLine(rs2("Date_dat")) strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") If (rs2(“Event_vch”)="673") Then ↵ strFile.WriteLine("<FONT COLOR=red>Неудачная ↵ попытка входа</FONT>") If (rs2("Event_vch”)="675") Then ↵ strFile.WriteLine("<FONT COLOR=green>Удачный ↵ вход</FONT>") If (rs2("Event_vch")="538") Then ↵ strFile.WriteLine("<FONT COLOR=navy>Выход ↵ из системы</FONT>") strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") strFile.WriteLine(rs2("WID_vch")) strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") strFile.WriteLine(rs2("Address_vch")) strFile.WriteLine("</td> ") strFile.WriteLine("</TR>") rs2.close rs1.MoveNext loop strFile.WriteLine("</tbody></table></center></html>") rs1.close Cnxn.close Set WshShell = CreateObject("WScript.Shell") Return = WshShell.Run("iexplore.exe c:\report.htm", 1)

63


безопасность Данный сценарий выводит информацию о попытках войти в сеть, которые были произведены в течение текущих суток. При этом сначала осуществляется выборка по всем пользователям, которые «засветились» в журнале событий, затем делается запрос для каждого пользователя. Вывод осуществляется в html-файл. По окончании созданный файл автоматически открывается в браузере. Если данный сценарий запускается автоматически по расписанию, то открывать браузер с отчетом не нужно, и две последние строки из исходного текста можно удалить. Сообщения о неудачных попытках входа в сеть выводятся красным цветом, удачные – зеленым, а выходы из системы – темно-синим. Сообщения будут выводиться в том порядке, в каком они попали в базу, однако SQL-запросы можно переписать, например, для вывода сообщений парами вход-выход. О том, как это сделать, речь пойдет далее. Итак, мы получили два сценария, один из которых осуществляет выборку нужных данных из журнала событий, а второй выполняет запрос, с помощью которого мы получаем информацию о попытках входа в сеть за определенный период. Оба сценария можно последовательно выполнять в конце каждых суток, а полученные результаты выкладывать на внутренний веб-сервер, в соответствующую папку. Тогда сисадмин сети каждое утро, приходя на работу, будет получать отчет о попытках доступа к ресурсам сети за предыдущие сутки. Задача аудита попыток доступа в сеть и построения удобочитаемых отчетов для системного администратора нами успешно решена. Однако будет нелишним рассмотреть еще одну возможность для применения сценариев WSH и политик аудита Account Logon Events – это построение системы учета рабочего времени. Решение данной задачи часто взваливают на плечи системных администраторов, особенно в небольших компаниях. Если в вашей организации используется домен Active Directory, то каждый день, приходя на свое рабочее место, пользователи должны аутентифицироваться в домене, введя свой логин и пароль (в нашей системе аудита это событие 675 Удачный вход в систему). А в конце рабочего дня пользователи должны корректно завершить работу системы (событие 538 Logoff). Таким образом, для получения информации о времени прихода сотрудника на работу нам необходимо получить самое раннее время события 675, а для получения времени ухода – самое позднее время события 538. Сделать это можно с помощью следующего громоздкого с виду запроса. Тут следует сразу оговориться: в данном случае мы предполагаем, что в нашей сети круглосуточно работают сервера и все задачи, требующие продолжительных расчетов, выполняются только на них, а рабочие станции включают сотрудники, приходя на работу. Листинг 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

Данный запрос возвратит два значения first и last, соответствующие времени входа в систему и времени выхода из нее.

64

Листинг 6.Сценарий построения отчета для контроля рабочего времени strComputer="127.0.0.1" Set objWMI = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colLoggedEvents = objWMI.ExecQuery _ ("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>") 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")) strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") strFile.WriteLine(rs2("First")) strFile.WriteLine("</td> ") strFile.WriteLine("<td> ") strFile.WriteLine(rs2(«Last»)) strFile.WriteLine("</td> ") strFile.WriteLine("</TR>") End If rs2.close Next rs1.MoveNext loop strFile.WriteLine("</tbody></table></center></html>") rs1.close Set WshShell = CreateObject("WScript.Shell") Return = WshShell.Run("iexplore.exe c:\report.htm", 1) Cnxn.close

В результате работы данного WSH-сценария будет получаться HTML-документ, в котором для каждого пользователя будут по дням расписаны дата и время входа в сеть и выхода из нее, то есть фактически время прихода и ухода на работу. Итак, теперь мы с помощью наглядных примеров сценариев на VBScript продемонстрировали возможности Windows Script Host для решения задач аудита доступа в сеть. Надеюсь, материал, изложенный в этой статье, пригодится системным администраторам и поможет им сэкономить рабочее время, затрачиваемое на поиск событий, угрожающих безопасности вверенной им сети.

Литература: 1. Windows Server 2003. Справочник администратора. 2. Microsoft SQL Server Books Online. 3. Администрирование Microsoft SQL Server 2000. Сертификационный экзамен 70-228.



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

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

О

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

66

являются постоянно, то исследования грамма производит проверку ассоцибыстро потеряют свою актуальность. ированных уязвимостей. Для опредеПоэтому такой вариант больше подхо- ления сервисов используется технолодит для проведения всестороннего ау- гия 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,


безопасность Normal, BackDoor, UNIX и Windows). Та- бое удобное время. кое разделение позволяет более гиб- Так как DSS являетко выбрать действительно необходи- ся утилитой аудита, мый в конкретном случае вариант тес- одним из требовата, ведь в больших сетях при исполь- ний к которой скозовании всех политик получение ре- рость сканировазультата может затянуться. При необ- ния, а не скрытость, ходимости пользователь может отре- то паузу между подактировать текущую политику скани- пытками перебора рования либо создать на основе имею- пароля устанавлищихся свою. Так, при помощи редакто- вать нельзя. Пракра политик можно изменить: диапазон тически также легсканируемых портов, реакцию на от- ко ис пользовать сутствие пинга, параметры NetBIOS, и DoS Test, котовид аудита, сканирование по протоко- рый имитирует одРисунок 2. Отчеты DSS позволяют оценить общую обстановку лу UDP, файлы с логинами и паролями, ноименную атаку. которые будут использованы при до- Кроме указанных тестов дополни- та 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). Сканер безопасности DragonSoft лями и количес- ID (Common Vulnerability and Exposure), тво потоков ска- где можно найти более подробное объ- 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 уже охвачено. В последний дистрибутив четвертой версии входит 74 РНР-расширения. На официальном сайте www.php.net есть раздел, специально посвященный этой теме: www.pecl.php.net. На данноме ресурсе находится библиотека исходных текстов еще 132-х дополнительных расширений. Не стоит забывать, что PHP относится к языкам интерпритируемого типа, т.е. каждая команда языка интерпритируется во время исполнения, что заметно проигрывает в скорости языкам компилируемого типа. Практика показывает, что для ускорения части функционала (написание функций с использованием битовых операций, т.к. они медленно отрабатываются на PHP и очень замедляют работу скрипта) приходится писать расширения, а также если необходимо обратиться к уже существующим C-библиотекам (например, криптографические или ГИС-библиотеки). Наверное, у каждого из вас найдется своя причина, чтобы написать новое расширение. Данная статья поможет вам понять основы построения расширений и освоить технику написания расширений под *nix-системы. Написание расширений под Windows отличается только способом компилирования и обращения к внешним библиотекам. В двух словах, под расширением понимается часть PHPфункций, которые реализованы в виде отдельного модуля, написанного на С. Данные функции могут либо подключаться, как внешний модуль, либо скомпилированы статически в исходный код PHP. Простым примером расши-

68

рения является модуль php_mysql, который реализует интерфейс с БД MySql. Интерфейсом взаимодействия между внешними функциями и ядром PHP (PHP-engine) является PHP API, а начиная с версии 4.1.0 в качестве API используется Zend API.

Шаг первый Создаем шаблон расширения (скелетон) Для написания и компиляции расширений вам понадобится дистрибутив PHP. Первоначально входим в директорию ext, в которой находятся папки с исходными кодами всех расширений. Внутри папки ext находится папка skeleton, которая представляет собой заготовку или шаблон для написания расширений. В принципе, данная папка нам может и не понадобиться. Процесс написания шаблонов уже автоматизирован, нам остается только запустить скрипт генерации шаблона расширения или, как его называют разработчики, «скелетона». Запуск скрипта без параметров приведет к выдаче на консоль перечня всех параметров: # ./ext _ skel ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module --proto=file --stubs=file --xml --skel=dir --full-xml --no-help

module is the name of your extension file contains prototypes of functions to create generate only function stubs in file generate xml documentation to be added to phpdoc-cvs path to the skeleton directory generate xml documentation for a self-contained extension (not yet implemented) don’t try to be nice and create comments in the code and helper functions to test if the module compiled


web-программирование Для создания модуля первоночально необходимо запустить скрипт с параметром: # ./ext _ skel --extname=module

После отработки скрипта будет создана директория test с файлами шаблона («скелетон») модуля. # ./ext _ skel --extname=test 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: 1. 2. 3. 4. 5. 6. 7. 8.

$ $ $ $ $ $ $ $

cd .. vi ext/test/config.m4 ./buildconf ./configure --[with|enable]-test make ./php -f ext/test/test.php vi ext/test/test.c make

Repeat steps 3-6 until you are satisfied with ext/test/config.m4 and step 6 confirms that your module is compiled into PHP. Then, start writing code and repeat the last two steps as often as necessary.

Мы с вами только что создали шаблон нашего первого расширения. В поддиректории test находятся следующие сгенерированные файлы: -rw-r--r-- 1 4 Nov 2 00:01 CREDITS – текстовый, информационный. -rw-r--r-- 1 0 Nov 2 00:01 EXPERIMENTAL – текстовый, информационный. -rw-r--r-- 1 1964 Nov 2 00:01 config.m4 – шаблон конфигурационного файла. -rw-r--r-- 1 2707 Nov 2 00:01 php_test.h – шаблон файла заголовков (Н-файл). -rw-r--r-- 1 5379 Nov 2 00:01 test.c – шаблон исходного файла на С. -rw-r--r-- 1 469 Nov 2 00:01 test.php – шаблон тестового файла. drwxr-xr-x 2 0 Nov 2 00:01 tests – директория для регрессионных тестов.

Шаг второй Настраиваем конфигурацию config.m4 Следующий шаг в настройке нашего шаблона – это задание конфигурационного файла. Модуль будущего расширения может быть скомпилирован либо как внешний so-модуль (shared object), либо статически, как часть php. Для отладки расширения удобнее его собирать как внешний модуль. Достоинство такого подхода в том, что при этом не нужно пересобирать PHP полностью, а достаточно лишь отдельно перекомпилировать только одно исходное расширение. Если модуль собирается статически, то при конфигурировании ядра php необходимо задать ключи: ./configure --with-test или ./configure --enable-test. Как вы видите (пример config.m расположен ниже), большинство директив в файле config.m закомментировано символами dnl. Вам необходимо раскомментировать те строки, которые указывают, в каком качестве (динамического или статического модуля) в дальнейшем будет использовано расширение. В случае если вы будете конфигурировать наш модуль как статический, то необходимо

№11, ноябрь 2005

раскомментировать строки 10 и 12 с описанием макроса PHP_ARG_WITH. Для динамического модуля необходимо раскомментировать строчки с описанием макроса PHP_ARG_ENABLE (это будут строки 16 и 18). Данный макрос устанавливает соответствия переменным для макроса PHP_NEW_ EXTENSION как компиляция динамического модуля (shared objects). Первый аргумент макроса PHP_NEW_EXTENSION задает имя расширения. Второй аргумент – файл источника (исходный файл описания с-функций), и третий – это имя внутренней переменной, которая используется в макросах. Ниже будет приведен пример config.m4 для конфигурирования расширения под компиляцию динамического модуля. Раскомментированные строки отмечены красным шрифтом. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

dnl $Id$ dnl config.m4 for extension test dnl Comments in this file start with the string 'dnl'. dnl Remove where necessary. This file will not work dnl without editing. dnl If your extension references something external, ↵ use with: dnl PHP _ ARG _ WITH(test, for test support, dnl Make sure that the comment is aligned: dnl [ --with-test Include test support]) dnl Otherwise use enable: PHP _ ARG _ ENABLE(test, whether to enable test support, dnl Make sure that the comment is aligned: [ --enable-test Enable test support] ) if test "$PHP _ TEST" != "no"; then dnl Write more examples of tests here... dnl # --with-test -> check with-path dnl SEARCH _ PATH="/usr/local /usr" # you might ↵ want to change this dnl SEARCH _ FOR="/include/test.h" # you most likely ↵ want to change this dnl if test -r $PHP _ TEST/; then # path given ↵ as parameter dnl TEST _ DIR=$PHP _ TEST dnl else # search default path list dnl AC _ MSG _ CHECKING([for test files in default ↵ path]) dnl for i in $SEARCH _ PATH ; do dnl if test -r $i/$SEARCH _ FOR; then dnl TEST _ DIR=$i dnl AC _ MSG _ RESULT(found in $i) dnl fi dnl done dnl fi dnl dnl if test -z "$TEST _ DIR"; then dnl AC _ MSG _ RESULT([not found]) dnl AC _ MSG _ ERROR([Please reinstall the test ↵ distribution]) dnl fi dnl # --with-test -> add include path dnl PHP _ ADD _ INCLUDE($TEST _ DIR/include) dnl # --with-test -> check for lib and symbol ↵ presence dnl LIBNAME=test # you may want to change this dnl LIBSYMBOL=test # you most likely want to change ↵ this dnl PHP _ CHECK _ LIBRARY($LIBNAME,$LIBSYMBOL, dnl [ dnl PHP _ ADD _ LIBRARY _ WITH _ PATH($LIBNAME, ↵ $TEST _ DIR/lib, TEST _ SHARED _ LIBADD) dnl AC _ DEFINE(HAVE _ TESTLIB,1,[ ]) dnl ],[

69


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

dnl lib dnl dnl dnl dnl dnl

AC _ MSG _ ERROR([wrong test lib version or ↵ not found]) ],[ -L$TEST _ DIR/lib -lm -ldl ])

56 57 58 59 60 PHP _ SUBST(TEST _ SHARED _ LIBADD) 61 62 PHP _ NEW _ EXTENSION(test, test.c, $ext _ shared) 63 fi

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

Шаг третий Компиляция Как уже упоминалось, компиляция нашего расширения может быть как в модуль, который является частью самого PHP, так и во внешний модуль, подгружаемый во время исполнения. Для статической компиляции необходимо в домашней директории php выполнить команды: # # # #

./buildconf ./configure --enable-test [прочие опции] make make install

Как упоминалось выше, для отладки лучше используйте компиляцию расширения как внешнего модуля (test.so). Для этого необходимо выполнить следующие команды: # # # # #

cd test phpize ./configure --enable-test=shared make make install

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

Проверка Как правило, если все удачно скомпилировано, то можно сразу же осуществить тестовую проверку. Если на сервере установлена cli-версия PHP (версия PHP для командной строки), то вы можете прямо из консоли проверить, как скомпилировалось наше расширение. # php test.php Warning: dl(): Unable to load dynamic library './test.so' - ./test.so: cannot open shared object file: No such file or directory in /usr/local/src/php-4.4.0/ext/test/ test.php on line 4 Functions available in the test extension:<br> Warning: Invalid argument supplied for foreach() in /usr/local/src/php-4.4.0/ext/ test/test.php on line 9<br> Module test is not compiled into PHP

Не стоит сразу так расстраиваться, php просто не нашел наш модуль, т.к. модуль лежит в поддиректории modules, а php осуществляет поиск при отсутствии полного пути в текущей директории. Для того чтобы проверить работу, достаточно лишь ско-

70

пировать или перенести скомпилированный файл модуля в директорию самого расширения. # # # #

cd modules cp * .. cd .. php test.php

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.

Как вы видите, при запуске наш тестовый модуль выводит нам поздравление, что он успешно скомпилирован. Если cli-версия PHP отсутствует, то необходимо наш модуль переписать в директорию, определенную в php.ini (секция Paths and Directories) как директория для расширений, а также дописать строчку, которая определяет подключение нашего расширения (строка выделена красным шрифтом). Строки в php.ini: ; UNIX: "/path1:/path2" extension _ dir = ".;/usr/local/php/extension" ; Dynamic Extensions ; extension=test.so

Необходимо отметить, что при перекомпиляции модуля достаточно выполнить только одну команду make.

Шаг четвертый Добавляем новую функцию Вы научились компилировать шаблон php-расширения. Но при разработке модуля, как правило, необходимо использовать множество функций. Прежде чем рассмотреть, как добавлять новую функцию, перейдем к рассмотрению сгенерированного кода на С (файл test.с) : 1 2 3 4 5 6 7 8 9 10

#include #include #include #include

"php.h" "php _ ini.h" "ext/standard/info.h" "php _ test.h"

/* If you declare any globals in php _ test.h uncomment this: ZEND _ DECLARE _ MODULE _ GLOBALS(test) */

/* True global resources – no need for thread safety ↵ here */ 11 static int le _ test; 12 13 /* {{{ test _ functions[] 14* Every user visible function must have an entry ↵ in test _ functions[]. 15 */ 16 function _ entry test _ functions[] = { 17 PHP _ FE(confirm _ test _ compiled, NULL) ↵ /* For testing, remove later. */ 18 {NULL, NULL, NULL} /* Must be the last line ↵ in test _ functions[] */ 19 }; 20 /* }}} */ 21 22 /* {{{ test _ module _ entry 23 */ 24 zend _ module _ entry test _ module _ entry = { 25 #if ZEND _ MODULE _ API _ NO >= 20010901 26 STANDARD _ MODULE _ HEADER, 27 #endif 28 "test", 29 test _ functions,


web-программирование 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

PHP _ MINIT(test), PHP _ MSHUTDOWN(test), PHP _ RINIT(test), /* Replace with NULL ↵ if there’s nothing to do at request start */ PHP _ RSHUTDOWN(test), /* Replace with NULL ↵ if there’s nothing to do at request end */ PHP _ MINFO(test), #if ZEND _ MODULE _ API _ NO >= 20010901 "0.1", /* Replace with version number for your ↵ extension */ #endif STANDARD _ MODULE _ PROPERTIES }; /* }}} */ #ifdef COMPILE _ DL _ TEST ZEND _ GET _ MODULE(test) #endif /* {{{ PHP _ INI */ /* Remove comments and fill if you need to have ↵ entries in php.ini PHP _ INI _ BEGIN() STD _ PHP _ INI _ ENTRY("test.global _ value", "42", ↵ PHP _ INI _ ALL, OnUpdateInt, global _ value, ↵ zend _ test _ globals, test _ globals) STD _ PHP _ INI _ ENTRY("test.global _ string", ↵ "foobar", PHP _ INI _ ALL, OnUpdateString, ↵ global _ string, zend _ test _ globals, test _ globals) PHP _ INI _ END() */ /* }}} */

51 52 53 54 55 /* {{{ php _ test _ init _ globals */ 56 /* Uncomment this function if you have INI entries 57 static void php _ test _ init _ globals ↵ (zend _ test _ globals *test _ globals) 58 { 59 test _ globals->global _ value = 0; 60 test _ globals->global _ string = NULL; 61 } 62 */ 63 /* }}} */ 64 65 /* {{{ PHP _ MINIT _ FUNCTION */ 66 PHP _ MINIT _ FUNCTION(test) 67 { 68 /* If you have INI entries, uncomment these lines 69 ZEND _ INIT _ MODULE _ GLOBALS ↵ (test, php _ test _ init _ globals, NULL); 70 REGISTER _ INI _ ENTRIES(); 71 */ 72 return SUCCESS; 73 } 74 /* }}} */ 75 76 /* {{{ PHP _ MSHUTDOWN _ FUNCTION 77 */ 78 PHP _ MSHUTDOWN _ FUNCTION(test) 79 { 80 /* uncomment this line if you have INI entries 81 UNREGISTER _ INI _ ENTRIES(); 82 */ 83 return SUCCESS; 84 } 85 /* }}} */ 86 87 /* Remove if there’s nothing to do at request start */ 88 /* {{{ PHP _ RINIT _ FUNCTION */ 89 PHP _ RINIT _ FUNCTION(test) 90 { 91 return SUCCESS; 92 } 93 /* }}} */ 94 95 /* Remove if there’s nothing to do at request end */ 96 /* {{{ PHP _ RSHUTDOWN _ FUNCTION */ 97 PHP _ RSHUTDOWN _ FUNCTION(test) 98 { 99 return SUCCESS; 100 } 101 /* }}} */ 102 103 /* {{{ PHP _ MINFO _ FUNCTION */ 104 PHP _ MINFO _ FUNCTION(test) 105 { 106 php _ info _ print _ table _ start();

№11, ноябрь 2005

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

php _ info _ print _ table _ header(2, ↵ "test support#, "enabled#); php _ info _ print _ table _ end(); /* Remove comments if you have entries in php.ini DISPLAY _ INI _ ENTRIES(); */ } /* }}} */ /* Remove the following function when you have succesfully modified config.m4 so that your module can be compiled into PHP, it exists only for testing purposes. */ /* Every user-visible function in PHP should ↵ document itself in the source */ /* {{{ proto string confirm _ test _ compiled(string arg) Return a string to confirm that the module is ↵ compiled in */ PHP _ FUNCTION(confirm _ test _ compiled) { char *arg = NULL; int arg _ len, len; char string[256]; if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵ TSRMLS _ CC, "s", &arg, &arg _ len) == FAILURE) { return; } len = sprintf(string, "Congratulations! You have ↵ successfully modified ext/%.78s/config.m4. Module ↵ %.78s is now compiled into PHP.", "test", arg); RETURN _ STRINGL(string, len, 1);

134 135 } 136 /* }}} */

Рассмотрим более подробно содержание файла test.с. Все PHP-модули имеют общую структуру: блок включения заголовков (макросы, определения API, внешние библиотеки); С-объявление функции экспорта; блок объявлений функций (PHP) Zend; блок объявлений модуля (PHP) Zend; реализация get_module(); реализация всех экспортных функций. Объявление функции экспорта (строки) находится в заголовочном h-файле (php_test.h): /* For testing, remove later. */ PHP _ FUNCTION(confirm _ test _ compiled);

В нашем случае это только одна функция, которая была сгенерирована скриптом «скелетона»: confirm_test_ compiled(). Если вам необходимо добавить новую функцию, то для этого добавляйте макрос ее описания в заголовочный файл php_test.h. Например, если вы хотите добавить новую функцию add_string(), то должны дополнить заголовочный файл (php_test.h) макросом описания экспортируемой функции (красным цветом помечен добавленный текст) : PHP _ FUNCTION(confirm _ test _ compiled); /* добавляем объявление экспортируемой функции */ PHP _ FUNCTION(add _ string);

Блок объявлений функций Zend в коде (файл test.с) строки 16-19. Для каждой видимой для PHP-функции необходимо описывать ее в function_entry. Для того чтобы добавить новую функцию, необходимо расширить описание структуры (красным цветом помечен добавленный текст):

71


web-программирование 16 function _ entry test _ functions[] = { 17 PHP _ FE(confirm _ test _ compiled, NULL) PHP _ FE(add _ string, NULL) /* добавляем объявление новой функций */ 18 {NULL, NULL, NULL} /* эта строка всегда должна быть последней в описании*/ 19 };

Макрос PHP_FE(name,arg_types) определяет имя точки входа в описании function_entry. Если уже реализовано описание функции и мы хотим дополнить API нашего расширения еще одной точкой входа, т.е. создать псевдоним функции (или alias), тогда мы определяем alias с помощью макроса: PHP_FALIAS(name,alias,arg_ types). Блок объявлений модуля Zend запоминается в структуре zend_module_entry test_module_entry{} (строки 24-40) и содержит всю информацию о содержании нашего модуля (расширения). Как правило, нам изменять код в данной структуре не приходится. Данные структуры test_module_entry: /* имя модуля */. /* ссылка на блок объявлений функций, стр 16 */ PHP _ MINIT(test), /* ссылка на описание функции инициализации модуля, стр 65-74 */ PHP _ MSHUTDOWN(test), /* ссылка на описание функции деинициализации модуля, стр 76-85 */ PHP _ RINIT(test), /* ссылка на описание функции при инициализации страницы, стр 88-93 */ PHP _ RSHUTDOWN(test), /* ссылка на описание функции при деинициализации страницы, стр 96-101 */ PHP _ MINFO(test), ), /* ссылка на описание функции, которая выдает информацию для phpinfo() */ #if ZEND _ MODULE _ API _ NO >= 20010901 "0.1", ) /* Номер версии нашего расширения */ #endif

28 "test" , 29 test _ functions, 30 31 32 33 34 35 36 37

Описание тела самой функции определяется макросом PHP_FUNCTION (name). Описание функции confirm_test_ compiled() определено в строчках 121-136. Если вы хотите добавить новую функцию add_string(), то необходмио скопировать строчки 121-136 ниже и изменить имя функции и содержание того, что она должна выводить (красным цветом помечен измененный текст):

Далее немного изменим файл test.php: <? print PHP _ SHLIB _ SUFFIX; if(!extension _ loaded('test')) { dl('test.' . PHP _ SHLIB _ SUFFIX); } $module = 'test'; $functions = get _ extension _ funcs($module); echo "Functions available in the test extension:<br>\n"; foreach($functions as $func) { echo $func."<br>\n"; } echo "<br>\n"; print add _ string($module); ?>

П р и в е р н о й ко м п и л я ц и и в ы з о в фу н к ц и и ad d _ string($module) выдаст перечень доступных функций и свои поздравления: «Congratulations! You have successfully new function» – это и есть поздравления. # php test.php Functions available in the test extension:<br> confirm_test_compiled<br> add_string<br> <br> Congratulations! You have successfully new function

Шаг пятый Передача параметров Вы научились создавать шаблон модуля, добавлять в него функции. Конечно, функции нужны для того, чтоб что-то вычислять или производить какие-то действия с данными. Для этого в функцию необходимо передать какой-нибудь список параметров и получить результат. Для передачи параметров из PHP в модуль используются макросы. Макрос ZEND_NUM_ARGS() возвращает количество аргументов, переданное PHP-скриптом в модуль. Можно, например, для контроля количества аргументов использовать следующий код: if(ZEND _ NUM _ ARGS() != 2) WRONG _ PARAM _ COUNT;

Необходимо заметить, что макрос WRONG_PARAM_ COUNT определен в $PHP_HOME/Zend/zend_API.h, поэтому необходимо добавить заголовочный файл: #include "zend _ API.h"

/* {{{ proto string confirm _ test _ compiled(string arg) */ PHP _ FUNCTION(add _ string) { char *arg = NULL; int arg _ len, len; char string[256]; if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵ TSRMLS _ CC, "s", &arg, &arg _ len) == FAILURE) { return; } len = sprintf(string, "Congratulations! You have ↵ successfully new function "); RETURN _ STRINGL(string, len, 1); } /* }}} */

Нам остается повторить шаг 3 – компиляцию. Надеюсь, она прошла удачно.

72

При выполнении макроса WRONG_PARAM_COUNT будет выдано следующее предупреждение: <b>Warning</b> Wrong parameter count for module test()in /usr/ local/src/php-4.4.0/ext/test/test.php on line 4

Макрос zend_parse_parameters производит анализ (проверку) параметров. int zend _ parse _ parameters( /* количество аргументов. Может быть ZEND _ NUM _ ARGS() */ int num _ args TSRMLS _ DC, char *type _ spec, /* спецификация */ /* объявление аргумента в соответствии с его типом*/ arg _ type arg, ...);


web-программирование Рассмотрим наш пример (файл test.с), строка 129. В данном макросе для определения первого аргумента – количество переданных параметров – используется ZEND_NUM_ARGS(). Вторым параметром стоит спецификация «s», которая указывает на тип передаваемого аргумента – строка. Третьим и четвертым параметрами являются значения переменных, в которые передается содержание строки и ее длины. Спецификация определяется символами типа и спецсимволами. Символы типа определяют тип переменной, притом первый символ типа определяет тип первого аргумента, второй – второго и так далее… В PHP API определены следующие символы типа: l – long; d – double; s – string (с заключающим нетерминальным ‘\0’) и его длина; b – boolean; r – ресурс; a – массив; o – объект; O – объект, определенный как точка входа zval*; z – Zend – объект(zval*). Ресурс, массив и объект должны иметь тип zval*. Специальные символы дополняют спецификацию типов: | – определяет границу между обязательными и необязательными (опциональными) параметрами. Необязательные параметры в этом случае инициализируются значениями по умолчанию. / – при анализе параметра вызывает функцию SEPARATE_ZVAL_IF_NOT_REF(), которая предоставляет копию параметра, если он не является ссылкой. ! – следующий параметр может специфицировать тип или значение NULL (применимо только к типам a, o, O, r и z). Если будет значение NULL, то будет установлен указатель на переменную параметра в NULL.

char *arg = NULL; int arg _ len, len; int i = 0 ; char string[256]; if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵ 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 test.php Congratulations! You pass parameters string: test <br> Integer: 12

В случае если на этапе обработки параметров вычисляются какие-либо ошибки или несоответствия, то можно использовать макрос: php _ error( E _ WARNING, /* тип сообщения, в данном случае WARNING, для ошибки тип E _ ERROR */ message , /* сообщение */ /* имя вызываемой функци */ [ get _ active _ function _ name( TSRMLS _ C )] );

В качестве примера изменим строку в файле test.php:

И последнее, без чего не было бы логического завершения, так это возвращаемые значения функций. Каждая определенная в РНР функция может что-либо возвращать: в нашем примере файл test.с возвращает в строке 134 строковое значение (строку string_value длиной lenght_string) используя Макрос RETURN_STRINGL(string_value, lenght_ string, duplicate_flag). У всех макросов тип возвращаемого значения понятен из их названия. Например, макрос RETURN_LONG(long_ value) возвращает значение, определенное типом long. Существуют следующие макросы: RETURN_BOOL (bool) RETURN_NULL RETURN_FALSE RETURN_TRUE RETURN_DOUBLE(double) RETURN_STRING(string_value, duplicate_flag) RETURN_EMPTY_STRING() RETURN_RESOURCE (resource)

<? if(!extension _ loaded('test')) { dl('test.' . PHP _ SHLIB _ SUFFIX); } $module = 'test'; $i = 12;

Следует отметить отличие макроса RETURN_STRINGL() от RETURN_STRING() в том, что первый макрос работает быстрее второго за счет явного определения количества выводимых символов.

Примеры спецификаций: «ssl|a» – передается три обязательных параметра («string», «string», «long») и один опциональный, тип «array». «a/» – передается раздельный массив.

print add _ string($module, $i ); ?>

А в файле test.с изменим тело функции add_string: /* {{{ proto string confirm _ test _ compiled(string arg) */ PHP _ FUNCTION(add _ string) {

№11, ноябрь 2005

Вместо заключения В принципе данных знаний вам будет достаточно для написания простых функций, которые можно использовать в РНР. Более подробную информацию по данной теме можно найти на официальном сайте: http://ru.php.net/streams или http://zend.com/apidoc/zend.php.

73


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

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

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

О

том, как пользоваться этим редактором, вы можете узнать из встроенной справки в редактор или из официальной документации, опубликованной на сайте разработчика (http://www.sapien.com). Мы поговорим о недокументированных возможностях, вы сможете самостоятельно интегрировать в редактор свои собственные шаблоны, создавать описание новых языков программирования, при необходимости вносить изменения в объектную модель, отображаемую в виде подсказки.

Интегрируем собственные шаблоны Каждый программист имеет собственные наработки, которые позволяют ему быстро и качественно создавать различные скрипты. Получив возможность интегрировать их в редактор, он сможет еще быстрее их создавать, не тратя время на поиск нужного файла, содержащего шаблон. Словом, это позволит сделать работу в редакторе еще приятнее и эффективнее. Создадим шаблон, в котором осуществляется соединение с Active Directory с помощью ADODB-соединения. За основу шаблона примем сценарий, с помощью которого осуществляется чтение всех пользователей в AD (о том,

74

как осуществляется подключение и чтение данных из AD, см. статью «Программное управление ADSI: LDAP», №3, 2004 г.): 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="" SamAccountName= St.Fields("Samaccountname").Value Description="" A _ Description= St.Fields("Description").Value


программирование For Each AA in A _ Description Description= Description+AA Next Temp=Temp+ "Имя: "+ SamAccountName + "Описание: " + ↵ Description +chr(13)+chr(10) st.MoveNext Loop Wscript.Echo Temp

Рисунок 1. Файловая структура PrimalScript

Рисунок 2. Вид окна Tools для управления отображения меню с шаблонами

Рисунок 3. Snippet Browser. Пример использования шаблонов

Рисунок 4. Тестовая объектная модель

№11, ноябрь 2005

Из приведенного сценария можно сделать несколько шаблонов: шаблон определения длинного имени домена, соединения с AD, SQL-запрос обращения к объекту, чтения данных строка и массив. Однако ограничимся созданием только одного шаблона. По местоположению в скрипте соединение с AD располагается в самом начале и сразу после него формируется SQL-запрос. Выбор создания именно такого шаблона не случаен. Дело в том, что для успешного соединения с 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" 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\», если программа установлена по умолчанию. Иерархическую структуру расположения шаблонов и описания функций различных языков определяет структура каталогов и файлы с расширением snippet (см. рис. 1). Итак, создадим в каталоге «Snippets» подкаталог «Шаблоны на VBScript», а в нем файл «AD Connection.snippet», который является текстовым. Все его содержимое представляет собой шаблон. После создания файла и заполнения его содержимым необходимо перезапустить PrimalScript, чтобы внесенные в файловую структуру изменения вступили в силу. Войдя в редактор, необходимо вызвать меню «Snippets Windows», в котором находятся все шаблоны. Для этого необходимо в меню «Tools» выбрать пункт Options, а в поя-

75


программирование вившемся окне войти в «Environment/Nexus Windows» и сделать активным меню «Snippet Browser», как это показано на рис. 2. Чтобы сделанные изменения вступили в силу, необходимо перезапустить редактор. Затем в навигаторе «Snippet Browser» (см. рис. 3) помимо 10 встроенных подразделов появится еще один – «Шаблоны на VBScript», в котором будет один шаблон «AD Connection». Для его использования необходимо создать файл с расширением VBS и два раза нажать мышкой по файлу. Содержимое файла «AD Connection.snippet», содержащее шаблон, будет добавлено в сценарий.

Описываем новую объектную модель Создание собственных объектных моделей поможет вам избежать ошибок при создании кода. Разберем простой пример. На рис. 4 изображена некая объектная модель, которую предстоит описать. В ней присутствует ряд объектов, которые имеют свойства. Существует несколько правил описания модели. По структуре файл представляет собой INI-файлы, которые раньше активно использовались. Иерархии описываются с помощью имени раздела. Сами параметры, которые могут быть объектами или свойствами, различаются символами «P» или «M» соответственно. Синтаксис строки выглядит следующим образом: сначала пишется идентификатор P или M. Затем пишется название объекта или свойства, после него уточняющие параметры. Обратите внимание, что в названии раздела и описании значения раздела между идентификатором и именем объекта символ пробела не допускается! Итак, объектная модель любых объектов описывается в текстовых файлах с расширением «sense», расположенных в корневом каталоге программы. Как правило, объектная модель используется при создании скрипта на том или ином языке программирования. В корневом каталоге редактора присутствует несколько файлов с расширением «sense». Для описания нового языка программирования необходимо создать новый файл с таким расширением и описать его в настройках программы. Мы же отредактируем файл, предназначенный для создания сценариев на VBScript. Отображенная иерархическая модель описывается в файле, как показано на рис. 5, там же показана иерархическая связь объектов. Связанные объекты выделены

одинаковыми цветами. Направления связей (дочерний /родительский объект) показаны на рисунке стрелками. После того как созданный текст добавлен в конец файла VBScript.sense, Рисунок 5. Описание объектной необходимо перезагрузить модели в файле редактор и создать или открыть любой файл с расширением VBS. Итак, пробуем: набираем Root и видим, что можем выбрать один из объектов: Object_1 или Object_2, или одно из свойств объекта Root – Property_1 или Property_2 (см. рис. 6). Продолжим тест. Выберем объект Object_2. В нем мы увидим еще два свойства и объект – выберем его. У выбранного объекта Object_2_1 есть единственное свойство Property_2_1_1, которое мы и выберем.

Добавляем новые функции в существующие языки программирования Существует масса языков программирования, набор функций которых расширяется до сих пор: выходят новые версии. Ярким примером представителя такого языка программирования является KIXTart, который уже несколько лет находится в активной разработке. С выходом новой версии в нем становятся доступны новые функции, которые хотелось бы сделать «понятными» для редактора. Для этого нам опять же придется отредактировать соответствующий файл с расширением «sense», например, KIXTart.sense. Приведу пример добавления абстрактной функции WriteToXml(), которая имеет три параметра: имя файла, записываемый текст и кодировку. Причем кодировка – не обязательный параметр. Исходя из этих условий, функция имеет синтаксис: WriteToXml("filename", "doby" [, "encoding"])

Для того чтобы редактор воспринял «WriteToXml» как служебное слово, необходимо в файл Kixtart.sense добавить строку: 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/itproject/windescr.asp). Состав команды: Руководитель проекта – Земскова Ольга (студентка 5 курса МИЭМ, Microsoft Certified Systems Administrator). Исполнитель решения – Цюрюпа Егор (студент 4 курса МИЭТ). Составитель проектной документации и демонстратор решения – Ширнин Олег (студент 5 курса МИЭМ, Microsoft Certified Systems Administrator).

2.

3.

Техническое задание: описание сетевой инфраструктуры компании Сетевая инфраструктура компании до начала проектирования и схема сети уже были приведены в прошлом номере журнала (№10), и, чтобы не повторяться, здесь укажем только самые необходимые данные. До недавнего времени у компании был один офис с одноранговой сетью, не подключенной к Интернету. Недавно был арендован новый офис, при этом планируется, что оба офиса будут подключены к Интернету с помощью высокоскоростного ADSL-соединения. Компания уже закупила 5 серверов с OC Microsoft Windows Server 2003 Standard Edition. Три из них установлены в основном офисе и два – в дополнительном офисе. Все клиентские компьютеры – Windows XP Professional. Приобретено также беспроводное и ADSL-оборудование компании ZyXEL (P-662HW и P-2602HW), заключен договор с провайдером и выполнено подключение офисов к Интернету на скорости 7,5 Мбит/с с выделением по одному статическому IP-адресу на каждый офис.

Техническое задание: требования к проекту 1. Организовать обмен документами между офисами. В каждом из офисов должен быть файловый сер-

78

4.

5.

вер для хранения и обмена документами между сотрудниками офиса, а также для обмена документами между офисами. Этот сервер предназначен только для хранения деловых документов, запись на него музыкальных и видеофайлов запрещена. Обмен документами между офисами должен осуществляться только через локальный или удаленный файловый сервер. Прямой обмен документами между клиентскими станциями разных офисов должен быть заблокирован. Доступ сотрудников офиса к файловому серверу, расположенному в другом офисе, должен быть «прозрачным», т.е. не должны запрашиваться имя и пароль. Защитить информацию при обмене между офисами. Для защиты передаваемой между офисами информации должно быть организовано шифрование на этапе передачи данных через Интернет. При этом длина ключа шифрования должна составлять не менее 128 бит. Обеспечить безопасную и эффективную работу с Интернетом. Организации требуется решение, позволяющее: Ограничивать доступ в Интернет для отдельных групп пользователей. Вести журнал доступа в Интернет и проводить анализ использования Интернета (наиболее популярные сайты, объем загруженный из Интернета тем или иным пользователем и т. д.). Безопасно публиковать внутренние серверы (вебсерверы и сервер электронной почты) для обеспечения доступа к ним из Интернета. Обеспечить удобство администрирования сети. Предложенное решение должно максимально сокращать издержки на администрирование и поддержку IT-инфраструктуры. Типичные задачи администрирования (создание новых пользователей, разграничение доступа, развертывание приложений и т. д.) должны выполняться максимально просто. Внедрить систему электронной почты. Компании требуется внедрение системы электронной почты, позволяющей обмениваться электронной почтой как внутри организации, так и за ее пределами. Поскольку в организации уже давно используется Microsoft Office, большинство клиентов будут работать с электронной почтой с помощью Microsoft Outlook, но должна быть


итоги IT-турнира также предусмотрена возможность применения и других клиентов электронной почты. Для упрощения переписки крайне желательно, чтобы для любого пользователя был доступен общий адресный список, содержащий электронные адреса всех пользователей организации. 6. Реализовать беспроводное подключение в офисах. В обоих офисах решено организовать беспроводной доступ к сети организации для приезжающих торговых представителей и партнеров. Всех беспроводных клиентов можно разделить на два класса: Беспроводные клиенты, которым требуется ограниченный доступ к документам организации (доступ к определенным общим папкам) и доступ к Интернету. Обычно это партнеры, приезжающие на несколько дней и работающие в офисе. Беспроводные клиенты, которым не требуется доступ к документам организации, но требуется доступ к Интернету. Для обоих классов клиентов беспроводной доступ должен быть аутентифицированным. Беспроводное решение также должно обеспечивать конфиденциальность передаваемого беспроводного трафика путем шифрования. Длина ключа шифрования – не менее 128 бит. При шифровании беспроводного трафика требуется периодическая смена ключа шифрования для затруднения криптографических атак. 7. Установить веб-сервер организации. Веб-студией разработан веб-сайт компании, который должен быть размещен на одном из серверов основного офиса и к которому требуется обеспечить доступ из Интернета. Запись www.eurostroy-m.ru внесена в DNS-зону eurostroy-m.ru, которая поддерживается DNS-сервером провайдера. Эта запись соответствует статическому IP-адресу, выделенному провайдером при подключении основного офиса к Интернету через ADSL-соединение. По предварительным оценкам, объем информации, загружаемый с сайта, не превысит 300 Мб в сутки.

Реализация проекта После анализа технических требований проекта командой были приняты следующие решения:

Требования 1 и 2 Согласно ТЗ выделено только по одному «реальному» IP-адресу на каждый из офисов, поэтому в офисах компании будет применена частная IP-адресация (согласно RFC1918). Для подключения к Интернету будет использовано устройство, выполняющее функции NAT (network address translator). Для маршрутизации между сетями офисов, каждая из которых находится за NAT-устройством, между этими устройствами будет установлен шифрованный VPN-туннель. В качестве кандидатов на VPN-протокол могут рассматриваться PPTP, L2TP или IPSec в туннельном режиме. Командой был выбран протокол PPTP как более простой в настройке и обеспечивающий требования ТЗ. После настройки VPN-туннеля серверы и рабочие станции одного офиса смогут непосредственно взаимодействовать с серверами и рабочими станциями дру-

№11, ноябрь 2005

Рисунок 1. Схема сети предприятия, предложенная командой H0lid@ys

гого офиса, как если бы они просто находились в разных сегментах одной локальной сети.

Требование 3 Поскольку стоит задача устанавливать разный уровень доступа к Интернету для различных пользователей и вести удобный журнал использования Интернета, необходимо выбрать подходящее решение. Если в качестве устройства-шлюза будет использован интернет-центр ZyXEL, то в полном объеме требование выполнить не удастся. Поэтому следует применить специализированный Firewall/ Proxy server. В качестве такого решения командой был выбран MS ISA Server 2004. Его основное достоинство – обеспечение контроля доступа в Интернет не по IP-адресам компьютеров, а по пользователям Active Directory. Причем при попытке пользователя выйти в Интернет с использованием любой программы (браузер, FTP-клиент, ICQ и т. д.) аутентификация пользователя проходит для пользователя абсолютно незаметно. Это достигается путем установки на каждом клиентском компьютере специального ПО, называемого «Firewall Client». Важно заметить, что установка Firewall Client не является обязательной, она лишь позволяет обеспечить аутентификацию для любых Winsock-приложений, а не только для веб-браузеров. Также ISA Server позволяет анализировать трафик, который передается между офисами по VPN-туннелю и контролировать доступ между ними. Так можно выполнить требование: «Прямой обмен документами между клиентскими станциями разных офисов должен быть заблокирован». ISA Server 2004 может ввести журнал как в файл, так и в базу данных, а также имеет удобные средства построения отчетов. Поскольку ISA Server 2004 используется как шлюз для доступа в Интернет, он должен быть расположен между сетью офиса и Интернетом и выполнять функции NAT. Тем не менее подключение к Интернету уже выполнено с использованием интернет-центра ZyXEL, который также является NAT-устройством. Решить проблему можно несколькими способами, например, запросив у провайдера дополнительные IP-адреса и организовав маршрутизацию, или перевести интернет-центр в режим моста (если это позволяет провайдер). Команда решила просто настроить на интернет-центре трансляцию всех портов (port translation) для входящих запросов. В этом случае все запросы, поступаю-

79


итоги IT-турнира щие на внешний IP-адрес интернет-центра ZyXEL, перенаправляются на внешний IP-адрес компьютера MS ISA Server 2004 и тот же самый порт. При отправке клиентом пакета в Интернет, этот пакет идет следующим путем: 1. Клиент. 2. ISA Server 2004 (NAT+контроль доступа в Интернет). 3. Интернет-центр ZyXEL (NAT). 4. Маршрутизатор провайдера и далее – в сеть Интернет.

Требование 4

Простота настройки и поддержки. В минимальном варианте настройки после установки MS Exchange достаточно задать почтовый домен организации (@eurostroy-m.ru) и можно приступать к созданию почтовых ящиков. Наличие встроенного доступа к электронной почте через веб-браузер по протоколу HTTP – Outlook Web Access. Этот метод может применяться, например, сотрудником компании для доступа к почте из интернет-кафе, если сотрудник находится в командировке.

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

Служба каталогов 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. Плюсами технологии 802.1x (PEAP) являются: зации (через Outlook Web Access).

80


итоги IT-турнира Аутентификация по именам и паролям, что позволяет вести журнал подключений и отслеживать попытки доступа к беспроводной сети. Лучшая управляемость, поскольку для смены пароля достаточно изменить его в Active Directory и не требуется перенастройка точки доступа. Автоматическое согласование ключей шифрования трафика (WEP) между точкой доступа и клиентом при подключении, что позволяет повысить безопасность беспроводного доступа и выполнить требование ТЗ. Для шифрования беспроводного трафика был применен протокол шифрования WEP 128 бит. Доступ к сети для беспроводных пользователей контролируется политикой удаленного доступа, созданной на сервере RADIUS. Эта политика разрешает подключение к беспроводной сети членам группы безопасности WLAN Access в рабочее время по рабочим дням. Эта группа в свою очередь включает две глобальные группы безопасности: WLAN Users и WLAN Computers. Группа WLAN Users включает в себя группы WLAN Users Visitors (включает пользователя wlan_visitor) и WLAN Users Partners. Группа WLAN Computers не используется в сценарии, однако спроектирована с расчетом на то, что компания в будущем будет владеть беспроводными компьютерами – членами домена. Кроме того, политика беспроводного доступа предусматривает повторную аутентификацию пользователя в сети каждые 15 минут (Session Timeout), что является рекомендуемым временем для смены пароля WEP. Беспроводному клиенту, которому требуется только доступ к Интернету, сообщается имя и пароль пользователя wlan_visitor. Этому пользователю явно запрещен доступ к общим ресурсам. Если же клиенту требуется доступ как к Интернету, так и к сети организации, ему сообщается имя и пароль учетной записи, специально созданной для этого человека администратором и включенной в группу WLAN Users Partners. В обоих случаях беспроводной пользователь попадает в сеть 10.x.x.x, для которой на соответствующем шлюзе ISA Server публикуется внутренний файловый сервер, расположенный на контроллере домена (ISA Server 2004 Server Publishing rule, протокол CIFS Server).

Комментарий экспертов Применение криптографически слабого протокола WEP в данном сценарии ничем не оправдано. Рекомендуется применение протокола WPA, поддержка которого имеется как в оборудовании ZyXEL, так и в ОС Windows XP. Это потребует всего лишь выбора соответствующей опции при настройке интернет-центра ZyXEL и при настройке беспроводных клиентов. Публикация на ISA Server протокола CIFS для беспроводных клиентов (для обеспечения доступа к общим папкам на контроллере домена) не кажется хорошей идеей. На наш взгляд, лучше было бы создать на самом компьютере ISA Server отдельную общую папку, открыть к ней доступ из сети 10.x.x.x и использовать ее для обмена данными между сотрудниками организации и беспроводными клиентами.

Требование 7 По соображениям безопасности веб-сервер в основном офисе (MS IIS 6.0) было решено разместить на отдельном

№11, ноябрь 2005

Рисунок 2. Схема сети предприятия с учетом предложенных экспертами изменений

сервере, не входящем в домен. Сервер публикуется на ISA Server 2004 основного офиса с помощью стандартного правила публикации веб-серверов.

Комментарий экспертов Размещение веб-сервера во внутренней сети организации не является хорошей практикой. Рекомендуется перенос веб-сервера в сеть 10.1.1.0, которая находится между интернет-центром и ISA Server. При этом необходимо будет перенастроить интернетцентр так, чтобы выполнялась не полная трансляция всех портов на адрес ISA Server, а только трансляция портов для протокола PPTP. После этого на интернет-центре нужно будет задать, что порты 80 TCP (HTTP) и 25 TCP (SMTP) будут транслироваться на IP-адрес веб-сервера.

Заключение экспертов Команда очень тщательно подошла к планированию проекта. В качестве положительных моментов можно отметить использование одного домена (согласно ТЗ применение двух доменов видится неоправданным) и реализованную полную отказоустойчивость основных служб (AD, DNS, DHCP). Тем не менее решение получилось довольно дорогим (стоимость операционных систем согласно ТЗ не учитывалась). Дополнительные затраты потребовались на приобретение 2-х экземпляров ISA Server 2004 Standard Edition и MS Exchange Server Standard Edition. Примерная стоимость решения составила $6935 (MS Exchange Server Standard Edition + 35 Клиентских лицензий + 2 шт. MS ISA Server 2004 Standard Edition). Для сравнения – некоторые команды реализовали проект, используя только встроенные возможности оборудования ZyXEL и ОС Microsoft Windows (правда, в ущерб некоторой функциональности). Рекомендуемая схема сети предприятия с учетом предложенных экспертами изменений приведена на рис. 2. В целом сложность проекта соответствовала квалификации Сертифицированного Системного Администратора Microsoft (MCSA), а большинство настроек изучалось в учебных курсах Microsoft «MS-2273 Управление и поддержка среды Microsoft Windows Server 2003» (http://www.it-university.ru/courses/ms-2273.asp) и «MS-2277 Внедрение, управление и сопровождение сетевой инфраструктуры Windows Server 2003: сетевые службы» (http://www.it-university.ru/courses/ms-2277.asp).

81


хобби

Десять красок неба

К

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

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

82


хобби

Воздушный змей – это не летательный аппарат, а способ самовыражения

Запуск воздушного змея из кальки

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

Чем занимаются системные администраторы в свободное от работы время? Давно известно, что если единственный интерес человека в жизни – работа, то спустя довольно непродолжительное время этот человек чахнет и для общества пропадает. Ежедневный маршрут «работа-дом» становится мягкой клеткой, из который выбраться подчас не так-то просто. Редакция журнала с удовольствием представляет вашему вниманию новую рубрику «Хобби». В этой рубрике мы будем рассказывать о том, как проводят свое свободное ваши коллеги, какие хобби и увлечения помогают спра-

№11, ноябрь 2005

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

Полет Ары под Павловском

83


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

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

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

П

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

олулегендарная архитектура Alpha, в прошлом долгое время лидировавшая в плане производительности среди многочисленных RISC- и CISC-архитектур, своим существованием была обязана американской Digital Equipment Corporation (сокращённо DEC). Прежде чем приступить к рассмотрению этой интересной архитектуры, стоит кратко рассказать об истории компании-основательницы, хотя бы потому, что она того вполне заслуживает.

84


ретроспектива ре, имеющей в своей основе системную шину Unibus (или её модификации под названием Q-bus), а также вследствие простого набора команд и относительно невысокой себестоимости модельный ряд PDP-11 быстро обретал популярность. Стоит отметить, что клоны PDP-11 выпускали и в странах бывшей Организации Варшавского Договора: СМ-4, СМ-1420, СМ-1600, ИЗОТ-1016, ДВК... Хотя PDP-11 был очень успешной разработкой (к слову, на нём и на PDP-7 было осуществлено первое издание ОС UNIX в Bell Laboratories в 1971 году), но обладал одним существенным недостатком: ограничением на максимальный размер адресного пространства в 64 Кб, следующим из его 16-битности. Поэтому в 1975 году внутри компании началась работа двух конкурирующих проектов, призванных определить направление будущих разработок. Один из них назывался «Единорог» (Unicorn) и развивал идеи, заложенные в PDP-10. Второй проект, «Звезда» (Star), находился под руководством Гордона Белла (Gordon Bell) и работал над усовершенствованием PDP-11. После анализа результатов обоих направлений проект «Единорог» был закрыт, как и разработка 36-битной архитектуры PDP-10 в целом, а проект «Звезда» дал начало новой 32-битной архитектуре VAX (Virtual Address eXtension), являвшейся улучшенной реализацией PDP-11. В октябре 1977 года было представлено первое материальное воплощение этой архитектуры – модель 11/780, а в феврале следующего года была выпущена новая операционная система для этой аппаратной платформы – VMS (Virtual Memory System), вскоре переименованная в VAX/VMS, а позже и в OpenVMS. На машины архитектуры VAX также была портирована классическая ОС UNIX. Если кратко подвести итоги, то можно уверенно сказать, что архитектура VAX была достойным наследником PDP-11. Её модельный ряд насчитывал несколько десятков наименований – от компактных рабочих станций до 6-процессорных тяжёлых серверов. По сей день тысячи VAX работают в многочисленных промышлен-

№11, ноябрь 2005

ных и военных структурах, что уже говорит о многом.

PRISM и Alpha, или Наступление RISC Тем не менее начало 1980-х годов ознаменовалось наступлением RISC-архитектур. Хотя первые из них, MIPS и SPARC, всё ещё не могли существенно потеснить VAX, но в перспективе их потенциал был более значителен. Разумеется, это не означало неизбежное поражение VAX в ближайшем будущем, но в долгосрочной перспективе её шансы на удержание большой доли рынка рабочих станций и серверов были сомнительны, а на только что сформировавшемся рынке персональных компьютеров хозяйничали Intel и Motorola (с постепенным преобладанием первой). Поэтому руководство DEC с 1982 года финансировало несколько внутренних проектов по RISC-разработкам (Titan, SAFE, HR-32, CASCADE), а в 1985 году свело их в один под названием PRISM (PaRallel Instruction Set Machine), находившийся под руководством Дэвида Катлера (David Cutler). Хотя к 1988 году проект 32-битного RISCпроцессора всё ещё находился в процессе разработки, руководство компании сочло дальнейшее финансирование нецелесообразным и закрыло его. В знак протеста Катлер ушёл в Microsoft, где возглавил подразделение по разработке Windows NT (тогда ещё именовавшейся OS/2 3.0). В середине 1989 года руководство компании приняло решение возобновить работу над собственным RISCпроцессором, но на этот раз постановка задачи была несколько иная. Новый процессор должен был быть изначально 64-битным, но в то же время иметь минимум несовместимостей с архитектурой VAX, что должно было облегчить портирование под него существующей программной базы. К тому же конкуренты в лице MIPS и Sun были уже в процессе перехода на 64-битные решения. Была создана рабочая группа под руководством Ричарда Витека (Richard Witek) и Ричарда Сайтса (Richard Sites), которая разработала процессор под кодовым названием Alpha, представленный 25 февраля 1992 года в Токио. Он был представителем «чистой»

64-битной архитектуры (в противовес MIPS, SPARC, PA-RISC и POWER, бывших изначально 32-битными и только со временем расширенных до 64-битных), оперировавшей инструкциями фиксированной длины (по 32 бита), обладал 32 целочисленными 64-битными и 32 вещественными 64-битными регистрами, работал с 43-битными виртуальными адресами (с расширением вплоть до 64-битных в перспективе для архитектуры) и использовал, как VAX, little-endian порядок следования байт (то есть, когда младший байт регистра занимает при записи младший адрес в памяти), который традиционно поддерживался Intel в противовес к big-endian (где младший байт регистра занимает при записи старший адрес в памяти), внедрённому Motorola и поддерживаемому конкурентными RISC-архитектурами того времени. Стоит отметить, что блок вещественных вычислений поддерживал произвольный доступ к вещественным регистрам в отличие от процессоров архитектуры x86, которые работали с примитивным стековым доступом. В целом новая архитектура выглядела серьёзным заделом на будущее, поэтому заявленный срок её поддержки и развития в 25 лет особого удивления не вызывал. С точки зрения набора инструкций, архитектура шла по пути достаточного минимализма, чтобы облегчить скоростное декодирование и облегчить конвейеризацию вычислений. Например, инструкции целочисленного деления аппаратно отсутствовали, так как были наиболее сложными из целочисленных и плохо поддавались конвейеризации, а потому просто эмулировались, так как на практике необходимость в их использовании возникала относительно редко. Все инструкции условно подразделялись на 5 категорий: для целочисленных вычислений; для вещественных вычислений; для отработки условных и безусловных переходов, а также сравнения; для загрузки и сохранения данных; д ля специфических за дач (PALcode). В целом ставка делалась на достижение высоких тактовых частот,

85


ретроспектива но не в ущерб надёжности или масштабируемости. Кроме того, новая архитектура была «настоящей» RISC. Для облегчения понимания концептуальных различий между RISC-процессорами (Reduced Instruction Set Computing) и CISC-процессорами (Complex Instruction Set Computing) приводятся следующие ключевые моменты: длина инструкции: фиксированная в RISC (вне зависимости от характера инструкции), но произвольная в CISC (в зависимости от характера инструкции); набор инструкций: сбалансированный в RISC (подбираемый с точки зрения удобства выполнения процессором) и широкий в CISC (подбираемый с точки зрения удобства программиста); доступ к памяти: разрешён только для инструкций загрузки/сохранения в RISC, но без подобного ограничения в CISC.

Alpha 21064, или Штурм рынка Первый Alpha-процессор предполагалось запустить в производство на очень высокой тактовой частоте – 150 МГц, а впоследствии довести до 200 МГц при тех же производственных нормах. С этой задачей конструкторы и технологии DEC успешно справились. Процессор получил рыночное название 21064 («21» указывал, что он являлся представителем архитектуры XXI века, «0» – процессорное поколение, «64» – разрядность в битах), а архитектура получила название Alpha. Процессоры этой архитектуры также часто можно встретить и под кодовыми именами. Например, у 21064 оно было EV4 («EV» предположительно является аббревиатурой «Extended VAX», а «4» – поколением техпроцесса, CMOS4, что в свою очередь есть аббревиатура Complementary Metal Oxide Semiconductor). EV4 поступил в производство на передовом для того времени 3-слойном 0,75 мкм техпроцессе, который был впоследствии модифицирован до 0,675 мкм (CMOS4S). В архитектурном плане процессор состоял из одного целочисленного конвейера (E-box, 7 стадий), одного вещественного конвейера (F-box, 10 стадий), де-

86

Первый процессор Alpha – 21064 (EV4)

кодера и планировщика (I-box), блока загрузки/сохранения (A-box), контроллера кэш-памяти и системной шины (C-box). Расчёт виртуальных адресов, обычно входящий в функции A-box, производился на целочисленном конвейере E-box. Процессор содержал 8 Кб кэша инструкций (I-cache, instruction cache) и 8 Кб кэша данных (D-cache, data cache), а также поддерживал внешний кэш 2-го уровня (B-cache, backup cache) размером до 16 Мб (обычно от 512 Кб до 2 Мб), хотя шина доступа к нему мультиплексировалась с системной, что несколько ограничивало производительность, но упрощало разводку (сокращало количество требуемых выходных контактов процессора и проводников на материнской плате). Кроме всего прочего, присутствовала поддержка многопроцессорного режима. Несмотря на отличные показатели производительности, EV4 был довольно дорог для многих потенциальных покупателей, поэтому в сентябре 1993 года был представлен его удешевлённый собрат – 21066 (он же LCA4 или LCA4S). Будучи основан на ядре EV4, этот процессор дополнительно включал поддержку контроллеров PCI и оперативной памяти, а также некоторых менее важных функций. Однако разрядность системной шины была урезана со 128 до 64 бит, а тактовые частоты были занижены (от 100 МГц до 166 МГц). В остальном процессор производился по тому же CMOS4S техпроцессу, что и поздние EV4, хотя уже месяц спустя был анонсирован 21064A (EV45), модифицированный вариант EV4, производимый по 4-слойному 0,5 мкм CMOS5 техпроцессу.

В ноябре 1994 года была представлена почти аналогично модифицированная версия LCA4 – 21066A (LCA45). Стоит отметить, что привычка маркетологов DEC добавлять букву к модели процессора при перепроектировке под новый техпроцесс сохранилась и в дальнейшем. В то время как LCA45 архитектурно почти не отличался от LCA4, то размеры I-cache и D-cache у EV45 были удвоены, что не могло не отразиться на производительности. К тому же благодаря новым техпроцессам удалось поднять тактовые частоты процессоров: до 300 МГц у EV45 и до 233 МГц у LCA45. Для сравнения, самые быстрые процессоры архитектуры x86 того времени, Intel Pentium и Intel 486DX4, соответственно работали на тактовых частотах в 66 МГц и 100 МГц максимум. Первые наборы системной логики (чипсеты) для EV4 были спроектированы для использования периферийных шин TURBOchannel, FutureBus+ и XMI. Несмотря на то что эти шины были весьма скоростными для своего времени (около 100Мб/с на шину), они не получили широкого распространения. Поэтому DEC начала активно разрабатывать поддержку стандартных шинных интерфейсов, таких как PCI и ISA (EISA). В начале 1994 года был выпущен чипсет DEC Apecs в двух исполнениях (для 128-битной и 64-битной 33 МГц системной шины, модели 21072 и 21071 соответственно), поддерживающий 32-битную 33 МГц шину PCI. Между прочим, 21072 состоял из 6 микросхем, а 21071 – из 4. Поддержка шины ISA или EISA добавлялась установкой стандратного моста на шину PCI типа i82378IB (ISA) или i82378EB (EISA). Что касалось ценовой политики, то первые системы на основе процессоров Alpha стоили весьма немало. Например, выпущенная в октябре 1992 года рабочая станция DEC 3000 Model 500 AXP (кодовое имя Flamingo) в комплекте с 19-дюймовым монитором стоила 39 тыс. долл. США, а представленные в июле 1994 года рабочие станции на EV45 DEC 3000 Model 900 AXP и Model 700 AXP (кодовые имена Flamingo45 и Sandpiper45) предлага-


ретроспектива лись по цене в 43,4 тыс. и 27,7 тыс. $ соответственно.

Alpha 21164, или Битва за лидерство

щая логика, хотя размер I-cache был увеличен вдвое. В конечном итоге площадь ядра уменьшилась ещё на треть, а максимальная тактовая частота составила 533 МГц. Со временем на производственных мощностях Samsung был начат выпуск 0,28мкм вариант этого процессора (PCA57), который отличался удвоенными размерами I-cache и D-cache, планка максимальной тактовой частоты была поднята до 666 МГц, а площадь ядра опять удалось сократить на треть. Между прочим, у PCA56 и PCA57 было ещё одно, на этот раз позитивное, отличие от EV56: новый набор инструкций MVI (Motion Video Instructions), нацеленный на ускорение обработки видео- и аудиоданных путём векторизации вычислений, подобно набору инструкций MMX для процессоров архитектуры x86. Для процессоров поколения EV5 было разработано несколько стандартных чипсетов. Первый из них, 5-чиповый DEC Alcor (21171), поддерживал 128-битную 33МГц системную шину и 256-битную шину памяти, a также 64-битную 33МГц шину PCI. Встроенный контроллер IDE отсутствовал, равно как и мост PCI-ISA(EISA), то есть они по-прежнему устанавливались отдельными микросхемами. Так как для реализации BWX требовалась поддержка со стороны чипсета, то одновременно с выпуском EV56 появился DEC Alcor 2 (21172), только этим и отличавшийся от 21171. Следующей разработкой стал DEC Pyxis (21174), который уже поддерживал 66 МГц системную шину той же разрядности и вдвое более узкую (128-битную) шину памяти, хотя это компенсировалось поддержкой оперативной памяти SDRAM вместо морально устаревшей и более медленной FPM DRAM. Также имелся чипсет не от DEC, предназначенный в поддержку PCA57 – VLSI Polaris.

Информация о процессоре архитектуры Alpha следующего поколения, 21164 (EV5), была впервые озвучена на конференции в Пало-Альто (Калифорния, США) 14 августа 1994 года, хотя официальный выход датировался 7 сентября того же года. Процессор являлся экстенсивной модификацией ядра EV45, что выражалось в удвоенном количестве целочисленных и вещественПроцессор Alpha – 21164A (EV56) ных конвейеров, причём число стадий последних было сокращено с 10 до 9. влять операции загрузки/сохранения Тем не менее функционально конвейе- не только квантами по 32 или 64 биры всё же были несколько неоднород- та, изначально поддерживаемые арны, что экономило транзисторы логики хитектурой, но и по 8 или 16 бит. В оси в то же время обеспечивало эффек- новном это было вызвано падением тивную балансировку нагрузки. Впол- производительности при эмуляции не логично, что возможности I-box бы- кода архитектуры x86. EV56 отличалли также расширены вдвое (выборка ся от EV5 более новым техпроцессом, и декодирование 4 инструкций за такт), 4-слойным 0,35 мкм CMOS6, который иначе бы этот блок стал «узким мес- позволил довести тактовую частоту до том» процессора. Что касалось кэш- 600МГц. Samsung, лицензировавший памяти, то размеры и организация I- EV56 июне 1996 года, производил его cache и D-cache остались аналогичны по аналогичному техпроцессу, но чуть таковым у EV4, зато появился интег- более успешно – максимальная такторированный кэш 2-го уровня (S-cache, вая частота составляла 666 МГц. Кроsecondary cache) размером в 96 Кб, ко- ме того, переход на новый техпроцесс торый в значительной мере компен- означал и уменьшение площади ядра сировал недостатки I-cache и D-cache. (приблизительно на треть), что знаСтоит отметить, что EV5 был первым чительно сократило стоимость пров истории процессором с S-cache. изводства по сравнению с EV5. В цеВпридачу была сохранена подде- лом EV56 всё ещё оставался лидержка B-cache, размеры которого мог- ром по производительности, но ему ли составлять вплоть до 64 Мб (обыч- было всё сложнее конкурировать но от 1 Мб до 4 Мб), принцип мульти- с 64-битными RISC-соперниками в липлексирования сохранялся, равно как це Hewlett-Packard PA-8000 и PA-8200, поддержка 128-битной системной ши- Sun UltraSPARC I и UltraSPARC II, MIPS ны и многопроцессорного режима ра- R10000 и IBM POWER3. Первое поколеботы. Хотя EV5 и производился по то- ние процессоров Alpha было легче прому же техпроцессу, что и EV45, коли- двигать на рынке, так как его единсчество транзисторов в его ядре увели- твенными 64-битными соперниками чилось более чем 3 раза, в основном были процессоры MIPS, которые оказа счёт S-cache. Максимальная такто- зались первыми на этом поприще. вая частота составила только 333МГц, К тому же с выходом Intel Pentium Pro Что случилось с DEC? что было вполне предсказуемо, так пришлось начать серьёзную борьбу за 28 января 1998 года произошло собыкак использовался всё тот же техпро- место под солнцем и с CISC-процессо- тие, ставшее одним из ключевых в исрами архитектуры x86, которые были тории архитектуры Alpha: DEC, будуцесс (CMOS5). В октябре 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 – 21264B (EV68C) Процессор Alpha – 21264 (EV6) более узкой аппаратной и программной поддержки. Другие же UNIX-по- от пропускной способности кэшей ся как массовому решению, несмотря добные ОС с открытым кодом (NetBSD, и оперативной памяти. Как необхо- на приблизительно вдвое более высоLinux, OpenBSD и FreeBSD) не подде- димое дополнение к этой технологии, кую производительность в расчёте на рживались DEC вообще. Мотивы не процессор поддерживал переименова- единицу тактовой частоты, чем у EV56. совсем ясны, но определённо эти ОС ние регистров (register renaming). Ито- Да и собственно максимальная частомогли составить достойную конкурен- го, EV6 мог переупорядочивать в лю- та была немалой – 600 МГц. Архитектура EV6 была настольбой момент времени до 80 инструкцию Digital UNIX и OpenVMS. В мае 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 МГц. Для EV6 и его прямых потомков купила у DEC за 625 млн. долл. США ты ядра. Для формирования B-cache её фабрику в Хадсоне вместе с про- обычно использовались микросхемы было спроектировано два чипсета: ектными центрами в Остине (Техас) синхронной статической памяти с от- DEC Tsunami (21272, он же Typhoon) и Иерусалиме (Израиль), а также обя- ложенной записью (late-write), а позд- и AMD Irongate (AMD-751), хотя посзалась производить процессоры Alpha нее и с применением технологии DDR. кольку AMD Athlon использовал почти в будущем. Для полноты картины был Был полностью заменён системный аналогичную системную шинную арподписан договор о кросс-лицензиро- шинный интерфейс: шина данных ста- хитектуру, не должно было быть прола 64-битной, но использовала техно- блемой адаптировать чипсеты других вании патентов сроком на 10 лет. логию DDR, а кроме того, использова- производителей, но этого не произошлась звездообразная топология под- ло. DEC Tsunami был высокомасштаAlpha 21264, ключения (то есть каждый процессор бируемым чипсетом, так как состоял или Время реванша В феврале 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


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

Compaq и Hewlett-Packard, или Cмена хозяев Как показала история, Compaq довольно своеобразно распорядилась наследием в виде архитектуры Alpha. Стоит заметить, что приобретение DEC мотивировалось вовсе не достоинствами и перспективами этой архитектуры, а широкой сетью дистрибьюции компьютерной техники (в 98 странах), кросс-лицензионным соглашением с Intel (позволяющим строить тяжёлые сервера), а также всё ещё значительными сборочными мощностями. Поэтому уже в июне 1998 года был заключён альянс с Samsung, а также была совместно образована компания Alpha Processor Inc., в ведение которой были предоставлены маркетинговые аспекты развития архитектуры. Однако уже в начале 1999 года Compaq охватил внутренний кризис, результатом которого стал уход главного исполнительного менеджера Экхарда Пфайфера (Eckhard Pfeiffer) и падение курса акций приблизительно в 2 раза. Компания начала сворачивать финансирование неприоритетных сфер деятельности, в которых числился и сегмент продукции Alpha. 23 августа 1999 года было объявлено о прекращении участия в разработке Windows 2000 для Alpha, что вскоре подтвердила Microsoft. Это означало уход с рынка рабочих станций, который из-за пассивных действий Compaq и Samsung к тому времени фактически состоялся. В последующие два года шла банальная распродажа имеющейся аппаратной и программной базы архитектуры, пока 25 июня 2001 года Compaq официально не заявила о переводе своих серверных решений с архитектуры Alpha на IA-64 (то есть Itanium) к 2004 году. В принципе, на этом месте можно было бы опустить занавес, но 3 сентября того же года HewlettPackard заявила о своих намерениях приобрести Compaq, что и было осу-

90

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


bugtraq Отказ в обслуживании в диссекторе IRC-протокола в Ethereal

Отказ в обслуживании в Cisco при обработке 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-бит и делает их исполняемыми для всех пользователей. Локальный пользователь может с помощью этих сценариев повысить свои привилегии на системе. Обход каталога и межсайтовый URL производителя: www.f-secure.com. скриптинг в GNUMP3d Решение: Установите последнюю версию с сайта произПрограмма: 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. Материал четко и грамотно структурирован. Всего в книге семь частей, повествование идет от простого к более сложному. В первой части вы познакомитесь с общим устройством ядра, узнаете его структуру. Среди рассмотренных тем: монолитные архитектуры и мик-

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

Волоконная оптика. Теория и практика Девид Бейли, Эдвин Райт

Уникальное в своем роде издание. Единственная доступная на русском языке книга, в которой так удачно и грамотно изложены все основные концепции работы с оптическим волокном. Материал излагается в хронологическом порядке, начиная от проектирования и заканчивая тестированием сети. В разделе «Введение» люди, только начинающие знакомиться с новой для себя технологией, узнают о исто-

92

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

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

«КУДИЦ-ОБРАЗ» 2005 320 5-9579-0093-1 ≈ 212 руб.

Цена: Книга предоставлена издательством «КУДИЦ-ОБРАЗ».


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

Архитектура программного обеспечения на практике Лен Басс, Пол Клементс, Рик Кацман

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

ложены основные проблемы и задачи, с которыми сталкиваются разработчики на этапе проектирования ПО. Изложенная информация представляет собой описания собственного опыта авторов книги. Освещены три основные ступени: планирование, создание и анализ архитектуры. Основные темы части, посвященной планированию: архитектурно-экономический цикл, что такое «программная архитектура», в качестве практического примера использования архитектурных структур рассмотрена авиационная система A-7E. Раздел «Создание архитектуры» представлен следующим материалом: атрибуты и реализация качества, управление воздушным движением – пример разработки, ориентированный на высокую готовность, проектирование архитектуры, процесс документирования, реконструкция программной

архитектуры. Среди рассмотренных тем глав, посвященных анализу архитектуры, рассмотрены метод анализа компромиссных архитектурных решений и анализ стоимости и эффективности. В качестве примера представлена «всемирная паутина». Последняя часть книги посвящена такой актуальной теме, как использование одной и той же архитектуры в несколькоих проектах. Действительно, на разработку архитектуры для конкретного продукта уходит достаточно большое количество времени, так почему бы не адаптировать полученный результат для другого проекта. Издательство: «Питер» Год издания: 2006 Количество страниц: 575 ISBN: 5-469-00494-5 Цена: ≈ 510 руб. Книга предоставлена издательством «Питер».

Citrix MetaFrame Access Suite для Windows Server 2003 Стив Каплан, Тим Ризер, Алан Вуд

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

№11, ноябрь 2005

ний предприятия: серверные вычисления и предприятия по требованию, службы терминалов Windows и Citrix MetaFrame Access Suite. Далее авторы повествуют о проектировании SBCрешений для предприятия. Среди рассмотренных тем: подготовка организации к внедрению «предприятия по требованию», архитектура информационного центра и проектирование сети для серверных вычислений, клиентская среда, управление сетями. Также не оставлены без внимания вопросы, связанные с безопасностью. Процесс внедрения серверной вычислительной среды по требованию рассмотрен очень подробно: конфигурация сервера службы терминалов Windows и Citrix Metaframe Presentation Server, установка и настройка приложений, профили и политики, защита клиент-

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

«Питер» 2006 687 Количество страниц: 5-94723-961-2 ISBN: Цена: ≈ 978 руб. Книга предоставлена издательством «Питер».

Обзор книжных новинок подготовил Александр Байрак

93


подписка на 2006 год Российская Федерация Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать» Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (095) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (095) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры АРЗИ: Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс» Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10) Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайслисту через ООО Агентство «Editil Periodice» (2012, г. Кишинев, бул. Штефан чел Маре, 134) Подписка для Украины: Киевский главпочтамп Подписное агентство «KSS» Телефон/факс (044)464-0220

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

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

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

94

годовой полугодовой


подписка на 2006 год Редакционная подписка Открыта подписка через редакцию. Вы можете оформить подписку на любое количество номеров 2006 года. Редакция не высылает журналы за пределы Российской Федерации.

Для юридических лиц: Отправьте заявку по факсу (095) 928-82-53 или по e-mail: info1@samag.ru. Укажите наименование и банковские реквизиты своей организации, почтовый индекс и адрес доставки журнала, телефон и e-mail контактного лица, период подписки и количество номеров. Редакция выставит вам счет, после оплаты которого вы начнете получать журналы по почте. Необходимые бухгалтерские документы высылаются почтой.

Для физических лиц: Заполните нижеприведенную квитанцию, оплатите в любом банке и пришлите в редакцию копию с отметками банка. После поступления платежа редакция начнет отправлять вам номера.

№4 (2

№3(28) март 2005

подп 9) ww исно апре w.s й л am инде ь

2

00 ag.r кс По u 8165 5 5 Alt чтов хорошо, -N ая один монитор MD си Linux Xinerama: Ба aem сте а много лучше ма зова on ма рш я н кая редакция р русс а – у pix Win Knop т ст ов dow изато ройк удаленных файл ра а Ap Восстановление ach s Ser Cis ver co под Linux eк Ви ows Up ак рту не Microsoft Wind dat про ал FreeBSD в доме Ар eS ь кси н ая erv с п хиви on: -се ice ма Практикум Pythов по электронной почте ом руе рве ши s ощ м За р отправка файл на ью да щ – SV Win ита Ba нны ых в Linux IST cula е dow ко ключи Шифрование данн A на аппаратные №5 Си s M мму новый взгляд с и (30 н и т по o д ц bile ика )м оку ема д ww писн я процесса цеп ц заци w.s ой ай 2 м н с мати и о е Авто й к Оп нта озд По amag индек 005 5 баз 1С ие ции ани подключения 200 под тими Ищ чем .ru с 8165 бщ аль 5 5 PO я –о ем у M Lin зац щи QEMU евр 8165 помо я при ф D и и яция кс u ) пр S S ц Эмул Ст x яц (27 инде ич QL ро гра вка и е №2 исной .ru о W shell к т на ин м р и н ание лов PA м ag ин ия подп .sam рве Программиров х условиях ста -En защ ы едл w ная -се я у емы чен На ww ен ter ищ в экстремальны тем стр но кси ска систбеспе pris ен о е р ч Сис о ра й п аи Ка e, ную й ати но о бо C ва 80 ом ион ног тае уд к во ем TIN ьны 2. бес ал сс Авт ерац рамм т? UP ьс сал ен та S п 1x EA пров оп прог сет Чт вер ны но ов од P-T од ую уни е ф вит и н D – ь а Lin LS ную л жн Ус BS ай ь KS ux туа тан лы оз ree се р в F и SOC в с ть: на ко ав по иза fiixx рп ли ть им кур д t л tf о ы е s й р ор ва Эф BS р об o ы №7(32 Ст тод ати ем D ие еP IPпо фек одн ме подп ) ИЮЛЬ вн Sy тел баз ис дан ля ти : вв ые ww w. ной ин 2005 ой ma ми вн на де 2005н Соз sama еф инг Ко се nte g.ru кс 8165 ер (31) ИЮиНЬ ель 81655 x по о у он 5 индекс ти c оум ной u ль пр с п нтро ерв №6 н тg.ru и пис -р с in л подо и A Н L зо ав IP й астр ntiv ом ли п ama ва ля вы аива Доwww.s и под ностируем сти ощ ру iru Ин тел ем что ем K м. ью ем s9 Openциfix: диаг D: правно По ей erbe соз терв спа .0 OS без Xchan изаst анreяеeBмSнеис ros пода ью вA мPo ем SIM оп F ge – D ветрх пти и устр Есть ас елLDс Л Реж на ySQLLinux: своб но ао ем A P ар ик + ris без ли жиз Mk и оду ния сть фAs ник фо р я а te ан х ле гр нь и rl з р е тиви уппа т e ык Уо Т IP-те се руса м! ти ем t + Pмиссия а P лл а З а им ап т ? c зв уя ? erl ом на Frускаем Счи_ipac ько не ая сеть – eeBS spam Насколбеспроводн ng роли d D вые па Про ваша норазоа на сервер HTTPверяем № од зуем од -тра по 8(3 Испольаленного вх фик ww дпи 3) а rinting? rp сн вгу ge Н w на ас для уд лету траи ся от fin С .samaой ин ст 2 ваем па? щитить к мож g.ru декс 0805 Уста дескто WSU Как за 16 с L онку ет S честве 55 Postf навлив 10 в ка inu ри ли ix + аем св Solaris м! О р Ex x яз о chan -д ва PCУдал С цен rver ис т BS Пробуе ge ку SQL Se и п чита ите т ь D BIOS енно уп ем MS Setup равл ро ем Wr рибу Ускоря OS яем Н к т S BI ти Автом ва ва астр си-с раф py! цируем ми баз атизир ш аи ер ик ые Модифи 1С но ли в уе ? ве п ительн П 9.2 вой м под ро оч дополн с п рово чны аем верс клю в то nal Ищем ики дохода я ом ди ии 8. чени й с DS вы ни sio е Уп источн 0 ощ м па PAM fes х тле o а р а е r 5 A м- – ч ью уд и ste ощ 00 EP пе ен фи и S в ь 2 655 ч а S р u т r е е е а 81 is м O NA си ль нв аS вы есп тр R с ) я декс в е penM k-се уп ер об тив (26 ин ди o рв рав E тем :п ое №1 писной ag.ru ибу ы C ер ле ps ны six д мн стр по w.sam oo ом ни ко D, н йс –п ам ди ww ер п е е el огр уп ре рв зор пр Ад иров под ер вр Exc Об -се т в и в к а м ю l а л 16 и с ом ти а er ок bit нск нию аст м ищ Пр зP ны пью се ащ ed ие еи те ть й itio ск кз ви р! Ка ест n аз то! ки ос теш rl ие пр Пу Pe ен о в л т э ав ти пр ой T– Ни у O P ое ем t TS мн ист crip й HO ам й с BS S па ени 6 огр во ю V NTF сту рж ll Пр айло ощь до вто ewa ие ен ф пом его от Fir овл с бщ иты oute н о а т ия защ WinR сс ац Во из ет и rio ган рн Ke Ор Инт е нове в ос на 81655 подписной индекс www.samag.ru

Стоимость подписки через редакцию: 900* руб. за 6 номеров 1800* руб. за 12 номеров При оформлении подписки до 1 января 2006 года – скидка 10% * Включая НДС и почтовую доставку

№11, ноябрь 2005

95


СИСТЕМНЫЙ АДМИНИСТРАТОР №11(36), Ноябрь, 2005 год РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Редакторы Андрей Бешков Валентин Синицын Алексей Барабанов Кирилл Тихонов Кирилл Сухов РЕКЛАМНАЯ СЛУЖБА тел./факс: (095) 928-8253 Дарья Хохлова reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Николай Петрочук По вопросам распространения обращайтесь по телефону: (095) 928-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (095) 928-8253 Сайт журнала: www.samag.ru РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 9000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламного объявления ответственность несет рекламодатель. Все права на опубликованные материалы защищены.

96

ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Неисполняемый стек – победа или поражение?

ных. Ведь вы лишаетесь основного инструмента (вашей любимой операционной системы), с помощью которого можно было бы прояснить и исправить сложившуюся ситуацию. Тем не менее безвыходных ситуаций не бывает.

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

систем

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

Доставку гарантируем: качество обслуживания в пакетных сетях

Если вы частенько работаете по ssh удаленно, слушаете интернет-радио или просто играете в on-line-игры, то наверняка замечали, что получаемое от этого удовольствие прямо пропорционально нагрузке на вашу сеть. Будь то Windows Update с вашей же машины или FlashGet с соседней, все равно приложениям надо будет «поделиться». Вот вам и «изюЗагрузка и загрузчики Любая система, прежде чем начнет ра- минка» совместного использования инботать, должна загрузиться. Если на ва- тернет-канала – постоянные скачки, рывшей машине установлено несколько ОС, ки и задержки. Иными словами – ваши еще нужно как-то выбрать, что именно данные не получают соответствующезагружать. И проблемы с загрузкой и за- го качества обслуживания (Quality of грузочными секторами, пожалуй, мож- Service). И к несчастью, это так же неизно отнести к одним из самых неприят- бежно, как налоги.

Уважаемые читатели! Спешите оформить подписку на первое полугодие 2006 года! Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.