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

98
Роспечать – 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60 Так видит журнал читатель, который забыл оформить подписку: ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ №11(36) ноябрь 2005 №11(36) ноябрь 2005 подписной индекс 20780 www.samag.ru Поговорим через Интернет? Поговорим через Интернет? Расширяем права доступа Расширяем права доступа в Linux с помощью ACL в Linux с помощью ACL Автоматизируем установку Автоматизируем установку драйверов в Windows драйверов в Windows Ещё один способ Ещё один способ восстановить MBR восстановить MBR Тонкий клиент – Тонкий клиент – шаг к мэйнфреймам? шаг к мэйнфреймам? Разрабатываем Разрабатываем документацию в NPJ: документацию в NPJ: эффективно и удобно! эффективно и удобно! Используем возможности ftpd Используем возможности ftpd Расширения РHP: Расширения РHP: пять шагов к написанию пять шагов к написанию Как сисадмины проводят Как сисадмины проводят свободное время свободное время

Upload: dmitry-ushakov

Post on 09-Feb-2016

313 views

Category:

Documents


0 download

DESCRIPTION

Н Е О Ж И Д А Н Н О Расширения РHP: Расширения РHP: пять шагов к написанию пять шагов к написанию Б Ы С Т Р О Р А С К У П И Л И Т И Р А Ж Разрабатываем Разрабатываем документацию в NPJ: документацию в NPJ: эффективно и удобно! эффективно и удобно! Н О В О Г О Д Н И Е Н А Р А Б О Т Е

TRANSCRIPT

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

Роспечать – 81655Пресса России – 87836Интер-почта – тел. (095) 500-00-60

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

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!

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

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

ЗАКОНЧИЛИСЬ Д

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№11

(36)

ноя

брь

2005

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

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

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

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

Ещё один способ Ещё один способ восстановить MBRвосстановить MBR

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

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

Используем возможности ftpdИспользуем возможности ftpd

Расширения РHP:Расширения РHP:пять шагов к написаниюпять шагов к написанию

Как сисадмины проводят Как сисадмины проводят свободное времясвободное время

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

1№11, ноябрь 2005

оглавление

ТЕНДЕНЦИИ2

MiniMo – минибраузер из семейства MozillaИнтервью с главой проекта MiniMo – Дугом Тернером.

5

ИНТЕРВЬЮ

Антон Борисов [email protected]

FreeBSD tips: какими возможностями обладает ftpdFtpd вполне пригоден для решения большинства типо-вых задач по обмену файлами.

16

Сергей Супрунов [email protected]

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

20

GRUB на CD, или Ещё один способ восстановить MBRВосстанавливаем MBR минимальными средствами.

26

Алексей Барабанов[email protected]

Windows Script Host: проводим аудит безопасности сети Чтобы не тратить массу времени на поиск в логах ин-формации о попытках несанкционированного доступа к ресурсам сети, используем сценарии WSH.

60

Тонкий клиент – шаг к мэйнфреймам?Сегодня снова экономически выгодно использовать мэйнфреймы с подключением легких терминалов – тонких клиентов.

32

Антон Борисов [email protected]

Развертываем сервер Subversionна платформе FreeBSDСовременная замена устаревшей системы CVS.

46

Андрей Шетухин[email protected]

Ольга Никулина [email protected]

Редактор для создания скриптов: Primal Script 4.0Рассматриваем недокументированные возможности редактора.

74

Иван Коробко [email protected]

Расширения РHP: пять шагов к написаниюКак быстро разработать надежное расширение PHP.

68

Александр Календарев[email protected]

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

Разрабатываем документацию с помощью NPJ: эффективно и удобно!Обзор системы коллективной работы Net Project Journal.

40

Алексей Коршунов[email protected]

Десять красок небаЧему посвящают свое свободное от работы время сис-темные администраторы?

82

Наталья Алексютина [email protected]

Проверяем защищенность сети и сервисов сканером DragonSoft Secure ScannerОбзор сканера безопасности.

66

Сергей Яремчук[email protected]

Расширяем права доступа в Linux с помощью ACL ACL позволяет использовать более сложные модели доступа, чем традиционная реализация, применяемая в Unix-системах.

54

Андрей Бирюков[email protected]

ИТОГИ IT-ТУРНИРА

Сетевой проект для небольшой компанииСетевая инфраструктура предприятия, разработанная командой-победительницей конкурса «Кубок сетевых проектов Microsoft».

78

Земскова Ольга [email protected]

Ширнин Олег[email protected]

Цюрюпа Егор[email protected]

Alpha, или история одной архитектуры84Павел Болотов

[email protected]

РЕТРОСПЕКТИВА

КНИЖНАЯ ПОЛКА

52, 53, 91 BUGTRAQ

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

8

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

Михаил Платов [email protected]

Сергей Яремчук[email protected]

WEB-ПРОГРАММИРОВАНИЕ

Алексей Мичурин[email protected]

ПРОГРАММИРОВАНИЕ

ХОББИ

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

[email protected]

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

И у менятакая же беда

Мужики,где журнал

взяли?

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

Оформилиподписку!

Принес номерна работу,

«увели» почитать

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

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

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

Информацияо подпискена 94 стр.

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

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

2

тенденции

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

провела первую ежегодную конфе-

ренцию «Образование в XXI веке»

для высшего руководства российс-

ких вузов и органов управления об-

разованием. Стратегическими пар-

тнерами конференции выступили

компании Hewlett-Packard и Intel.

В конференции приняло участие более 300 руководителей высших учебных заведений, представителей региональных и федеральных органов управления образованием. Во время пленарного заседания и пяти темати-ческих секций прозвучало более 30 до-кладов, посвященных вопросам ис-пользования информационных техно-логий для поддержки образовательно-го процесса, автоматизации админист-ративных функций учебных заведений и организации дистанционного обуче-ния на предприятиях. Особый интерес вызвали доклады начальника управле-ния Федерального агентства по обра-зованию РФ Алексея Карпова, прези-дента Microsoft в России и СНГ Ольги Дергуновой, директора по IT Универси-тета Ньюкастла Пола Хопкинса.

Итоги пятилетки информатизации образованияАлексей Карпов подвел итоги пяти-летки информатизации образования по федеральной целевой программе «Развитие единой образовательной информационной среды 2001-2005». На средства бюджета, объемом более 8.5 млрд. рублей, удалось: подключить к Интернету или ведомственным сетям более 10% школ; увеличить количест-во персональных компьютеров в шко-лах почти в 6 раз, достигнув цифры 80 ПК на одного ученика; разработать 17 образовательных порталов и повысить квалификацию более 50 тыс. препода-вателей. Для оценки эффективности расходования средств на образование можно привести следующие факты: в Москве и Санкт-Петербурге, где к Ин-тернету подключено более 80% домов, проживает более 10% населения стра-ны; согласно статистике только за 2003 год количество пользователей – свы-ше 13 миллионов; в этом году приня-то решение о слиянии всех 17 порта-лов в один из-за малых объемов пред-

ставленной информации; повышением квалификации преподавателей и со-трудников сферы образования зани-мается Национальный фонд подготов-ки кадров, имеющей отдельное много-миллионное финансирование.

Microsoft в образованииОльга Дергунова представила по-зицию и планы Microsoft на индуст-рию образования в России. 28 октяб-ря 2004 года компания представи-ла первый русифицированный про-дукт из линейки программ для обра-зования – MS ClassServer 3.0. Сегодня, спустя всего один год, на отечествен-ном рынке представлена целая серия программных средств и технологий, а президент российского отделения говорит уже о национальных приори-тетах в образовании глазами Microsoft. В рамках конференции был презенто-ван новый продукт Learning Essentials для Microsoft Office, в состав которого вошли ориентированные на обучение инструменты для учителей и учащихся. Следует отметить, что данный продукт демонстрирует важнейшую тенденцию развития офисных средств и их кон-вергенции, где функции различных приложений объединяются в единую информационную панель с настраи-ваемыми меню и другими активными элементами из разных программ.

Также были представлены продук-ты Learning Network Manager, Microsoft Class Server 4.0, русская версия об-разовательного портала Microsoft Learning Gateway (www.mlg-edu.ru) и пример организации информацион-ного портала вуза на базе технологий SharePoint Portal Server 2003.

Помимо программных продуктов Microsoft предлагает целый ряд обра-зовательных проектов, направленных на поддержку преподавателей и сту-дентов: распространение лучших ме-тодик преподавания IT-дисциплин (MSDN AA Curricula Repository), повы-шение знаний и навыков преподавате-лей в области IT (Microsoft IT Academy), тренинги в учебных центрах компаний-партнеров, междисциплинарный под-ход к использованию IT в образовании на примере серии материалов для учи-телей-предметников «Использование Microsoft Office на уроках», программа «Партнерство в образовании», подде-ржка лучших преподавателей в рам-

ках организации портала «Сеть твор-ческих учителей» (www.it-n.ru), ор-ганизация всевозможных конкурсов (см. http://www.it-university.ru/itproject) и многое другое. Спецификой почти всех образовательных проектов явля-ется исключительная направленность на технологии и продукты Microsoft.

Исключением из общей массы яв-ляется совместный проект Microsoft с факультетом «Бизнес-информати-ки» ГУ-ВШЭ, который направлен на создание нового подхода подготовки IT-специалистов в сфере высшего об-разования. Разработанная специаль-ность «Бизнес-информатика» имеет преимущества с точки зрения препо-давания экономических дисциплин, но с точки зрения обучения IT она эклек-тично дублирует содержание сущест-вующих инженерных специальностей. Это не позволяет рассматривать ее как серьезную альтернативу сущест-вующим специальностям, по которым выпускаются тысячи лучших IT-кадров в десятках технических вузов.

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

Общий объем финансирования, выделяемый университетом на IT, со-ставляет около 2% от общего бюдже-та (около 10 миллионов $). Общий же бюджет вуза численностью 17000 сту-дентов соизмерим с объемом финан-сирования упомянутой выше пяти-летней программы Минобрнауки РФ. Схема выбора поставщиков IT-реше-

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

3№11, ноябрь 2005

тенденции

ний для использования в вузе следую-щая: для основных, ядерных приложе-ний выбираются крупные поставщики (Microsoft, SAP, Oracle); для ниши раз-вивающегося и специализированного программного обеспечения (например, системы автоматизации составле-ния расписания) выбираются лучшие по результатам анализа; для исследо-вательских или маленьких локальных задач выполняются собственные раз-работки; для использования студента-ми выбираются приложения, ориенти-рованные на технологию тонкого кли-ента; при разработке сервисно-ори-ентированной архитектуры (SOA) ис-пользуются открытые стандарты на веб-сервисы.

При организации IT-инфраструкту-ры предпочтение отдается беспровод-ной связи. Для удобства администри-рования в 90% случаев используется унифицированное программное обес-печение от Microsoft (Active Directory, XP, Exchange, SharePoint и др.). В ос-тавшихся 10% – используются техноло-гии Apple и UNIX для изучения полигра-фических систем и проведения некото-рых научных исследований. К важному преимуществу такой организации до-кладчик также отнес удобство органи-зации вычислительных кластеров.

Курьезы MicrosoftВ целом конференция вызвала боль-шой интерес среди специалистов и бы-ла проведена на высоком техническом уровне, однако без курьезов не обош-лось. Во время демонстрации реше-ний Microsoft сначала не удалось вый-ти в Интернет для получения доступа к Microsoft Learning Gateway, а затем при попытке запуска системы Learning Network Manager после перезагрузки операционной системы всплыло со-общение о необходимости активации используемой копии Windows. Это со-бытие, произошедшее после слов Оль-ги Дергуновой о необходимости про-ведения воспитательной работы сре-ди молодежи по использованию ли-цензионного программного обеспе-чения, с одной стороны, вызвало бур-ную радость большей части посетите-лей конференции, а с другой – позво-лило осознать значимость того факта, что в России количество пиратских ко-пий программного обеспечения снизи-лось с 99% до 87%.

Завершено тестирование нового программного продукта по созданию веб-ресурсовПервого ноября 2005 года компании «Битрикс», «QSOFT» и ФОРС объяви-

Oracle выпускает бесплатную редакцию СУБДТридцать первого октября 2005 го-да корпорация Oracle анонсировала выход бета-версии новой редакции Oracle Database 10g Express Edition (Oracle Database XE). Данная редак-ция СУБД распространяется бес-платно, и независимые разработчи-ки программного обеспечения мо-гут абсолютно свободно распростра-нять и внедрять Oracle Database XE в составе своих решений. Новая ре-дакция СУБД основывается на коде Oracle Database 10g Release 2 и пол-ностью совместима с семейством ком-мерческих СУБД Oracle Database 10g. Oracle Database XE предоставляет разработчикам тот же интерфейс SQL и PL/SQL, что доступен и в старших ре-дакциях, плюс интерфейс к ряду язы-ков программирования, включая Java, .NET и PHP.

Oracle Database XE доступна для 32-разрядных платформ Linux и Windows, и на нее накладываются следующие ограничения: Используется только один ЦП. Используется не более 1 Гб ОЗУ. Допускается работа только одного экземпляра БД. Не более 4 Гб пользовательских данных на жестком диске.

Для зарегистрировавшихся на сай-те корпорация Oracle предоставляет бесплатный доступ к форуму, который сопровождают специалисты компа-нии. Скачать Oracle Database XE мож-но по ссылке: www.oracle.com/database/xe.html.

Андрей Маркелов

Более подробную информацию о докладах на конференции и програм-мных продуктах Microsoft можно най-ти по адресу http://www.microsoft.com/Rus/Education.

Андрей Филиппович

ли об успешном завершении нагру-зочного тестирования продукта «Бит-рикс: Управление сайтом 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-уровне-вой конфигурации сервера («front-end» (прокси-сервер 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 уни-кальных пользователей.

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

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

4

тенденции

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-м.

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

ставления для популяризации 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

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

5№11, ноябрь 2005

интервью

Расскажите, как вы оказались

в Netscape Communications Inc., о ва-

шей работе в этой компании, её ос-

новных направлениях.

Я присоединился к команде Netscape в 1996 году, для работы над клиен-том браузера под Mac-платформу. Поначалу было не очень интересно, но это была работа на лучшую компа-нию, над лучшим продуктом того вре-мени. Годом позже я стал работать над вещами гораздо интереснее: се-тевое взаимодействие, многопоточ-ность, xpcom, низкоуровневые подсис-темы и над более сложными проблема-

ми. В определенный момент кому-то пришла в голову сумасшедшая идея выпустить исходный код в публичный доступ. В Netscape Communications мо-им шефом был Крис Хофман. Он и сей-час мой шеф в Mozilla Foundation. На-столько хороший, что у меня нет жела-ния мечтать о лучшем.

Как бы вы охарактеризовали идею

выпуска исходного кода Netscape

в публичный доступ? С точки зре-

ния того времени и с точки зрения

реалий сегодняшнего дня.

Я не был уверен вначале, что это пра-

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

Многим из вас приходилось работать с программными продуктами, в названии которых

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

Mozilla FireFox. Однако главный герой сегодняшнего рассказа – браузер MiniMo, родословная

которого начинается с браузера Mozilla. Некоторые детали его разработки и концепцию

развития поведает Дуг Тернер (Doug Turner) – глава проекта.

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

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

Сколько людей занято в проекте

MiniMo и кто вам помогает при раз-

работке?

Что касается создания проекта MiniMo, то его родителями являются: Крис Хофман, Дарин Фишер (Darin Fisher) и я. Это было несколько лет назад. Да-рин теперь работает в Google над дру-

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

6

интервью

гими вещами, а Крис занят создани-ем бизнес-связей в Mozilla Foundation. Над MiniMo CE активно работают 6 че-ловек, каждый в своем направлении. Мы также помогаем нескольким спе-циалистам, работающим над версией Linux MiniMo. У нас большая команда тестеров, людей, которые придумыва-ют новые классные идеи, и, конечно же, мы получаем отдачу от всего направ-ления развития FireFox. Прямо сейчас Марсио Галлио (Marcio Gallio) и я за-няты разработкой ядра MiniMo. Фигу-рально выражаясь, мы стоим на пле-чах таких гигантов, как Джонни Стен-бэк (Johnny Stenback), Дэвид Барон (David Baron) и всех тех сотрудников, которые двигают технологию Mozilla вперед, т.к. MiniMo базируется в пер-вую очередь на коде Mozilla.

На каких аппаратных платформах

MiniMo может работать сегодня?

В основном это ARM и несколько x86-устройств. Существует несколько спе-цифичных вопросов, но наш код очень удобен в портировании. На большинс-тве устройств, что поставляет HTC (тайваньская компания High Tech Computer Corporation [11], которая про-

изводит КПК и смартфоны для I-Mate, HP, Orange, Dell и др.), наш код рабо-тает нормально.

Как вашей команде удается тести-

ровать MiniMo на всех линейках КПК,

скажем, и на семействах Windows

Mobile и дистрибутивах Familiar

Linux? Какие виртуальные машины

вы используете?

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

Однако есть такие опции, кото-рые отсутствуют в FireFox, напри-мер, рендеринг для малых экранов (Small Screen Rendering). У меня есть мысль написать такое расширение для FireFox, чтобы у пользователей ПК была возможность увидеть, как стра-ница отображается на устройствах с экраном 240x360. Мы компилируем код на настольных ПК и копируем его на КПК. Затем тестируем и делаем вы-вод о функциональности.

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

Я попробовал запустить 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?После того как в январе 1998 года были выпущены в свет исходные коды Netscape Navigator [1], началась новая ветка в исто-рии развития браузеров. Одним из «побоч-ных» эффектов стало появление MiniMo (MiniMozilla) – мини-браузера для КПК и мо-бильных устройств [2].

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

ся 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].

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

7№11, ноябрь 2005

интервью

ные инсталляторы. Так что не волнуй-тесь – MiniMo будет выпускаться и в ка-честве единого файла.

Для меня представляют интерес

русскоязычные ресурсы, поэтому

я зашел на mail.ru и обратил внима-

ние на то, что браузер автоматиче-

ски не распознает кодировку.

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

Действительно здорово осозна-

вать, что исходный код для MiniMo

и для Firefox почти один и тот же.

Однако в ходе тестирования MiniMo

на различных версиях Windows CE

я столкнулся с проблемой быст-

родействия. Если я сравню Pocket

Internet Explorer (PIE) с MiniMo,

то последний никак не кажется мне

быстрым. Есть ли какие-либо под-

вижки в улучшении данной про-

блемы?

Да, производительнос ть имеет очень важное значение. Но срав-нивать PIE с MiniMo недостаточно честно, т.к. PIE в действительнос-ти не отображает многие сайты кор-ректно, у него слабая реализация JavaScript, и он не может выполнять AJAX (http://developer.mozilla.org/en/docs/AJAX). Впрочем, я не открещи-ваюсь от проблемы с быстродействи-ем. Да, она существует, и мы ее посте-пенно решаем.

Какие планы развития MiniMo? И как

происходит тестирование дополни-

тельного функционала?

Для MiniMo также существует план развития [5]. Что же касается дополни-тельного функционала, то он, как пра-вило, появляется в качестве расши-рений к продукту. Например, Spatial Navigation – это расширение, кото-рое я написал для Pioneer Research. Его цель – использовать клавиши вверх, вниз и т. д. для навигации по докумен-ту (см. http://www.mozilla.org/access/keyboard/snav). На сегодня это расшире-ние выглядит как опция, которую мож-но загрузить с http://addons.mozilla.org. Как только расширение становится до-статочно востребованным, оно интег-рируется в дерево разработки. Одна-ко чтобы быть включенным, это конк-ретное расширение проходит не толь-ко через руки тестеров, но и через ру-ки тех, кто повседневно его использует, т.е. знает расширение практически до мелочей. Поэтому относительно качес-тва кода можете не волноваться.

Означает ли это, что практически

любое расширение, написанное для

FireFox, будет работать и с MiniMo?

В общем-то, да. У нас было несколь-ко расширений для FireFox, которые через несколько минут доработки за-работали и с MiniMo. Расширения, стоящие упоминания, – это adblock и colorzilla.

Есть ли у вас планы по созданию

прототипа для Symbian OS?

Д.T.: Таких планов нет. Есть люди, ко-торым нравится Symbian, и те, кото-рые ненавидят его. Я действительно не знаю, к кому я тяготею. Если смо-треть на API от Symbian и сравнивать его с Linux, то, скорее всего, я принад-лежу ко второму лагерю.

Согласно обзорам, выпускае -

мым компанией Opera Software

Inc., они не рассматривают MiniMo

браузер в качестве конкурента,

т.к. Opera-Mini работает на других

платформах (Symbian OS, Palm OS).

Сможете ли вы утверждать, что ваш

коллектив также не рассматривает

браузер от Opera в качестве конку-

рирующего продукта?

Мне бы не хотелось оценивать, кто ко-му является конкурентом. Лично я бро-

сил бы развитие MiniMo, если на рын-ке было что-то стоящее.

Насколько мне известно, с Nokia

и с T-Mobile подписаны контракты

по поставке MiniMo вместе с их про-

дукцией. Насколько это верно?

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

Есть ли разработчики, которых

вы могли бы отметить отдельно?

Мы сотрудничаем с компанией INdT (http://www.indt.org.br/indt), с коман-дой, которая работает над разными Open Source-проектами. В качестве одного из таких проектов они выбра-ли MiniMo. Последние несколько ме-сяцев их внимание было сфокусиро-вано на GTK-коде нашего кроссплат-форменного браузера. Также среди их работ значится проект MaeMo – пор-тирование на платформу Nokia 770 (см. http://www.indt.org.br/maemo).

Ссылки:1. http://en.wikipedia.org/wiki/Netscape.2. http://en.wikipedia.org/wiki/Minimo.3. http://www.linuxdevices.com/articles/

AT7396996719.html.4. http://weblogs.mozillazine.org/dougt /

archives/004471.html – first announcement of FireBird at IPAQ 5555.

5. ht tp: / /www.l inuxdevices.com/news /NS8911145047.html – roadmap for MiniMo.

6. http://www.meer.net/~dougt/minimo_ce – MiniMo WinCE builds – домашняя стра-ница Дуга Тернера. Отсюда вы може-те загрузить последние релизы MiniMo для платформы Windows CE.

7. ht tp: / /www.absoluteastronomy.com/encyclopedia/m/mi/microbrowser.htm – классификация микробраузеров.

8. Сравнить характеристики различных веб-браузеров можно пользуясь табли-цей – http://www.absoluteastronomy.com/encyclopedia/c/co/comparison_of_web_browsers.htm.

9. http://davetitus.com/mozilla.10. ht tp: / /www.absoluteastronomy.com/

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.

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

8

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

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

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

ринговых сетей, широко используемых для обмена файлами (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, Gizmo Project и Google Talk.интернет-телефонии – Skype, Gizmo Project и Google Talk.

Михаил ПлатовМихаил Платов

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

9№11, ноябрь 2005

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

ником при передаче голосового тра-фика между другими клиентами се-ти Skype, находящимися за сервера-ми NAT (см. вариант «3» на рис. 1). Теоретически подход Skype позволя-ет бороться абсолютно со всеми ви-дами NAT (см. врезку «NAT и STUN»), правда, к сожалению, борьба эта ве-дется руками ничего не подозреваю-щих абонентов (ведь физически «су-перузлы» находятся на компьютерах самых обычных пользователей сети). Так, один день работы Skype в режиме «суперузла» может стоить владельцу компьютера до 800 Мб трафика других пользователей Skype [3]. Ситуация усу-губляется тем, что на данный момент не существует официального способа запретить клиенту Skype становиться «суперузлом». Конечно же, можно схит-рить и поместить свой компьютер за NAT, но в таком случае вы лишь обос-трите проблему качества речи в сети, переложив ее решение на плечи дру-гих пользователей Skype.

Личное знакомствоИтак, идем на http://www.skype.net и за-гружаем Windows-версию клиента Skype (на момент написания статьи – версия 1.3.0.66). Владельцам модемов придется подождать загрузки 7-мега-байтного файла установки. После ин-сталляции запустим программу и за-регистрируем себе уникальное имя в сети Skype.

Интерфейс программы достаточно прост и понятен (см. рис. 2).

Первое, что мы сделаем, – найдем человека, с которым будем общать-ся (можно искать по skype-именам или просто найти пользователей в ре-жиме Skype-me, желающих поболтать), и добавим его в список контактов. Пос-ле этого, нажав на зеленую кнопку вни-зу экрана, мы начнем звонить. В мо-ем случае вызов проходил достаточно долго – около 10 сек. Кроме того, когда у вызываемого абонента было запуще-но несколько skype-клиентов на раз-ных компьютерах (для Skype такая си-туация допускается), звонок иногда до-ходил только до одного из них.

Методика тестированияДля каждой из рассматриваемых се-годня программ проводился опреде-ленный набор испытаний. В процес-се каждого теста субъективно оце-

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

При тестировании проверялось качество работы в следующих сце-нариях: Разговор между двумя абонентами, находящимися за одним и тем же NAT-сервером (внутри организа-ции или локальной сети). Разговор между абонентом находя-щимся в Интернет (dial-up-подклю-чение), и абонентом за динамичес-ким NAT (разговор между пользо-вателями Интернета, подключен-ными к одному и тому же провай-деру). Разговор между двумя абонента-ми (dial-up и LAN), находящимися за различными несимметричными NAT-серверами (разговор между пользователями Интернета, под-ключенными к различным провай-дерам).

Вариант, при котором оба клиента непосредственно подключены к Ин-тернет при тестировании не рассмат-ривался. Такая схема подключения яв-ляется достаточно редкой. Все же ча-ще такие люди работают либо из-за сервера NAT, либо через прокси-сер-вер (локальные и корпоративные се-ти) и очень редко напрямую (как пра-вило, это удел конечных пользовате-лей, часто dial-up). К тому же прове-дение всех вариантов тестов с реаль-ными интернет-адресами в моем слу-чае было несколько затруднительным. Отчаиваться по этому поводу не стоит, результаты тестов в данном сценарии более чем предсказуемы.

Тестирование SkypeПервый же тест преподнес сюрприз – даже находясь в одной локальной се-ти, клиенты Skype умудрялись обме-нивались данными через «суперузел» в Швейцарии, подключенный к Интер-нету с помощью беспроводной тех-нологии 802.11. (провайдер Monsoon Networks). Думаю здесь комментарии излишни.

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

Третья схема (см. «3», рис. 1) пол-ностью повторила результаты первой, разве что география в этот раз бы-ла другой – Великобритания, Япония и США. Качество речи сильно меня-лось от звонка к звонку – от полной невозможности разговора, до ред-

Рисунок 1. Структура сети Skype

Рисунок 2. Интерфейс skype-клиента

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

10

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

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

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

В результате, некоторые образо-вательные учреждения США и Европы официально запретили своим работни-кам и студентам использовать Skype.

В основе программы лежат закры-тые протоколы. Никто до конца точ-но не знает, что на самом деле делает Skype, какие данные и куда он может передавать (посредством тех же «су-перузлов»). Исходный код клиента так-же закрыт, поэтому нам остается лишь «верить», что он не содержит Spyware или других подобных средств.

Из-за использования закрытого протокола интеграция Skype с други-ми сетями на данный момент крайне затруднительна. Впрочем, судя по су-ществованию SkypeOut, это не означа-ет, что интеграция невозможна в при-нципе, ее нет скорее по политическим причинам.

Большая часть выпускаемого се-годня оборудования для Skype (так на-зываемые skype-телефоны), работа-ет только вместе со skype-клиентом на компьютере пользователя. Таким образом, достаточно сложно исполь-зовать skype без компьютера.

Gizmo ProjectАвтором и владельцем этого проек-та является Майкл Робертсон, из-вестный миру такими брендами как mp3.com и Linspire (в прошлом – Lindows). В 2003 году Майкл основал компанию SipPhone, задачей которой было создание сети IP-телефонии на базе протокола SIP. В середине 2005 года состоялся анонс бета-версии про-граммного клиента для этой сети – Gizmo Project, который многие неза-медлительно назвали первым реаль-ным конкурентом Skype.

Итак, давайте посмотрим, что же может Gizmo: Передача голоса и мгновенных со-общений. Связь с традиционной телефон-ной сетью через службы Call In и Call Out. Связь с абонентами Gizmo через выделенные городские номера до-ступа (набор добавочного SIP-но-мера). Проведение конференций, в том числе и с абонентами ТФОП. Бесплатная голосовая почта. Возможность записи разговоров. Отображение участников разгово-ра на карте мира. Использование эмотиконов и зву-ковых вставок. Поддержка открытых стандартов (SIP, Jabber). Связь с другими VoIP-сетями, ис-пользующими SIP. Возможность работы с использо-ванием аппаратных SIP-шлюзов и IP-телефонов.

В отличие от Skype, архитекту-ра сети SipPhone более традиционна (см. рис. 3).

В центре сети находятся серве-ры сети SipPhohe. Благодаря исполь-зованию открытых протоколов в сети возможна работа не только клиентов Gizmo Project, но и любых других, под-держивающих про-токол SIP, в том чис-ле и аппаратных (список рекомен-дуемого оборудова-ния можно найти на сайте проекта.

Всем участни-кам сети SipPhone доступны бесплат-

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

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

ний используется открытый протокол XMPP, на основе которого работают сети Jabber. На данный момент Gizmo Project является участником IM-конфе-дерации [4], что автоматически озна-чает обмен сообщениями с абонента-ми других jabber-сетей.

Визуальная «примерка»Основным сайтом проекта является http://www.gizmoproject.com. Именно оттуда, из раздела Download, я и за-грузил последнюю версию клиента (1.1 на момент написания статьи). Раз-мер дистрибутива для Windows-плат-формы – чуть более 9 Мб.

Интерфейс клиента достаточно удо-бен и интуитивно понятен (см. рис. 4).

В основе лежит стандартная для всех IM-клиентов идея «списков друзей» (buddy list). Имеется поиск, за-писная книжка и история совершенных звонков. Последняя централизованно хранится на сервере и доступна с лю-бого компьютера (у Skype история хра-нится локально). Голосовая почта ре-ализована просто – все оставленные сообщения в виде wav-файлов (к со-жалению, ничем не сжатых) отсыла-

Рисунок 3. Структура сети SipPhone

Рисунок 4. Интерфейс Gizmo Project

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

11№11, ноябрь 2005

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

ются на указанный в систе-ме e-mail.

Таким образом, сообще-ния голосовой почты также можно централизованно хра-нить на любом почтовом сер-вере. В параметрах настрой-ки Gizmo можно указать вто-рой e-mail адрес, на который будут отсылаться уведомле-ния о пришедших голосовых сообщениях (так предлагает-ся реализовывать SMS-опо-вещения). При желании мож-но настроить безусловную переадресацию входящих звонков на другой номер, в том чис-ле и номер ТФОП (в этом случае або-нент будет оплачивать все переадре-суемые звонки по соответствующему тарифу для Call Out).

Другой приятной особенностью Gizmo является отображение учас-тников разговора на карте мира (см. рис. 5). Для этого использует-ся интерфейс системы Google Maps. К слову реализация этой возможности тоже имеет мелкие недостатки. Так при совершении звонков через Call Out на карте вместо расположения вызыва-емого абонента (которое достаточно точно можно определить по номеру телефона) показывалась точка в США (предположительно точка установки шлюза, соединяющего SipPhone c тра-диционными сетями).

Работа с NATВ этом пункте Gizmo Project продол-жает следовать идее максимально-го использования уже существующих и проверенных технологий. При рабо-те с клиентами, находящимися за NAT, используется открытый протокол STUN. Правда, как показало практи-ческое исследование поведения теку-щей версии Gizmo, возможности STUN реализованы далеко не полностью – только для передачи данных между клиентом за NAT и интернет-сервером сети SipPhone. В этом случае на качес-тво речи значительное влияние будет оказывать взаимное расположение клиента и сервера. Последний, к сло-ву, находится в США.

Если же вспомнить, что в сети SipPhone помимо клиентов Gizmo так-же работают обычные шлюзы и IP-те-лефоны, то все сразу встает на свои

места – реализованные возможности STUN оптимальны с точки зрения сов-местимости с другими устройствами сети. Впрочем, это вовсе не означает, что специальные расширения функци-ональности для лучшей совместной работы Gizmo из-за NAT невозможны в принципе…

Групповое использованиеОдним из таких «расширений» мож-но считать службу Bonjour. Послед-няя является реализацией открыто-го протокола IETF Zeroconf и активно используется в MacOS X для простой работы с сервисами в локальной сети (сетевые настройки компьютеров, ра-бота с файлами и принтерами, обмен музыкой и картинками). С помощью этой службы клиенты Gizmo Project могут напрямую передавать голосо-вой трафик при звонках в рамках од-ной подсети.

Некоторые пользователи сообща-ли о проблемах в работе управляе-мого оборудования D-Link, возникаю-щих после установки Bonjour (вместе с Gizmo Project или Apple iTunes) [5], по-этому если возможность прямых раз-говоров в локальной сети вам не нуж-на, а потенциально «проблемное» обо-рудование имеется просто деинстал-лируйте эту службу с помощью про-граммы TurnOffBonjour.exe, входящей в стандартную инсталляцию Gizmo.

Особенности терминацииДля тестирования услуги звонков на обычные телефоны все вновь ре-гистрирующиеся пользователи полу-чают на счет 35 центов. Стоимость звонка в Россию – 7 центов, тарифика-ция – поминутная. В процессе коротко-

го, но интенсивного тестиро-вания Call Out качество речи было несколько хуже, чем при внутрисетевых звонках. При-чиной этому, судя по всему, являлось транскодирование. Дело в том, что подавляю-щее большинство оборудо-вания операторов не подде-рживает даже открытый ко-дек iLBC, не говоря уже о ком-мерческом ISAC и его собра-тьях из пакета GIPS. Поэто-му звонки перед терминаци-

ей скорее всего подвергаются транскодированию на одном

из серверов SipPhone, которое и при-водит к некоторому ухудшению качес-тва речи. С другой стороны, благодаря транскодированию даже пользователи с низкоскоростными интернет-канала-ми могут делать call-out-звонки с при-емлемым качеством.

Для услуг междугородной и меж-дународной телефонии SipPhone, как и другие подобного рода компании, скорее всего использует возможнос-ти крупных операторов IP-телефонии. Как правило, последние для передачи голоса используют выделенные сети IP MPLS, поэтому проблем с ухудше-нием качества на их участке не воз-никает и наибольшее влияние все-та-ки оказывает состояние интернет-ка-нала между клиентом и сервером SipPhone. На данный момент серверов SipPhone, работающих за пределами США, обнаружено не было – при раз-говорах голосовые пакеты всегда пе-редавались через единственный сер-вер, расположенный в США. (Справед-ливости ради нужно отметить, что при прочих равных условиях качество речи в Gizmo при проведении тестирования из-за NAT было лучше, чем у Skype, ис-пользующего для транзита «суперуз-лы» в Японии, Европе и США.)

А все ли хорошо в американском королевстве…К сожалению, при работе с Gizmo не обошлось и без большой ложки де-гтя. Во-первых, программа действи-тельно является бета-версией (а мес-тами даже и альфа), особенно в пла-не стабильности. Так, клиент несколь-ко раз произвольно завершал свою ра-боту (особенно часто при попытке от-правки IM-сообщений на русском язы-

Рисунок 5. Отображение положения участников разговорана карте мира

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

12

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

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

Google Talk24 августа 2005 года состоялся офи-циальный анонс еще одной голосо-вой службы, на этот раз от компании Google, известной миру своей одно-именной поисковой системой. Назва-ние простое – Google Talk или сокра-щенно – Gtalk.

Основные возможности: Передача голоса и мгновенных со-общений. Отображение качества разговора в реальном времени. Уведомления о непрочитанных письмах в почтовом ящике. Быстрое открытие ящика Gmail.

Как видим, список невелик, но да-вайте воздержимся от поспешных вы-водов, ведь, как известно, больше не значит лучше…

ЗнакомствоПервой приятной особенностью про-граммы стал ее размер – всего лишь 900 Кб.

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

После получения приглашения и успешной регистрации можно войти в Gtalk. Интерфейс программы типичен для Google – просто, удобно и в то же время красиво (см. рис. 6).

Имеется традиционный список контактов, для его наполнения можно использовать адресную книгу Gmail или просто ввести e-mail нужного че-ловека в поле поиска. Если введенный

почтовый адрес не является адресом почтовой системы Google, то вам будет предложено пригласить этого пользо-вателя в Gmail прямо из Google Talk. С пользователями, имеющими статус «Available», можно общаться. При голо-совых сеансах качество речи в реаль-ном времени отображается индикато-ром верхней панели, причем достаточ-но корректно.

Интерфейс клиента вылизан до ме-лочей. Приятные меню, автодополне-ния при вводе адресов, моменталь-ное открытие ящика Gmail (без ввода пароля), удобные уведомления о но-вой почте, ненавязчивое звуковое со-провождение – и все это при размере дистрибутива в 900 Кб! За интерфейс Google Talk без разговоров получает свои заслуженные 5 баллов.

Протоколы, диалекты…С технической точки зрения выбор Google особенно интересен. Если Skype использует собственный за-крытый протокол, а Gizmo Project – стандартный для IP-телефонии SIP, то в основе Gtalk лежит протокол Jabber/XMPP, широко используемый Open Source-сообществом для пере-дачи мгновенных сообщений. Благода-ря этому совместно с Google Talk гипо-тетически можно использовать абсо-лютно любой Jabber-клиент. Список га-рантированно работающих альтерна-тив можно найти на соответствующем разделе сайта google [6]. Клиенты бу-дут работать с сервером Google, поэ-тому создавать учетную запись в Gmail все равно придется. В будущем плани-

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

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

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

Связь с телефонными сетямиВ настоящее время официально та-кой услуги нет. Информации о ее воз-можном появлении также нет. Однако изучение сигнальных сообщений, пе-редаваемых между сервером и клиен-тами Gogle Talk, обернулось несколь-ко неожиданным сюрпризом – поми-мо декларирования поддержки коде-ков GIPS и двух стандартных вариаций G711 в сообщениях также присутство-вала следующая запись:

Таким образом, возможно, уже сей-час в клиенте Google Talk есть подде-ржка популярного в мире IP-телефо-нии кодека G723! С точки зрения здра-вого смысла это может означать од-но – интеграция с телефонными сетя-ми не за горами. Причем благодаря то-му, что поддержка кодека есть непос-редственно в клиенте, отпадает не-обходимость в перекодировании ре-чи, что для конечных пользователей должно отразиться в более высоком качестве речи при разговорах с або-нентами телефонных сетей. Главное, чтобы версия в клиенте Google оказа-лась совместимой с тем, что называ-ется G723.1 у телефонистов…

Рисунок 6. Интерфейс Google Talk

<payload-type xmlns=http://www.google.com/session/phoneid="4" name="G723"/>

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

13№11, ноябрь 2005

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

Чего в Gtalk нетОценивать функциональность Google Talk достаточно сложно. Если в ряду его конкурентов рассматривать Skype и Gizmo Project, то, безусловно, наибо-лее существенным недостатком будет отсутствие связи с традиционной те-лефонной сетью. Если же конкурента-ми будут «мессенджеры» от Microsoft, AOL и Yahoo, то в сравнении с ними уже имеющиеся на данный момент воз-можности передачи голоса будут бо-лее чем достаточны.

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

вать таковыми контакты Gmail мож-но лишь с очень большой натяжкой), крайне ограниченны возможности по-иска абонентов (глобального катало-га нет, только личная адресная кни-га из Gmail).

Статус и стабильностьНа данный момент сервис Gtalk офи-циально находится в стадии Beta. Од-нако, как показало непродолжитель-ное, но достаточно интенсивное тес-тирование, детище Google на данный момент более чем стабильно – за все время испытаний не возникло ни од-ной ошибки.

Таким образом, приставка beta в названии данной программы скорее означает то, что пока в программе ре-

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

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

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

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-адресам. То же, что и предыду-щее, за исключением того, что вне-шние узлы могут посылать пакеты

только в том случае, если узел за NAT сам предварительно посылал им какие-либо пакеты. Динамический NAT, ограниченный

по IP-адресам и портам. То же, что и предыдущее, только ограничения за-даны более жестко: узел в Интернет мо-жет отсылать пакеты только с того пор-та, на который он предварительно что-то получил от узла из-за NAT. Симметричный NAT – все пакеты от

внутреннего IP-адреса и порта к вне-шнему IP-адресу и порту преобразуют-ся в один и тот же IP-адрес и порт NAT-сервера. Отличие заключается в том, что при обращении к различным вне-шним IP-адресам порты на NAT-серве-ре тоже будут изменяться. Таким обра-зом, только один интернет-узел может посылать пакеты узлу, находящемуся за NAT-сервером.

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

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

14

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

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

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

Sipnet.ruА вот этот проект, как оказалось, име-ет самое что ни на есть непосредствен-ное отношение к теме нашего сегод-няшнего разговора. Сеть sipnet в неко-тором смысле можно считать россий-ским аналогом SipPhone. Так, с 27 ок-тября каждый желающий может бес-платно подключиться к сети sipnet.ru, заполнив небольшую форму на веб-сайте. Собственного программного клиента (как Gizmo Project у sipphone), у sipnet нет, вместо это предлагается использовать бесплатные версии про-грамм, поддерживающих протокол SIP (CounterPath x-lite, Microsoft Messenger и др). Также можно использовать ап-паратные голосовые шлюзы, причем юридическим лицам Sipnet готов пре-доставить их бесплатно.

Работа с NATКак видно из названия, сеть использу-ет протокол SIP. Вариант борьбы с NAT стандартен – STUN. Сеть предостав-ляет свой сервер (stun.sipnet.ru), кли-ентская часть протокола присутству-ет во всех популярных SIP-клиентах. По информации с официального сай-та, реализация STUN в sipnet.ru поз-воляет работать даже из-за симмет-ричного NAT, хотя на практике устано-вить соединение из-за NAT при помо-щи клиента x-lite мне не удалось. (хо-тя Gtalk, Skype и Gizmo соединялись без проблем).

Связь с телефонными сетямиСвязь с телефонными сетями возмож-на в двух вариантах: Звонки абонентов sipnet в ТФОП. Звонки из ТФОП абонентам spinet.

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

ля он запросто может поставить в ту-пик – «интуитивного понимания» нет. Прежде чем что-либо сделать, реко-мендуется обязательно ознакомиться с соответствующим разделом встро-енной системы помощи. Кроме того, часть настроек учетной записи доступ-на в свойствах учетной записи сервера CommuniGate PRO. Описание этих на-строек приводится уже в другом мес-те. Другими словами, в плане «друже-любного» интерфейса spinet еще есть чему поучиться…

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

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

«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 кБит/с.

Как результат, при нехватке пропуск-ной способности качество речи у вто-рого клиента будет лучше. Благодаря выбору более оптимального

маршрута удалось найти такой путь до-ставки пакетов, что задержка и процент потерь оказались меньше, чем у конку-рентов.

Первый случай скорее является край-ностью, и его суть кратко можно выразить так – «ошибка проектировщиков и про-граммистов».

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

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

15№11, ноябрь 2005

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

ном сайте имеются инструкции по на-стройке 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 при терми-

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

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

Основные минусы sipnet.ru Нет удобного и интуитивно понят-ного интерфейса пользователя. Нет четких правил относительно используемых кодеков. Сложности в работе dial-up-клиен-тов.

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

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

Более подробное сравнение воз-можностей всех рассмотренных се-годня клиентов можно найти в Таб-

лице 1.

Литература и ссылки: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.

Таблица 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, MacOS X, Linux, Pocket PC

Windows 2000/XP, MacOS X, Linspire Windows 2000/XP Неприменимо

Статус Release Beta Beta Неприменимо

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

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

16

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

Программа ftpd представляет собой достаточно прос-той ftp-сервер. В отличие от таких инструментов, как ProFTPd, PureFTPd и других, ftpd не имеет раз-

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

Начнем с теорииДля начала давайте коротко ознакомимся с самим прото-колом FTP. Он описывается довольно объемным докумен-том RFC 959 и определен только для транспортного прото-кола TCP; UDP-реализации, в отличие от TFTP, нет.

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

В то время как порт данных служит для передачи запра-шиваемой информации.

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

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

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

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

Протокол FTP предназначен для передачи файлов по сети. Существует множество очень

функциональных ftp-серверов, однако для использования в «личных» целях, как правило,

вполне достаточно возможностей входящей в состав FreeBSD программы ftpd.

Сергей СупруновСергей Супрунов

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

17№11, ноябрь 2005

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

Этот скрипт будет прослушивать соединение на ука-занном в параметрах командной строки порту и выводить на экран всю полученную через созданный сокет инфор-мацию.

Откроем две терминальные сессии, которые услов-но назовем cmd (порт управления, обмен данными пока-зан зеленым шрифтом) и data (порт данных, соответству-ющие строки – серые). Ввод пользователя выделен крас-ным шрифтом. На приведенном ниже листинге строки обо-их терминалов показаны вперемежку, отображая хроноло-гию их работы:

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

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

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

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

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

#!/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()

cmd: serg$ telnet localhost 21cmd: 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 usernamecmd: 331 Password required for username.cmd: PASS userpasswdcmd: 230 User username logged in, access restrictions apply.data: serg$ ./lystener localhost 25623cmd: PORT 127,0,0,1,100,23cmd: 200 PORT command successful.cmd: LISTcmd: 150 Opening ASCII mode data connection for '/bin/ls'.data: Connected on ('127.0.0.1', 20)data: total 8data: drwxr-xr-x 2 0 0 512 Jun 4 2001 bindata: drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdatadata: drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankitdata: drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updatadata:data:data: No data more. Connection is closed.cmd: 226 Transfer complete.cmd: QUITcmd: 221 Goodbye.cmd: Connection closed by foreign host.

cmd: serg$ telnet localhost 21cmd: 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 usernamecmd: 331 Password required for username.cmd: PASS userpasswdcmd: 230 User username logged in, access restrictions apply.cmd: PASVcmd: 227 Entering Passive Mode (127,0,0,1,245,5)data: serg$ telnet localhost 62725data: Trying 127.0.0.1...data: Connected to localhost.data: Escape character is '^]'.cmd: LISTcmd: 150 Opening ASCII mode data connection for '/bin/ls'.data: total 8data: drwxr-xr-x 2 0 0 512 Jun 4 2001 bindata: drwxr-xr-x 2 1012 0 512 Sep 21 07:44 downdatadata: drwxr-xr-x 2 1012 0 512 Nov 12 2004 mankitdata: drwxr-xr-x 2 1012 0 512 Aug 26 04:58 updatadata: Connection closed by foreign host.cmd: 226 Transfer complete.cmd: QUIT

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

18

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

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

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

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

Здесь «протокол» может иметь значение 1 (IPv4) или 2 (IPv6), «адрес» – IP-адрес, синтаксис которого должен соответствовать используемому семейству протоколов, «порт» – номер порта.

Команда EPSV может в качестве параметра прини-мать 1 или 2 (указывает семейство протоколов, которое поддерживает клиент). Кроме того, специальная коман-да EPSV ALL информирует сервер о том, что в дальней-шем будет использоваться только команда EPSV, и все остальные команды на установление соединения следу-ет отбрасывать.

Что поддерживает ftpdСервер ftpd, входящий в состав FreeBSD, по умолчанию мо-жет обслуживать как активные, так и пассивные соедине-ния (в том числе и расширенные), режим работы для конк-ретного сеанса определяется клиентом. Работать ftpd мо-жет как в режиме демона (постоянно присутствует в памя-ти и самостоятельно обслуживает соединения на 21 порт), так и в сотрудничестве с супердемоном inetd, который осу-ществляет вызов сервера при получении входящего соеди-нения на порту 21.

Если доступ на ваш сервер по FTP требуется доволь-но редко, то более удобным выглядит использование inetd для запуска сервера (если, конечно, этот демон у вас ис-пользуется). В этом случае не придется держать в памяти сервер ftpd постоянно – он будет загружаться лишь для об-служивания конкретного соединения.

Типичная строка запуска в /etc/inetd.conf выглядит сле-дующим образом:

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

Если по соображениям безопасности вы не используете inetd, а также если FTP-доступ к вашему серверу выполня-ется достаточно часто, то выгоднее запустить ftpd в режи-ме демона (с ключом -D). В этом случае сервер будет пос-тоянно находиться в памяти.

В стартовых сценариях FreeBSD не предусмотрено за-пуска ftpd в режиме демона, но нужный скрипт несложно написать самостоятельно. Поместите в каталог /etc/rc.d та-кой файл ftpd:

Не забудьте сделать его исполнимым (chmod a+x ftpd). Чтобы этот сценарий мог запускать сервер ftpd, в файл/etc/rc.conf нужно добавить следующие строки:

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

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

Поговорим о его работе и настройке.

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

#ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

#!/bin/sh## PROVIDE: ftpd# REQUIRE: DAEMON LOGIN# KEYWORD: shutdown

. /etc/rc.subr

name="ftpd"rcvar= s̀et _ rcvar̀command="/usr/libexec/${name}"

load _ rc _ config $nameftpd _ flags="-D ${ftpd _ flags}" run _ rc _ command "$1"

ftpd _ enable="YES"ftpd _ flags="-E"

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

EPRT |протокол|адрес|порт|

cmd: 221 Goodbye.cmd: Connection closed by foreign host.

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

19№11, ноябрь 2005

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

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

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

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

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

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

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

командной строки. Если вы запускаете 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-сервер, позволяющий более гибко управлять правами доступа, пользователями, параметрами передачи файлов, то воспользуйтесь более серьезным решением.

vasyapetya /var/db/petya@dialup

serg /home/serg/./public _ html

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

20

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

системе устройства и нажать нужную клавишу. Тогда сис-тема остановит процесс установки и «попросит» устано-вить дискету с драйверами (рис. 2).

Увы, такой дискеты нет в дистрибутиве эмулятора, и ис-пользование SCSI-диска не рекомендовано для виртуаль-ных машин MS Windows XP. Хотя, сам драйвер присутствует в составе VMWare Tools. Тогда подготовим дискету вручную. Сначала вставим чистый диск и сформатируем его:

Теперь примонтируем диск с VMWare Tools и скопируем в корень чистого диска файлы с драйверами:

Полученный диск можно использовать при установке 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> как указание о применении незнакомого

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

Алексей БарабановАлексей Барабанов

# fdformat /dev/fd0

# mkdosfs /dev/fd0

# umount /dev/fd0# mkdosfs /dev/fd0

# mount /dev/fd0

# 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

# umount /dev/fd0

Автоматизация установки MS Windows до предела сокращает вмешательство оператора.

Можно сказать, что практически исключает. Но при встрече с нестандартным оборудованием

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

Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.Formatting ... doneVerifying ... done

mkdosfs 2.10 (22 Sep 2003)Device mounted using subfs, please do not access it while creating filesystem

mkdosfs 2.10 (22 Sep 2003)

`/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/disk.tag' -> `/media/floppy/disk.tag'`/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/txtsetup.oem' -> `/media/floppy/txtsetup.oem'`/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/vmscsi.cat' -> `/media/floppy/vmscsi.cat'`/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/vmscsi.inf' -> `/media/floppy/vmscsi.inf'`/mnt/program files/VMware/VMware Tools/Drivers/scsi/win2k/vmscsi.sys' -> `/media/floppy/vmscsi.sys'

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

21№11, ноябрь 2005

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

ние и нажмем «S», как требуется. Система прочтет содер-жимое диска и предложит подтвердить выбор (рис. 3) на-жатием «Enter».

Далее система предложит добавить еще какие-нибудь устройства (рис. 4), на что в нашем случае ответим отка-зом опять же путем нажатия «Enter».

К сожалению, все перечисленные действия не приве-дут к успеху. Поскольку в использованном диске автома-тической установки нет возможности указать иное уст-ройство загрузки дистрибутивных файлов, чем CD-ROM и в ответ на запрос, где искать использованный драйвер vmscsi.sys (рис. 5), приходится или прекращать установку вообще, или, понадеявшись на «авось», пропускать копи-рование этого файла.

И так как теперь для работы второй фазы установки сис-темы нужны еще и использованные драйвера SCSI, то не-удачный финал предопределен (рис. 6).

Ничего не остается, как обратиться к источникам [5, 6, 7]. Здесь можно и закончить нашу историю, мол, читайте и воп-лощайте. Но, к сожалению, информация с [5] весьма скуд-на, с [6] противоречива и местами ошибочна, а с [7] откро-венно наивна, как всякий дословный перевод техническо-го источника. Хотя, безусловно, если нужно узнать и по-нять все, то и прочесть кроме этой статьи придется также все перечисленное.

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

Точно следуя первой части рецепта с [8], внесем необхо-димые изменения в файл TXTSETUP.SIF. Нахождение это-го файла и все сопутствующие проблемы сборки готового диска с ним уже обсуждались в [1,2,3,4] и здесь мы не бу-дем еще раз это рассматривать. Вот модификация в фор-мате, пригодном для автоматического патчирования:

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

Рисунок 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

+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"

+ *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 = 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

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

22

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

Здесь добавления вносятся в три секции файла TXTSETUP.SIF.

Во-первых, в секции [SourceDisksFiles] описываем файл (или файлы, если их много), который оригинально размеща-ется в директории i386 дистрибутивного диска. Но, как ви-дите, формат строки немного отличается от предложен-ного в [8]. Полностью все опции управления описаны в [9]. И здесь обнаруживается лишнее действие – сжатие фай-ла утилитой makecab.exe. Поскольку у нас вся сборка про-изводится в среде GNU Linux, то ради экономии полутора десятков килобайт не будем портить чистоту среды и запус-кать MS Windows, только чтобы воспользоваться отсутству-ющей в Linux утилитой makecab. И всего-то, что придется сделать – поменять «3_» в строке описания на «_x». Полу-чилось vmscsi.sys = 1,,,,,,_x,4,1,,,1,4. Число пробелов вокруг знака «=» не принципиально, а вот число запятых – очень даже. Вообще, похоже на колдовское заклинание. Главное, не сбиться ни в одном знаке, а то вместо «грозы» выйдет «коза», а может, что и похуже. Но смысл этой строки по-нятен. Здесь описываются файл с драйвером и его фор-

мат. Сам файл vmscsi.sys (или файлы, если их много) на-до просто скопировать в неизменном виде в директорию i386 дистрибутивного диска и именно там будет его ис-кать установщик.

Затем добавляем строку в секцию [HardwareIdsDatabase]. В этой секции описывается соответствие номеров уст-ройств PCI и их драйверов. В нашем случае будет так PCI\VEN_104B&DEV_1040 = «vmscsi». Т.е. указывается код производителя, код устройства и имя файла с драйвером. Как только установщик обнаруживает некое PCI-устройс-тво, он ищет по этим кодам драйвер, ему соответствующий, и затем грузит его, как описано чуть выше. Значения этих констант можно взять из соответствующего этому драйве-ру файла INF.

Ну и наконец надо связать с этим драйвером некую стро-ку комментария, что и делается путем добавления строки в секцию [SCSI]: vmscsi = «VMWare SCSI Controller». Содер-жание строки не имеет никакого принципиального значе-ния для работы системы, но отсутствие ее вовсе недопус-тимо и приводит завершению установки из-за отсутствия параметра, описывающего драйвер.

Всего перечисленного должно быть достаточно по логи-ке. Но только не в MS Windows. В этой чудной системе на-до еще и специально указать в секции [SCSI.load] загруз-ку нужного драйвера vmscsi = vmscsi.sys,4 из указанного места в указанном формате, который далее будет связан с соответствующим ему PCI-устройством и описание кото-рого будет взято из соответствующей строки... Уф! Вот те-перь все: файл драйвера скопирован куда надо, файл ука-заний установщику «что делать», модифицирован как на-до. Можно собирать диск и устанавливать систему. Сбор-ка производится, как было описано в [1, 2, 3, 4]. После ус-тановки обнаруживаем, что драйвер благополучно загру-жен в систему (рис. 7).

Заметим, никаких дополнительных манипуляций с раз-мещением таких файлов в директориях Drivers и подобное, что предлагается в [6, 7, 8], делать не надо. В этом вопро-се указанные источники заблуждаются.

Точно таким же образом можно на этапе загрузки под-ключить и все остальные драйверы дисковых устройств. Ес-ли один и тот же драйвер используется для нескольких воз-можных PCI устройств, например viamraid, то надо для каж-дого набора PCI индексов записать отдельную строку в сек-ции [HardwareIdsDatabase], например так:

Если же производитель устройств с разными PCI-ин-дексами сотворил драйвера с одинаковыми именами (фир-ма Intel очень такое любит), то ничего не мешает эти драй-вера переименовать как угодно и соответственно изме-нить все аналогичные строки в TXTSETUP.SIF. Например, для драйвера BusLogic из VMWare Tools название файла можно поменять на vmscsi1.sys без какого-либо ущерба работоспособности.

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

Рисунок 4. Запрос дополнительных драйверов

Рисунок 5. Vmscsi.sys не найден на источнике установки

Рисунок 6. «Голубая смерть»

PCI\VEN _ 1106&DEV _ 3249 = "viamraid"PCI\VEN _ 1106&DEV _ 3149 = "viamraid"PCI\VEN _ 1106&DEV _ 3164 = "viamraid"

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

23№11, ноябрь 2005

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

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

Добавляем драйверы устройств через 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]:

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

После установки наблюдаем следующую картину (рис. 8).

Автоматически были установлены драйверы SCSI, SVGA (и теперь экран настроен в разрешение 800х600), специаль-ный драйвер сетевой карты, то есть так как задано в сек-

ции [Display] файла WINNT.SIF. Все перечисленные драй-веры вместе со всеми необходимыми файлами были ско-пированы из директории C:\Drivers\Very_looooong_filename внутрь установочной директории MS Windows XP, что вид-но на рис. 8 в окошке поиска. Здесь можно сделать вывод, что директорию с драйверами можно в конце установки уда-лять, так же как и директорию с дистрибутивами устанав-ливаемых программ в секции [GuiRunOnce]:

А вот парочка драйверов vmmemctl.sys и vmmouse.sys так и не нашла себе применения. И поэтому осталась толь-ко в C:\Drivers\Very_looooong_filename.

Еще одно интересное наблюдение было сделано в [10]. Установщик не ищет драйвера и их INF-файлы во вложен-ных директориях от указанной в OemPnPDriversPath, но ес-ли записать несколько путей через точку с запятой, то они будут обрабатываться в порядке сортировки имен. То есть если некоторые драйвера, например чипсета, требуется установить первыми, то директорию с ними надо назвать именем с использованием символов с меньшими номера-ми в кодировке.

OemPnPDriversPath="Drivers\Very _ looooong _ filename"DriverSigningPolicy=Ignore

# ls -l /uawsp2/\$OEM\$/\$1/Drivers/Very _ looooong _ filename

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

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

# 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"

total 204drwxr-xr-x 2 root root 4096 Oct 29 17:48 .drwxr-xr-x 3 root root 4096 Oct 29 17:48 ..-r--r--r-- 1 root root 1929 Mar 23 2005 vmmemctl.inf-r--r--r-- 1 root root 5452 Mar 23 2005 vmmemctl.sys-r--r--r-- 1 root root 7890 Mar 23 2005 vmmouse.cat-r--r--r-- 1 root root 1312 Mar 23 2005 vmmouse.inf-r--r--r-- 1 root root 3904 Mar 23 2005 vmmouse.sys-r--r--r-- 1 root root 7900 Mar 23 2005 vmware-nic.cat-r--r--r-- 1 root root 3561 Mar 23 2005 vmware-nic.inf-r--r--r-- 1 root root 79584 Mar 23 2005 vmx_fb.dll-r--r--r-- 1 root root 2400 Mar 23 2005 vmx_mode.dll-r--r--r-- 1 root root 9044 Mar 23 2005 vmx_svga.cat-r--r--r-- 1 root root 2396 Mar 23 2005 vmx_svga.inf-r--r--r-- 1 root root 14912 Mar 23 2005 vmx_svga.sys-r--r--r-- 1 root root 7860 Mar 23 2005 vmxnet.cat-r--r--r-- 1 root root 3567 Mar 23 2005 vmxnet.inf-r--r--r-- 1 root root 22528 Mar 23 2005 vmxnet.sys

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

24

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

В формате WINNT.SIF используется 8-битная кодиров-ка. Для России это cp866. Хотя достаточно добавить циф-ровой префикс к имени директории с драйверами, посколь-ку порядок цифр в всех кодировках совпадает. По мнению авторов [10], логика работы системы такова: так как драй-вера чипсета необходимы для работы многих других ус-тройств, то установка в первую очередь зависимых уст-ройств не произойдет должным образом, если еще не ус-тановлены драйвера основных.

Но проблема с неустановленными драйверами vmmemctl.sys и vmmouse.sys таким путем не решается. Так как эти драйвера проиграли конкуренцию в PnP тем, которых пред-почел PnP-резолвер, использовавший информацию из INF-файлов. И эти драйвера приходится добавлять вручную че-рез «Мастер обновления оборудования». Выбираем «Уста-новку из указанного места» и режим «Не выполнять поиск. Я сам выберу нужный драйвер» (см. рис. 9).

Получается, что драйвер манипулятора мышь изVMWare не был установлен, но прошел этап регистрации. Иначе го-воря, логика работы системы иная, чем это предполагают авторы [10]. Система регистрирует все драйвера. И как только после установки некоторых из них появится воз-можность установки зависимых, то это произойдет да-же, если в последовательности сортировки имя директо-рии с главными драйверами получило очередность пос-ле директории с зависимыми. Удивительно, что фантазия с цифровыми префиксами повторяется из рецепта в ре-цепт на [6] и [7].

Тем не менее метод регистрации всех драйверов зара-нее без учета их так называемой очередности был успеш-но реализован.

Добавляем драйверы устройств через DetachedProgramСуществует еще один способ подгрузить в автоматическом режиме драйверы в устанавливаемую систему. В секции [GuiUnattended] можно указать опцию DetachedProgram [11], в которой описать программу, запускаемую параллельно с выполнением основной программы setup.exe. Этот метод установки драйверов подробно описан в [12]. Там же приве-дена ссылка на архив необходимых программ [13]. Его на-до загрузить и распаковать в директорию $OEM$ устано-

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

Если для работы был использован диск, подготовлен-ный в [1, 2, 3, 4], то должно получиться примерно следу-ющее:

Как уже было сказано, в Drivers кладутся нужные драй-веры. AutoIt3.exe – это интерпретатор скрипта Drivers.au3:

А SetupCopyOEMInf.exe и WatchDriverSigningPolicy.exe – это простенькие программки, первая из которых выполня-ет соответствующий системный вызов [14], а вторая избав-ляет от диалога с вопросом о доверии поставщику в слу-чае нахождения неподписанных драйверов.

Для запуска указанных программ используется следую-щая последовательность строк, записываемых в WINNT.SIF в секции [GuiUnattended]:

Этот набор символов, который можно детально ра-зобрать с помощью [15], приводит к запуску скрипта Drivers.au3 в фазе T-39 [3] процесса установки. После че-го все драйверы с установочного диска регистрируются в базе драйверов и далее участвуют в установке. Именно «участвуют»! То есть и этот метод не приводит к гаранти-руемой установке конкурентных драйверов. Иначе говоря, установка идет все также на основании информации из INF-файлов. Единственное преимущество в том, что драйверы размещаются на CD в произвольной структуре директорий и в процессе установки не копируются на диск вовсе.

Не стоит забывать, что хотя все драйверы регистрируют-ся в системной базе, но те, что не подключаются в процес-се установки, остаются на дистрибутивном диске. И именно там система далее ожидает их найти. То есть для VMWare та-ким местом будет «D:\$OEM$\Drivers\...». Значит, если далее предполагается проблемный драйвер установить вручную,

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

# ls -l /uawsp2/\$OEM\$

# cat /heap2/unattended-win/uawsp2/\$OEM\$/Drivers.au3

ProcessSetPriority("setup.exe",0)Run(@ScriptDir & "\WatchDriverSigningPolicy.exe")ProcessWait("WatchDriverSigningPolicy.exe")RunWait(@ScriptDir & "\SetupCopyOEMInf.exe Drivers")ProcessClose("WatchDriverSigningPolicy.exe")ProcessSetPriority("setup.exe",2)

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)))"

total 180drwxr-xr-x 4 root root 4096 Mar 22 2005 $$drwxr-xr-x 6 root root 4096 Oct 31 00:11 $1drwxr-xr-x 5 root root 4096 Oct 30 22:21 .drwxr-xr-x 5 root root 4096 Apr 21 2005 ..-rw-r--r-- 1 root root 118272 Dec 31 2002 AutoIt3.exe-rw-r--r-- 1 root root 27 Mar 28 2005 Cmdlines.txtdrwxr-xr-x 3 root root 4096 Oct 30 22:21 Drivers-rw-r--r-- 1 root root 264 Oct 5 22:51 Drivers.au3-rw-r--r-- 1 root root 20992 Dec 31 2002 SetupCopyOEMInf.exe-rw-r--r-- 1 root root 3584 Dec 31 2002 WatchDriverSigningPolicy.exe-rw-r--r-- 1 root root 113 Mar 28 2005 mkusers.cmd

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

25№11, ноябрь 2005

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

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

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

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

составу используемого оборудования. Ну а поскольку все работы по созданию такого диска выполнялись в среде 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.

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

26

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

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

ва вкратце рассмотрим этот процесс.

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

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

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

Потеря MBR – наверное, самая досадная потеря. Порча считанных байт полностью

парализует абсолютно исправную систему. Если вы активно экспериментируете с

операционными системами, то знакомы с такой ситуацией не понаслышке. Существует

простое и универсальное решение на основе GRUB, способное спасти ситуацию минимальными

средствами и силами.

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

Алексей МичуринАлексей Мичурин

и исключения (например, Boot Easy – стандартный загрузчик для FreeBSD).

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

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

27№11, ноябрь 2005

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

осуществляющую настрой-ку и запуск ядра (например, loader во FreeBSD).

На рис. 1 показаны схе-мы загрузки трёх ОС. Изоб-ражённая структура диска предельно проста: нет расши-ренной партиции, нет разде-лов подкачки и прочих дета-лей. Имеется только три пар-тиции, на каждой из которых установлена своя ОС.

Windows/DOS загружает-ся согласно описанной схеме. MBR-код считывает загруз-чик с партиции, а тот считы-вает и запускает программу-загрузчик ядра.

Linux загружается по такой же схеме. Заметьте, в MBR и в загрузочной области пар-тиции могут быть разные за-грузчики. Так в MBR может находиться Boot Easy, а для загрузки ядра при этом будет исполь-зоваться LILO, хотя в пакет LILO, ко-нечно, входит собственный MBR-за-грузчик.

Загрузка FreeBSD идёт по чуть бо-лее сложной схеме. Согласно стандар-тной процедуре, MBR-код (в терминах FreeBSD «boot0») загружает boot1-код из партиции. Но во FreeBSD предус-мотрено разбиение партиции на под-разделы (в терминах FreeBSD парти-ция называется «слайс», а подпарти-ция – «партиция»). Поэтому процесс повторяется в уменьшенном масшта-бе: загрузчик boot1 считывает и запус-кает код boot2 из подпартиции. Boot2 загружает программу loader, которая конфигурирует и запускает ядро.

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

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

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

свой собственный загрузчик, который в состоянии загрузить только её.

Складывается знакомая мно-гим ситуация: чтобы загрузить Linux (или другую, отличную от Windows ОС), вам надо восстановить LILO (или дру-гой, отличный от Windows-загрузчи-ка), а чтобы восстановить LILO – за-грузить Linux.

Вторая часто встречающаяся си-туация: вы решили усовершенство-вать загрузчик, но забыли включить в нём жизненно важную функцию.

Например, вы могли настраи-вать стандартный загрузчик FreeBSD (с помощью команды boot0cfg) и за-быть включить поддержку больших винчестеров (ключ -o packet), которая по умолчанию отключена. После пере-загрузки вы обнаружите, что или ниче-го не загружается, или доступна только ОС из первой партиции. А это, скорее всего, Windows, которая никак не помо-жет вам исправить ситуацию.

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

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

Рисунок 1. Схема загрузки. На диске три раздела, в которыхустановлены Windows, Linux и FreeBSD

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

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

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

Экзотические промежуточные за-грузчики как раз мало кому известны, и их практически никто «не трогает».

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

Live CD: он ли нам нужен?Итак, ваша ОС цела, но загрузчик ис-порчен, и загрузиться вы не можете. Вам требуется восстановить загруз-чик. Решение «всё переустановить» не подходит, ведь при этом вы поте-ряете данные.

Первое, что приходит на ум, – вос-пользоваться загрузочным диском. Ес-ли у вас имеется «спасательный» CD от вашей ОС, то скорее всего он вам поможет. После загрузки можно смон-тировать партицию с «потерянной» ОС и выполнить команду chroot. После это-го вы окажетесь в привычной среде.

К сожалению, этот приём может не сработать. Чаще всего, магическо-го диска просто не оказывается под ру-кой в нужный момент. Для комфорт-ной работы вам скорее всего придёт-ся скорректировать переменные ок-ружения PATH, PAGER, EDITOR, LANG и другие. Могут понадобиться и другие (порой неожиданные и не очевидные)

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

28

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

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

Можно воспользоваться не «спасательным» диском, а просто Live-дистрибутивом. Но и этот подход не гаранти-рует стопроцентный успех.

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

Здесь-то и возникает мысль: «вот бы на минуточку пог-рузиться в мой Linux/FreeBSD/что-то ещё; минуты бы хвати-ло, чтобы исправить все проблемы в лучшем виде». Имен-но это и поможет сделать GRUBable CD.

Слово «GRUBable», как вы, наверное, уже догада-лись, является производным от «bootable». Но обычный bootable-CD содержит ОС, способную работать автоном-но, а GRUBable-CD содержит мощный загрузчик GRUB, способный загружать любую ОС, но на самом CD ника-кая ОС не установлена. (Слово «GRUBable» придумал ав-тор, нигде ранее он не встречал ни такого слова, ни описа-ния подобного подхода.) GRUBable CD может взять на се-бя все функции первого и второго загрузчиков и загру-зить именно вашу ОС, даже если все boot-сектора были повреждены.

Конечно, отсутствие на диске ОС нельзя отнести к чис-лу преимуществ предлагаемого решения, но зато создать GRUBable CD можно за считанные минуты, а пользы он мо-жет принести даже больше, чем иной Live-CD.

Создаём GRUBable CD за пять минутЧтобы установить GRUB на CD, нужно совсем немного. Пер-вым делом раздобудьте бинарный дистрибутив GRUB. Ско-рее всего, он уже есть или на вашем диске, или среди дис-трибутивов. (Как скомпилировать GRUB самостоятельно, мы ещё обсудим.) Найдите в нём файл-образ stage2_eltorito. Всё, больше от GRUB вам ничего не понадобится.

Создаём конфигурационный файлТеперь создадим файл-меню. Предлагаю рассмотреть сле-дующий вариант:

Я не буду здесь даже пытаться пересказать докумен-тацию на GRUB. Ограничусь только краткими коммента-риями.

Самые первые директивы задают глобальные парамет-ры: default – секция, загружаемая по прошествии тайм-ау-та; timeout – тайм-аут в секундах (его в данном случае луч-ше сделать побольше, чтобы было время сориентировать-ся); color – цвета, их можно было оставить «умолчательны-ми», но лично мне нравится зелёный. Кроме того, исполь-зование необычного цвета позволит вам быстро сориенти-роваться, если вы загрузитесь с компакт-диска по ошибке или случайно.

Секция «FreeBSD» состоит из четырёх блоков, каждый из которых позволяет загрузить ОС с одной из четырёх партиций (это придаст нашему диску некоторую универ-сальность). Директива title задаёт заголовок, который бу-дет фигурировать в меню. Root задаёт корневое устройс-тво. GRUB нумерует устройства от нуля и партиции тоже от нуля(!). Команда kernel загружает и выполняет загруз-чик ядра FreeBSD.

Аналогично построена и секция «Linux». Здесь тоже имеется четыре подобные записи. Следует сделать толь-ко одну оговорку относительно директивы kernel. В Linux нет чёткого места в файловой системе для ядра. В старых дистрибутивах ядро находилось в корне файловой систе-мы /vmlinuz. Именно на это ориентировались создатели до-кументации на GRUB. Но сейчас, как мне кажется, ядро ча-ще хранится в директории /boot. Имя vmlinuz тоже уходит в прошлое. Сейчас можно встретить имя bzImage и дру-

default 0timeout 300color light-green/black black/green

# FreeBSDtitle FreeBSD /dev/ad0s1aroot (hd0,0,a)kernel /boot/loadertitle FreeBSD /dev/ad0s2aroot (hd0,1,a)kernel /boot/loadertitle FreeBSD /dev/ad0s3aroot (hd0,2,a)kernel /boot/loadertitle FreeBSD /dev/ad0s4aroot (hd0,3,a)kernel /boot/loader

# Linuxtitle Linux (/boot/vmlinuz) /dev/hda1root (hd0,0)kernel /boot/vmlinuz root=/dev/hda1title Linux (/boot/vmlinuz) /dev/hda2root (hd0,1)kernel /boot/vmlinuz root=/dev/hda2title Linux (/boot/vmlinuz) /dev/hda3root (hd0,2)kernel /boot/vmlinuz root=/dev/hda3title Linux (/boot/vmlinuz) /dev/hda4root (hd0,3)kernel /boot/vmlinuz root=/dev/hda4

# Windowstitle Windowsrootnoverify (hd0,0)chainloader +1makeactive

# halt/reboottitle REBOOTreboottitle HALThalt

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

29№11, ноябрь 2005

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

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

Секция «Windows» устроена иначе. Это связано с тем, что в данном слу-чае GRUB может взять на себя только функции первого загрузчика (MBR). Командой rootnoverify мы устанавли-ваем корневое устройство, но не мон-тируем его. Далее загружаем первый сектор (команда chainloader), в кото-ром и содержится загрузчик. И в за-ключение делаем партицию актив-ной (makeactive), DOS/Windows к это-му не равнодушен.

Вообще-то по такой же схеме мож-но загружать и другие ОС. Например, загрузить FreeBSD, заменив только первый загрузчик, можно так:

После выполнения этих команд GRUB передаст управление boot1-про-цедуре, и загрузка пойдёт по естест-венному для FreeBSD сценарию.

Чаще всего такие приёмы не оправ-даны, и лучше использовать все име-ющиеся возможности GRUB, но быва-ют и исключения. Например, вы може-те обновить Windows на машине с дву-мя ОС: Windows и Linux. При этом об-новлении теряется только MBR-запись, но основной код LILO, находящийся за пределами MBR, цел. Зачастую LILO выполняет довольно сложные функции, например, подгружает initrd (с этим мо-жет справиться и GRUB). Возможно, LILO запускает ядро с опциями, кото-рые вы просто забыли, или вам просто лень их снова набирать. Одним словом, вы потеряли MBR, но хотите запустить LILO, а не просто «сырое» ядро. Здесь-то вам и пригодится указанная возмож-ность, надо только правильно указать партицию:

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

зование команды initrd. Ядра NetBSD и OpenBSD не распознаются, если они скомпилированы не как a.out, а как ELF. Чтобы загрузить ELF-ядро, его тип сле-дует указывать явно:

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

Одним словом, заглянуть в доку-ментацию никогда не помешает.

Создаём ISO-образДавайте создадим временную дирек-торию и назовём её для определён-ности iso. В ней мы подготовим дере-во каталогов, подлежащее переносу на CD. Нам понадобится два файла: iso/boot/grub/menu.lst – конфигураци-онный файл, который мы только что со-здали, и iso/boot/grub/stage2_eltorito – файл из дистрибутива GRUB. В при-нципе, файл stage2_eltorito можно бы-ло бы поместить и в любое другое мес-то файловой системы, но вот файл menu.lst должен находиться именно в директории /boot/grub/.

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

Теперь создаём ISO-образ:

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

Давайте рассмотрим опции по по-рядку.

title FreeBSDrootnoverify (hd0,0)chainloader +1

title LILO on hda2rootnoverify (hd0,1)chainloader +1

kernel --type=netbsd /boot/netbsd-elf

chainloader +4

mkisofs -R \ -jcharset koi8-r \ -b boot/grub/stage2 _ eltorito \ -c boot/boot.catalog \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -o boot.iso \ iso

Опция -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:

Или под FreeBSD:

cdrecord -dev=0,1,0 -data boot.iso

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

30

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

Можно воспользоваться и любыми Windows-утилитами.Теперь при загрузке с этого диска вы увидите меню

(см. рис. 2).Вы можете выбрать нужный пункт и загрузиться или вос-

пользоваться дополнительными возможностями, доступны-ми, как вы видите, по клавишам «e» (редактирование ме-ню) и «c» (командная строка).

Дополнительные возможностиGRUB-диск предоставляет гораздо больше возможностей, чем просто выбор одного из пунктов меню. Нажав кноп-ку «c», вы попадаете в командную строку, откуда можете сами вводить любые команды. Скажем, если у вас в ме-ню не предусмотрена загрузка ядра /boot/bzImage-myone, то вы можете ввести соответствующие команды и загру-жать именно это ядро. Не забудьте только ввести в заклю-чение команду boot. При работе с меню GRUB добавляет её автоматически, но с консоли её следует вводить вручную. То же самое можно сделать, перейдя в режим редактиро-вания меню (клавиша «e») и скорректировав аргумент ко-манды kernel. Режим редактирования позволяет не только изменять, но и добавлять/удалять команды.

Кроме того, если вы использовали GRUB ранее (до ава-рии), вы можете загрузить файл-меню, хранящийся у вас на диске. Для этого достаточно ввести команду (в режиме командной строки) следующего вида:

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

оснащена прекрасным механизмом автодополнения. Если вы напишете только первую букву этой команды и нажмёте клавишу «Tab», то GRUB выдаст вам подсказку:

Если вы добавите теперь ещё две буквы («о» и «n») и сно-ва нажмёте «Tab», то GRUB дополнит строчку до «configfile» автоматически. Автодополнение работает с дисками, ката-логами и файлами, что очень удобно.

Командная строка GRUB предоставляет широчайший набор возможностей. GRUB позволяет работать с файло-выми системами, искать файлы (команда find), просмат-ривать их содержимое (cat). Он имеет средства диагнос-тики оборудования, «ручной» детализации параметров дисков и многие другие. Описать все средства командной

строки в рамках одной статьи просто невозможно. Да это и не нужно. Список команд вы можете получить, набрав help (см. рис. 3).

Подробную справку по любой команде можно получить, набрав: «help команда».

Большинство команд покажутся знакомыми и понятны-ми пользователям UNIX. За подробной информацией обра-щайтесь к документации.

Что можно усовершенствоватьНаш первый GRUBable CD мы создали практически без усилий. А что, если подойти к вопросу немного более твор-чески?

Размещаем файлы по своему усмотрениюКому-то может не понравиться фиксированность путей и захочется разместить файлы по собственному усмот-рению.

Добиться большей компактности и гибкости можно, вкомпиллировав конфигурационный файл в тело stage2_eltorito. Эта возможность появилась в GRUB ещё в 2002 го-ду, и в данном случае она как нельзя кстати. Файл с меню всё равно нельзя будет отредактировать на компакт-дис-ке, а значит, вы не теряете никаких возможностей, «зашив» меню в тело загрузчика. Тем более что вы всегда сможете выйти из встроенного меню и воспользоваться всеми пре-имуществами командной строки. Зато теперь вы сможете размещать файлы на диске как вам заблагорассудится.

Взять исходные коды GRUB можно на официальной странице проекта http://www.gnu.org/software/grub/grub.html. На момент написания статьи самой свежей была версия 0.97, о ней и пойдёт речь.

Собирать GRUB я бы посоветовал под обычным пользо-вателем, чтобы подстраховаться от неожиданностей и оши-бок. GRUB очень неприхотлив и собирается практически любыми средствами. Так, например, в INSTALL написано, что для сборки нужен GNU make, но у меня GRUB прекрас-но собрался и обычным make (под FreeBSD).

Процедура сборки стандартная: скачиваем, разархиви-руем, конфигурируем:

Здесь я указал два ключа: первый предписывает произ-водить установку в домашний каталог, второй – вкомпил-лировать указанное меню.

Затем выполняем make и make install.

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

./configure \ --prefix=$HOME/GRUB \ --enable-preset-menu=menu.lst

burncd -v -f /dev/acd0 data boot.iso fixate

configfile (hd0,2)/boot/grub/menu.lst

Possible commands are: cat chainloader cmp color configfile

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

31№11, ноябрь 2005

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

но – от CD или локального диска до NFS или удалённого TFTP-сервера.

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

Понятно, что следующим шагом после переноса яд-ра на CD будет перенос на CD init, rc-скриптов, а следова-тельно, и корневой файловой системы. Но тогда мы полу-чим Live-CD со всеми его преимуществами и недостатка-ми, а мы договорились не рассматривать вопросы созда-ния загрузочных CD.

Перспективы GRUBНапомню, что GRUB снабжён доброй сотней мегабайт до-кументации. За рамками нашего рассмотрения остались возможности GRUB, связанные с загрузкой по сети (GRUB поддерживает сетевые интерфейсы и такие протоколы, как TFTP и DHCP), удалённым управлением, монтирова-нием образов (только из grub shell). GRUB может выпол-нять и функции утилиты fdisk (хотя, мне кажется, что луч-ше не использовать его в этом качестве без крайней необ-ходимости). С полученного нами диска можно произвести даже полноценную инсталляцию GRUB как менеджера за-грузки. Оставим обсуждение этих вопросов разработчи-кам документации.

Но в этой статье невозможно обойти вниманием вопрос развития GRUB. Дело в том, что именно сейчас GRUB стоит на распутье. Разработчики GNU GRUB заморозили проект. Теперь в GNU GRUB будут вноситься только косметические улучшения и исправления ошибок. Вместо GNU GRUB по-явился новый проект GRUB2. Пока, правда, версии 2 нет. На момент написания статьи самой свежей является вер-сия 1.91. Изменений огромное множество. Перечислить их все очень трудно. Это и поддержка новых устройств, и под-держка локализации и национальных алфавитов, и новые файловые системы, и ОС-специфичные загрузчики (та-кие, как loader во FreeBSD), и более дружественный интер-фейс инсталлятора, и графические меню... Но в целом, как мне кажется, GRUB2 продолжил линию GNU GRUB. Он всё больше становится похож на операционную систему, у ко-торой интерфейс меню и командной строки встроен в яд-ро. Во всём остальном это ОС: GRUB умеет работать с ос-новными устройствами (не только консоль и диски, но даже сетевые карты), работает с файловыми системами, позво-ляет загружать и выполнять код. Не это ли основные при-знаки операционной системы? Все эти качества GNU GRUB развиваются и усиливаются в GRUB2.

Единственным минусом GRUB2 является острый дефицит документации. Именно поэтому объём дистрибутива втрое меньше. Ситуация с документацией и определила мой выбор в пользу старого доброго GNU GRUB при написании этой ста-тьи. Но это «пока». Будущее, конечно, за GRUB2.

Теперь полученный файл stage2_eltorito (он лежит в ди-ректории $HOME/GRUB/lib/grub/i386-unknown) является полностью самодостаточным. Его можно положить в лю-бое место файловой системы компакт диска; файл menu.lst больше не требуется.

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

Сохраняем образы загрузчиков на CDВы видели, что при загрузке DOS мы просто считывали первый сектор DOS-партиции. GRUB, по понятным причи-нам, не умеет загружать ядро DOS и Windows и делегирует эти функции «родному» загрузчику. Так же обстоят дела и с некоторыми другими ОС, например, с QNX.

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

Создать образ проще всего командой dd. Пример под Linux:

А загрузить образ можно уже знакомой нам командой chainloader, указав не сектор, а путь к файлу:

Следует только иметь в виду, что никто не гарантиру-ет, что в разных версиях ОС загрузчики будут одинаковы или хотя бы совместимы.

Первый шаг к Live-CDПока рассматриваемые нами решения бессильны в ситуа-ции, когда испорченным оказалось ядро системы. Но и эту проблему можно разрешить минимальными усилиями. До-статочно разместить работоспособное ядро на том же CD, а в меню добавить следующие инструкции:

Вы видите, что теперь мы загружаем ядро с CD, но тре-буем, чтобы в качестве root-устройства была смонтирована первая партиция жёсткого диска. Если на первой партиции у вас действительно установлен Linux, то ядро (загруженное с CD) как ни в чём ни бывало смонтирует эту партицию как коревую файловую систему, и запустит процесс init.

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

Аналогично можно сохранить на CD ядро FreeBSD и про-грамму его загрузки – loader. Здесь есть множество вари-антов, потому что loader сам является весьма мощной про-граммой и может загрузить ядро практически откуда угод-

dd if=/dev/hda1 of=DOS-BOOT-IMAGE bs=512 count=1

chainloader (cd)/boot/DOS-BOOT-IMAGE

title Linux (kernel root=/dev/hda1)kernel (cd)/boot/vmlinuz root=/dev/hda1

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

32

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

Как показывает практика, чем сложнее становится система, тем больше усилий требуется,

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

Из названия следует, что ориен-тир сделан на создание тонких кли-ентов, т.е. создание ПЭВМ, которые

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

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

происходила на мэйнфреймах. Затем появились достаточно мощные ПЭВМ, и информация

стала обрабатываться на рабочих местах. Похоже, история любит повторяться, но сегодня

уже в зеркальном отражении – становится опять экономически выгодно использовать

мэйнфреймы с подключением легких терминалов – тонких клиентов.

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

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

много и аппаратного обеспечения ЭВМ. В TCO-анализе учитывается не толь-ко стоимость обеспечения, но и, напри-мер, поддержка в дальнейшем пользо-вателей и их обучение [4].

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

Насколько вы помните, в преды-дущей публикации [5] мы использова-ли так называемую barebone-систему на аппаратной платформе VIA EPIA-M. Помимо вполне удовлетворительной производительности на плате интегри-рованы сетевая и звуковая платы. Дан-ный факт позволяет построить на ба-зе EPIA-M бездисковые терминальные

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

33№11, ноябрь 2005

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

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

Небольшое отступление – не следует забывать, что об-новление BIOS возможно в том случае, если в материнской плате используется Flash-микросхема. Они начали широко применяться в Pentium-системах. В более ранних, напри-мер на базе 80486 ПЭВМ, использовались как flash-микро-схемы, так и микросхема однократной записи. В еще более древних (80386) использовались однократные.

Подумайте, а будут ли вообще работать такие ПЭВМ с ThinStation – ведь существуют вполне определенные ми-нимальные требования для запуска тонкого клиента: Частота ЦП – x86 100 МГц. Размер ОЗУ – 16 Мб. Размер видеопамяти – не менее 1 Мб.

Более подробно, как модифицировать BIOS см. [9]. А сейчас предварительно узнайте, как точно называет-ся ваша сетевая плата, затем на сайте [10] забирайте PXE ROM-код и с помощью утилит amiflash [11], cbrom про-изводите следующие манипуляции:

Сохранили в файл BIOS.BIN содержимое flash-памяти.В определенных случаях, места в BIOS может не хва-

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

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

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

Одним из довольно любопытных проектов явля-ется ThinStation [6]. Его корни уходят в такие проекты, как NetStation, PXES. Заимствовав идею сетевой загруз-ки, проект постепенно вырос до сегодняшнего состояния и в определенной степени представляет из себя вполне за-конченный продукт.

Давайте посмотрим, что же из себя представляет дан-ное творение. Вы уже могли быть с ним знакомы по публи-кации в журнале за прошлый год [7]. Пакет системных про-грамм busybox (объединяющий в одном флаконе упрощен-ный вариант bash, awk, cat, chmod, grep и ряда других), се-рия драйверов для различных сетевых карт, пакет приклад-ных программ, таких как клиенты rdesktop, telnet, а также се-рия X-серверов составляют основу «тонкой станции». Даль-нейшая сборка позволяет получить образ в виде файлов .nbi (etherboot-загрузка), initrd, .iso, pxelinux, syslinux. В част-ности, связка из initrd и pxelinux позволяет создать сетевые бездисковые терминалы. Помимо указанных пакетов есть возможность доукомплектовать загрузочный образ таки-ми пакетами, как vncviewer, tarantella, xnest, dillo, nx, Firefox, MPlayer и рядом других.

Дистрибутив ThinStation разделяется на часть для ко-нечного пользователя (40 Мб) и на часть, ориентирован-ную прежде всего на разработчика (400 Мб). В первой час-ти все программные пакеты уже скомпилированы и зада-ча пользователя заключается в том, чтобы выбрать те па-кеты, которые ему потребуются для работы. Вторая часть – это те же самые пакеты, только в исходных текстах. До-бавление своей собственной, предварительно скомпи-лированной программы в дистрибутив ThinStation для ко-нечного пользователя скорее всего закончится неудачно. С чем это связано? Прежде всего различие в версиях биб-лиотеки GLIBC, используемой в дистрибутиве (там вер-сия GLIBC 2.1.3) и вашей. Если программа скомпилирова-на полностью статически, то проблем в принципе не долж-но возникнуть. Вариант для разработчика предназначен для тех случаев, когда добавление в лоб собственного па-кета не срабатывает.

Коммерческие продукты сами не входят в состав дис-трибутива, а представлены в виде ссылок. Поэтому, ког-да вы выбираете клиентов, например, NoMachine, Citrix или Tarantella, то по мере сборки загрузочного образа они будут скачаны wget с сайтов производителей.

Нам сегодня потребуется дистрибутив ThinStation для ко-нечного пользователя[8]. Но перед тем как начнем сборку загрузочного образа, давайте добьемся, чтобы ПЭВМ мог-ла загружаться по сети.

Добавляем LAN ROM в системный BIOSВ случае, если вы счастливый обладатель старых ПЭВМ и/или сетевых карт без дополнительного слота с микросхе-мой, содержащей PXE-код, то единственный способ для до-бавления функции сетевой загрузки – это дополнить сис-темный BIOS материнской платы кодом для сетевой пла-ты. Зачем именно изменять системный BIOS, а не исполь-зовать загрузку, например, с НГМД? Во-первых, для безо-пасности. Хотя бездисковые терминалы и не имеют жестких

FLASH879 /SBIOS.BIN

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. PCI ROM[A] 0C000h(48.00K)06431h(25.05K)NVRAID.ROM 7. OEM1 CODE 02410h(9.02K)00DF3h(3.49K)BSMICODE.ROM 8. OEM0 CODE 01F26h(7.79K)01787h(5.88K)SBF.BIN

Total compress code space = 34000h(208.00K) Total compressed code size = 2F6A4h(189.66K) Remain compress code space = 0495Ch(18.34K)

** Micro Code Information **Update ID CPUID | Update ID CPUID | Update ID CPUID | Update ID CPUID------------------+--------------------+--------------------+-------------------

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

34

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

а на освободившееся место поместить нужный нам PXE-код сетевой карты.

Удалили ненужный компонент.

Добавили PXE-код от сетевой карты.И еще раз посмотрим на структуру BIOS.

Теперь остается записать BIOS во flash-память.

Опции, которые используются в примере, обозначают: /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-памяти достаточно непростая проце-дура, поэтому:

Предупреждение о потенциальной опасности рекомен-дуемых действий.

Внимание! Описанные в журнале действия по измене-нию содержимого 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,

FLASH879 BIOS.ROM /A /B /E /R

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------------------+--------------------+--------------------+-------------------

CBROM.EXE BIOS.BIN /PCI release

CBROM.EXE BIOS.BIN /PCI netboot.rom

CBROM.EXE BIOS.BIN /D

CBROM V2.15 (C)Award Software 2001 All Rights Reserved.PCI ROM - - - [A] : NVRAID.ROM[PCI-A] ROM is release

CBROMV2.15 (C)Award Software 2001 All Rights Reserved.Adding netboot.rom .... 68.5%

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

35№11, ноябрь 2005

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

/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. В конечном виде строка выглядит сле-дующим образом:

Для обладателей RedHat-систем, где используется xinetd.conf, добавление выглядит примерно так:

Именно по протоколу tftp будет происходить загрузка файлов тонкого клиента ThinStation.

Чтобы суперсервер inetd перечитал свой конфигураци-онный файл, подадим следующую команду:

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

Функционирование сервера 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, которому будет назначен

IP-адрес 10.0.0.50. Для сетевой загрузки этого узла служит файл pxelinux.0, размещенный на tftp-сервере.

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

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

Конфигурация для сборки тонкого клиента представ-лена файлом 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:

tftp dgram udp wait root ↵ /usr/sbin/in.tftpd in.tftpd -s /tftpboot -vv

service tftp{ socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -l -s /tftpboot disable = no}

# killall -HUP inetd

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"; }

# wget Thinstation-2.1.3.tar.gz# tar xzvf Thinstation-2.1.3.tar.gz# cd Thinstation-2.1.3

1 module agpgart2 module 3c59x3 module 8139too4 module e100

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

36

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

Строчки 1-5 отвечают (нумерация строк приведена для удобства обсуждения, в build.conf ее естественно быть не должно) за включение в состав формируемого пакета сетевых драйверов для указанных карт. Строка 6 означает, что USB-клавиатура и USB-мышь, будучи подключены к тер-миналу, смогут функционировать. В строке 7 в формирую-щийся пакет подключается модуль для работы с USB-брел-ками. Строка 8 подключает модуль, отвечающий за работу файловой системы SMB.

Для подключения к Citrix-серверам используется загруз-ка бинарного клиента с сайта Citrix.

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

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

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

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

В строчках 11-15 подключаю необходимые для демонс-трационной работы утилиты. Следующие две строки озна-чают, что оконным менеджером будет blackbox, а за появле-ние ярлыков на рабочем столе – отвечает пакет xtdesk.

В строках 18-19 выставляем пароли для доступа к дан-ной терминальной станции и для доступа с терминальной станции на VNC-сервер.

По умолчанию картинка проекта ThinStation включена во время загрузки (см. строчку 20).

Разрешение X-сервера на стороне терминального кли-ента выставлено в 1024x768 (см. строчку 21). И, наконец, в 22 строчке указано, что требуется отображать сообщения, от-носящиеся к процессу загрузки, инициализации и за началь-ную настройку сетевых конфигурационных параметров.

Далее запускаем сборку:

И переписываем приготовленные файлы в каталог tftp-сервера:

В принципе, на этом этапе можно запускать терминаль-ный клиент и смотреть, как происходит процесс загрузки.

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

С момента включения VIA EPIA-M до момента определе-ния IP-адреса по dhcp-протоколу прошло 25 секунд.

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

Щелкаем на пиктограмму RDP-клиента и вводим адрес Windows Terminal Server (см. рис. 2). А также имя пользова-теля и пароль (см. рис. 3).

И присоединяемся к Windows-серверу (см. рис. 4).Небольшая особенность работы RDP-клиента в вер-

сии ThinStation 2.1.3 – если вы подключите поддержку зву-ка на терминалах, где используется звуковой драйвер i810, то воспроизведение звука будет ускоренным. Проблема, на-сколько я помню, заключалась в драйвере i810 и решена в новой серии ThinStation 2.2.

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

KEYBOARD_MAP=ru

# ./build

# su -# cp -R ./boot-images/pxe /tftpboot

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

Рисунок 2. Указываем расположение сервера приложений

5 module via-rhine

6 module usb-hid7 module usb-storage

8 module smbfs9 package xorg6-vesa

10 package keymaps-en_us

11 package rdesktop12 package vncviewer13 package rxvt14 package xterm15 package ssh

16 package blackbox17 package xtdesk

18 param rootpasswd root19 param xorgvncpasswd vnc

20 param bootlogo true21 param bootresolution 1024x76822 param bootverbosity 7

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

37№11, ноябрь 2005

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

Что касается хранимых профилей пользователей, в случае, если наду-маете включать в загружаемый образ браузер Mozilla Firefox, то хочу обратить ваше внимание на секцию STORAGE в конфигурационном файле thinstation.conf.network (он должен быть распо-ложен на tftp-сервере, как и загружа-емый образ).

В частности, опции STORAGE_PATH, STORAGE_SERVER и STORAGE_PREFIX отвечают за формирование полного пути к сохраняемому профи-лю. Профиль может быть сохранен ли-бо по NFS, либо по SMB-протоколу.

Также файл thinstation.conf.network предназначен для более тонкой на-стройки каждого конкретного кли-ента. Например, видеоразрешение для X-сервера задается именно там.

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

миться с готовыми решениями, кото-рые доступны на рынке на сегодня-ший день.

Итак, начнем, пожалуй, с тонких кли-ентов серии e100 от компании Neoware [17]. Данная серия представляет собой младшую линейку тонких клиентов. За-грузка происходит со встроенной кар-ты compact-flash. Размеры варьируются от 32 до 512 Мб. Количество ОЗУ может быть от 128 до 512 Мб. Операционная система на клиентах может быть Linux, Windows CE, Windows XPe. Подде-ржка протоколов RDP/ICA обязательна для любой модели – в случае, если ис-пользуется Linux-терминал, применяет-ся rdesktop и ICAClient под Linux, в слу-чае Windows-терминала – встроенные клиенты Remote Terminal Connection и Citrix Client под Win32. Максимальное видеоразрешение одинаково для всех моделей данного ряда и составляет 1600x1200.

Если вы внимательно смотрите на названия приведенных моделей, то видите, что последний клиент ос-нован на Windows XPe. Новая опера-ционная система от Microsoft? Вовсе нет – это урезанная версия Windows XP для встраиваемых систем. Кстати говоря, у этой корпорации также есть планы на использование старой техни-ки в качестве тонких клиентов [19].

Симпатично выглядят с эстетичес-кой точки зрения и тонкие клиенты от компании Hewlett-Packard. Функци-ональность у продукции от HP анало-гична продукции от Neoware – похоже, что наличие поддержки протоколов RDP/ICA стало стандартом де-факто. Чем же привлекательны тонкие кли-енты от HP, неужели ценой?

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

Таблица 1. Цены на тонкие клиентыот Neoware [18]

Название модели Цена

Neoware e100 (Linux) от 369 у.е.

Neoware e100 (Windows CE) от 399 у.е.

Neoware e100 (Windows XPe) от 599 у.е.

Было отрадно также увидеть дейс-твительно сверхкомпактные термина-лы с аппаратной начинкой, аналогич-ной, что и у «старших» братьев [1].

На рынке тонких клиентов рабо-тают такие производители, как Wyse Technology, Boca Research, Netier Technologies, Network Computer Devices, TeleVideo, IBM, Compaq, Dell, Fujitsu-Siemens, Unisys и другие.

Однако не стоит думать, что тонкие клиенты выпускаются только западны-ми компаниями. Это не так. У нас тоже умеют собирать тонкие клиенты. Сре-ди таких компаний фигурируют следу-ющие имена – K-Systems, Nienshanz, AK-Systems, Kraftway. Цены на тонкие клиенты чуть-чуть ниже, нежели у за-рубежных коллег.

ВыводыЯ не агитирую вас пересматривать си-туацию, которая, как иногда утвержда-ют старожилы, «исторически сложи-лась» на ваших рабочих местах в ту или иную сторону – оставить всё как есть или обратить внимание на новые возможности. В любом случае реше-ние всегда остается за вами. Следу-ет учесть, что ThinStation – это конс-труктор, у которого есть, естествен-но, и плюсы и минусы. Плюс – мож-но сконструировать практически лю-бую конфигурацию для рабочей стан-ции (в рамках терминального вариан-та). Минус, и достаточно жирный, за-ключается в том, что добавление собс-твенного приложения в ThinStation тре-бует, чтобы у разработчика было не ме-нее 3 Гб для распакованного архива и еще не менее 3 Гб для собираемых пакетов. В общем – это отдельная ис-

Таблица 2. Цены на тонкие клиентыот HP [20]

Название модели Цена

HP Thin Client t5710 от 509 у.е.

HP Thin Client t5525 от 379 у.е.

HP Thin Client t5520 от 359 у.е.

HP Thin Client t5515 от 330 у.е.

HP Thin Client t5510 от 359 у.е.

HP Thin Client t5125 от 289 у.е.

Рисунок 4. Экран удаленного сервера

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

38

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

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

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

Отдельной графой необходимо упомянуть о терминальном сервере. Это одна из ключевых фигур на пред-приятии, на которую ложится основ-ная нагрузка. Как и всё в природе не убывает и не прирастает на пустом месте, так и в этом случае надо пом-нить, что, уменьшив производитель-ность на терминалах, следует нарас-тить функционал на терминальном сервере [22]. Это большая отдельная тема. Для оценки суммарного коли-чества ОЗУ, которое будет использо-

ваться на сервере, применяйте, на-пример, следующие цифры (в каждом конкретном случае они будут, естест-венно, разные) – минимальный объ-ем для каждого клиента начинается со 100-150 Мб памяти. Умножаем на количество подключаемых пользова-телей и получаем ОЗУ терминально-го сервера.

БлагодарностиСпасибо Mike Eriksen за любезное пре-доставление идеи по использованию VIA EPIA-M в качестве легковесного терминального решения.

Литература и ссылки: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.7. Маркелов А. Использование бездиско-

вых Linux-станций с загрузкой по сети. – Журнал «Системный администратор»,

№11, ноябрь 2004 г. – 12-14 с.8. ht tp: / /peterhost.dl.sourceforge.net /

sourceforge /thinstat ion /Thinstation-2.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 tp : / / w w w.xb i t l abs .com /a r t i c l es /mainboards/display/ami-bios-update.html.

17. http://www.neoware.com.18. http://www.neoware.com/thin-clients/e100.

html.19. ht tp : / /www.th inp lanet .com / t rends /

mseiger0505.asp – Microsoft Preps Thin Client for XP.

20. http://h10010.www1.hp.com/wwpc/us/en/sm/WF04a/12454-321959-89307-338927-89307.html.

21. http://struktur.kemi.dtu.dk/thinstation/TS.22. http://www.entry.kiev.ua/systems/citrix/

index.html.

14 ноября свет увидел «Open Source» 001 – 9-страничный файл в формате PDF (сами материалы заняли 8 стра-ниц) и сейчас доступен для свобод-ного скачивания (после регистрации) на сайте http://osa.samag.ru.

В первом выпуске электронно-го приложения можно найти новости мира Open Source и краткий анонс OpenBSD 3.8 (автором этих материа-лов стал Дмитрий Шурупов), а также четыре статьи:

Ubuntu 5.10 – первый взгляд

на «Линукс для людей». Обзор от Владимира Якубовского, посвя-щенный недавно вышедшей вер-сии GNU/Linux-дистрибутива на ба-зе Debian, сумевшего быстро заво-евать популярность среди пользо-вателей настольных ПК.

VIM! Начни! Константин Фадеев рассказывает начинающим поль-зователям об основах использова-ния легендарного свободного кон-сольного текстового редактора.

GTK+ 2 в Free Pascal 2. Материал Владимира Кемпика о создании графических приложений (на ба-зе библиотеки с открытым кодом GTK+) на языке программирования Pascal с использованием компиля-тора проекта Free Pascal.

Firefox: триумфальное восхожде-

ние. Андрей Коврин освещает всю историю революционного веб-бра-узера проекта Mozilla (от появления Phoenix до наших дней), раскрывая подробности достигнутого (и, воз-можно, еще предстоящего) успеха Firefox.

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

Редакция «Open Source» напоми-нает, что продолжает принимать лю-бые отзывы, пожелания, поправки и рекомендации читателей, уже ус-певших ознакомиться с первым вы-пуском электронного приложения, и по вопросам концепции приложения в це-лом. Мы с удовольствием рассмотрим предложения по сотрудничеству, а так-же всегда рады видеть новых авторов, желающих опубликовать свои матери-алы. Связаться с нами можно по элек-тронной почте [email protected].

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

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

40

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

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

чае с Linux-серверами это правило действительно вдвойне, потому как

способов настроить один и тот же сер-вис может быть не два и даже не три.

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

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

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

Ведение документации на свою рабочую сеть давно стало правилом хорошего тона

для любого уважающего и считающего себя профессионалом системного администратора.

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

Алексей Коршунов

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

41№11, ноябрь 2005

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

ния. Количество же таких знаний на-прямую зависит от вашего опыта ра-боты и размера серверного парка ва-шей компании.

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

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

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

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

разработка и сбор документации, мо-гу привести npj.akeeper.ru. Учитывая весьма продвинутые средства поис-ка по узлу NPJ – это крайне удобный инструмент.

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

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

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

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

42

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

Гибкость настройки системы прав позволяет определить, кто, к чему, какой будет иметь доступ. (Это ка-сается как документов и записей ра-бочей группы, так и документов с за-писями любого пользователя. Толь-ко вы решаете, с каким доступом со-здаете запись или документ.) Несколько способов представле-ния индекса и разбиения по кате-гориям всей документации рабочей группы. Легкость поиска по всему узлу. В узле, при условии соответствую-щей настройки доступа, комменти-ровать можно всё, а получать ком-ментарии и отвечать на них можно прямо из вашего почтового кли-ента. (Больше никаких идиотских писем: «Появился новый коммен-тарий, на который вы подписаны. Пройдите по ссылке, чтобы его уви-деть» – забудьте! Жить стало зна-чительно проще и удобнее.) При разработке документации ведётся история её изменения, ко-торую всегда можно просмотреть и точно узнать, какие правки и до-бавления были произведены. Бо-лее того, всегда можно вернуться к одной из сохранённых версий до-кумента. Документ можно анонсировать по рабочим группам, сообщив та-ким образом о его существовании. Есть возможность создать дайд-жест. Благодаря Wiki-разметке, писать документы не просто, а очень прос-то. И крайне приятно. Интерфейс для каждой группы, пользователя настраивается инди-видуально. Возможность прямо с центральной страницы увидеть все документы, изменения в документах всех поль-зователей, ленту всех пользовате-лей, ленту всех анонсов, список изменений в дайджестах и так да-лее. Поддержка RSS. Есть багтрекер.

Выше я упоминал сквозную авто-ризацию на разных узлах. Дело в том, что каждый узел «НетПроектЖурна-ла» имеет возможность войти в объ-единённую общую сеть. Это произ-водится нажатием пары ссылок в на-

стройках. Механизм работы этой сис-темы довольно прост – при заходе на любую гостевую NPJ система на-ходит куки-файл от родного (для вас) хоста и запрашивает у него вашу ав-торизацию. Если ваш хост авториза-цию подтверждает, то на гостевом уз-ле вы будете представлены под име-нем yournick@yourhost, и вся ваша де-ятельность перестаёт быть анонимной. Почему это важно?

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

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

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

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

Ещё одна деталь, на которую хо-телось бы обратить ваше внимание.NPJ написан c применением концеп-ций ООП, а следовательно, добавле-ние функциональности не составля-ет особого труда. Например, в мою NPJ-систему были внесены необхо-димые изменения, которые позво-лили использовать одну общую базу пользователей как для этой системы, так и для phpbb2 форума. Это оказа-лось весьма удобно, а реализация не заняла и двух дней.

Как NPJ выглядит и работаетДля установки NPJ-узла не требуется неординарных усилий. Всё происхо-дит гладко, и система встаёт, что на-зывается, из коробки. На сайте про-екта (http://www.npj.ru) содержится де-тальная информация по установке, и там же можно всегда скачать пос-леднюю версию системы. Начать ра-боту лучше всего с изучения страницы http://npj.ru/npjdev/release. Для работы NPJ необходимы: Apache (возможно, он так же будет работать и с другими веб-серверами), MySQL, а также PHP. На сайте проекта нет информации о минимально необходимой конфигу-рации компьютера для установки. Од-нако я устанавливал NPJ на Linux-ма-шины следующей конфигурации (PIII, 256 Мб RAM, 10 Гб HDD) и никаких про-блем в работе не замечал.

Я не буду описывать процесс кон-фигурирования нового узла, так как уже выше было сказано – исчерпыва-ющая информация находится на сай-те разработчиков (который пред-ставляет из себя такой же NPJ-узел). Единственное, обращу ваше внимание на две настройки. Если вы хотите полу-чать уведомления на почту, то придёт-ся создать почтовый аккаунт для NPJ и обеспечить к нему pop3-дост уп. На-стройки для э т о г о п р о -п и с ы в а ю т -ся в файле config_tunes.

Рисунок 3. Типичноеоформление главнойстраницы узла

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

43№11, ноябрь 2005

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

php. И если вы хотите прини-мать участие в работе на дру-гих узлах с теми приятными мелочами, что были описаны выше, включите интеграцию вашего узла в общую сеть. Это делается двумя кликами на странице администриро-вания – http://npj.example.ru/manage/nns.

После установки в ва-шем распоряжении будет од-на группа, по умолчанию на-зывающаяся node@имяузла, а также личная область, до-ступная всем пользователям (см. рис. 1).

Вы можете выбрать не-сколько вариантов оформ-ления узла для вас, а также умолча-ния для тех пользователей, которые не сделали собственных предустано-вок. Первое делается в настройках вашего профиля, а второе, соответс-твенно, в настройках узла. По умол-чанию выставлен стиль «simplifica», но многие предпочитают более аскетич-ный стиль «academic». Мне, правда, не нравится ни тот, ни другой, так как их функциональность для меня не под-ходит. Я использую «minikui», который вы можете видеть на рис. 1. Его основ-ное преимущество – удобство в быс-тром доступе к множеству функций и свойств страницы. Например, к свое-му стыду, я так и не понял, как в стиле «academic» добиться быстрого и удоб-ного (а главное постоянного, вне зави-симости от просматриваемой страни-цы) доступа к поиску.

Есть и другие причины заглянуть в пользовательские настройки. Напри-мер, там есть выбор между использо-ванием вики/вака разметки и более на-глядного редактора в стиле MS Word.

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

и использовали исключительно в лич-ных целях.

Как только вы увидите всё это бо-гатство, возникнет вопрос – как же всем этим пользоваться. К сожалению или к счастью, NPJ имеет достаточно высокий «уровень вхождения», поэто-му на первых порах у пользователей возникает множество вопросов о спо-собах взаимодействия с узлом. Здесь на помощь приходит выражение, ко-торое уже прозвучало выше, – каждая страница узла – это «пластилин», из ко-торого вы можете «лепить» что угод-но. Для того, чтобы понять, о чем я го-ворю, просто кликните дважды на лю-бой странице узла. Например, на цен-тральной. И если вы обладаете адми-нистраторскими правами – получите окно для редактирования страницы (см. рис. 2).

Начиная с этого момента вы може-те как угодно до неузнаваемости из-менить главную страницу вашего уз-ла. Воспользуйтесь ссылкой на опи-сание различных тегов и разметки – http://www.npj.ru/node/chastyevoprosy/zapisizhurnala/wikisintaksis. Есть непи-саные стандарты оформления главной страницы. Однако следовать им вов-се не обязательно. Вы можете пос-мотреть, как могут выглядеть заглав-ные страницы просто попутешество-вав по разным узлам.

Когда с центральной страницей бу-дет покончено, в зависимости от то-го, собираетесь ли вы заводить ра-бочую группу или нет, – можете прой-ти в редактирование рабочих групп или же просто приступить к работе

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

Рабочие группы на узлах NPJ – это фактически разгра-ничение прав между пользо-вателями узла. Они существу-

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

Члены групп могут обладать раз-ными правами, от читательских до ме-неджерских (администраторских). Ра-зумеется, в пределах своих групп. Ес-ли пользователь является менеджером пусть даже основной рабочей группы node@имяузла – это не означает, что он становится администратором узла.

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

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

Рисунок 4. Рассматриваем группы более внимательно

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

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

44

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

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

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

ется только добавить код на страницу, рубрики будут отображаться автома-тически. (Разумеется, если при вводе документов, вы будете учитывать не-обходимость указания рубрики для до-кумента.)

Для пробы описанных выше воз-можностей давайте создадим на стра-нице новой рабочей группы ссылку на два объекта. Допустим, что первая ссылка будет документом, а вторая – оглавлением (см. рис. 5).

После сохранения мы увидим под-чёркнутые пунктиром наши ссыл-ки и знак вопроса в конце. При клике на этот знак вопроса нам будет пред-ложено создать не существующий по-ка объект.

Теперь заполним первую страницу текстом, а на второй сделаем оглавле-ние (см. рис. 6).

Как вы видите, от того, что страни-цы нами предназначались для разных целей, – суть их не изменилась. Мы мо-жем в первый документ добавить ог-лавление какого-нибудь нового раз-дела. А можем, наоборот, на второй созданной странице написать текст и разместить (к примеру) картинку.

В любой момент вы можете про-смотреть код практически любой стра-ницы (причем необязательно только вашего узла). Для этого достаточно на-брать http://npj.example.ru/page/source, и вы получите указанную страницу в wiki-разметке.

Надеюсь, теперь вы поняли, что каждая страница NPJ-узла – это шаб-лон, в котором может находиться всё, что вам заблагорассудится. Фактичес-ки это можно представить как кучу html-файлов, которые между собой увяза-ны так, как вы сами посчитали необхо-

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

Использование NPJ в работеКакую конкретно документацию вес-ти в NPJ, решать вам. От себя я мо-гу поделиться той схемой, благодаря которой у меня навсегда исчезла про-блема ответа на вопрос (начальству или самому себе), что где находится и как оно работает. Эта схема исполь-зовалась в компании «Город-Инфо» (см. рис. 7).

Как видно из рисунка, фактически все области работы службы системных администраторов компании здесь ос-вещены. Разумеется, часть информа-ции не отображена на схеме и вклю-чена в пункты «прочее», но и того, что отображено, более чем достаточ-но для понимания. Стрелками отобра-жены ссылки между разделами. Мно-жество перекрёстных ссылок нахо-дится и внутри документов, но отоб-разить это на схеме не представляет-ся возможным.

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

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

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

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

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

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

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

46

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

Что такое 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 подде-рживает такой режим работы и га-рантирует, что репозиторий не бу-дет содержать в себе несовмести-мых данных – либо репозиторий останется неизмененным, либо об-новление будет полным. Переименование, перенос и ко-

пирование файлов и каталогов

без потери версионирования

и истории изменений. В отличие от CVS, которая требует вмеша-тельства администратора серве-ра и ручного копирования файлов, Subversion изначально обладает та-кой возможностью, а при установке модуля SVN::Mirror, разработанно-го Chia-Ling Kao, Subversion также «обучается» клонировать данные из текущего в произвольный уда-ленный репозиторий. Права доступа к репозиторию. Вы можете назначать пользова-телям права доступа к различным частям репозитория, простым ре-дактированием текстового конфи-гурационного файла. Комментарии к каждому изме-

ненному объекту. Теперь вы може-те оставлять комментарий в журна-ле коммита к любому измененному вами файлу. Простота развертывания сис-

темы. Для построения полноцен-ной работоспособной системы Subversion в большинстве случа-ев необходим только веб-сервер Apache2 и интерпретатор PHP, а ми-нимальный набор утилит Subversion, позволяющий работать по протоко-лам SVN и SVN + SSH, вообще не требует установки стороннего ПО. Простота интеграции в сущест-

вующую инфраструктуру сети. Доступ к репозиторию Subversion может осуществляться по протоко-лам HTTP, HTTPS, SVN, SVN+SSH, из набора которых вы сможете лег-ко выбрать наиболее подходящий для заданной конфигурации сети. Разнообразные веб-интерфейсы

для доступа к репозиторию. На те-

Андрей ШетухинАндрей Шетухин, , Ольга НикулинаОльга Никулина

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

Прогресс в области разработки систем контроля версий не стоит на месте. Представляем вам

Subversion – современную замену устаревшей системы CVS.

кущий момент доступно около де-сятка программ для работы с репо-зиторием 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.

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

47№11, ноябрь 2005

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

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.

Создаем и устанавливаем JailJail необходим для того, чтобы система контроля версий жи-ла в собственном мире и никак не пересекалась с остальны-ми приложениями. Кроме того, используя jail, вы повышаете общий уровень защищенности системы: если обнаружится уязвимость в пакетах Subversion, Apache или PHP, основная система не пострадает. Jail будет также полезен в том слу-чае, если на основной системе установлен Apache 1.3.X.

Если для Subversion используется выделенный сервер, этот пункт можно смело пропустить.

Собираем jail. Обратите внимание, что на FreeBSD 5.3 команда «make world DESTDIR=$D» из jail(8) не работает. Вместо нее следует воспользоваться командами:

Итак, в нашем случае сборка jail будет выглядеть так:

В файл /etc/rc.conf добавляем следующие строчки:

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

либо:

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

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

Начиная с этого момента jail представляет собой пол-ноценную виртуальную машину, доступную для админис-трирования по ssh.

Устанавливаем веб-сервер Apache2Для повышения общего уровня безопасности, будем ав-торизовывать клиента через подписанный нами серти-фикат; поэтому нам следует воспользоваться опцией FakeBasicAuth. При входе клиента с выданным нами сер-тификатом на сервер Apache произведет псевдоавториза-цию, основываясь на данных сертификата.

Надо отметить, что при подобной авторизации имя поль-зователя выглядит как строка свойств сертификата. Соот-ветственно при коммите через HTTPS имя пользователя бу-дет не stellar, а /C=RU/ST=-/L=Moscow/O=Reki.ru/OU=SVN/CN=stellar/[email protected]. Понятно, что нали-чие в двух ипостасях одного и того же пользователя никого устроить не может и хорошим решением было бы взять в ка-честве логина часть строки данных сертификата. Для этого в Apache предусмотрена директива SSLUserName и... увы и ах, мир несовершенен: без исправлений кода mod_ssl оп-ции FakeBasicAuth и SSLUserName вместе не работают.

К счастью, по URL http://reki.ru/products/subversion/patch-server-ssl_engine_kernel.c, теперь доступен патч, исправля-ющий это недоразумение.

Для сборки Apache с поддержкой FakeBasicAuth + SSLUserName надо скачать патч и положить его в каталог /usr/ports/www/apache2/files. Если предполагается, что репо-зиторий Subversion будет храниться в BerkeleyDB, нам так-же будет необходимо включить поддержку BerkeleyDB для Apache.

Итак, устанавливаем необходимые переменные окру-жения и запускаем установку Apache.

make buildworldmake installworld DESTDIR=$D

# cd /usr/src# mkdir -p /usr/home/jails/svn# make buildworld# make installworld DESTDIR=/usr/home/jails/svn# cd etc# make distribution DESTDIR=/usr/home/jails/svn

jail _ enable="YES" # Включаем загрузку jail# Список всех jail, которые есть в системеjail _ list="svn"# Запрещаем изменение hostname из jailjail _ set _ hostname _ allow="NO"# Разрешаем для jail обмен только по TCP/IPjail _ socket _ unixiproute _ only="YES"# Запрещаем SystemV IPC внутри jailjail _ sysvipc _ allow="NO"

# Для jail с именем "svn"jail _ svn _ rootdir="/usr/home/jails/svn" # Каталог jailjail _ svn _ hostname="svn.reki.ru" # Имя хоста jailjail _ svn _ ip="XX.YY.XX.TT" # IP адресjail _ svn _ exec="/bin/sh /etc/rc" # Скрипт инициализацииjail _ svn _ devfs _ enable="YES" # Монтировать devfs в jail

# vipw -d /usr/home/jails/svn/etc

# 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

# jls

JID IP Address Hostname Path 1 XX.YY.XX.TT svn.reki.ru /usr/home/jails/svn

# 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

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

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

48

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

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

Если требуется подсветка синтаксиса исходных фай-лов, устанавливаем программу enscript. В этом случае в файле конфигурации WebSVN следует включить под-дежку enscript.

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

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

Примерный вид файла конфигурации следующий:

Создаем сертификаты и конфигурируем серверное ПОСоздаем собственный самоподписанный сертификат (Certificate Authority, CA). Используя этот сертификат, мы бу-дем подписывать сертификат сервера и все клиентские сертификаты.

Перечислим список команд: 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):

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

# cd /usr/ports/print/enscript-a4# make install clean

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

# 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();

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

# 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/[email protected]

[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

/patch-server-ssl _ engine _ kernel.c# cd ../# make install clean

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

49№11, ноябрь 2005

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

Создаем структуру каталогов, описанную в секции [CA_CLIENT]

Создаем сертификат сервера:

Для сертификата сервера тег CN должен содержать его ServerName. В данном случае – это svn.reki.ru.

Подписываем сертификат собственным CA:

Устанавливаем сертификаты:

Конфигурируем веб-сервер. Создаем необходимую структуру каталогов:

В файл /usr/local/etc/apache2/ssl.conf прописываем кон-фигурацию виртуального веб-сервера:

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

Заметим, что поскольку это не настоящая авторизация (по-настоящему мы авторизуемся через сертификат), у всех пользователей один и тот же пароль: «xxj31ZMTZzkVA»: «password».

Синие строки указывают, какой путь будет использовать-ся для https-доступа к SVN. Для нашего случая это https://svn.reki.ru/svn. Ввиду того, что мы планируем использовать Subversion для нескольких разных проектов одновременно,

# 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/[email protected]

# 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

<VirtualHost *:443>

DocumentRoot /usr/home/www/svn/svn.reki.ru/www ServerName svn.reki.ru:443 ServerAdmin [email protected]

certificate = ./ca.crt# Закрытый ключ сертификата CAprivate _ key = ./ca.key

# Время, на которое выписывается клиентский сертификатdefault _ days = 365

default _ crl _ days = 7 # Срок действия CRLdefault _ md = md5 # Алгоритм подписи

# Название секции политикиpolicy = policy _ anything

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

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>

stellar:xxj31ZMTZzkVAoniks:xxj31ZMTZzkVA

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

50

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

нам потребуется при помощи директивы SVNParentPath ука-зать общий родительский каталог для всех репозиториев. Все репозитории из каталога /usr/home/svn будут доступ-ны как https://svn.reki.ru/svn/имя_репозитория.

Теперь нам остается только раздать пользователям пра-ва доступа к проектам. Для этого используется директива AuthzSVNAccessFile, указывающая файл с описанием прав доступа к тому или иному репозиторию.

Формат файла следующий:

Пользователь stellar имеет полный доступ к репозито-риям example и example1, а пользователь oniks – полный до-ступ к example и право на чтение из example2.

Создаем репозиторииПоскольку мы условились, что будем использовать Subversion для двух проектов с именами example и example2, создаем два репозитория в каталоге /usr/home/svn:

Структура проекта может быть произвольной, но об-щепринято создавать три основных каталога: branches – для веток, tags – для тегов проекта и trunk – непосредс-твенную рабочую область для коммитов. Чтобы каждый раз не делать одну и ту же работу, создаем шаблон проек-та с основными каталогами и импортируем его в создан-ные репозитории:

В дальнейшем можно создавать каталоги внутри проек-та посредством команды «svn add», удалять их – командой «svn delete». Права на каталоги репозиториев должны при-надлежать пользователю, от которого запущен Apache.

В файл /etc/rc.conf добавляем строчки:

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

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

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

Отправка информации о коммитах по почтеДо и после каждого события (commit, lock, unlock) Subversion выполняет так называемые скрипты-зацепки (hook-scripts). Они располагаются в каталоге имя_репозитория/hooks. Скрипты, выполняющиеся до действия, имеют префикс «pre-», а после – соответственно «post-». Так, скрипт, запус-кающийся перед процессом коммита, будет иметь название «pre-commit», а скрипт, вызывающийся после завершения процедуры коммита – «post-commit». Соответственно, поме-щая в эти скрипты вызов программы svnmailer, мы будем рас-сылать информацию о проведенных в проекте изменениях.

Установка программы svnmailer не представляет слож-ности:

Для рассылки оповещений о проведенных коммитах, создаем в каталогах репозиториев файл hooks/post-commit и добавляем в него строчки:

Создаем файл /usr/local/etc/svn/mailer.conf, содержащий конфигурацию списка рассылки по проектам.

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

# имя репозитория:/путь[example:/]# Имена пользователей = права доступаstellar = rwoniks = rw

[example2:/]stellar = rwoniks = r

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

# 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"

apache2 _ enable="YES"apache2ssl _ enable="YES"

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

# ps axw | grep httpdvv

33928 ?? SsJ 0:03.31 /usr/local/sbin/httpd -k start -DSSL81260 ?? IJ 0:00.01 /usr/local/sbin/httpd -k start -DSSL81261 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL81262 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL81263 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL81264 ?? IJ 0:00.00 /usr/local/sbin/httpd -k start -DSSL81271 ?? IJ 0:00.01 /usr/local/sbin/httpd -k start -DSSL

# cd /usr/ports/mail/svnmailer # make install clean

#!/bin/shREPOS="$1" REV="$2"/usr/local/bin/svn-mailer --commit --repository ↵ "${REPOS}" --revision "${REV}" --config ↵ /usr/local/etc/svn/mailer.conf &

[example] # Имя репозитория for _ repos = .*/example from _ addr = %(author)s# Список рассылкиto _ addr = [email protected][examle2] for _ repos = .*/example2 from _ addr = %(author)s to _ addr = [email protected]

[maps] # Список подстановокfrom _ addr = [authors] # Авторыto _ addr = [mailing-lists] # Подписчики[authors] oniks = [email protected] stellar = [email protected][mailing-lists] oniks = [email protected] stellar = [email protected] test-developersA = [email protected] test-developersB = [email protected] test-developersC = [email protected]

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

51№11, ноябрь 2005

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

Подписываем созданный сертификат.

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

При необходимости можно защитить передаваемый сертификат паролем, указав его в поле «-passout pass:па-роль:». Сертификат готов к передаче клиенту.

Вносим сертификат в список авторизации на сервер. Для этого в файл /usr/home/www/svn/svn.reki.ru/.htpasswd_ssl добавляем строчку:

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

Установка сертификатов в браузерах Firefox и Microsoft Internet ExplorerПередаем полученный сертификат на машину клиента лю-бым известным защищенным способом. Это можно сделать, воспользовавшись SSH или sFTP.

Для установки сертификата следует выполнить следу-ющие действия: Для Microsoft Internet Explorer: зайти в меню «Tools →

Internet Options → Content → Certificates → Import» и вы-брать файл сертификата. Для Mozilla Firefox – ненамного сложнее. Зайти в меню «Инструменты → Настройки → Сертификаты → Упоря-дочить сертификаты → Восстановить» и также выбрать файл сертификата.

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

Проверка работы Subversion из *nixДля доступа к репозиторию используется утилита svn. Ее синтаксис во многом повторяет синтаксис команды cvs. Например, чтобы получить список файлов, необхо-димо указать ключ list и через пробел – URL-репозитории Subversion: svn list URL.

При первом запуске svn выдаст достаточно большое ко-личество информации:

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

Проверка работы 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.

# 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/[email protected]

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.configDEBUG[load_index]: unique_subject = "yes"Check that the request matches the signatureSignature okThe Subject’s Distinguished Name is as followscountryName :PRINTABLE:'RU'stateOrProvinceName :PRINTABLE:'-'localityName :PRINTABLE:'Moscow'organizationName :PRINTABLE:'Reki.ru'organizationalUnitName:PRINTABLE:'SVN'commonName :PRINTABLE:'stellar'emailAddress :IA5STRING:'[email protected]'Certificate is to be certified until Sep 15 14:57:05 2006 GMT (365 days)

Write out database with 1 new entriesData Base Updated

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

stellar:xxj31ZMTZzkVA

# svn list https://svn.reki.ru/svn/example/

Authentication realm: https://svn.reki.ru:443Client certificate filename: /usr/home/stellar/stellar.p12Error 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? pbranches/tags/

# svn list https://svn.reki.ru/svn/example/

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

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

52

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.Решение: Установите исправление с сайта производите-ля.

Множественные уязвимости в 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) с сайта производителя.

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

Множественные уязвимости в 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) с сай-та производителя.

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

53№11, ноябрь 2005

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.Решение: В настоящее время способов устранения уязви-мости не существует.

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

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

Небезопасный вызов функции CreateProcess() у различных производителейПрограмма: RealPlayer 10.5. Kaspersky Anti-Virus for Windows File Servers 5.0, iTunes 4.7.1.30, Microsoft Antispyware 1.0.509 (Beta 1), VMWare Workstation 5.0.0 build-13124.Опасность: Средняя.Описание: Microsoft Windows API использует функцию CreateProcess() для создания нового процесса и его пер-вичной нити. Функция CreateProcessAsUser() выполняет та-кую же функцию, но позволяет процессу быть запущенным в контексте безопасности пользователя.

Функция CreateProcess() выглядит таким образом:

Переменная lpПриложениеName содержит имя испол-няемого модуля. Если эта переменная содержит значение NULL, то имя исполняемого модуля будет состоять из пер-вого пробела и строки lpCommandLine. Например:

В приведенном примере строка будет интерпретирова-на функцией следующим образом:

Итак, если приложение program.exe существует в кор-невом каталоге диска C:\, то оно будет выполнено вместо целевого приложения.

Этот случай поведения функции описан непосредствен-но в документации API: http://msdn.microsoft.com/library/en-us/dllproc/base/createprocessasuser.asp.

Для успешной эксплуатации уязвимости злоумышлен-нику необходимо внедрить злонамеренный код в файл C:\program.exe. Это может быть сделано с помощью соци-альной инженерии или посредством других уязвимостей.

BOOL CreateProcess( LPCTSTR lpПриложениеName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);

CreateProcess( NULL, c:\program files\sub dir\program.exe, ... );

c:\program.exe files\sub dir\program namec:\program files\sub.exe dir\program namec:\program files\sub dir\program.exe

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

Множественные уязвимости в phpBBПрограмма: phpBB 2.0.17 и более ранние версии.Опасность: Высокая.Описание: 1. Межсайтовый скриптинг возможен из-за недо-статочной обработки входных данных в параметре error_msg сценария usercp_register.php, параметре forward_page сце-нария login.php и параметре list_cat сценария search.php. Удаленный пользователь может с помощью специально сформированного URL выполнить произвольный HTML-сценарий в браузере жертвы в контексте безопасности уязвимого сайта.

2. SQL-инъекция возможна из-за недостаточной обра-ботки входных данных в параметре signature_bbcode_uid сценария usercp_register.php и может быть эксплуатиро-вана посредством вставки произвольных выражений типа «field=xxx» в запрос. Уязвимость существует при выключен-ной опции magic_quotes_gpc.

3. Уязвимость обнаружена при обработке входных данных в параметре signature_bbcode_uid сценария usercp_register.php. Удаленный пользователь может изме-нить значения, которые передаются в функцию preg_replace() и выполнить произвольный PHP-код на целевой системе.URL производителя: www.phpbb.com.Решение: Установите последнюю версию (2.0.18) с сайта производителя.

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

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

54

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

евять бит плюс три специаль-ных бита позволяют опреде-лить права доступа к файлу (чтение, запись, исполнение)

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

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

Кроме того, технология ACL может использоваться, например, для досту-па к SUID-файлам, определяя пользо-вателей, которым действительно не-обходим запуск таких файлов. Опера-ционные системы Windows на ядре NT и Novell Netware изначально поддержи-вают более гибкий механизм доступа к файлу. В мир Linux эта технология пришла относительно недавно (в ядре поддержка ACL появилась с версии 2.5, хотя патчи были доступны еще с вер-сий 2.2.12), и сейчас она реализована для основных файловых систем ext2, ext3, XFS, ReiserFS, JFS и NFS. В на-

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

Одноуровневой модели прав доступа пользователей, которая применяется в Linux

и во всех UNIX-подобных операционных системах, на сегодняшний день явно недостаточно.

Вам придётся очень постараться, чтобы правильно распределить права доступа к объекту.

Списки контроля доступа позволяют более гибко решить эту задачу.

Сергей ЯремчукСергей Яремчук

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

Проект Linux Extended Attributes and ACLsЭтот проект [1] предоставляет пат-чи к ядрам версий 2.4 (ext2, ext3, nfs) и 2.6 (nfs), реализующие расширен-ные атрибуты (EA – Extended Attributes) и POSIX ACL, а также библиотеки и инструменты для работы с ними.

Напомню, что ядра версии 2.6 уже поддерживают ACL для ext2, ext3, jfs и xfs, поэтому необходимости в ис-пользовании патча для этих файловых систем нет, хотя на сайте можно полу-чить ссылки на все текущие исправле-

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

55№11, ноябрь 2005

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

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

Для тех, кто редактирует конфигурационный файл вруч-ную, список параметров выглядит так:

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

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

Пользователи ALTLinux могут получить необходимые утилиты, использовав apt-get.

Мне неизвестно другое применение EA, кроме ACL (ну разве метки каталогу присваивать), поэтому перейдем непосредственно к теме статьи.

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

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

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

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

Смотрим, что получилось.

В результате получим информацию о пользователе-вла-дельце и группе-владельце. Строки user, group и other явля-ются базовыми данными и соответствуют стандартным пра-вам доступа. Аналогичные строки, начинающиеся с default, соответствуют значению по умолчанию ACL для каталога (указываются с помощью опции -d), при создании ново-го подкаталога или файла внутри этого каталога этот па-раметр наследуется. Естественно, файлы не могут иметь по умолчанию ACL, только каталоги, поэтому такая коман-да будет завершена с ошибкой.

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

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

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

CONFIG _ EXT2 _ FS _ XATTR=yCONFIG _ EXT2 _ FS _ POSIX _ ACL=yCONFIG _ EXT3 _ FS _ XATTR=yCONFIG _ EXT3 _ FS _ POSIX _ ACL=yCONFIG _ REISERFS _ FS _ XATTR=yCONFIG _ REISERFS _ FS _ POSIX _ ACL=yCONFIG _ FS _ POSIX _ ACL=yCONFIG _ XFS _ POSIX _ ACL=y# CONFIG _ DEVPTS _ FS _ XATTR is not set# CONFIG _ TMPFS _ XATTR is not set# CONFIG _ CIFS _ XATTR is not set

# apt-get install acl attr

# mount /home -o remount,acl

/dev/hda5 /home reiserfs defaults,acl 1 1

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

# getfacl test _ acl

# file: test_acl# owner: root# group: root user::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:sergej:rw-default:group::r-xdefault:group: sales: rwxdefault:mask::rwxdefault:other::r-x

# setfacl -dm u:sergej:rw test _ file

setfacl: test_file: Only directories can have default ACLs

# setfacl -m m::rx file

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

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

56

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

вующего пользователя или группы, утилита завершит вы-полнение с ошибкой.

Кстати, установить новые разрешения в файловой сис-теме, смонтированной без опции ACL, не получится.

Проверим наследование атрибутов.

И в качестве вывода получим:

Теперь пробуем создать файл в каталоге:

Смотрим атрибуты:

Пользователь sergej и группа sales унаследовали права. Убе-димся, что стандартные права доступа все еще существуют.

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

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

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

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

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

Проверяем:

Теперь сделаем копию файла в текущем каталоге:

Проверяем разрешения:

# file: test_acl/test_file# owner: root# group: rootuser::rw-user:sergej:rw- #effective:rwxgroup::r-x group:sales:rwx #effective:r-xmask::rw-other::r—

# ls -al test _ acl

итого 1drwxr-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

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

# file: work/test_acl# owner: root# group: rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:sergej:rw-default:group::r-xdefault:group: sales: rwxdefault:mask::rwxdefault:other::r-x

# mv test _ acl /home/sergej/# getfacl /home/sergej/test _ acl

# file: home/sergej/test_acl# owner: root# group: rootuser::rwxgroup::r-xother::r-x

# 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: rootuser::rw-user: vasja:rw-group::r--group:webmaster:rwxmask::rwxother::r--

# apt-get install acl attr

# getfacl test _ acl _ 2

# file: test_acl_2# owner: root# group: rootuser::rw-group::r-xother::r--

# 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: rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:sergej:rw-default:group::r-xdefault:group: sales: rwxdefault:mask::rwxdefault:other::r-x

# mount /home -o remount,acl

# getfacl test _ acl/test _ file

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

57№11, ноябрь 2005

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

Как видите, разрешения изменились и соответствуют стан-дартным установкам, определенным переменной umask. Те-перь копируем файл в каталог test_acl, в котором при со-здании разрешений использовался параметр -d.

Разрешения изменились и соответствуют файлу test_file, который был создан в этом каталоге.

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

И проверяем:

Если при создании каталога не использовался пара-метр -d, разрешения не наследуются и при копировании (создании) файлов и каталогов права доступа соответс-твуют стандартным разрешениям UNIX, т.е. фактически обнуляются.

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

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

Некоторые опции утилитsetfacl и getfaclПри помощи связки getfacl/setfacl можно сохранить и вос-становить списки контроля доступа, это может понадо-биться при архивировании данных или переносе в дру-гую систему.

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

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

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

Установленную для каталога маску доступа, использу-емую по умолчанию, можно изменить так:

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

Зато списки контроля доступа могут использоваться вместе с Samba, что позволяет объединить Linux-сервер и Windows Active Directory. Хотя стоит отметить, что POSIX

# cp test _ acl _ file test _ acl# getfacl test _ acl/test _ acl _ file

# file: test_acl/test_acl_file# owner: root# group: rootuser::rw-user:sergej:rw- #effective:rwxgroup::r-x group:sales:rwx #effective:r-xmask::rw-other::r--

# mkdir dir# setfacl -m u:fedja:rw,g:netadmin:rwx test _ acl _ file# getfacl dir

# file: dir# owner: root# group: rootuser::rwxuser: fedja:rw-group::r-xgroup:netadmin:rwxmask::rwxother::r-x

# cp test _ acl _ file dir

# getfacl dir/test _ acl _ file

# file: dir/test_acl_file# owner: root# group: rootuser::rw-group::r-xother::r--

# getfacl -R --skip-base . > backup.acl# setfacl --restore=backup.acl

# getfacl -a dir | setfacl -M - dir# getfacl file1 | setfacl -S- file2

# setfacl -x g:sales test _ acl

# setfacl -m default:u::rx acldir

# setfacl -m u:fedja:rw,g:netadmin:rwx test _ acl _ file

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

58

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

кой подход применен в 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 можно скомпили-ровать вместе с ядром или установить как модуль.

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

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

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

При установке в качестве модуля необходимо наличие исходных текстов рабочего ядра (оно должно быть обяза-тельно собрано с опцией CONFIG_SECURITY). Далее пе-реходим в каталог module распакованного архива trustees и вводим make install. Если при компиляции не будут най-дены исходные тексты, то следует указать их местонахож-дение вручную.

patching file security/trustees/trustees.hpatching file security/trustees/init.cpatching file security/trustees/funcs.cpatching file security/trustees/fs.cpatching file security/trustees/Kconfigpatching file security/trustees/trustees_private.hpatching file security/trustees/Makefilepatching file security/trustees/security.cpatching file security/Kconfigpatching file security/trustees/Kbuildpatching file security/Makefile

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

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

Кроме стандартных rwx для файлов и каталогов можно установить дополнительные права: D - разрешение на удаление. P – изменение разрешения ка объекту. O - установка владельца.

И комбинированные: READ – эквивалентно RX. CHANGE – эквивалентно RWXD. FULL – эквивалентно RWXDPO.

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

## Security options#CONFIG _ SECURITY=yCONFIG _ SECURITY _ TRUSTEES=y

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

# cd /usr/src/linux-2.6.11# patch -p1 < ../2.6.11.diff

smbcacls //server/share filename [options]

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

59№11, ноябрь 2005

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

После успешной компиляции модуля переходим в под-каталог src и вводим make, получившийся исполняемый файл settrustees копируем в /usr/sbin, чтобы он был досту-пен только пользователю root. Теперь все готово к работе. Загружаем модуль modprobe trustees.ko, либо перегружа-ем систему с новым ядром.

Для задания разрешения по умолчанию использует-ся конфигурационный файл /etc/trustees.conf, но его мож-но переопределить опцией -f. Все записи по одной в стро-ку состоят из устройства с каталогом/файлом и парамет-ров доступа к нему.

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

а не так:

В качестве указания параметров доступа используют-ся следующие флаги: R – разрешение на чтение любых файлов; W – разрешение на запись файлов и каталогов; B – просмотр (Browse) списка файлов в каталоге (по-добно установке права на исполнение для каталогов); E – чтение (rEad) каталогов; X – выполнение (eXecute) файлов; U – установка стандартных прав доступа UNIX (по умол-чанию).

Пустой параметр означает запрет всех полномочий. Вместе с флагами могут использоваться следующие моди-фикаторы, которые могут устанавливаться, например для временного переопределения прав: C – очистка (Clear) разрешений; D – запрет (Deny) доступа; ! – запись для всех, кроме указанных пользователей или групп; O – один уровень, т.е. все файлы и каталоги внутри, но без подкаталогов; * – означает всех пользователей.

Пустые линии игнорируются, знак решетки (#) означа-ет комментарий.

Для примера занесем в файл информацию, запреща-ющую пользователю sergej запись в каталог, находящийся на разделе с файловой системой FAT, традиционно имею-

щий права доступа 777, и ограничимся одним уровнем ре-курсии.

Теперь создаем тестовый каталог и указываем моду-лю на необходимость монтирования виртуальной файло-вой системы.

Так монтируются каталоги индивидуально, если требу-ется смонтировать все каталоги из файла /etc/trustees.conf, то вызывается утилита settrustees.

Можно проверить:

Пробуем создать файл:

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

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

ВыводыИтак, применение 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.

# make KDIR=/usr/src/linux-2.6.11 install

[/block/device]/any/path:usr1:flags:+grp1:flags...[/network/share]I/any/path:+grp2:flags:*:flags...

[/dev/hda5]/sergej

[/dev/hda5]/home/sergej

[/dev/hda6]/win/test:sergej:REBO

# mkdir /mnt/win/test# mount -t trusteesfs none /mnt/win/test

# mount | grep trusteesfs

none on /mnt/win/test type trusteesfs (rw)

touch: невозможно выполнить touch для 'test_file': Permission denied

# touch /mnt/win/test/test _ file

# settrustees -D

[/dev/hda3]/httpd/htdocs:apache:REBX[/dev/hda3]/httpd/htdocs:+web _ editors:RWEBX

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

60

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

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

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

ников на рабочих местах с помощью аудита событий 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 (системные собы-

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

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

Вам наверняка приходится тратить массу времени, чтобы найти в логах информацию

о попытках несанкционированного доступа к ресурсам сети. Для автоматизации

осуществления поиска информации о событиях аудита и построения отчетов предлагаем вам

использовать сценарии Windows Script Host.

Андрей БирюковАндрей Бирюков

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

61№11, ноябрь 2005

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

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

Если это рядовой сервер, то нужно выбрать «Administrative tools → Local security policy → Audit policy». Если аудит производится на контроллере домена, то нужно выбрать «Active Directory Users And Computers», затем открыть запись для данного домена, выбрать меню «Action → Properties → Group policy → Edit», далее надо открыть «Computer Configuration → Windows Settings → Security Settings → Local Policies», пос-ле чего выбрать «Audit Policy».

При любом методе в результате вы-бора Audit policy в правой панели поя-вятся доступные для аудита категории событий. Для того чтобы модифици-ровать политику для какой-либо кате-гории аудита, щелкните правой кноп-кой на этом событии и выберите пункт «Security». Далее необходимо устано-вить флажок для аудита успешных по-пыток входа в сеть и/или аудита безу-спешных. В нашем случае необходимо выбрать «Audit Account Logon Events» и отметить «Success» и «Failure». В ре-зультате получаем окно, аналогичное изображенному на рис. 1.

Таким образом, теперь в журна-ле событий «Event Log», в разделе «Security» при каждой попытке входа пользователя в систему будет появ-ляться соответствующее сообщение (см. рис. 2).

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

всего это ограниченность размера жур-нала событий, из-за которой часть со-общений рано или поздно будут удале-ны. С настройками по умолчанию жур-нал событий при достижении заданного ограничения на размер затирает старые сообщения новыми по принципу очере-ди (FIFO, First In First Out). При этом раз-мер файла журнала Security по умол-чанию равен 131072 Кб. Если за сут-ки в журнал заносится несколько ты-сяч сообщений, то 128 Мб это не слиш-ком много. Можно также настроить, что-бы журнал затирал сообщения по про-шествии определенного количествf дней или не затирал сообщения вооб-ще [1]. Правда, в последнем случае, ког-да файл журнала достигнет ограниче-ния по размеру, наш сервер может во-обще прекратить функционировать, по-ка не будет произведена ручная очис-тка. Согласитесь, особенно неприятно, если это произойдет, скажем, в суббо-ту ночью. Вторым недостатком исполь-зования журнала событий для задач аудита сети является то, что построе-ние отчетов затруднено. Можно, конеч-но, делать выборку каждый день вруч-ную с помощью стандартного фильтра Event Viewer, однако автоматизировать этот процесс с помощью VBScript будет крайне сложно и неудобно.

Таким образом, возникает необхо-димость в использовании базы данных для хранения сообщений о событиях.

Настраиваем хранилище сообщений аудитаMicrosoft SQL Server 2000, или его бесплатная урезанная реализация MSDE, активно используются различ-ными приложениями от 1С до систем

резервного копирования и корпора-тивных антивирусов. Так что вполне логичным будет использование дан-ной СУБД в качестве хранилища на-ших сообщений аудита. Сразу огово-рюсь, что основы построения баз дан-ных и SQL-запросов не являются те-мой статьи, эти аспекты будут снабже-ны лишь краткими комментариями. За более подробной информацией може-те обратиться к источникам справоч-ной информации [2, 3].

Наша база-хранилище сообщений будет иметь следующие поля: Событие (Event ID). Дата и время. Имя пользователя (домен\пользо-ватель, под которым осуществля-лась попытка входа). Workstation (имя машины, с кото-рой осуществлялась попытка вхо-да, может быть пустым). IP-адрес (машина в локальной се-ти, с которой осуществлялась по-пытка входа).

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

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

Рисунок 3. Сообщение об удачном входев систему

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

62

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

Создадим в MS SQL Server базу Audit, а в ней таблицу Logons, эти действия можно осуществить, например, с помо-щью Query Analyzer [3], выполнив следующий SQL-скрипт.

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

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

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

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

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

Скорее всего в журнале событий «Security», кроме собы-тий аудита «Account Logon Events», могут оказаться еще ка-кие-то сообщения о других событиях в системе. В связи с этим нам необходимо отфильтровывать нужные сооб-щения (см. рис. 3).

События, которые нас интересуют, имеют следующие Event ID: 673 – Удачная попытка входа в систему. 675 – Неудачная попытка входа в систему. 538 – Выход из системы (Logoff).Таким образом, будем осуществлять выборку событий

с этими номерами. Затем нам необходимо извлечь инфор-мацию для занесения в базу. В частности Event ID, Date Time, а также из поля Description: User Name, WID и IP-адрес. Если с первыми двумя значениями все ясно и просто, то для по-лучения последних трех придется использовать специаль-

ную функцию Substring. Как видно из рис. 3, записи в по-ле Description занесены построчно, и каждая строка имеет следующий вид: «параметр: значение». Для того чтобы из-влечь значение из определенной строки, необходимо пере-дать функции Substring значение «параметр».

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

Еще одним важным моментом является формат да-ты и времени, используемые при сохранении сообщений в базе. Я не случайно использовал одно поле для хранения в базе даты и времени, несмотря на то что в журнале собы-тий задействованы два поля. Если у нас поле типа datetime содержит дату и время, то к значениям этого поля можно применять математические функции, в частности мы уже использовали Max, а также <, = , > которые нам еще пот-ребуются в дальнейшем. Если бы мы использовали отде-льные поля для даты и времени, то математические функ-ции применять было бы гораздо сложнее. Однако тут воз-никает еще одна сложность: для полей типа datetime необ-ходимо передавать данные строго в определенном фор-мате «мм.дд.гггг чч:мм:сс». При этом надо использовать функцию SQL CONVERT. В результате работы этой функ-ции с определенными параметрами (110 – для даты и 114 – для времени) мы получаем корректно сохраненную дату в базе. Подробнее о команде CONVERT и кодах, исполь-зуемых для форматирования дат, читайте в [2].

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

Листинг 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

SELECT Max(Date_dat) AS Last FROM Logons

Листинг 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

Листинг 3. Сценарий для поиска и сохранения искомыхсообщений в базе данных

Dim Cnxn, strCnxnDim rsCustomers, strSQLCustomersDim EventDate, EventTime, EventTmpDim objWMI, objItem ' ObjectsDim strComputerDim intEvent,intRec, colLoggedEventsDim Str, strtempFunction 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 FunctionstrComputer="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-сервером

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

63№11, ноябрь 2005

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

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

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

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

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.closelast=0intRec=0For 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 Ifintrec=intRec+1

Nextcnxn.close

Листинг 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.closeCnxn.close

Set WshShell = CreateObject("WScript.Shell")

Return = WshShell.Run("iexplore.exe c:\report.htm", 1)

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

64

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

Данный сценарий выводит информацию о попытках войти в сеть, которые были произведены в течение текущих суток. При этом сначала осуществляется выборка по всем пользо-вателям, которые «засветились» в журнале событий, затем делается запрос для каждого пользователя. Вывод осущест-вляется в html-файл. По окончании созданный файл автомати-чески открывается в браузере. Если данный сценарий запус-кается автоматически по расписанию, то открывать браузер с отчетом не нужно, и две последние строки из исходного тек-ста можно удалить. Сообщения о неудачных попытках входа в сеть выводятся красным цветом, удачные – зеленым, а вы-ходы из системы – темно-синим. Сообщения будут выводиться в том порядке, в каком они попали в базу, однако SQL-запро-сы можно переписать, например, для вывода сообщений па-рами вход-выход. О том, как это сделать, речь пойдет далее.

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

Задача аудита попыток доступа в сеть и построения удо-бочитаемых отчетов для системного администратора нами успешно решена. Однако будет нелишним рассмотреть еще одну возможность для применения сценариев WSH и политик аудита Account Logon Events – это построение системы уче-та рабочего времени. Решение данной задачи часто взвали-вают на плечи системных администраторов, особенно в не-больших компаниях. Если в вашей организации использу-ется домен Active Directory, то каждый день, приходя на свое рабочее место, пользователи должны аутентифицироваться в домене, введя свой логин и пароль (в нашей системе ауди-та это событие 675 Удачный вход в систему). А в конце рабо-чего дня пользователи должны корректно завершить рабо-ту системы (событие 538 Logoff). Таким образом, для полу-чения информации о времени прихода сотрудника на рабо-ту нам необходимо получить самое раннее время события 675, а для получения времени ухода – самое позднее вре-мя события 538. Сделать это можно с помощью следующего громоздкого с виду запроса. Тут следует сразу оговориться: в данном случае мы предполагаем, что в нашей сети кругло-суточно работают сервера и все задачи, требующие продол-жительных расчетов, выполняются только на них, а рабочие станции включают сотрудники, приходя на работу.

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

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

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

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

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

ционный экзамен 70-228.

Листинг 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

Листинг 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

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

66

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

Основные усилия администра-торов направлены на меропри-ятия, которые можно охаракте-

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

являются постоянно, то исследования быстро потеряют свою актуальность. Поэтому такой вариант больше подхо-дит для проведения всестороннего ау-дита всей системы безопасности ком-пании. А для проверки защищенности сетей и сервисов лучше использовать сканеры безопасности, что позволит проводить такие проверки постоян-но. Одним из таких сканеров являет-ся DragonSoft Secure Scanner тайвань-ской DragonSoft Security Associates, ос-нованной в 2002 году.

Разработчик позиционирует 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 явно про-игрывает. С другой стороны, охватить все системы и уязвимости доволь-но тяжело, и в настоящий момент на-блюдается «специализация» скане-ров безопасности, что позволяет на-иболее полно охватить определен-ный сегмент. Для уменьшения време-ни сканирования и количества лож-ных срабатываний используется тех-нология FPP (False Positives Prevention). При этом сначала производится поиск имеющихся сервисов, а затем про-

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

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

самых разнообразных опасностей. Несмотря на то что инструменты, предназначенные

для защиты систем и сетей, постоянно совершенствуются, противостоять всем угрозам –

непростая задача.

Сергей ЯремчукСергей Яремчук

грамма производит проверку ассоци-ированных уязвимостей. Для опреде-ления сервисов используется техноло-гия intelligent protocol identification, ко-торая распознает возможный сервис не только по номеру открытого пор-та, но и дополнительно анализируют-ся входные данные, чтобы подтвердить свои выводы. Для работы DSS потре-буется компьютер класса Pentium 266 с 64 Мб ОЗУ (лучше 128 Мб) и 500 Мб свободного места на жестком диске, с установленной Windows NT 4.0 SP3, Windows 2000/XP.

На сайте проекта [1] можно полу-чить 30-дневную ознакомительную версию DSS. Для ее получения необ-ходимо первоначально зарегистриро-ваться, после чего на указанный поч-товый адрес придет ссылка для закач-ки. Примечательно, что кроме срока действия больше никаких ограниче-ний нет, что позволяет наиболее пол-но оценить продукт. К тому же этого времени достаточно, чтобы, например, перейдя на новую работу, провести ау-дит сети и устранить проблемы. При каждом запуске появляется меню (см. рис. 1), позволяющее выбрать вари-ант предполагаемой работы. Как ви-дите, имеется три варианта тестирова-ния (Vulnerability Scan, Password Check, DoS Test). Четвертый пункт позволя-ет открыть файл с расширением *.dss, в котором сохранены настройки и ре-зультаты ранее проведенного тести-рования, что дает возможность на-пример продолжить незаконченную работу. По умолчанию DSS включа-ет 9 политик сканирования (Complete, Database, NetBIOS, PortScan, SANS 20,

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

67№11, ноябрь 2005

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

та html, к сожалению, импорт в pdf, бо-лее удобный для печати, не поддержи-вается. В этом случае DSS предлагает три типа отчетов: Complete, Executive и Technician. При этом каждый может иметь три стиля: Default, Modern и Lite. Отчет Complete содержит всю инфор-мацию. Отчет Executive предназначен для неспециалистов и содержит ин-формацию о просканированных уз-лах, «TOP 6» самых уязвимых узлов, обобщенные результаты о защищен-ности сети. Графики, представленные этим отчетом, будут хорошим аргумен-том при разговоре с начальством. От-чет Technician предназначен для спе-циалистов безопасности и системных администраторов и содержит опи-сание уязвимостей и рекомендации к их устранению. При желании, зай-дя в «Report → Configure», можно из-менить параметры отчетов, добавить свой логотип и заголовок. Кроме отче-тов, всю информацию можно занести в базу данных. По умолчанию в качес-тве источника установлен DSS2_DB использующий Microsoft Access Driver и сохраняющий информацию в файл scandb.mdb. Как вариант для хранения информации можно использовать фай-лы Microsoft Excel или dBASE (*.dbf).

Сканер безопасности DragonSoft Secure Scanner является удобным инс-трументом, позволяющим оценить за-щищенность сети и избежать проблем. Выдаваемые отчеты помогут не толь-ко убедить начальство в реальности проблем, но и оказать помощь в их ус-транении.

Ссылка:1. Сайт DragonSoft Security Associates –

http://www.dragonsoft.com.

Normal, BackDoor, UNIX и Windows). Та-кое разделение позволяет более гиб-ко выбрать действительно необходи-мый в конкретном случае вариант тес-та, ведь в больших сетях при исполь-зовании всех политик получение ре-зультата может затянуться. При необ-ходимости пользователь может отре-дактировать текущую политику скани-рования либо создать на основе имею-щихся свою. Так, при помощи редакто-ра политик можно изменить: диапазон сканируемых портов, реакцию на от-сутствие пинга, параметры NetBIOS, вид аудита, сканирование по протоко-лу UDP, файлы с логинами и паролями, которые будут использованы при до-ступе к ftp, http, NetBIOS, и некоторые другие настройки. Интересно, что для NetBIOS возможно автоматическое за-несение данных, исправляющих непра-вильную настройку, в реестры клиент-ских машин. Для этого необходимо ак-тивировать опцию «Automatic registry bug fix», результат ее работы будет отображен в отчете.

В утилите удобно реализован им-порт IP-адресов. Эту операцию мож-но проделать тремя способами: не-посредственным введением, задани-ем диапазона или использованием текстового файла, в котором поме-щен список. Естественно, в програм-ме такого рода необходимо периоди-чески обновлять базы, содержащие описание новых уязвимостей. Зайдя в «Tools → Options → Update», можно установить автоматическое обновле-ние баз. Здесь же в пункте Protection можно защитить настройки програм-мы паролем.

Следующий тест Password Check позволяет проверить устойчивость па-ролей в таких сервисах: ftp, http, pop3, imap, telnet, MSSQL и MySQL. Для это-го указывается IP-адрес, опциональ-но порт и файлы с логинами и паро-

лями и количес-тво потоков ска-нирования. Гото-вые файлы с па-ролями и логи-нами можно най-ти в подкатало-ге Dic. Состоя-ние текущей про-верки можно со-хранить и про-должить в лю -

бое удобное время. Так как DSS являет-ся утилитой аудита, одним из требова-ний к которой ско-рость сканирова-ния, а не скрытость, то паузу между по-пытками перебора пароля устанавли-вать нельзя. Прак-тически также лег-ко использовать и DoS Test, кото-рый имитирует од-ноименную атаку. Кроме указанных тестов дополни-тельно в руки администратора попа-дают полезные утилиты с графичес-ким интерфейсом вроде DNS Lookup, IP Reverse, Traceroute. Для удобства можно использовать встроенный пла-нировщик и проводить проверку ав-томатически, например ночью, когда сеть не загружена. В этом случае ре-зультат сканирования дополнительно можно отправить и по почте, для че-го в подпункте Config Alert заполняют-ся параметры SMTP сервера и заго-ловок письма.

Кроме того, DSS позволяет запус-кать тест с командной строки. Для это-го первоначально создается шаблон проверки, а затем набирается коман-да dss_winnt.exe *.dss scan.

Сильной стороной DSS всегда были отчеты. После сканирования админист-ратор получит полную информацию обо всех найденных узлах и работающих на них серверах, программах и их вер-сиях (если возможно), включая МАС-ад-рес, NetBIOS-имя, имена пользователей и прочее. Если будут найдены уязви-мости, то будут указаны степень опас-ности (Info, Low, Medium, High) и крат-кое описание со ссылками на ресурсы BugTraq, DragonSoft, ISS X-Force и CVE-ID (Common Vulnerability and Exposure), где можно найти более подробное объ-яснение. При оценке риска программа следует стандарту BS7799.

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

Рисунок 1. Вначаленеобходимо выбрать тип будущей работы

Рисунок 2. Отчеты DSS позволяют оценить общую обстановку

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

68

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

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

Шаг первыйСоздаем шаблон расширения (скелетон)Для написания и компиляции расширений вам понадобится дистрибутив PHP. Первоначально входим в директорию ext, в которой находятся папки с исходными кодами всех расши-рений. Внутри папки ext находится папка skeleton, которая представляет собой заготовку или шаблон для написания расширений. В принципе, данная папка нам может и не по-надобиться. Процесс написания шаблонов уже автомати-зирован, нам остается только запустить скрипт генерации шаблона расширения или, как его называют разработчи-ки, «скелетона». Запуск скрипта без параметров приведет к выдаче на консоль перечня всех параметров:

Вполне закономерный вопрос – зачем нужны допол-нительные расширения? Казалось бы, все что нужно скриптовому языку, в PHP уже охвачено. В последний

дистрибутив четвертой версии входит 74 РНР-расширения. На официальном сайте www.php.net есть раздел, специаль-но посвященный этой теме: www.pecl.php.net. На данноме ресурсе находится библиотека исходных текстов еще 132-х дополнительных расширений. Не стоит забывать, что PHP относится к языкам интерпритируемого типа, т.е. каждая ко-манда языка интерпритируется во время исполнения, что заметно проигрывает в скорости языкам компилируемого типа. Практика показывает, что для ускорения части фун-кционала (написание функций с использованием битовых операций, т.к. они медленно отрабатываются на PHP и очень замедляют работу скрипта) приходится писать расшире-ния, а также если необходимо обратиться к уже сущест-вующим C-библиотекам (например, криптографические или ГИС-библиотеки). Наверное, у каждого из вас найдет-ся своя причина, чтобы написать новое расширение.

Данная статья поможет вам понять основы построе-ния расширений и освоить технику написания расширений под *nix-системы. Написание расширений под Windows от-личается только способом компилирования и обращения к внешним библиотекам.

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

Расширения РHP:Расширения РHP:пять шагов к написаниюпять шагов к написанию

Александр КалендаревАлександр Календарев

Расширение в PHP – это набор дополнительных функций, не входящих в ядро PHP-engine.

Расширения, как и само ядро PHP-engine, написаны на С, что значительно повышает

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

и создавать более эффективные веб-приложения. Так как же быстро и надежно разработать

расширение?

Это намного проще, Это намного проще, чем кажется с первого разачем кажется с первого раза

# ./ext _ skel

./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help]

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

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

69№11, ноябрь 2005

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

Для создания модуля первоночально необходимо за-пустить скрипт с параметром:

После отработки скрипта будет создана директория test с файлами шаблона («скелетон») модуля.

Мы с вами только что создали шаблон нашего первого расширения. В поддиректории 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. Вам необходимо раскомментировать те строки, которые указывают, в каком качестве (динами-ческого или статического модуля) в дальнейшем будет ис-пользовано расширение. В случае если вы будете конфи-гурировать наш модуль как статический, то необходимо

раскомментировать строки 10 и 12 с описанием макроса PHP_ARG_WITH.

Для динамического модуля необходимо раскомменти-ровать строчки с описанием макроса PHP_ARG_ENABLE (это будут строки 16 и 18). Данный макрос устанавлива-ет соответствия переменным для макроса PHP_NEW_EXTENSION как компиляция динамического модуля (shared objects).

Первый аргумент макроса PHP_NEW_EXTENSION зада-ет имя расширения. Второй аргумент – файл источника (ис-ходный файл описания с-функций), и третий – это имя внут-ренней переменной, которая используется в макросах.

Ниже будет приведен пример config.m4 для конфигу-рирования расширения под компиляцию динамическо-го модуля. Раскомментированные строки отмечены крас-ным шрифтом.

# ./ext _ skel --extname=module

# ./ext _ skel --extname=test

Creating directory testCreating 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. $ cd ..2. $ vi ext/test/config.m43. $ ./buildconf4. $ ./configure --[with|enable]-test5. $ make6. $ ./php -f ext/test/test.php7. $ vi ext/test/test.c8. $ 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.

1 dnl $Id$2 dnl config.m4 for extension test34 dnl Comments in this file start with the string 'dnl'.5 dnl Remove where necessary. This file will not work6 dnl without editing.7 8 dnl If your extension references something external, ↵ use with:9 10 dnl PHP _ ARG _ WITH(test, for test support,11 dnl Make sure that the comment is aligned:12 dnl [ --with-test Include test support])1314 dnl Otherwise use enable:1516 PHP _ ARG _ ENABLE(test, whether to enable test support,17 dnl Make sure that the comment is aligned:18 [ --enable-test Enable test support] )1920 if test "$PHP _ TEST" != "no"; then21 dnl Write more examples of tests here...2223 dnl # --with-test -> check with-path24 dnl SEARCH _ PATH="/usr/local /usr" # you might ↵ want to change this25 dnl SEARCH _ FOR="/include/test.h" # you most likely ↵ want to change this26 dnl if test -r $PHP _ TEST/; then # path given ↵ as parameter27 dnl TEST _ DIR=$PHP _ TEST28 dnl else # search default path list29 dnl AC _ MSG _ CHECKING([for test files in default ↵ path])30 dnl for i in $SEARCH _ PATH ; do31 dnl if test -r $i/$SEARCH _ FOR; then32 dnl TEST _ DIR=$i33 dnl AC _ MSG _ RESULT(found in $i)34 dnl fi35 dnl done36 dnl fi37 dnl38 dnl if test -z "$TEST _ DIR"; then39 dnl AC _ MSG _ RESULT([not found])40 dnl AC _ MSG _ ERROR([Please reinstall the test ↵ distribution])41 dnl fi4243 dnl # --with-test -> add include path44 dnl PHP _ ADD _ INCLUDE($TEST _ DIR/include)4546 dnl # --with-test -> check for lib and symbol ↵ presence47 dnl LIBNAME=test # you may want to change this48 dnl LIBSYMBOL=test # you most likely want to change ↵ this 4950 dnl PHP _ CHECK _ LIBRARY($LIBNAME,$LIBSYMBOL,51 dnl [52 dnl PHP _ ADD _ LIBRARY _ WITH _ PATH($LIBNAME, ↵ $TEST _ DIR/lib, TEST _ SHARED _ LIBADD)53 dnl AC _ DEFINE(HAVE _ TESTLIB,1,[ ])54 dnl ],[

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

70

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

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

Как вы видите, при запуске наш тестовый модуль выво-дит нам поздравление, что он успешно скомпилирован.

Если cli-версия PHP отсутствует, то необходимо наш модуль переписать в директорию, определенную в php.ini (секция Paths and Directories) как директория для расши-рений, а также дописать строчку, которая определяет под-ключение нашего расширения (строка выделена красным шрифтом).

Строки в php.ini:

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

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

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

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

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

Для статической компиляции необходимо в домашней директории php выполнить команды:

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

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

ПроверкаКак правило, если все удачно скомпилировано, то мож-но сразу же осуществить тестовую проверку. Если на сер-вере установлена cli-версия PHP (версия PHP для коман-дной строки), то вы можете прямо из консоли проверить, как скомпилировалось наше расширение.

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

Для того чтобы проверить работу, достаточно лишь ско-

55 dnl AC _ MSG _ ERROR([wrong test lib version or ↵ lib not found])56 dnl ],[57 dnl -L$TEST _ DIR/lib -lm -ldl58 dnl ])59 dnl60 dnl PHP _ SUBST(TEST _ SHARED _ LIBADD)6162 PHP _ NEW _ EXTENSION(test, test.c, $ext _ shared)63 fi

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

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

# 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

# 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.

; UNIX: "/path1:/path2"extension _ dir = ".;/usr/local/php/extension"

; Dynamic Extensions ;extension=test.so

1 #include "php.h"2 #include "php _ ini.h"3 #include "ext/standard/info.h"4 #include "php _ test.h"56 /* If you declare any globals in php _ test.h7 uncomment this: ZEND _ DECLARE _ MODULE _ GLOBALS(test)8 */910 /* True global resources – no need for thread safety ↵ here */11 static int le _ test;1213 /* {{{ 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 _ entry23 */24 zend _ module _ entry test _ module _ entry = {25 #if ZEND _ MODULE _ API _ NO >= 2001090126 STANDARD _ MODULE _ HEADER,27 #endif28 "test",29 test _ functions,

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

71№11, ноябрь 2005

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

Рассмотрим более подробно содержание файла test.с. Все PHP-модули имеют общую структуру: блок включения заголовков (макросы, определения API, внешние библиотеки); С-объявление функции экспорта; блок объявлений функций (PHP) Zend; блок объявлений модуля (PHP) Zend; реализация get_module(); реализация всех экспортных функций.

Объявление функции экспорта (строки) находится в за-головочном h-файле (php_test.h):

В нашем случае это только одна функция, которая бы-ла сгенерирована скриптом «скелетона»: confirm_test_compiled().

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

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

30 PHP _ MINIT(test),31 PHP _ MSHUTDOWN(test),32 PHP _ RINIT(test), /* Replace with NULL ↵ if there’s nothing to do at request start */33 PHP _ RSHUTDOWN(test), /* Replace with NULL ↵ if there’s nothing to do at request end */34 PHP _ MINFO(test),35 #if ZEND _ MODULE _ API _ NO >= 2001090136 "0.1", /* Replace with version number for your ↵ extension */37 #endif38 STANDARD _ MODULE _ PROPERTIES39 };40 /* }}} */4142 #ifdef COMPILE _ DL _ TEST43 ZEND _ GET _ MODULE(test)44 #endif45 /* {{{ PHP _ INI46 */47 /* Remove comments and fill if you need to have ↵ entries in php.ini48 PHP _ INI _ BEGIN()49 STD _ PHP _ INI _ ENTRY("test.global _ value", "42", ↵ PHP _ INI _ ALL, OnUpdateInt, global _ value, ↵ zend _ test _ globals, test _ globals)50 STD _ PHP _ INI _ ENTRY("test.global _ string", ↵ "foobar", PHP _ INI _ ALL, OnUpdateString, ↵ global _ string, zend _ test _ globals, test _ globals)51 PHP _ INI _ END()52 */53 /* }}} */54 55 /* {{{ php _ test _ init _ globals */56 /* Uncomment this function if you have INI entries57 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 _ FUNCTION77 */78 PHP _ MSHUTDOWN _ FUNCTION(test)79 {80 /* uncomment this line if you have INI entries81 UNREGISTER _ INI _ ENTRIES();82 */83 return SUCCESS;84 }85 /* }}} */8687 /* 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 /* }}} */9495 /* 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 /* }}} */102103 /* {{{ PHP _ MINFO _ FUNCTION */104 PHP _ MINFO _ FUNCTION(test)105 {106 php _ info _ print _ table _ start();

107 php _ info _ print _ table _ header(2, ↵ "test support#, "enabled#);108 php _ info _ print _ table _ end();109110 /* Remove comments if you have entries in php.ini111 DISPLAY _ INI _ ENTRIES(); */112 }113 /* }}} */114115 116 /* Remove the following function when you have succesfully117 modified config.m4 so that your module can be compiled118 into PHP, it exists only for testing purposes. */119120 /* Every user-visible function in PHP should ↵ document itself in the source */121 /* {{{ proto string confirm _ test _ compiled(string arg)122 Return a string to confirm that the module is ↵ compiled in */123 PHP _ FUNCTION(confirm _ test _ compiled)124 {125 char *arg = NULL;126 int arg _ len, len;127 char string[256];128129 if (zend _ parse _ parameters(ZEND _ NUM _ ARGS() ↵ TSRMLS _ CC, "s", &arg, &arg _ len) == FAILURE) {130 return;131 }132 133 len = sprintf(string, "Congratulations! You have ↵ successfully modified ext/%.78s/config.m4. Module ↵ %.78s is now compiled into PHP.", "test", arg);134 RETURN _ STRINGL(string, len, 1);135 }136 /* }}} */

PHP _ FUNCTION(confirm _ test _ compiled);/* добавляем объявление экспортируемой функции */PHP _ FUNCTION(add _ string);

/* For testing, remove later. */PHP _ FUNCTION(confirm _ test _ compiled);

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

72

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

Макрос 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:

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

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

Далее немного изменим файл test.php:

При верной компиляции вызов функции add_string($module) выдаст перечень доступных функций и свои поздравления: «Congratulations! You have successfully new function» – это и есть поздравления.

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

Для передачи параметров из PHP в модуль используют-ся макросы. Макрос ZEND_NUM_ARGS() возвращает коли-чество аргументов, переданное PHP-скриптом в модуль.

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

Необходимо заметить, что макрос WRONG_PARAM_COUNT определен в $PHP_HOME/Zend/zend_API.h, поэто-му необходимо добавить заголовочный файл:

При выполнении макроса WRONG_PARAM_COUNT будет выдано следующее предупреждение:

Макрос zend_parse_parameters производит анализ (проверку) параметров.

28 "test" , /* имя модуля */.29 test _ functions, /* ссылка на блок объявлений функций, стр 16 */30 PHP _ MINIT(test), /* ссылка на описание функции инициализации модуля, стр 65-74 */31 PHP _ MSHUTDOWN(test), /* ссылка на описание функции деинициализации модуля, стр 76-85 */32 PHP _ RINIT(test), /* ссылка на описание функции при инициализации страницы, стр 88-93 */33 PHP _ RSHUTDOWN(test), /* ссылка на описание функции при деинициализации страницы, стр 96-101 */34 PHP _ MINFO(test), ), /* ссылка на описание функции, которая выдает информацию для phpinfo() */35 #if ZEND _ MODULE _ API _ NO >= 2001090136 "0.1", ) /* Номер версии нашего расширения */ 37 #endif

/* {{{ 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);}

/* }}} */

<?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);?>

# php test.php

Functions available in the test extension:<br>confirm_test_compiled<br>add_string<br><br>Congratulations! You have successfully new function

if(ZEND _ NUM _ ARGS() != 2) WRONG _ PARAM _ COUNT;

#include "zend _ API.h"

<b>Warning</b> Wrong parameter count for module test()in /usr/local/src/php-4.4.0/ext/test/test.php on line 4

int zend _ parse _ parameters(

/* количество аргументов. Может быть ZEND _ NUM _ ARGS() */ int num _ args TSRMLS _ DC,

char *type _ spec, /* спецификация */ /* объявление аргумента в соответствии с его типом*/ arg _ type arg,...);

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

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

73№11, ноябрь 2005

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.

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

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

А в файле test.с изменим тело функции add_string:

Запуск тестового скрипта выдаст следующие резуль-таты:

В случае если на этапе обработки параметров вычис-ляются какие-либо ошибки или несоответствия, то можно использовать макрос:

И последнее, без чего не было бы логического завер-шения, так это возвращаемые значения функций. Каждая определенная в РНР функция может что-либо возвращать: в нашем примере файл 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)

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

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

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

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

/* {{{ proto string confirm _ test _ compiled(string arg) */PHP _ FUNCTION(add _ string){

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 )]);

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

74

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

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

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

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

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

как осуществляется подключение и чтение данных из AD, см. статью «Программное управление ADSI: LDAP», №3, 2004 г.):

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

Существует множество редакторов, позволяющих создавать скрипты. Как правило,

они поддерживают один-два языка программирования. Редактор PrimalScript 4.0, имеет

встроенную поддержку более чем 30 языков программирования, начиная от HTML, XML

и VBScript, и заканчивая узкоспециализированными, такими как KIXTart.

Иван Коробко

domain = "LDAP://" + ↵ GetObject("LDAP://RootDSE").Get("defaultNamingContext")Set objConnection = CreateObject("ADODB.Connection")Set objCommand = CreateObject("ADODB.Command")objConnection.CommandTimeout = 120objConnection.Provider = "ADsDSOObject"objConnection.Properties("ADSI Flag")=1+2objConnection.Properties("User ID")="msk\adminstrator"objConnection.Properties("Password")="password"objConnection.Properties("Encrypt Password")=TRUEobjConnection.Open "Active Directory Provider"Set objCommand.ActiveConnection = objConnectionobjCommand.properties("Page size")=10000objCommand.properties("Timeout")=300objCommand.properties("Cache Results")=falseSet st=objconnection.execute("SELECT Samaccountname, ↵ description FROM ' " & Domain & " ' ↵ WHERE objectClass='person')

st.MovefirstTemp=""Do Until st.EOFSamAccountName=""SamAccountName= St.Fields("Samaccountname").Value

Description=""A _ Description= St.Fields("Description").Value

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

75№11, ноябрь 2005

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

Из приведенного сценария можно сделать несколько шаблонов: шаблон определения длинного имени домена, соединения с AD, SQL-запрос обращения к объекту, чте-ния данных строка и массив.

Однако ограничимся созданием только одного шабло-на. По местоположению в скрипте соединение с AD распо-лагается в самом начале и сразу после него формирует-ся SQL-запрос.

Выбор создания именно такого шаблона не случаен. Де-ло в том, что для успешного соединения с AD и чтения/запи-си данных необходимы административные права доступа. Как следствие, эти значения параметров необходимо ука-зать, и они не статичны, поэтому для формирования шаб-лона скрипт необходимо трансформировать:

Именно такой шаблон, в котором имя и пароль пользо-вателя перенесены в начало скрипта, будет просто и удоб-но использовать.

Определившись с содержанием шаблона, обратим-ся к файловой структуре редактора PrimalScript. Шаб-лон представляет собой текстовый файл с расширением snippet, расположенном в папке «C:\Program Files\SAPIEN\PrimalScript Professional\Snippets\», если программа уста-новлена по умолчанию. Иерархическую структуру распо-ложения шаблонов и описания функций различных язы-ков определяет структура каталогов и файлы с расшире-нием snippet (см. рис. 1).

Итак, создадим в каталоге «Snippets» подкаталог «Шаб-лоны на VBScript», а в нем файл «AD Connection.snippet», ко-торый является текстовым. Все его содержимое представ-ляет собой шаблон.

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

Войдя в редактор, необходимо вызвать меню «Snippets Windows», в котором находятся все шаблоны. Для этого не-обходимо в меню «Tools» выбрать пункт Options, а в поя-

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 = 120objConnection.Provider = "ADsDSOObject"objConnection.Properties("ADSI Flag")=1+2objConnection.Properties("User ID")= Short _ Domain + ↵ "\"+Admin _ NameobjConnection.Properties("Password")=PasswordobjConnection.Properties("Encrypt Password")=TRUEobjConnection.Open "Active Directory Provider"Set objCommand.ActiveConnection = objConnectionobjCommand.properties("Page size")=10000objCommand.properties("Timeout")=300objCommand.properties("Cache Results")=false

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

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

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

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

For Each AA in A _ DescriptionDescription= Description+AANext

Temp=Temp+ "Имя: "+ SamAccountName + "Описание: " + ↵ Description +chr(13)+chr(10)st.MoveNextLoop

Wscript.Echo Temp

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

76

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

вившемся окне войти в «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, необходимо перезагрузить редактор и создать или от-крыть любой файл с расширением 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» как служебное слово, необходимо в файл Kixtart.sense доба-вить строку:

Обратите внимание, что пробел между «M» и названи-ем функции не допускается.

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

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

Рисунок 5. Описание объектноймодели в файле

Рисунок 6. Демонстрация работы тестовой объектной модели

WriteToXml("filename", "doby" [, "encoding"])

M, WriteToXml("filename", "doby" [, "encoding"])

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

78

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

Слово команды «H0lid@ys»Наша команда принимала участие в студенческом турнире «Кубок сетевых проектов Microsoft», и по совокупности оце-нок наш проект занял первое место. В этой статье мы пред-ставляем вам свое решение, а также комментарии специ-алистов, обратите внимание, что проект содержит некото-рые недочёты. На них по ходу статьи оставят свои коммен-тарии специалисты комиссии, принимавшей у нас этот про-ект. Полную документацию ищите на сайте организатора, где проходил этот турнир (http://www.it-university.ru/center/it-project/windescr.asp).

Состав команды: Руководитель проекта – Земскова Ольга (студентка 5 кур-са МИЭМ, Microsoft Certified Systems Administrator). Исполнитель решения – Цюрюпа Егор (студент 4 курса МИЭТ). Составитель проектной документации и демонстра-тор решения – Ширнин Олег (студент 5 курса МИЭМ, Microsoft Certified Systems Administrator).

Техническое задание: описание сетевой инфраструктуры компанииСетевая инфраструктура компании до начала проектиро-вания и схема сети уже были приведены в прошлом номе-ре журнала (№10), и, чтобы не повторяться, здесь укажем только самые необходимые данные.

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

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

ми. В каждом из офисов должен быть файловый сер-

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

2. Защитить информацию при обмене между офиса-

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

3. Обеспечить безопасную и эффективную работу

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

4. Обеспечить удобство администрирования сети. Предложенное решение должно максимально сокра-щать издержки на администрирование и поддержку IT-инфраструктуры. Типичные задачи администриро-вания (создание новых пользователей, разграничение доступа, развертывание приложений и т. д.) должны вы-полняться максимально просто.

5. Внедрить систему электронной почты. Компании требуется внедрение системы электронной почты, поз-воляющей обмениваться электронной почтой как внут-ри организации, так и за ее пределами. Поскольку в ор-ганизации уже давно используется Microsoft Office, большинство клиентов будут работать с электронной почтой с помощью Microsoft Outlook, но должна быть

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

Ольга Земскова, Олег Ширнин, Егор Цюрюпа

Наедавно завершился студенческий IT-турнир «Кубок сетевых проектов Microsoft», который

был организован компаниями SoftLine, Microsoft, ZyXEL и Учебным центром ВМК МГУ & SoftLine

Academy (www.it-university.ru). В результате акции по одному и тому же техническому заданию

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

инфраструктуры предприятия, один из которых представлен в статье.

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

79№11, ноябрь 2005

итоги 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-туннеля серверы и рабо-чие станции одного офиса смогут непосредственно взаи-модействовать с серверами и рабочими станциями дру-

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

Требование 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) для входящих запросов. В этом случае все запросы, поступаю-

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

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

80

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

щие на внешний IP-адрес интернет-центра ZyXEL, перена-правляются на внешний IP-адрес компьютера MS ISA Server 2004 и тот же самый порт.

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

Требование 4Служба каталогов Active Directory (AD) позволит сократить затраты на администрирование по сравнению с одноранго-вой сетью. С помощью единой системы AD можно органи-зовать прозрачный доступ пользователя ко всем ресурсам (общим папкам, принтерам, своему хранилищу электрон-ной почты), а также обеспечить централизованное управле-ние клиентскими компьютерами с помощью Групповой по-литики (Group policy). При внедрении AD в сети с несколь-кими офисами встает вопрос о количестве доменов. Можно внедрить в компании один домен или два домена – по одно-му домену в каждый офис (в одном лесу AD). Команда вы-брала вариант с одним доменом. К преимуществам этого варианта можно отнести простоту и надежность. Отказоус-тойчивость AD достигается установкой по одному контрол-леру домена в каждом офисе. Для оптимизации трафика репликации AD и трафика входа пользователей в сеть со-здано 2 сайта (site) AD, которые включают IP-адреса соот-ветствующего офиса.

Требование 5Внедрение системы электронной почты требует установ-ки одного или нескольких почтовых серверов. Основную проблему представляет наличие единого адресного спис-ка всей организации. Этот список должен храниться в од-ном экземпляре, чтобы все изменения, вносимые в него, сразу были видны всем клиентам. Поскольку в компании используется MS Office, в качестве сервера был выбран MS Exchange Server 2003 Standard Edition. Эта редакция имеет ограничение 16 Гб на максимальный размер поч-тового хранилища (mailbox store), что вполне достаточно для нужд этой компании.

Выбор MS Exchange Server 2003 в качестве системы электронной почты предоставляет компании следующие преимущества: Единый адресный список всей компании (формируется на основе учетных записей в Active Directory). При со-здании для пользователя почтового ящика его адрес немедленно становится доступен в общем адресном списке. Интеграция с Active Directory. Доступ к почтовому ящи-ку осуществляется «прозрачно», без запроса отдельно-го имени и пароля, так как для аутентификации пользо-вателя используются его доменные учетные данные. Хранение всей электронной почты, личных контактов, задач, заметок и т. д. на сервере. При этом все выше-перечисленные элементы будут доступны пользовате-лю с любого компьютера и даже за пределами органи-зации (через Outlook Web Access).

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

Комментарий экспертовДля повышения безопасности электронной почты можно размес-тить SMTP Relay на отдельном компьютере, расположенном в сети 10.1.1.0. Эту роль может выполнить компьютер – веб-сервер, если он будет перемещен из внутренней сети в DMZ (см. ниже коммен-тарий к «Требованию 7»). На этом же компьютере можно устано-вить программу блокирования спама и проверки почты на виру-сы. Это позволит затруднить атаки, явно направленные против MS Exchange Server. Вся входящая почта будет приходить снача-ла на SMTP Relay, где будет проверяться на вирусы и спам, а за-тем уже будет пересылаться на MS Exchange Server. Это изме-нение конфигурации также потребует изменения правил транс-ляции портов на интернет-центре и изменения правил публика-ции на ISA Server.

Требование 6Беспроводной доступ клиентов к сети организации обес-печивается с помощью интернет-центра ZyXEL. Для аутен-тификации применяется механизм 802.1x (с применени-ем протокола PEAP), поддерживаемый современным бес-проводным оборудованием и клиентскими операционны-ми системами Windows 2000 и Windows XP. С использова-нием 802.1x (PEAP) аутентификация выполняется следую-щим образом: Клиентский компьютер пересылает на беспроводную точку доступа имя и пароль для аутентификации. Точка доступа пересылает эти учетные данные на сер-вер RADIUS, адрес которого задается при настройке точки доступа. Сервер RADIUS проверяет имя и пароль любым подде-рживаемым им способом. В случае успешной провер-ки сервер RADIUS с помощью пакета Access-Accept со-общает точке доступа, что доступ для клиента разре-шен. После этого точка доступа разрешает обмен кад-рами между клиентом и проводной сетью, а также дру-гими беспроводными клиентами.

Сервер RADIUS (известный в Windows как IAS – Internet Authentication Service) входит в состав ОС Windows Server 2003. При этом проверка имени и пароля проводится ли-бо с использованием локальной базы учетных записей Windows, либо с использованием базы учетных записей Active Directory (по умолчанию). Для работы 802.1x (PEAP) необходимо также наличие цифрового сертификата на сер-вере RADIUS, поэтому для выписки сертификатов на од-ном из компьютеров установлена служба сертификации (Certificate Services), которая также входит в состав Windows Server 2003.

Плюсами технологии 802.1x (PEAP) являются:

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

81№11, ноябрь 2005

итоги 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) было решено разместить на отдельном

сервере, не входящем в домен. Сервер публикуется на 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).

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

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

82

хобби

Конечно, солнце, луг и веселые босые пятки автора затеи. Ни-куда не деться – картина де-

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

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

Десять красок небаДесять красок небаГлядя в унылое осеннее

небо Петербурга, я знаю,

почему герой нашего

очерка выбрал себе такое

увлечение. Ему захотелось

разукрасить стылую

панораму небес, уронить

на нее кляксу яркой краски,

чтобы ожил и зацвел сам

воздух. Чтобы возникла

перед взором радуга

детства. Предполагаю,

что отсылка в пору юной

беззаботности будет

оспорена нашим героем,

но, скажите, какие

ассоциации возникают

у вас при словосочетании

«воздушный змей»?

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

Ира смеется – их птицы раз от ра-за становятся крупнее в размерах, на что Дмитрий резонно отвечает: чем больше воздушный змей, тем эф-фектнее он смотрится в небе. А вооб-ще, когда в воздух поднимается не-сколько змеев – это зрелище гран-диозное.

В Японии и Китае устраиваются це-лые фестивали, где создатели воздуш-

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

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

Я смотрю на фотографию послед-него воздушного змея Дмитрия и Иры, который демонстрировался на автовы-ставке, и соглашаюсь с нашим героем.Банальным треугольником или ромбом трудно выразить свои мироощущения. Человек создан, чтобы творить. Пос-ледний змей Дмитрия и Иры – это на-стоящее творение. Голова китайско-го дракона из папье-маше, длинное туловище, окольцованное лоскутами огненной ткани. Ни дать, ни взять ска-зочный персонаж.

– Сколько времени уходит на созда-ние воздушного змея?

– Всегда по-разному. От одного дня до нескольких недель. Саму конструк-цию соорудить несложно, гораздо тя-желее придумать и воплотить в жизнь Китайский дракон

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

83№11, ноябрь 2005

хобби

декор. Занятие простое, но занимает очень много времени. Как правило, ин-женерная идея – моя, а Ира занимает-ся дизайном.

– Следующий воздушный змей, ка-ким он будет?

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

– На какую высоту поднимается воздушный змей?

– Насколько хватает нити на катуш-ке – пятьдесят метров.

– И свободно парит?– Да.– Птицы удивляются?– Не то слово, – улыбается Ира. –

Изумлены!

Самое любопытное, что ни Дима, ни Ира сами никогда не парили в не-бе: не прыгали с парашютом. Хотя Ди-ма мечтает об этом. А еще подумы-вал сделать дельтаплан, но очень уж ответственность большая. Надо быть профессионалом, поскольку дельтап-лан – это крылья для человека. Диле-тантство в данном случае может сто-ить кому-то жизни.

Я спрашиваю Дмитрия, не меша-ет ли увлечение работе системным администратором. Нет, отрицатель-но кивает головой, наоборот, хобби – это отдушина.

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

рассказать себе и миру, как прекрас-но, в сущности, бытие.

– Есть ли у вас единомышленни-ки в городе?

– Ни в городе, ни в России не встре-чал. Оказывается, воздушными зме-ями никто в нашей стране серьезно не увлекается.

– А за рубежом?– Думал о том, чтобы завязать пе-

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

– Мне кажется, Дмитрию и Ире это обязательно удастся – выйти на высокий уровень мастерства. Не-даром фамилии у них характер-ные… Репин и Сурикова. Вы соглас-ны со мной?

Наталья Алексютина

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

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

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

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

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

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

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

84

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

Полулегендарная архитектура Alpha, в прошлом долгое вре-мя лидировавшая в плане про-

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

PDP и VAX,или Древние временаКорпорация была основана в 1957 го-ду двумя инженерами, бывшими вы-

пускниками Массачусетского техноло-гического института, Кеннетом Ольсе-ном (Kenneth Olsen) и Харланом Андер-соном (Harlan Anderson).

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

Но уже в 1960 году был выпущен их первый компьютер, 18-битный PDP-1 (Portable Data Processor – 1), спо-собный производить около 100 тыс. операций в секунду.

В 1964 году был представлен 12-битный PDP-8, который справедли-во считают первым серийно выпускае-мым «мини-компьютером» из-за отно-сительно небольших размеров (с не-

высокий однокамерный холодильник) и умеренной стоимости (около 18 тыс. долл. США за базовую конфигурацию в ценах 1965 года).

Ещё 4 года спустя был запущен в производство 36-битный PDP-10, потомок экспериментального PDP-6, позиционируемый для требователь-ных к производительности научных, промышленных и военных расчётов. Несмотря на высокую цену, модифи-кации оригинального PDP-10 успеш-но продавались вплоть до середины 1980-х годов.

Другой интересной разработкой компании того времени был 16-бит-ный PDP-11, потомок PDP-8. Благо-даря сбалансированной архитекту-

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

Долгое время процессоры архитектуры Alpha были теми немногими, к производительности

которых стремились. Тем не менее в последнее время информация об этой архитектуре почти

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

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

Павел БолотовПавел Болотов

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

85№11, ноябрь 2005

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

ре, имеющей в своей основе систем-ную шину 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 рабо-тают в многочисленных промышлен-

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

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).

В целом ставка делалась на до-стижение высоких тактовых частот,

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

86

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

но не в ущерб надёжности или масш-табируемости. Кроме того, новая ар-хитектура была «настоящей» 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 стадий), де-

кодера и планировщика (I-box), бло-ка загрузки/сохранения (A-box), конт-роллера кэш-памяти и системной ши-ны (C-box). Расчёт виртуальных ад-ресов, обычно входящий в функции A-box, производился на целочислен-ном конвейере E-box.

Процессор содержал 8 Кб кэша инструкций (I-cache, instruction cache) и 8 Кб кэша данных (D-cache, data cache), а также поддерживал вне-шний кэш 2-го уровня (B-cache, back-up 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) предлага-

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

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

87№11, ноябрь 2005

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

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

Alpha 21164,или Битва за лидерствоИнформация о процессоре архитекту-ры Alpha следующего поколения, 21164 (EV5), была впервые озвучена на кон-ференции в Пало-Альто (Калифорния, США) 14 августа 1994 года, хотя офи-циальный выход датировался 7 сен-тября того же года. Процессор являл-ся экстенсивной модификацией ядра EV45, что выражалось в удвоенном ко-личестве целочисленных и веществен-ных конвейеров, причём число стадий последних было сокращено с 10 до 9. Тем не менее функционально конвейе-ры всё же были несколько неоднород-ны, что экономило транзисторы логики и в то же время обеспечивало эффек-тивную балансировку нагрузки. Впол-не логично, что возможности I-box бы-ли также расширены вдвое (выборка и декодирование 4 инструкций за такт), иначе бы этот блок стал «узким мес-том» процессора. Что касалось кэш-памяти, то размеры и организация I-cache и D-cache остались аналогичны таковым у EV4, зато появился интег-рированный кэш 2-го уровня (S-cache, secondary cache) размером в 96 Кб, ко-торый в значительной мере компен-сировал недостатки I-cache и D-cache. Стоит отметить, что EV5 был первым в истории процессором с S-cache. Впридачу была сохранена подде-ржка B-cache, размеры которого мог-ли составлять вплоть до 64 Мб (обыч-но от 1 Мб до 4 Мб), принцип мульти-плексирования сохранялся, равно как поддержка 128-битной системной ши-ны и многопроцессорного режима ра-боты. Хотя EV5 и производился по то-му же техпроцессу, что и EV45, коли-чество транзисторов в его ядре увели-чилось более чем 3 раза, в основном за счёт S-cache. Максимальная такто-вая частота составила только 333МГц, что было вполне предсказуемо, так как использовался всё тот же техпро-цесс (CMOS5).

В октябре 1995 года вышел в свет несколько доработанный вариант EV5 под названием 21164A (EV56), основ-ным архитектурным отличием кото-рого была поддержка дополнительно-го набора инструкций BWX (Byte-Word eXtension), позволяющего осущест-

влять операции загрузки/сохранения не только квантами по 32 или 64 би-та, изначально поддерживаемые ар-хитектурой, но и по 8 или 16 бит. В ос-новном это было вызвано падением производительности при эмуляции кода архитектуры x86. EV56 отличал-ся от EV5 более новым техпроцессом, 4-слойным 0,35 мкм CMOS6, который позволил довести тактовую частоту до 600МГц. Samsung, лицензировавший EV56 июне 1996 года, производил его по аналогичному техпроцессу, но чуть более успешно – максимальная такто-вая частота составляла 666 МГц. Кро-ме того, переход на новый техпроцесс означал и уменьшение площади ядра (приблизительно на треть), что зна-чительно сократило стоимость про-изводства по сравнению с EV5. В це-лом EV56 всё ещё оставался лиде-ром по производительности, но ему было всё сложнее конкурировать с 64-битными RISC-соперниками в ли-це Hewlett-Packard PA-8000 и PA-8200, Sun UltraSPARC I и UltraSPARC II, MIPS R10000 и IBM POWER3. Первое поколе-ние процессоров Alpha было легче про-двигать на рынке, так как его единс-твенными 64-битными соперниками были процессоры MIPS, которые ока-зались первыми на этом поприще. К тому же с выходом Intel Pentium Pro пришлось начать серьёзную борьбу за место под солнцем и с CISC-процессо-рами архитектуры x86, которые были в лучшем положении по количествен-ным и ценовым показателям.

Однако, стремясь ещё более уде-шевить EV56, DEC в сотрудничестве с Mitsubishi выпустила 17 марта 1997 года 21164PC (PCA56), у которого от-сутствовал S-cache и соответствую-

щая логика, хотя размер 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.

Что случилось с DEC?28 января 1998 года произошло собы-тие, ставшее одним из ключевых в ис-тории архитектуры Alpha: DEC, буду-чи в тяжёлом финансовом положении, находится в процессе покупки извес-тным сборщиком компьютерной тех-ники – Compaq Computer Corporation. Вскоре сделка была утверждена соб-раниями акционеров обеих компаний, и уже менее чем через полгода DEC

Процессор Alpha – 21164A (EV56)

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

88

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

официально прекратила своё сущес-твование, когда 11 июня того же года её акции были сняты с торгов на Нью-Йоркской фондовой бирже. В целом размер покупки составил 9,6 млрд. $. Так сказать, факт имеет место, но как могло случиться, что одна из крупней-ших компаний IT-индустрии (по состоя-нию на 1989 год имевшая 130 тыс. че-ловек персонала и годовой объём про-даж в 14 млрд. $, что было вторым по-казателем по отрасли после IBM) бы-ла вынуждена продать себя другой компании? На этот вопрос есть мно-го ответов.

Наиболее часто упоминаемой ошибкой руководства DEC является тот факт, что компания так и не смог-ла адаптироваться к изменению тре-бований рынка в 1980-х и 1990-х годах, вызванных так называемой революци-ей персоналок. Со слов Кеннета Оль-сена (Kenneth Olsen), основателя, пре-зидента и главного исполнительного менеджера компании почти до само-го её конца, «хорошие с инженерной точки зрения продукты продают себя сами» и «нет причины, из-за которой каждый захотел бы иметь компьютер у себя дома». Как показывает практи-ка, с эволюцией рынка компьютерной техники и его проникновением во все-возможные области деятельности че-ловека, повышением интеграции от-дельных компонентов и уменьшени-ем стоимости отдельно взятых компью-терных систем оба вышеприведённых выражения полностью утратили свой смысл. А вместе с ними таяли и пози-ции компании на рынке.

В то же время, если какое-либо движение нельзя подавить, то его сто-ит возглавить. В начале 1980-х годов, когда рынок персональных компьюте-ров ещё только формировался, хотя и очень быстрыми темпами, DEC рас-полагала всей необходимой финансо-вой и технической базой, чтобы громко заявить о своём присутствии. Вместо этого компания продолжала концент-рировать усилия на рынке серверов и рабочих станций, преимуществен-но на основе архитектуры VAX, не ве-ря в то, что примитивные дешёвые «персоналки» будут способны пошат-нуть устои рынка в целом и позиции DEC в частном. Очевидно, тот факт, что именно массовые решения в стиле PDP-11 создали основу для могущес-

тва компании в 1970-х годах, остался проигнорированным. Осталось только заметить, что архитектура VAX на про-тяжении всей истории её существова-ния оставалась закрытой, другими сло-вами – жила своей жизнью внутри ком-пании. Естественно, что за конкуренто-способными альтернативами от других производителей дело не стало.

Что касалось непосредственно ар-хитектуры Alpha, то несмотря на то, что первые процессоры показывали производительность, значительно опе-режающую любые решения из мира персональных компьютеров, DEC-та-ки упустила шанс вернуть былое мо-гущество в массовых решениях. Пос-ле того, как первые образцы EV4 были представлены на конференции в фев-рале 1991 года, ими очень заинтересо-вались присутствовавшие там инже-неры Apple Computer, занимавшиеся поиском новой архитектуры для буду-щих компьютеров компании, которые в то время базировались на процессо-рах семейства Motorola 68K. В июне то-го же года с Ольсеном связался Джон Скалли (John Sculley), главный испол-нительный менеджер Apple, с предло-жением об использовании EV4 и буду-щих процессоров в компьютерах Apple. Однако Ольсен отклонил это предло-жение, мотивируя тем, что процессор ещё не готов для рынка, а архитектура VAX ещё не исчерпала свой потенциал. Несколько месяцев спустя было объяв-лено, что новые компьютеры Apple бу-дут использовать процессоры PowerPC от альянса Apple, IBM и Motorola.

Немаловажным фактором в про-движении архитектуры Alpha на рын-ке была ценовая политика DEC, а так-же поддержка партнёров и рядовых сборщиков готовых систем. DEC про-изводила процессоры и чипсеты этой архитектуры на своих производствен-ных мощностях в Хадсоне (Массачу-сетс). Она также производила мно-гочисленную периферию для Alpha-систем (TGA-видеокарты, сетевые адаптеры и пр.). Основная масса Alpha-систем производилась на сбо-рочных мощностях компании и про-давалась под её именем. Несмотря на то, что качество комплектующих и сборки было на высоте, цены на го-товые решения были значительно вы-ше сопоставимых на основе архитекту-ры x86, что серьёзно ухудшало конку-

рентоспособность архитектуры Alpha. Тем не менее, DEC разрабатывала ма-теринские платы для массового рынка (так называемые Evaluation Board или AlphaPC), которые производились как на мощностях компании, так и други-ми производителями (Aspen, Polywell, Enorex и пр.), поскольку схемотехни-ка этих плат была в свободном досту-пе. Только одна компания, DeskStation, разработала свой дизайн, отличный от стандартного. Однако серверный рынок Alpha-систем, как наиболее при-быльный, DEC держала под своим еди-ноличным контролем.

Несмотря на то, что архитектура Alpha, в отличие от архитектуры VAX, была объявлена открытой, консорци-ум по её развитию так и не был со-здан, поэтому исследовательско-про-ектировочные работы велись усилия-ми DEC, иногда совместно с Mitsubishi. В конечном итоге получалось, что клю-чевые разработки патентовались со-ответствующим образом и подлежа-ли платному лицензированию, если вообще подлежали. Излишне уточнять, что такая политика мало способство-вала успешному продвижению архи-тектуры на рынке.

Далее, архитектура Alpha офици-ально поддерживала три операци-онные системы: Windows NT, Digital UNIX (также известная как OSF/1, поз-же как Tru64 UNIX) и OpenVMS, при-чём именно в таком порядке приори-тетности. Разумеется, Windows NT бы-ла продуктом от Microsoft, в то время как две другие ОС были разработаны в DEC. Однако недостатков у Windows NT было немало. Эта ОС не поставля-лась с набором средств для разработ-ки программного обеспечения (компи-ляторами, ассемблерами, отладчика-ми, пр.), а потому зависела от готово-го ПО, преимущественно коммерчес-кого. Фактически же количество до-ступного ПО для архитектуры Alpha было в несколько раз меньше ана-логичного показателя для архитекту-ры i386. Правда, в 1996 году коман-дой Антона Чернова (Anton Chernoff) был выпущен FX!32, замечательный эмулятор и транслятор кода архитек-туры i386 в «родной» для архитекту-ры Alpha, однако падение производи-тельности по сравнению с изначально «родным» кодом как минимум на 40% было неизбежным. Ещё хуже обстоя-

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

89№11, ноябрь 2005

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

ло с драйверной поддержкой, так как немногие производители сочли нуж-ным поддерживать архитектуру Alpha. Для полноты картины осталось заме-тить, что Windows NT (3.51 и 4.0) была 32-битной ОС, даже несмотря на то, что работала на 64-битной архитекту-ре. Вполне естественно, что это отнюдь не прибавляло производительности. Что касается Digital UNIX и OpenVMS, то эти 64-битные ОС так и не смогли составить достойной альтернативы Windows NT в силу дороговизны (свы-ше 1000 $ за одну копию), а также ещё более узкой аппаратной и програм-мной поддержки. Другие же UNIX-по-добные ОС с открытым кодом (NetBSD, Linux, OpenBSD и FreeBSD) не подде-рживались DEC вообще. Мотивы не совсем ясны, но определённо эти ОС могли составить достойную конкурен-цию Digital UNIX и OpenVMS.

В мае 1997 года DEC подала в суд на Intel, обвиняя последнюю в нару-шении 10 патентов на архитектуру Alpha при проектировании процессо-ров Pentium, Pentium Pro и Pentium II. В сентябре того же года Intel ответи-ла встречным иском, обвиняя в нару-шении 14 своих патентов. Примирение произошло 27 октября 1997 года, ког-да обе компании отозвали свои пре-тензии. По условиям «мирного догово-ра» DEC предоставила Intel производс-твенные права на всю свою продукцию (кроме непосредственно относящейся к архитектуре Alpha), также согласи-лась поддерживать в будущем архи-тектуру IA-64, в то время как Intel вы-купила у DEC за 625 млн. долл. США её фабрику в Хадсоне вместе с про-ектными центрами в Остине (Техас) и Иерусалиме (Израиль), а также обя-залась производить процессоры Alpha в будущем. Для полноты картины был подписан договор о кросс-лицензиро-вании патентов сроком на 10 лет.

Alpha 21264,или Время реваншаВ феврале 1998 года был выпущен в кремнии процессор следующего по-коления архитектуры, 21264 (EV6). В архитектурном плане этот процес-сор сильно отличался от предыдущего поколения, так как поддерживал вне-очередное выполнение (out-of-order execution), что позволило снизить за-висимость функциональных устройств

от пропускной способности кэшей и оперативной памяти. Как необхо-димое дополнение к этой технологии, процессор поддерживал переименова-ние регистров (register renaming). Ито-го, EV6 мог переупорядочивать в лю-бой момент времени до 80 инструк-ций, а также располагал дополнитель-ными 48 целочисленными и 40 физи-ческими регистрами (количество ло-гических, то есть программных, оста-лось прежним – по 32). Количество це-лочисленных конвейеров было увели-чено до 4, из которых 2 могли рассчи-тывать виртуальные адреса. Что ка-салось логики C-box, то её ожида-ли кардинальные изменения: разме-ры I-cache и D-cache были увеличены до 64 Кб каждый, S-cache был упраз-днён, a внешний B-cache размером от 1 Мб до 16 Мб подключался через независимую 128-битную шину дан-ных с 20-битной шиной адреса и ра-ботал на частоте от 1/8 до 2/3 часто-ты ядра. Для формирования B-cache обычно использовались микросхемы синхронной статической памяти с от-ложенной записью (late-write), а позд-нее и с применением технологии DDR. Был полностью заменён системный шинный интерфейс: шина данных ста-ла 64-битной, но использовала техно-логию DDR, а кроме того, использова-лась звездообразная топология под-ключения (то есть каждый процессор подключался к чипсету по выделенно-му каналу). Технологически EV6 про-изводился по тому же процессу, что и EV56, но с дополнительными дву-мя слоями металлизации, хотя пло-щадь его ядра была на треть больше, что предполагало более высокую се-бестоимость и автоматически не да-вало шансов процессору состоять-

ся как массовому решению, несмотря на приблизительно вдвое более высо-кую производительность в расчёте на единицу тактовой частоты, чем у EV56. Да и собственно максимальная часто-та была немалой – 600 МГц.

Архитектура EV6 была настоль-ко удачной, что пережила несколь-ко технологических воплощений в том же конструктиве. В конце 1999 года появился 21264A (EV67) на ос-нове 0,25 мкм CMOS7 процесса от Samsung, располагавший частотным потенциалом в 833МГц. В 2000 году IBM воплотила EV6 в своём 0,18 мкм CMOS8 процессе с медными про-водниками под названием 21264B (EV68C), что позволило пересечь гига-герцевый барьер и достичь 1250 МГц. Несколько запоздавшая альтернати-ва от Samsung при тех же 0,18мкм, но с морально устаревшими алюминие-выми проводниками, смогла добрать-ся только до 940 МГц.

Для EV6 и его прямых потомков было спроектировано два чипсета: DEC Tsunami (21272, он же Typhoon) и AMD Irongate (AMD-751), хотя пос-кольку AMD Athlon использовал почти аналогичную системную шинную ар-хитектуру, не должно было быть про-блемой адаптировать чипсеты других производителей, но этого не произош-ло. DEC Tsunami был высокомасшта-бируемым чипсетом, так как состоял из нескольких микросхем и позволял строить как однопроцессорные, так двух- и четырёхпроцессорные систе-мы (от 1 до 4 C-chips). Ширина кана-ла данных шины памяти могла быть от 128 до 512 бит (от 2 до 8 D-chips), так-же могло подключаться несколько кон-троллеров шин PCI (по одному P-chip на шину). AMD Irongate был одночипо-

Процессор Alpha – 21264 (EV6) Процессор Alpha – 21264B (EV68C)

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

90

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

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

ществлено к началу 2002 года. К слову, Hewlett-Packard была ещё меньше, чем Compaq, заинтересована в развитии и продвижении архитектуры на рын-ке, так как обладала собственной ар-хитектурой PA-RISC, а также состояла в альянсе с Intel по развитию архитек-туры IA-64. Если коротко, то дни архи-тектуры Alpha были сочтены, а её офи-циальная кончина стала вопросом не-далёкого будущего.

Alpha 21364,или Кризис жанраОднако в феврале 2002 года всё-таки был выпущен запоздавший процес-сор 21364 (EV7), которому предстояло стать основателем последнего поколе-ния архитектуры. Этот процессор был основан на почти неизменённом ядре EV6, к которому было добавлено не-сколько новых функциональных уст-ройств: два контроллера Direct Rambus DRAM PC800 (два Z-box), многофунк-циональный маршрутизатор для свя-зи с соседними процессорами и пери-ферией (R-box) и вновь появившийся S-cache размером в 1,75 Мб, а B-cache был упразднён. Каждый Z-box подде-рживал 5 каналов памяти (4 основ-ных и 1 вспомогательный), шириной по 18 бит каждый (16 бит для данных и 2 бита для кодов ECC), а суммарная теоретическая пропускная способ-ность памяти одного 1150 МГц процес-сора составляла 12,3 ГБ/с (оба Z-box и R-box работали на 2/3 частоты яд-ра). Каждый процессор в системе мог работать как с оперативной памятью, подключённой непосредственно к его контроллерам, так и с подключённой к контроллерам других процессоров. Функцию связи между процессорами, которых в одной системе могло быть до 128, выполнял R-box, поддержи-вающий 4 скоростных канала с про-пускной способностью в 6 ГБ/с каж-дый, а также 1 дополнительный канал для связи с периферией. Технологи-чески EV7 производился по тому же 7-слойному 0,18 мкм CMOS8 процессу, что и EV68C, но благодаря большому S-cache площадь его ядра достигла ре-кордных размеров, на треть превысив площадь и без того немассового EV6. Это предрешило судьбу EV7, исполь-зовавшегося исключительно в очень дорогих рабочих станциях и серверах Hewlett-Packard. Хотя в планах и значи-

лась 0,13мкм версия EV7 под названи-ем EV79, которая должна была харак-теризоваться более низкой себестои-мостью и более высокими тактовыми частотами, но её выпуск так и не со-стоялся. Компания ограничилась за-пуском в августе 2004 года чуть бо-лее быстрой версии EV7 под названи-ем EV7z, работавшей с тактовой час-тотой в 1250 МГц и производимой со-гласно прежним технологическим нор-мам. Как следовало из официально-го пресс-релиза, это был последний процессор архитектуры Alpha, под-тверждением чего служила буква «z» в названии. Также было объявлено, что Hewlett-Packard будет продавать сервера и рабочие станции архитекту-ры Alpha до 2006 года, а поддерживать до 2011 года, но не более того. Факти-чески, на этом и можно было бы пос-тавить точку в этом повествовании, но хотелось бы сделать завершаю-щее лирическое отступление. Так и не состоявшийся процессор 21464 (EV8), разрабатываемый Compaq вплоть до 25 июня 2001 года, должен был стать действительно новым поколением ар-хитектуры, а не довешиванием новых функций к старому ядру, как это случи-лось с EV7. По имеющейся информа-ции, он должен был располагать удво-енным количеством основных конвейе-ров (8 целочисленными и 4 веществен-ными), а для их эффективной загруз-ки должна была присутствовать под-держка технологии SMT (Simultaneous Multi-Threading), которая позволила бы одновременное выполнение 4 про-граммных потоков. Размер S-cache предполагалось довести до 3 Мб. Ожи-даемая тактовая частота должна бы-ла составить 1,8 ГГц, что должно было вновь вывести архитектуру Alpha в ли-деры по производительности. Однако не сложилось.

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

Редактор рубрикиКирилл Тихонов

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

91№11, ноябрь 2005

bugtraq

Отказ в обслуживании в диссекторе IRC-протокола в EtherealПрограмма: Ethereal 0.10.13.Опасность: Средняя.Описание: Уязвимость существует при обработке диссек-тора IRC-протокола. Удаленный пользователь может с по-мощью специально сформированного IRC-пакета вызвать зацикливание приложения и потребить все доступные ре-сурсы на системе.URL производителя: www.ethereal.com.Решение: Установите последнюю версию (0.10.13-r1) до-ступную по CVS.

Повышение привилегий в F-Secure Anti-VirusПрограмма: F-Secure Internet Gatekeeper for Linux вер-сии до 2.15.484, F-Secure Anti-Virus Linux Gateway версии до 2.16.Опасность: Низкая.Описание: Уязвимость существует из-за того, что програм-мное обеспечение устанавливает на некоторые сценарии (/opt/f-secure/fsigk/cgi/*suid.cgi и /home/virusgw/cgi/*suid.cgi) SUID-бит и делает их исполняемыми для всех пользовате-лей. Локальный пользователь может с помощью этих сце-нариев повысить свои привилегии на системе.URL производителя: www.f-secure.com.Решение: Установите последнюю версию с сайта произ-водителя.

Отказ в обслуживании в Cisco при обработке ISAKMP IKE-сообщенийПрограмма: 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 Module (FWSM) версии до 2.3(3), Cisco VPN 3000 Series Concentrators версии до 4.1(7)H и 4.7(2)B, Cisco MDS Series SanOS версии до 2.1(2).Опасность: Средняя.Описание: Уязвимость существует при обработке Phase 1 протокола обмена сообщениями IKEv1. Удаленный пользо-ватель может вызвать отказ в обслуживании.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.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки в веб-кон-соли. Удаленный пользователь может с помощью символов обхода каталога просмотреть произвольные файлы на сис-теме. В конфигурации по умолчанию веб-консоль разреша-ет подключения только с localhost.URL производителя: www.f-secure.com.Решение: Установите последнюю версию с сайта произ-водителя.

Обход каталога и межсайтовый скриптинг в GNUMP3dПрограмма: GNUMP3d версии до 2.9.6.Опасность: Средняя.Описание: 1. Межсайтовый скриптинг существует из-за недостаточной обработки входных данных при отображе-нии страницы с ошибкой 404 в браузере жертвы. Удален-ный пользователь может выполнить произвольный HTML-сценарий в браузере жертвы в контексте безопасности уяз-вимого сайта.

2. Обход каталога возможен из-за недостаточной филь-трации входных данных при обработке ссылки. Удаленный пользователь может с помощью специально сформирован-ного URL, содержащего символы обхода каталога, просмот-реть произвольные файлы на системе.URL производителя: www.gnu.org/software/gnump3d.Решение: Установите последнюю версию (2.9.6) с сайта производителя.

Переполнение буфера в FreeftpdПрограмма: Freeftpd 1.0.8.Опасность: Высокая.Описание: Уязвимость существует при обработке входных данных в команде USER. Удаленный пользователь может послать серверу слишком длинную строку, вызвать пере-полнение стека и выполнить произвольный код на целевой системе. Удачная эксплуатация уязвимости возможна при включенном логировании.URL производителя: www.freeftpd.com.Решение: Установите последнюю версию (1.0.9) с сайта производителя.

Отказ в обслуживании при обработке RPC-запросов в Microsoft WindowsПрограмма: Microsoft Windows 2000, Microsoft Windows XP SP1.Опасность: Средняя.Описание: Уязвимость существует при обработке RPC-за-просов в Microsoft Windows. Удаленный пользователь мо-жет с помощью специально сформированного RPC-за-проса вызвать отказ в обслуживании системы или заста-вить процесс services.exe потребить все доступные ресур-сы на системе.URL производителя: www.microsoft.com.Решение: В настоящее время способов устранения уязви-мости не существует.

Переполнение буфера в CHM LibПрограмма: CHM Lib 0.36 и более ранние версии.Опасность: Высокая.Описание: Переполнение стека обнаружено в функции _chm_decompress_block() при обработке входных данных. Удаленный пользователь может с помощью специально сформированного .chm-файла выполнить произвольный код на целевой системе.Решение: Установите последнюю версию (0.37) с сайта производителя.

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

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

92

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

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

В разделе «Введение» люди, толь-ко начинающие знакомиться с новой для себя технологией, узнают о исто-

Книга по сути является очень подроб-ным справочником для программиста по сетевой подсистеме Linux. Матери-ал четко и грамотно структурирован. Всего в книге семь частей, повество-вание идет от простого к более сложно-му. В первой части вы познакомитесь с общим устройством ядра, узнаете его структуру. Среди рассмотренных тем: монолитные архитектуры и мик-

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

Часть, посвященная конструктив-ным элементам волоконно-оптическо-го кабеля, представлена материалом

Linux. Сетевая архитектура. Структура и реализация сетевых протоколов в ядреКлаус Вейрле, Франк Пэльке, Хартмут Риттер, Даниэль Мюллер, Марк Бехлер

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

роядра, процессы ядра Linux, блоки-ровка – атомарные операции, модули ядра, драйверы устройств, управление памятью в ядре, синхронизация, фай-ловая система proc и контроль версий. После вводного экскурса начинается материал, непосредственно связан-ный с сетями. Архитектура сетевой ре-ализации – система связи, управление сетевыми пакетами в ядре, сетевые ус-тройства, сетевые драйверы. Из треть-ей части книги вы узнаете о канальном уровне, протоколах SLIP, PPP, техно-логии PPP поверх Ethernet, асинхрон-ном режиме передачи ATM, Bluetooth и прозрачных мостах. В части, посвя-щенной сетевому уровню, рассказано о протоколах TCP/IP, IPv4, реализацию, опции и маршрутизацию протокола IP, arp, управлении трафиком для подде-ржания качества обслуживания, от-слеживании соединений, межсетевых

экранах, NAT. Также упомянуто о PIv6. Часть книги, посвященная транспорт-ному уровню, представлена тремя гла-вами, в которых рассказано о TCP/UDP и концепции сокетов. Весь вышеизло-женный материал сопровождается до-статочно большим количеством приме-ров, как та или иная вещь реализована в системе. Книга – настоящая находка для программистов, пишущих или же-лающих начать писать сетевые прило-жения под Linux, юных «хакеров» ядра и просто людей, которым интересно, как устроено ядро изнутри.

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

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством

«КУДИЦ-ОБРАЗ».

«КУДИЦ-ОБРАЗ»

2005

320

5-9579-0093-1

≈ 212 руб.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством

«КУДИЦ-ОБРАЗ».

«КУДИЦ-ОБРАЗ»

2006

656

5-9579-0094-X

≈ 456 руб.

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

93№11, ноябрь 2005

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

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

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

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

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

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

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

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

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

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

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2006

687

5-94723-961-2

≈ 978 руб.

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

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2006

575

5-469-00494-5

≈ 510 руб.

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

94

подписка на 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

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

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

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

95№11, ноябрь 2005

подписка на 2006 год

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

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

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

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

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

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

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

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

№1(26) январь 2005

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

www.samag.ru

Обзор дистр

ибутива SuSE P

rofess

ional 9.2

Прокси-сервер oops: первы

е впечатления

Как защищают программное о

беспечение

Путешестви

е из Perl в

Excel

Нити в Perl

HOTSPOT – это просто!

Программное управление

файловой системой

с помощью VBScript

Восстановление NTFS

Организация общего доступ

а

в Интернет и

защиты от в

торжений

на основе Kerio W

inRoute Firewall 6

Обзор дистр

ибутива SuSE P

rofess

ional 9.2

Прокси-сервер oops: первы

е впечатления

Как защищают программное о

беспечение

Путешестви

е из Perl в

Excel

Нити в Perl

HOTSPOT – это просто!

Программное управление

файловой системой

с помощью VBScript

Восстановление NTFS

Организация общего доступ

а

в Интернет и

защиты от в

торжений

на основе Kerio W

inRoute Firewall 6

№2(27) февраль 2005

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

www.samag.ru

Системная интеграция –

общие концепции

Автоматическая установка

операционной системы

и программного обеспечения

SOCKS – универсальный прокси-сервер

Строим виртуальную

сеть с TINC

Создание релиза FreeBSD

IP-роуминг: вводный курс

Почтовый сервер на базе Postfix

Режем спам. Дополнительные методы

Техника оптимизации под Linux

Считаем трафик на FreeBSD:

ng_ipacct + Perl+ MySQL

Системная интеграция –

общие концепции

Автоматическая установка

операционной системы

и программного обеспечения

SOCKS – универсальный прокси-сервер

Строим виртуальную

сеть с TINC

Создание релиза FreeBSD

IP-роуминг: вводный курс

Почтовый сервер на базе Postfix

Режем спам. Дополнительные методы

Техника оптимизации под Linux

Считаем трафик на FreeBSD:

ng_ipacct + Perl+ MySQL

№5(30) май 2005

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

www.samag.ruПочему MS SQL медленно работает?

Ищем причины

Строим защищенную беспроводную сеть:

WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить

удаленные файлы под BSD

Что важно знать об IP-телефонии

Устанавливаем Symantec Antivirus 9.0

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

Эффективно управляем

полями пользователей в AD

Контролируем безопасность сети

с помощью OSSIM

Интервью с Ларри Уоллом –

создателем языка Perl

№4(29) апрель 2005

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

www.samag.ruПочтовая система

Alt-N MDaemonБазовая настройка

маршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данные

с помощью Bacula

Защита коммуникаций

Windows Mobile

Система создания

документации POD

Оптимизация циклов

под Linux

Почтовая система

Alt-N MDaemonБазовая настройка

маршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данные

с помощью Bacula

Защита коммуникаций

Windows Mobile

Система создания

документации POD

Оптимизация циклов

под Linux

№3(28) март 2005

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

www.samag.ru

Linux Xinerama: один монитор хорошо,

а много лучше

Knoppix – русская редакция

Восстановление удаленных файлов

под Linux

FreeBSD в домене Microsoft Windows

Практикум Python:

отправка файлов по электронной почте

Шифрование данных в Linux –

новый взгляд на аппаратные ключи

Автоматизация процесса

подключения баз 1С

Эмуляция при помощи QEMU

Программирование на shell

в экстремальных условиях

Linux Xinerama: один монитор хорошо,

а много лучше

Knoppix – русская редакция

Восстановление удаленных файлов

под Linux

FreeBSD в домене Microsoft Windows

Практикум Python:

отправка файлов по электронной почте

Шифрование данных в Linux –

новый взгляд на аппаратные ключи

Автоматизация процесса

подключения баз 1С

Эмуляция при помощи QEMU

Программирование на shell

в экстремальных условиях

№8(33) август 2005

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

www.samag.ru

Сможет ли PC-BSD

Сможет ли PC-BSD

конкурировать

конкурировать

с Linux-дистрибутивами?

с Linux-дистрибутивами?

Оцените WrSpy!

Оцените WrSpy!

Считаем трафик почтовых

Считаем трафик почтовых

и прокси-серверов

и прокси-серверов

Настраиваем DSPAM –

Настраиваем DSPAM –

ваш личный спам-фильтр

ваш личный спам-фильтр

Проводим аудит системы

Проводим аудит системы

с помощью SNARE

с помощью SNARE

Упрощаем

Упрощаем управление

управление

Asterisk

Asterisk-сервером

-сервером

OpenMosix – превратим сеть

OpenMosix – превратим сеть

в единый суперкомпьютер!

в единый суперкомпьютер!

CD, не подвластный

CD, не подвластный

копированию

копированию

Админские сказки

Админские сказки

16 bit edition

16 bit edition

№6(31) ИЮНЬ 2005

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

www.samag.ru

Postfix: диагностируем

и устраняем неисправности

Asterisk и Linux:

миссия IP-телефония

Насколько неуязвима

ваша беспроводная сеть?

Используем одноразовые пароли

для удаленного входа на сервер

Как защититься от fingerprinting?

Solaris 10 в качестве десктопа?

Пробуем!

Ускоряем MS SQL Server

Модифицируем BIOS

Ищем дополнительные

источники дохода

№7(32) ИЮЛЬ 2005подписной индекс 81655

www.samag.ru

Настраиваем Kerberos поверх LDAP

Настраиваем Kerberos поверх LDAP

Open-Xchange – свободу группам!

Open-Xchange – свободу группам!

Есть ли жизнь

Есть ли жизньбез антивируса?

без антивируса?Запускаем spamd

Запускаем spamdна FreeBSDна FreeBSDПроверяем

ПроверяемHTTP-трафик на лету

HTTP-трафик на летуНастраиваем WSUS

Настраиваем WSUS Устанавливаем связку

Устанавливаем связку

Postfix + Exchange

Postfix + ExchangeУдаленно управляем

Удаленно управляем

BIOS SetupBIOS Setup Автоматизируем подключение

Автоматизируем подключение

баз 1С новой версии 8.0

баз 1С новой версии 8.0

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

96

СИСТЕМНЫЙ АДМИНИСТРАТОР

№11(36), Ноябрь, 2005 год

РЕДАКЦИЯ

Исполнительный директор

Владимир ПоложевецОтветственный секретарь

Наталья Хвостова[email protected]Технический редактор

Владимир ЛукинРедакторы

Андрей БешковВалентин СиницынАлексей БарабановКирилл ТихоновКирилл Сухов

РЕКЛАМНАЯ СЛУЖБА

тел./факс: (095) 928-8253Дарья Хохловаreс[email protected]

Верстка и оформление

[email protected]Дизайн обложки

Николай Петрочук

По вопросам распространения

обращайтесь по телефону:(095) 928-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (095) 928-8253Сайт журнала: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТА

Петр ПоложевецУЧРЕДИТЕЛИ

Владимир ПоложевецАлександр МихалевИЗДАТЕЛЬ

ЗАО «Издательский дом«Учительская газета»

Отпечатано типографией

ГП «Московская Типография №13»Тираж 9000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание рекламно-го объявления ответственность несет рекламодатель. Все права на опубли-кованные материалы защищены.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Спешите оформить подпискуна первое полугодие 2006 года!

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

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

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

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

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

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

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

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