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

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

ЛИ
С
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
К У ВО

РО
№9(70) сентябрь 2008
НИ НО

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

www.samag.ru
Настраиваем терминальное решение

№9(70) сентябрь 2008


на базе Citrix Presentation Server 4.5

И
ЬГ
ЬД О
БО А
К

ИС НН
ЕН
РА СК
ТЕ
УС

и тонких клиентов WYSE

ИЛ ДА
У
ТП

НА П
Л ОТ

НЧ ЖИ
ВО

РА ЛЕ

КО НЕО
Л

АВ ОС
ХА
УЕ

На страже безопасности –

ЗА
Software Restriction Policies

Так видит журнал читатель, оформивший подписку: Новшества в Windows Server 2008:
стек TCP/IP

Используем check_relay в Sendmail


для борьбы со спамом

Работаем с данными
Active Directory из скриптов

Управление BerkeleyDB
и тонкая настройка Jabberd2

Точная геонавигация в городе


с помощью технологии Wi2Geo
ПОДПИШИТЕСЬ И ЧИТАЙТЕ!
Запускаем «САМО-ТурАгент»
Роспечать – 20780, 81655 под Linux
Пресса России – 88099, 87836 Найди в журнале код.
Интер-почта – тел. (495) 500-00-60 Следуй инструкциям.
На кону настоящий
«АДМИНСКИЙ ПРИЗ»
Реклама

Реклама
в номере
5 ТЕНДЕНЦИИ ИНТЕРВЬЮ
АДМИНИСТРИРОВАНИЕ 60 Точная геонавигация в городе с помощью
технологии Wi2Geo
6 Устанавливаем и настраиваем Интервью с Денисом Алаевым, автором идеи.
терминальное решение на базе Антон Борисов
Citrix Presentation Server 4.5
и тонких клиентов WYSE ЧЕЛОВЕК НОМЕРА
Первые этапы при вводе в строй терминального реше-
ния. Вопросы выбора продуктов, подготовки сетевой 66 Ричард Столлман:
инфраструктуры, особенности установки терминаль- свобода без ограничений
ных продуктов Microsoft и Citrix. Пожалуй, нет в мире человека, знакомого со свобод-
Алексей Бережной ным программным обеспечением и не знающего Ричар-
да Столлмана – человека, подарившего миру идею бес-
16 Новшества в Windows Server 2008: платного ПО с открытым исходным кодом, ярого про-
стек TCP/IP тивника авторского права.
В новой версии ОС Windows Server 2008 стек TCP/IP Дмитрий Мороз
был полностью переработан. Рассмотрим, какие нов-
шества появились в нем. ПРОГРАММИРОВАНИЕ
Андрей Бирюков
70 Распределенная система контроля
20 Используем check_relay в Sendmail версий Bazaar
для борьбы со спамом Основные концепции Bazaar.
Почтовые серверы, такие как Postfix и Exim, предлага- Дмитрий Васильев
ют сравнительно прозрачные способы фильтрации со-
единений. Владельцы же Sendmail вынуждены попотеть, 77 Готовимся к переходу на PHP 5.3
чтобы раскрыть весь потенциал этого MTA. Для плавного перехода с PHP 5.2 на PHP 6 было реше-
Сергей Супрунов но разработать промежуточную версию PHP 5.3, кото-
рая будет содержать большинство улучшений, разра-
27 Jabberd2 – простой и нетребовательный ботанных для PHP 6.
к ресурсам XMPP-сервер. Часть 2 Александр Майоров
Управление базами данных BerkeleyDB и тонкая нас-
тройка Jabberd2. АДМИНИСТРИРОВАНИЕ «1С»
Михаил Кондрин
86 Открываем базу данных одним
34 Работаем с данными Active Directory щелчком мыши
из скриптов Файловое расширение *.MD по умолчанию никак не об-
Часть 1. Применение Bourne Shell рабатывается операционной системой, но это досадное
В корпоративной среде при разработке скриптов ра- недоразумение можно исправить, добавив себе допол-
но или поздно возникает вопрос: «А неплохо было бы нительный функционал для комфортной работы.
иметь базу всех сотрудников с именами, должностями, Андрей Луконькин
адресами и номерами ICQ...». Такая база уже есть. Ее
за нас придумала Microsoft. Это Active Directory. Нужно 87 «1С:Сценарное тестирование»
только уметь с ней общаться. В сентябре вышла ознакомительная версия нового
Рашид Ачилов программного продукта, позволяющего повысить ра-
ботоспособность и отказоустойчивость конфигураций
40 Панель управления хостингом ISPConfig «1С:Предприятие 8».
Обзор решения. Андрей Луконькин
Сергей Яремчук
РЕТРОСПЕКТИВА
44 Лебедь, рак да щука:
САМО-Софт, wine, Etersoft 88 Сквозь тернии к звездам:
Запускаем под Linux «САМО-ТурАгент» – продукт история компании Hewlett-Packard
для автоматизации турфирмы. Их было двое. Одного звали Билл, другого – Дэйв.
Сергей Барановский Они окончили университет в начале тридцатых годов
прошлого века, и были инженерами. Эти парни хоте-
50 Обзор ALT Linux 4.0 Children ли заниматься технологиями. Теперь фамилии Hewlett
Знакомимся с новинкой – бета-версией необычного и Packard знает весь мир.
дистрибутива, предназначенного для детского твор- Илья Александров
чества – ALT Linux 4.0 Children.
Сергей Яремчук 92 КНИЖНАЯ ПОЛКА
53 ЗАКОН ЕСТЬ ЗАКОН 94 СИСАДМИН ТОЖЕ ЧЕЛОВЕК
БЕЗОПАСНОСТЬ 19, 65, 91 BUGTRAQ
54 На страже безопасности –
Software Restriction Policies Код для участия в розыгрыше призов.
Эффективно используем технологию SRP.
Следуйте инструкциям на стр. 2.
Вадим Поданс

№9, сентябрь 2008 


гра ть
а в ы и
шанс
Три ап р и з ов!
ехорош
ш
ая.
тож ди -
гр ы а я – бх о
и к и роз ы я и в тор
к о д , нео
е у ч астн – хо роша следний Р А З».
г и дн а п о ри з ма -
Доро т и: о и тс я й П а в то
е н о вос е н а ход
д м и нс к и г р ы ш а
с е с ть дв м н о м ер ы ш е «А а м р оз ы
а ко р ник
Для В ентябрьс в р о з ыг у ч а с т
н а л а.
с я
асти ованным жу р
1. В д л я у ч
и р л ь с к о г о
к о в аны
мый гис т р з ию убл и
а р е о д и т о п
В с е мз ч и тан к З » б уду да.
2. и з ас з Р А 0 8 г о
тичес
к
к и й При я бр я 20
мин с 7 но
« А д .r u 2
ы г р ыша w .s a mag в п е р во м
о ги роз а л а ww ч а с т ия го д а.
И т ж ур н для у ября 2008
й те ко д ы
на с а р о в а т ь
д о 2 0 но ан с
т и в и и м о й ш
н и е ! Ак н е о бход е д у ющи
а а сл
Вн и м о з ыгр ыш ти! В а ш
ша
е р л п у ы г р ы ятся
этап сь н а п о
ком р о з
о на д о б
й те т н и а м п
н а в лив а а т ь у час ас т и яВ
та
Не ос ть приз –
ст
. Д л я уч 0 0 8 год.
г р а и з Д ВА» 1 2 за 2
вы и й пр 0 , 11 ,
с к и № 1
ин а ло в
«Адм у р н
д ы из ж
ко
Приз
нск ий
ми
Ад РАЗ»
П р из «
м и н с к ий атор
Ад н и к
К о мму к ур с ы

б н ы е р од ук ты с е р в ер ы
че еп е
 У граммны ыделенны
ро в
 П туальные
ир
 В В А»
« Д
й П р из
нс к и
А д м и
н и к атор
К о мму к ур с ы

б н ы е р од ук ты с е р в ер ы
че еп е
 У граммны ыделенны
ро в
 П туальные
ир
 В РИ»
з «Т
к и й При
нс
Адми тбук
оу ы
 Н бные курс родукты
У че м н ы еп
 г р ам
р о
 П
ов...
приз
г рыш
розы
Все на

Более подробную информацию о сроках и правилах проведения розыгрышей призов смотрите на сайте журнала – www.samag.ru
Реклама
тенденции
Google выпустила свой веб-браузер – поддержку асинхронного ввода/вывода для SATA (NCQ),
Google Chrome поддержку образов VHD (Microsoft Virtual PC).
Пожалуй, самым заметным событием начала осени стало Уже 10 сентября Sun Microsystems развила тему виртуа-
заявление компании Google о намерении выпустить собст- лизации, запустив новый Open Source-проект, нацеленный
венный веб-браузер с открытым кодом – Chrome (http:// на улучшение возможностей решения Sun xVM Server. Анон-
www.google.com/chrome). сированный xVMserver.org стал инициативой Sun по созда-
1 сентября в официальном блоге Google появилось со- нию Open Source-сообщества на базе ее виртуализацион-
общение о том, что 2 сентября, компания одним простым ного программного обеспечения xVM Server. На появившем-
и очевидным шагом буквально ворвется на нестабильный ся веб-сайте разработчики получили возможность скачать
в последние годы рынок веб-браузеров. Обещание в Google первый архив исходного кода Sun xVM Server и внести свой
сдержали, и миллионы пользователей бросились изучать вклад в процесс совершенствования продукта. Объявле-
и тестировать новый продукт интернет-гиганта. И вско- ние о запуске xVMserver.org состоялось вместе с сообще-
ре исследователи из Net Applications заявили, что Chrome нием о доступности программного обеспечения Sun xVM
удалось за несколько часов после официального запус- Server и Sun xVM Ops Center 2.0, которые в Sun называют
ка завоевать 1% рынка браузеров, достигнув пика в 9,7% «ключевыми компонентами в ее всеобъемлющей страте-
на сайте Computerworld на следующий день после дебю- гии по виртуализации».
та (3 сентября). Кроме того, 9 сентября Тим Брэй (Tim Bray), директор
В Google объяснили причину выпуска своего браузера по веб-технологиям в Sun, представил в своем блоге нача-
следующим образом: «Мы уверены, что можем принести ло бета-тестирования Project Kenai – сервиса Sun для хос-
пользу в этой области и в то же время способствовать ин- тинга Open Source-проектов, позиционируемый компанией
новациям в Web». Браузер Google Chrome уже долгое вре- как «Больше, чем просто кузница», апеллируя к SourceForge
мя использовался внутри компании, и теперь его выпусти- (от англ. forge – кузница). Как пояснил Ник Сейгер (Nick
ли для широкой публики. Seiger), разработчик сервиса, одной из причин, побудивших
Среди технических подробностей о Google Chrome к созданию Kenai, стала потребность в демонстрации воз-
можно выделить заимствование компонентов из браузе- можностей создания проектов, работающих поверх тради-
ра Mozilla Firefox и движка рендеринга веб-страниц Apple ционных стеков LAMP/SAMP. В этом заявлении автор ссы-
WebKit, а также использование нового открытого JavaScript- лается на разработки Glassfish, JRuby и Ruby on Rails.
движка V8 (его исходный код был вскоре опубликован
на Google Code). Одной из ключевых особенностей стала Подготовил Дмитрий Шурупов
по материалам www.nixp.ru
изоляция вкладок браузера друг от друга («падение» одно-
го из табов никак не отразится на работе других).
Первый бета-релиз Google Chrome пока доступен толь-
ко для операционной системы Microsoft Windows (в Google
объяснили это желанием получить максимальный отклик
как можно быстрее), но в дальнейшем появятся сборки
и для других платформ (Mac OS X, Linux). Пока в сети мож-
но найти только рекомендации по самостоятельной компи-
ляции Chrome из исходников для этих систем.

Sun наращивает активность


в области Open Source
Начало сентября ознаменовалось спорным известием
о том, что Михаэль Видениус (Michael «Monty» Widenius),
один из основателей MySQL AB и главный автор ориги-
нальной версии популярнейшей СУБД с открытым кодом
MySQL, покидает Sun Microsystems. Однако сие событие
ничуть не помешало известной IT-компании одновременно
с этим выстрелить целой чередой Open Source-анонсов.
4 сентября Sun объявила о выпуске новой версии свое-
го программного решения в области виртуализации для
десктопов – Sun xVM VirtualBox 2.0.0. В пресс-релизе от-
мечается, что «программное обеспечение xVM VirtualBox –
это первый крупный гипервизор с открытым кодом, подде-
рживающий наиболее популярные операционные системы
(в роли хостов), среди которых Mac OS X, Linux, Windows,
Solaris/OpenSolaris». Среди изменений, представленных
в VirtualBox 2.0, поддержка 64-разрядных гостевых опера-
ционных систем (для 64-битных хостов), перевод GUI с Qt3
на Qt4, новый родной интерфейс для Mac OS X «Leopard»,

№9, сентябрь 2008 


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

Устанавливаем и настраиваем
терминальное решение на базе
Citrix Presentation Server 4.5
и тонких клиентов WYSE

Алексей Бережной
В статье рассказывается о первых этапах при вводе в строй терминального решения на базе
Citrix Presentation Server 4.5. Затрагиваются вопросы выбора продуктов, подготовки сетевой
инфраструктуры, а также особенности установки терминальных продуктов Microsoft и Citrix.

Т
ак уж получилось, что наш отдел раструктуры. Мы остановились на тер- n простота обслуживания;
оказался в численном меньшинст- минальном решении: тонкие клиенты n повышение уровня безопасности;
ве. Два системных администрато- и терминальный сервер. n упрощение процесса резервного
ра (по UNIX и Windows-системам соот- копирования;
ветственно) и один инженер техничес- Преимущества n простота учета компьютерной тех-
кой поддержки на парк компьютеров использования ники;
более 200 машин – это совсем немного. тонких клиентов n невысокая стоимость обслужива-
Помимо всего стартовал новый проект n длительный срок работы клиент- ния тонких клиентов;
по переходу на новую СУБД. Поэтому ских устройств; n низкое энергопотребление;
нужно было искать способ в кратчай- n большой срок морального устаре- n отсутствие шума от вентиляторов
ший срок максимально сократить из- вания оборудования; в системных блоках;
держки на обслуживание сетевой инф- n быстрота развертывания; n отсутствие пыли от компьютеров;


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

Длительный срок работы клиентских устройств Простота учета компьютерной техники


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

Большой срок морального устаревания оборудования


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

Быстрота развертывания
Сколько времени уходит на подготовку обычной офисной
рабочей станции? Если устанавливать с «нуля», начиная
с операционной системы и драйверов оборудования и за-
канчивая офисными приложениями, то примерно около двух
часов. Даже при применении средств быстрого развертыва-
ния, например, из образа, созданного посредством Acronis
True Image или Norton Ghost, все равно процедура займет
примерно около часа. В случае с тонким клиентом доста-
точно достать оборудование из коробки и подключить кабе-
ли к разъемам. Что же касается прикладного программно-
го обеспечения, то оно устанавливается один раз на тер-
минальный сервер.

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

Повышение уровня безопасности


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

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

№9, сентябрь 2008 


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

Минусы использования
тонких клиентов
n чрезмерная централизация сете-
вой инфраструктуры;
n утрата некоторых пользователь-
ских функций;
n утрата статуса «большого босса».

Чрезмерная централизация
сетевой инфраструктуры
Когда роль клиентов сведена к мини-
муму функций, роль терминального
Рисунок 1. Окно установки Citrix «Переназначение дисков» (Remapping) и файлового серверов значительно
возрастает. Справедливости ради сто-
операционной системы и прочих ве- в кабинетах. Создавалось впечатле- ит отметить, что в случае с обычными
щей, на которые в большинстве сво- ние, что как будто не хватало чего-то ПК все равно существует большая за-
ем тратятся основные усилия сотруд- привычного. Выход нашелся быстро – висимость от серверной части. Напри-
ников технической поддержки. До- по внутренней громкоговорящей связи мер, все от того же файлового серве-
бавьте к этому крайне низкую веро- стали транслировать тихую музыку. ра, от контроллера домена, от серве-
ятность вмешательства пользовате- ра DNS и т. д.
ля в настройки терминала, и получит- Отсутствие пыли от компьютеров
ся весьма впечатляющая картина «не- Обычный офисный компьютер не прос- Утрата некоторых
потопляемой» IT-структуры. Это вы- то работает, как плохой пылесос. Круп- пользовательских функций
годно не только для крупных компа- ные частички пыли всасываются че- Тонкие клиенты в классическом пони-
ний, но и для небольших фирм, кото- рез щели системного блока, как мель- мании не содержат в своем составе
рые впоследствии смогут окончатель- ницами, измельчаются вентилятора- таких устройств как DVD-ROM и т. п.
но перейти на аутсорсинг. ми и вылетают наружу, оседая на по- вещей. Хотя в то же время процесс
верхностях. Дышать этой пылью – да- просмотра видео, прослушивания ау-
Низкое энергопотребление леко не самая лучшая оздоровитель- диоинформации вполне осуществим
К сожалению, в России в большинстве ная процедура. на большинстве моделей современ-
компаний пока не обращают внимания ных тонких клиентов.
на реальные убытки от перерасхода Экономия пространства на столе
электроэнергии. Но достаточно пред- и под столом, а также Утрата статуса «большого босса»
ставить себе крупный офис с числен- возможность использования Не секрет, что ПК может способс-
ностью от 100 компьютеров и выше, любой офисной мебели твовать удовлетворению тщеславия
чтобы понять, что даже небольшая эко- Не секрет, что некоторые образцы сов- и личных амбиций. Зачастую чем выше
номия в 100 Ватт на каждое устройство ременной офисной мебели не в состо- ранг сотрудника в компании, тем бо-
может вылиться в реальные десятки, янии выдерживать вес современных лее дорогой системный блок стоит
а то и сотни киловатт/час, когда речь системных блоков. Например, некото- у него под столом. Хотя с точки зре-
идет обо всем офисе в целом. рые столы из стекла и/или пластика ния финансовой целесообразности та-
просто разваливаются под тяжестью кая практика измерения статуса край-
Отсутствие шума от вентиляторов обычного персонального компьютера. не негативно отражается на финансо-
в системных блоках Возможность использовать маленький вом положении большинства компа-
Само по себе большое достижение. легкий тонкий клиент позволяет поку- ний, а также на информационной бе-
Бывают забавные случаи, когда, на- пать любую офисную мебель. зопасности и отказоустойчивости. Го-
пример, сотрудники одной компании, раздо выгоднее потратить деньги, сэ-
где был произведен переход на тер- Стоимость тонкого клиента кономленные на амбициях менедже-
минальные решения, пожаловались Как правило, стоимость тонкого кли- ров среднего звена, на модернизацию
руководству на необычную тишину ента примерно на 100-150$ ниже сто- серверного оборудования или, к при-


администрирование
меру, на создание мощной системы дом прикладных программ, таких, как n д и с к о в ы й м а с с и в R A I D 10 –
резервного копирования. банк-клиенты, рукописные СУБД и т. п. 4x250 Гб;
Так как сроки на решение задачи бы- n к о н т р о л л е р S C S I / R A I D –
Выбор тонкого клиента ли весьма ограничены, пришлось ос- I n t e l E m b e d d e d S e r ve r R A I D
Тонкие клиенты выпускает множес- тановить свой выбор на терминаль- Technology II;
тво компаний. Среди них HP, Sun ном решении, основанном на продук-
Microsystems, WYSE, а также огром- тах Windows и Citrix. Решение проблем
ное количество разных мелких сбор- Еще одно дополнительное усло- с печатью
щиков. В силу вышеописанных причин вие, которое определило наш выбор, – Если раньше пользователи распеча-
нам была нужна самая простая и на- пользователи не должны были «заме- тывали на локальных принтерах, под-
дежная модель. тить подмены» при работе с виртуаль- ключенных к персональным компью-
Кроме того, по нашему замыслу он ными рабочими столами. То есть мак- терам, то при переходе на тонкие кли-
должен поддерживать протокол ICA симально сократить и упростить про- енты возникла необходимость реше-
для подключения к Citrix Presentation цесс адаптации рядовых сотрудников ния вопросов сетевой печати. Поэто-
Server и обладать минимумом поль- в новой IT-структуре. Поэтому в итоге, му появилась необходимость значи-
зовательских функций, по принципу – взвесив все «за» и «против», мы ос- тельную часть нагрузки перенести
меньше функций, меньше возможнос- тановились на операционной систе- на имеющиеся сетевые МФУ (много-
тей сбить настройки. Это позволит со- ме Windows Server 2003 R2 Standard функциональные устройства). Для ос-
кратить время на обслуживание за- Edition x64. тавшихся локальных принтеров были
явок от пользователей, переведя все куплены принт-серверы для дальней-
программное обеспечение на терми- Выбор аппаратного шего подключения их к терминально-
нальный сервер. обеспечения му серверу в качестве сетевых печа-
Мы решили остановиться на мо- терминального сервера тающих устройств.
дели от WYSE – S10 (http://wyse.ru/ Первоначально предполагалось под-
products/winterm/S10/index.php). Про- ключить от 30 до 100 пользователей. Почему Citrix?
стота исполнения, эргономичность, Поэтому решено было использовать На начальном этапе можно было ос-
минимум функций и невысокая це- один сервер в ферме с последующим тановиться на Microsoft Terminal Server.
на – эти показатели определили наш подключением новых серверов по ме- Закупленные тонкие клиенты WYSE
выбор. ре возрастания нагрузки. Конфигура- S10 умеют работать по RDP-протоко-
Честно признаться, мы немного ция сервера: лу, что может быть вполне достаточ-
колебались в сторону более продви- n с е р в е р н а я п л а т ф о р м а I n t e l но. Citrix Presentation Server был вы-
нутых моделей, таких как WYSE S50 SR2500ALLXR; бран за возможность масштабирова-
и V50. В этих моделях нас привлекала n материнская плата S5000PAL; ния (серверы объединены в единую
возможность использования протоко- n 2 процессора Xeon(R) CPU E5440 @ ферму, производительность которой
ла X Windows, а значит, возможность 2.83 ГГц 16 Гб RAM; можно увеличивать за счет подклю-
использования Linux в качестве опе-
рационной системы для терминаль-
ных решений. Но, имея ряд нерешен-
ных вопросов, в частности, совмести-
мости используемого ПО, мы реши-
ли отказаться от этой идеи и сосредо-
точиться на терминальных решениях
от Microsoft и Citrix.

Выбор операционной
системы терминального
сервера
Как уже говорилось, нам очень хоте-
лось остановить свой выбор на серве-
ре под управлением бесплатного дист-
рибутива Linux и системой X Windows.
Главным преимуществом данного ре-
шения было отсутствие необходи-
мости покупать операционную сис-
тему. Однако данный выбор, во‑пер-
вых, потребовал бы приобретения бо-
лее сложных дорогих тонких клиен-
тов, во-вторых, могли возникнуть про-
блемы с совместимостью Linux с ря- Рисунок 2. Окно активации Terminal Server Licensing Server Activation Wizard

№9, сентябрь 2008 


администрирование
Справедливости ради стоит отметить,
что Citrix Presentation Server предпола-
гает установку и в качестве одиночно-
го сервера, не входящего в домен, но
такие случаи на практике применяются
в последнее время все реже и реже.
Важное замечание. Крайне не-
желательно использовать терминаль-
ный сервер в качестве контроллера
домена. И хотя порой соблазн очень
велик (особенно в плане экономии
на лицензиях программного обеспече-
ния), совмещать терминальный сервер
и контроллер домена на одном серве-
ре – это очень плохая идея. Мало то-
го, что снижается производительность,
еще и все терминальные пользовате-
ли получают прямой доступ на конт-
роллер домена, что противоречит лю-
бым здравым требованиям информа-
ционной безопасности и обеспечения
Рисунок 3. Консоль Citrix License Management отказоустойчивости.

чения новых серверов). Также выгля- му и установить все необходимые об- Установка терминального сервера
дели весьма привлекательно техноло- новления. Citrix Presentation Server требует уста-
гии публикации программного обеспе- новленного Microsoft Terminal Server
чения посредством технологии Data Переназначение (Remapping) с требуемым количеством лицензий.
Streaming. дисков Важное замечание. Перед уста-
Для того чтобы пользователь при от- новкой Terminal Server необходимо
Подготовка к установке крытии терминальной сессии смог под- выключить удаленный доступ к рабо-
аппаратного обеспечения ключить свои локальные дисковые то- чему столу. Для этого правой кнопкой
Citrix ма, используя не привычные буквы C, мыши необходимо щелкнуть по знач-
n установка операционной системы; D, E и т. д. логическим томам сервера ку «Мой Компьютер» (My Computer),
n переназначение дисков; присваиваются другие буквы. По умол- далее из появившегося меню выбрать
n ввод сервера в домен Active Directory чанию в этом случае используются бук- «Свойства» (Properties), далее перейти
в качестве члена домена; вы, начиная с M (см. рис. 1). на вкладку «Удаленное использова-
n установка терминального сервера; Чтобы запустить данную процеду- ние» (Remote) и снять отметку на оп-
n лицензирование Microsoft Terminal ру, необходимо с установочного диска ции «Включить удаленный доступ к ра-
Server; Citrix Presentation Server запустить про- бочему столу» (Allow users remotely
n выбор хранилища для Data Store; грамму инсталляции. Выбрать пункт to this computer).
n установка среды Microsoft .NET меню Product installations and Updates, Устанавливать Terminal Server луч-
Framework 2.0; в новом окне выбрать Remap Drive. ше всего из окна «Управление Сер-
n у с т а н о в к а M i c r o s o f t I n t e r n e t Не рекомендуется вмешиваться в этот вером» (Manage Your Server). Вызвать
Information Services; процесс без особой на то нужды. его можно из меню «Панель управле-
n установка Microsoft SQL Server 2005 Важное замечание. До перена- ния (Control Panel) → Администриро-
Express Edition. значения дисков сервера не следует вание (Administrative Tools) → Управ-
устанавливать никакое программное ление данным сервером (Manage Your
Установка операционной системы обеспечение. После переназначения Server)». После установки сервер авто-
Никаких особенных нюансов на данном дисков некоторые программы могут матически перезагрузится. По завер-
этапе не существует. не работать из-за изменившихся пу- шении перезагрузки можно проверить
Для повышения производительнос- тей доступа к файлам. с рабочей станции удаленный доступ
ти в отдельных случаях имеет смысл к рабочему столу.
перенести файл подкачки на отдель- Ввод сервера в домен
ный физический том. В нашем случае Active Directory в качестве Лицензирование Microsoft
используется дисковый массив RAID10, члена домена Terminal Server
который обладает достаточной про- Так как у нас сеть построена на осно- Этот вопрос заслуживает отдельного
изводительностью, и переноса файла ве домена Active Directory, следова- рассмотрения. В первую очередь не-
подкачки не требуется. Не забудьте за- тельно, крайне желательно, чтобы все обходимо установить сервер лицензий
регистрировать операционную систе- компьютеры являлись членами домена. (Terminal Server Licensing). Сделать это

10
администрирование
можно из меню «Панель Управления (Control Panel) → Уста- не должно возникнуть особых трудностей, так как данный
новка и удаление программ (Add and Remove Programs) → пакет уже включен в дистрибутив Microsoft Windows Server
Добавить /удалить компоненты Windows (Add/Remove 2003. Аналогично другим устанавливаемым продуктам за-
Windows Components) → Лицензирование сервера терми- ходим в «Панель Управления» (Control Panel) и посредством
налов (Terminal Server Licensing). апплета «Установка и удаление программ» (Add and Remove
Далее необходимо запустить MMC-консоль Terminal Programs) устанавливаем необходимые службы.
Server Licensing и, выбрав нужный сервер лицензий (в на-
шем случае он будет один), кликнуть правой кнопкой мы- Установка Microsoft SQL Server 2005 Express Edition
ши. В появившемся меню выбрать «Активировать Сер- Важное замечание. Microsoft SQL Server 2005 Express
вер» (Activate Server). После чего в появившемся окне при- Edition поставляется в двух редакциях Microsoft SQL Server
ветствия Terminal Server Licensing Server Activation Wizard 2005 Express Edition и Microsoft SQL Server 2005 Express
нажать кнопку Next (далее). В следующем окне предлага- Edition with Advanced Services. В первом случае вы полу-
ется выбрать способ активации. Я выбирал по телефону чите только непосредственно систему управления база-
(Telephone). В следующем окне появилась информация о ми данных без каких-либо дополнительных пользователь-
необходимых телефонах, а также о Product ID, необходи- ских функций. Во втором случае помимо непосредственно
мом для активации (см. рис. 2). После звонка по указан- «движка» (Engine) Microsoft SQL Server 2005 Express Edition
ному телефону меня соединили с милой девушкой, кото- вы получаете дополнительные возможности для построения
рая приняла от меня мой Product ID и продиктовала в от- отчетов, полнотекстового поиска, ну и конечно, консоль уп-
вет License Server ID, который я внес в пустые ячейки. Да- равления SQL Server 2005 Management Studio Express. Не-
лее аналогичным образом активируются лицензии на под- смотря на значительную разницу в объеме скачиваемого
ключение к терминальному серверу. Способ активации по файла (53 Мб против 234 Мб), мы остановили свой выбор
телефону тем и хорош, что если что-то не знаете, вам обя- на втором варианте, чтобы впоследствии иметь дополни-
зательно помогут. тельный инструментарий для просмотра, резервного копи-
рования и других манипуляций с базами данных. Хотя для
Выбор хранилища для Data Store экономии трафика, места на диске, системных ресурсов
Citrix Presentation Server нуждается в средствах СУБД для и т. д. можно использовать и первый вариант. Перед уста-
хранения служебной информации. Для этих целей могут новкой необходимо уяснить некоторые детали.
быть использованы: Как известно, MS SQL начиная с MS SQL 2000 может
n база данных MS Access; быть установлен как экземпляр по умолчанию (Default)
n Microsoft SQL Server 2005 Express Edition;
n Microsoft SQL Server, Oracle database, and IBM DB2.

Третий пункт отпал сразу, так как тратить деньги на по-


купку еще одной лицензии мощной СУБД, такой как MS SQL
Server или Oracle, не представлялось рентабельным.
Первый пункт отпал по той же причине (необходимость
лицензии). К тому же связываться с «плоскими» (не SQL)
базами данных типа Access не хотелось из-за малой про-
изводительности, трудностей с резервным копировани-
ем и т. д.
Остался вариант с Microsoft SQL Server 2005 Express
Edition, что и определило дальнейший ход работы.

Установка Microsoft .NET Framework 2.0


Для нормальной работы Microsoft SQL Server 2005, вклю-
чая версию Express Edition, вам понадобится установить
Microsoft .NET Framework 2.0. Для счастливых обладате-
лей дистрибутива Microsoft Windows Server 2003 версии
R2 есть хорошая новость – данный продукт уже включен в
дистрибутив. Обладателям более ранних версий Microsoft
Windows Server 2003 придется скачать установочный пакет
Microsoft .NET Framework 2.0 с сайта Microsoft (что в боль-
шинстве случаев не является проблемой – размер пакета
составляет 22,4 Мб).

Установка Microsoft Internet Information Services


Для работы Microsoft SQL Server 2005 Express Edition и Citrix
Presentation Server необходимо, чтобы на сервере был уста-
новлен Microsoft IIS. С установкой данного продукта также

№9, сентябрь 2008 11


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

Рисунок 4. Окно выбора редакции Citrix Presentation Server 4.5 Рисунок 5. Выбор настроек новой фермы серверов

или именованный экземпляр. Разни- ний экземпляр приложения, доволь- в нашем случае CITRIX_METAFRAME.
ца заключается в том, что к экземп- но требовательного к ресурсам, абсо- Запускаем:
ляру по умолчанию можно обращать- лютно не хочется. Должен быть дру-
ся по имени сервера, на котором он гой выход. setup INSTANCENAME=CITRIX_METAFRAME
установлен, а для обращения к ба- И этот выход был найден. Дистри-
зе данных именованного экземпляра бутив загружается с сайта Microsoft Далее установка ничем не отли-
нужно указать не только имя сервера, в сжатом виде. При обычной инс- чается от установки MS SQL Server
но и имя экземпляра. Обычно имено- талляции в качестве экземпляра 2005.
ванные экземпляры устанавливают- по умолчанию достаточно запустить
ся как второй, третий и т. д. на сервер, загруженный файл SQLEXPR.EXE Установка Citrix
где уже установлен основной экземп- или SQLEXPR_ADV.EXE. Для исполь- Presentation Server
ляр по умолчанию, хотя бывают и ис- зования параметров, отличных от инс- Лучше всего устанавливать Citrix
ключения. талляции по умолчанию, нам необходи- Presentation Server при помощи стан-
Для этого в коммерческих вер- мо запустить самораспаковывающий- дартной консоли установки. Обыч-
сиях MS SQL 2005 при инсталля- ся архив с ключом -x: но она стартует в режиме автозапус-
ции программа-установщик пред- ка (Autorun) при помещении устано-
лагает выбрать имя экземпляра. SQLEXPR.EXE –x вочного диска в CD-ROM. При запус-
Но в Microsoft SQL Server 2005 Express ке появится окно с меню из следую-
Edition при обычном способе установки или щих пунктов:
такой выбор не предоставляется. n View installation checklist;
В то же время для нормальной SQLEXPR_ADV.EXE -х n Product installations and Updates;
установки Citrix Presentation Server n Citrix on the Web;
с MSDE 2005 в качестве хранилища в зависимости от используемой вер- n Install Document Center.
Data Store необходимо, чтобы Microsoft сии. Появится маленькое окошко
SQL Server 2005 Express Edition был с предложением ввести имя каталога Перед началом установки насто-
установлен в качестве именован- для распаковки. Лучше указать допол- ятельно рекомендуется еще один раз
ного экземпляра с именем CITRIX_ нительную поддиректорию, иначе про- просмотреть checklist и выполнить под-
METAFRAME. Как разрешить данное грамма распаковки вывалит содержи- готовительные пункты, которые бы-
противоречие? мое архива в тот же каталог, где лежит ли пропущены. Если все готово и вы
Можно решить проблему, что назы- скачанный архив. в этом уверены, приступаем к пункту
вается, «в лоб» и установить сначала Перейдя в каталог распаковки, Product installations and Updates.
один экземпляр по умолчанию MSDE находим файл template.ini, из которо- Перед нами откроется новое ме-
2005, а следом за ним начать уста- го становится ясно, что для установ- ню. Необходимо выполнить все пунк-
новку второго экземпляра. В этом слу- ки Microsoft SQL Server 2005 Express ты по порядку.
чае программа-установщик предложит Edition в качестве именованного эк-
выбрать другое имя устанавливаемо- земпляра нужно запустить установ- Установка сервера лицензий
го экземпляра, чем можно воспользо- ку с ключом: Так как переназначение дисков (Remap
ваться и задать требуемое имя CITRIX_ drivers) мы выполнили сразу после
METAFRAME. Но устанавливать лиш- INSTANCENAME=_ИМЯ_ЭКЗЕМПЛЯРА_ установки операционной системы,

12
администрирование
то сразу переходим ко второму пунк-
ту – установка.
Следующий шаг – необходимо ус-
тановить сервер лицензий. Выбира-
ем Product installation and updates в ок-
не установки Citrix, в следующем окне
Install Citrix Licensing. Во время уста-
новки сервера лицензий ничего осо-
бенного не происходит. В одном окне
вам предложат ознакомиться с лицен-
зионным соглашением, потом выбрать
компоненты инсталляции: License
Server и/или License Management
Console, далее предложат указать
путь для установки, потом выбрать
тип установленного веб-сервера: IIS
или Apache и в конце концов предло-
жат на перезагрузку IIS – установить
переключатель OK to restart Microsoft
IIS Server. После этого в меню «Пуск →
Программы» («Start → Programs») по- Рисунок 6. Разрешить вход на сервер рядовым пользователям
явится подменю «Citrix → Management
Console» (см. рис. 3). выбрать устанавливаемую редак- ности не стоит, я оставил данный пункт
Из данной консоли вы можете ска- цию продук та: Enterprise Edition. без изменений.
чать с сайта Citrix.com и установить до- Advanced Edition или Standard Edition В следующем окне предлагаю ввес-
полнительные файлы лицензий. (см. рис. 4). ти доменное имя (имя хоста), где запу-
Данные редакции в первую очередь щен License Server (Enter the host name
Установка Citrix Presentation отличаются возможностями и соот- of the machine hosting your Citrix License
Server ветственно стоимостью. За подробной Server) или сделать это позднее (Enter
После установки License Server присту- информацией лучше всего обратиться the correct host name later). Поскольку
паем к установке непосредственно са- на официальный сайт Citrix. Мы при по- и License Server и Presentation Server
мого Presentation Server 4.5. купке выбрали редакцию Enterprise у нас установлены на одном сервере,
В окне установки выбираем Product Edition, поэтому оставили отмеченный я указал имя данного хоста.
installation and updates Citrix, в следу- первый пункт без изменений. Далее появится окно вво-
ющем окне Install Citrix Presentation Последующие пункты инсталляции да Configure shadowing. Под тене-
Server 4.5 and its components. И снова лучше оставить по умолчанию вплоть вым управлением (shadowing) в Citrix
знакомимся с лицензионным соглаше- до Create or Join Server Farm. Так как Presentation Server понимается воз-
нием, выбираем компоненты для инс- мы создаем новую ферму, выбираем можность управления сеансами поль-
талляции (лучше оставить список без пункт Create a new farm. зователя. В данном окне вы можете
изменений). В окне задания параметров для но- запретить (Prohibit shadowing of user
Далее нам предложат установить вой фермы вам предложат выбрать session on this server) или разрешить
сервер лицензий, но поскольку его мы имя создаваемой фермы и самое глав- использование (Allow shadowing of user
уже устанавливали, оставляем пере- ное – выбрать тип хранилища (Data session on this server).
ключатель на I already have a license store) для записи служебной инфор- В случае разрешения вы може-
server, or will use the product CD to install мации. Выбираем пункт Use a local те также:
one later. database on this server, и в качестве n Запретить управление (Prohibit
После этого нам продемонстриру- базы данных выбираем SQL Server Remote Control), оставив только
ют полный список устанавливаемых Desktop (SQL Express) Database. Пункт возможность наблюдения за дейс-
компонентов. На данном этапе, сняв Use default zone name я оставил без из- твиями пользователя.
отметки, можно отказаться от установ- менений (см. рис. 5). n Требовать подтверждения (Force
ки тех или иных компонентов, но луч- Появится окно выбора Windows a shadow acceptance popup). Эта оп-
ше этого не делать. пользователя для администрирова- ция запрещает теневые сеансы
Далее попадаем непосредствен- ния фермы серверов. По умолчанию без подтверждения пользовате-
но в окно Citrix Web Installation Setup. предлагается учетная запись пользо- лей.
Единственный важный пункт здесь – вателя, из-под которой производится n Регистрировать все теневые соеди-
выбор или отказ от установки. установка. нения (Log all shadow connections).
Следующий этап – непосредс- В следующем окне предлагается События установления теневых
твенная установка Citrix Presentation разрешить IMA-шифрование. Посколь- сеансов будут регистрироваться
Server 4.5. Здесь вам пред ложат ку повышенных требований к секрет- в журнале.

№9, сентябрь 2008 13


администрирование
Окно выбора настроек Configure пользуя значок RDP Connection или ISA Для настройки статического IP
Citrix XML Service port. Имеет смысл ос- Connection и зная адрес терминально- нужно кликнуть правой кнопкой мы-
тавить настройки по умолчанию. го сервера, можно сразу установить ши по пустому экрану и появившимся
В последнем окне выбора предла- соединение. Мы использовали допол- меню выбрать пункт «System Setup →
гают добавить пользователей в груп- нительные настройки, чтобы извлечь Network». В появившемся окне можно
пу Remote Desktop Users. Это можно максимальную выгоду от внедрения настроить параметры IP-адресации,
сделать и позднее (Skip this step and терминальных решений. а также DNS и WINS-серверы.
add users later). Итак, начнем.
Установка management Console Настройка автоматического входа
и Document Center ничем выдающим- Изменение порядка загрузки в терминальную сессию
ся не отличается, поэтому нет смыс- дисковых устройств Чтобы избавить пользователей от не-
ла описывать данный процесс в этой Только что купленный тонкий клиент обходимости лишний раз кликать
статье. начинает работу с поиска возможнос- по непонятным значкам, а так же
После установки всех компонентов ти удаленной загрузки. Это сделано по возможности избавить их от соб-
программа-установщик предложит пе- для придания универсальности при ра- лазна изменять настройки тонкого кли-
резагрузить сервер. боте «из коробки». То есть подключили ента, был настроен автоматический
тонкий клиент, и он работает в любом вход в терминальную сессию. Теперь
Послеустановочная настройка случае – с использованием удаленной при включении тонкий клиент автома-
После установки Citrix Presentation загрузки операционной системы или тически подключается к серверу по ICA
Server 4.5 администраторы серве- собственной WYSE Linux. Но поскольку протоколу, и пользователь попадает
ра автоматически получают возмож- удаленная загрузка у нас не использо- в привычное окно ввода пароля.
ность открывать терминальную сес- валась, решено было эту функцию от- Для настройки автоматического
сию. Другие пользователи, кроме ад- ключить. На сайте компании WYSE на- входа на терминальный сервер по про-
министраторов, могут только запус- шли следующую информацию: токолу ICA необходимо правой кнопкой
кать опубликованные приложения n Подключить клавиатуру. мыши щелкнуть по значку Default ICA.
и не получат доступ к «Рабочему сто- n По клавише <Del> войти в BIOS. Па- В появившемся окне во вкладке
лу» Windows. Так как мы собирались роль на вход: Fireport. Connection в поле Host Names вводим
использовать тонкие клиенты, необ- n Сменить порядок загрузки (Boot IP-адрес или имя хоста, в полях Login
ходимо предоставить такую возмож- Order Configuration). Username, Password, Domain Name вво-
ность. Для этого необходимо открыть n Сохранить настройки. дим соответственно имя пользователя,
MMC-консоль «Настройка служб тер- пароль (если необходимо, чтобы поль-
миналов», правой кнопкой кликнуть К сожалению, при помощи име- зователь входил на сервер без ввода
на объекте ICA-tcp, из появившего- ющихся у нас USB-клавиатур Genius пароля, это очень небезопасно) и имя
ся меню выбрать «Свойства». В поя- K639 и Defender E KS-910B проделать домена. Во вкладке Options необхо-
вившемся окне перейти на вкладку данный трюк не удалось. Такое впечат- димо отметить опцию Auto-connect on
ICA Settings и снять галочку с пункта ление, что тонкий клиент загружается start up. Также имеет смысл установить
Non-administrators only launch published настолько быстро, что не успевает от- переключатель с Window mode на Full
applications (см. рис. 6). работать прерывание от перечислен- screen mode.
Также необходимо добавить нуж- ных выше клавиатур. Пришлось раз- Для повышения уровня безопас-
ных пользователей в группу безопас- добыть «родную» клавиатуру WYSE ности и быстродействия системы име-
ности «Удаленные пользователи рабо- KU-8933 (сами тонкие клиенты постав- ет также смысл отключить удален-
чего стола» (Remote Descktop users). ляются без клавиатуры) и с ней обой- ное подключение всех локальных уст-
Также в целях безопасности на- ти все терминалы. Следует также за- ройств (Autoconnect to local devices), та-
стоятельно рекомендуется выклю- метить, что клавишу <DEL> нужно на- ких как локальные диски (Disk), прин-
чить Citrix ICA Toolbar и убрать с «Ра- жимать одновременно с включени- теры (Printer), USB и т. д.
бочего стола» Windows, а также из ме- ем тонкого клиента, в противном слу-
ню «Пуск» рядовых пользователей не- чае не успеете войти в BIOS до нача- Заключение
нужные для повседневной работы ме- ла загрузки. В отличие от парка персональных
ню, ярлыки и т. д. компьютеров терминальное решение
Настройка статического IP‑адреса на базе сервера терминалов и тон-
Настройка тонких Вероятность того, что терминальные ких клиентов является прогрессив-
клиентов пользователи станут переносить свои ным шагом в сторону именно корпо-
По правде говоря, выбранные нами терминалы, как ноутбуки, крайне ма- ративной инфраструктуры, позволя-
тонкие клиенты WYSE S10 не нуж- ловероятна. Исходя из этого, для ус- ющей снизить расходы, повысить про-
даются в особой настройке. Их мож- корения загрузки всем терминаль- изводительность и безопасность сис-
но доставать из коробки и устанавли- ным клиентам были присвоены ста- темы. В то же время простота реали-
вать на рабочие места. При работаю- тические адреса. В итоге скорость за- зации и гибкость настройки позволя-
щем DHCP-сервере они автоматичес- грузки возросла от 2 до 5 секунд. Ме- ет внедрить данное решение без осо-
ки получат IP-адреса. После этого, ис- лочь, а приятно. бых проблем.

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

Новшества в Windows Server 2008:


стек TCP/IP

Андрей Бирюков
В новой версии ОС Windows Server 2008 стек TCP/IP был полностью переработан. Рассмотрим,
какие новшества появились в нем.

W
indows Server 2008 содержит мере. Когда на какой-либо узел прихо- ся. В текущих реализациях TCP/IP на
множество различных ново- дит обычный unicast-пакет, сетевой ин- Windows Server 2003 и Windows XP ис-
введений. Такие давно ис- терфейс принимает его, если IP-адрес пользуется слабая модель. Более под-
пользуемые и хорошо всем знакомые назначения совпадает с одним из ад- робно с моделями узлов можно озна-
вещи, как реализация стека TCP/IP ресов, который присвоен сетевым ин- комиться в статье [1].
в новой операционной системе, так- терфейсам на данной машине. Такая Next Generation TCP/IP стек снижа-
же претерпела весьма существенные обработка пакетов называется сла- ет нагрузку на драйвер Network Driver
изменения. бой моделью хоста (Weak Host Model). Interface Specification (NDIS) и сетевые
В случае усиленной модели будет об- адаптеры при обработке TCP и дру-
Основные изменения работан пакет только с IP-адресом, со- гих видов трафика. Данный функцио-
и структура ответствующим адресу интерфейса, нал весьма полезен при работе в се-
Приведу список основных измене- на который он пришел. Использование тях с высокой пропускной способнос-
ний в новом сетевом стеке. Прежде слабой модели может сделать не толь- тью. Также в новой версии стека появи-
всего это одновременная поддержка ко конкретный узел, но и всю локаль- лась возможность обработки трафика
как IPv4, так и IPv6. Шестую версию IP ную сеть менее устойчивой к несанк- на многопроцессорных машинах с рас-
сейчас поддерживают практически все ционированным проникновениям, так пределением нагрузки. Для высоко-
выпускаемые операционные системы, как в случае, если на внешний интер- производительных сетевых приложе-
так что поддержка в Windows 2008 бы- фейс узла, выполняющего роль мар- ний, прежде всего различных видео-
ла вполне ожидаема. Новая техноло- шрутизатора, послать пакет с адре- трансляций, многопроцессорная об-
гия поддержки IPv4 и IPv6 называет- сом из внутренней, то при неаккурат- работка также будет полезной.
ся Dual-IP. ной конфигурации такой пакет вполне Еще одним важным нововведени-
Другим нововведением являет- может достичь точки назначения. С ис- ем в стеке Next Generation является
ся поддержка так называемой Strong пользованием усиленной модели даже возможность автоматической настрой-
Host Model (усиленной модели хоста). в случае неаккуратной настройки пра- ки определенных компонентов стека
Что это такое, лучше объяснить на при- вил маршрутизации такого не случит- (например, масштабируемость TCP

16
администрирование
receive window и других) без ручного
внесения изменений в конфигурацию.
Тут следует отметить, что в UNIX-сис-
темах подобные функции существуют
уже давно и существенно упрощают
жизнь системным администраторам.
Так что реализация данного функцио-
нала в Next Generation Stack является
несомненным шагом вперед.
Схематически новую архитектуру
можно изобразить с помощью рисун-
ка. Поясню работу стека последова-
тельно, снизу вверх. За отправку и по-
лучение пакетов на интерфейс отвеча-
ет драйвер NDIS. Затем данные пере-
даются драйверу tcpip.sys.
Архитектура драйвера новой вер-
сии стека TCP/IP, реализованного
в файле tcpip.sys, состоит из следую- Архитектура Next Generation TCP/IP
щих уровней:
n Транспортный уровень – содер- и фильтрации пакетов. Новый набор ным способом для встраивания в стек
жит реализации протоколов TCP компонентов для программирования и модификации данных на уровне па-
и UDP, а также механизм для от- получил название Windows Filtering кетов. Программный интерфейс яв-
сылки базовых IP-пакетов, которым Platform (WFP). WFP обеспечивает воз- ляется частью WFP, обеспечивающей
не требуется наличие TCP или UDP- можность фильтрации на всех уров- доступ к обработке пакетов на се-
заголовков. нях стека протоколов TCP/IP. Также тевом и транспортном уровнях. Но-
n Сетевой уровень – содержит ре- следует отметить, что WFP более тес- вый стек также поддерживает отсыл-
ализации протоколов IPv4 и IPv6 но интегрирован в реализацию TCP/IP ку и получение фреймов (frames), ис-
в виде уровня Dual IP layer (о данной для Windows Server 2008. Это позволя- пользуя NDIS.
технологии я уже писал выше). ет сторонним разработчикам быстрее Завершая детальное описание
n Фреймовый уровень – содержит и легче разрабатывать сетевые драй- нововведений, хочу привести крат-
модули для фрейминга пакетов веры, службы и приложения для рабо- кий список функций, еще не упомяну-
IPv4 и IPv6. Существуют модули для ты с TCP/IP трафиком. Более подробно тых, однако заявленных разработчи-
интерфейсов IEEE 802.3 (Ethernet), с Windows Filtering Platform можно оз- ком. Это улучшенная поддержка про-
IEEE 802.11 и Point‑to‑Point Protocol накомиться в статье [2]. изводительности и коррекция оши-
(PPP). Помимо этого существу- В продолжении темы API хотелось бок, поддержка аппаратных конфигу-
ют модули и для логических ин- бы упомянуть три основных програм- раций и автонастройки, богатые функ-
терфейсов, таких как Loopback мных интерфейса, используемых при- ции расширяемости на уровне ново-
Interface, а также интерфейсов тун- ложениями, сервисами и другими сис- го программного интерфейса, улуч-
нелирования на основе IPv4, кото- темными компонентами для досту- шенная поддержка рабочих станций
рые часто используются в техно- па к новому стеку TCP/IP – это WSK мобильных пользователей, часто пе-
логиях поддержки переключения (Winsock Kernel), используемый кли- реключающихся из одной сети в дру-
с IPv4 на IPv6. ентскими приложениями, Windows гую, взаимодействие с Windows CE,
Sockets, используемый приложениями Xbox и Windows Embedded, устойчи-
После такой обработки получен- и сервисами (программный интерфейс вость к известным DoS и другим сете-
ные данные передаются Winsock Kernel Windows Sockets использует драйвер вым атакам.
и другим обработчикам уровня ядра. AFD – Ancillary Function Driver для вы-
И, наконец, в верхней части архитек- полнения функций на уровне сокетов Новые решения
туры находятся приложения Windows через TCP/IP) и TDI (Transport Driver старых проблем
Socket, которые извлекают непосредс- Interface), используемый NetBIOS over Теперь сравним архитектуру Next
твенные данные и передают их прило- TCP/IP (NetBT) и другими устаревшими Generation TCP/IP Stack с предыдущи-
жениям. клиентами. Для трансляции запросов ми реализациями TCP/IP. Прежде все-
между TDI и новым стеком TCP/IP ис- го вспомним некоторые особеннос-
Новые API пользуется интерфейс TDX. По замыс- ти работы стека в предыдущей вер-
Также, рассказывая о новых функци- лу разработчиков WSK должен со вре- сии операционной системы и их недо-
ях сетевого стека, нельзя не упомя- менем заменить TDI. статки. В пакетах обновлений (service
нуть о новых возможностях для про- Новый стек TCP/IP поддержива- packs) для Windows Server 2003 бы-
граммистов. Прежде всего это появ- ет программный интерфейс Callout ли включены дополнительные воз-
ление новых API для безопасности API, который является унифицирован- можности: в TCP появилось уже упо-

№9, сентябрь 2008 17


администрирование
минавшееся сегодня масштабирова- зачастую резервный маршрутизатор изоляции трафика VPN-соединением
ние окон (window scaling), определе- обладает меньшей производительнос- сессий входа, таблиц маршрута и сете-
ние нерабочих шлюзов (dead gateway тью, а многие серверы не перезагру- вых интерфейсов в логическую конст-
detection) и другие тонкие настройки, жаются месяцами, отсутствие возмож- рукцию под названием подсистема вы-
которые были выполнены лучше и бо- ности возвращения на основной шлюз бора маршрута (routing compartment).
лее надежно, по сравнению со сте- несколько неприятно. Также данный Такое деление означает, что, например,
ком в Windows 2000. Справедливос- механизм в Windows Server 2003 мо- соединение от ноутбука к Интернету
ти ради следует также отметить, что жет определять аварии только на ло- и корпоративной сети с помощью VPN
реализация стека TCP/IP была прак- кальном шлюзе по умолчанию, ава- полностью изолированы одно от друго-
тически полностью скопирована с ОС рии на удаленных шлюзах опреде- го, что существенно увеличивает за-
FreeBSD. лить нельзя. щищенность корпоративной сети.
Однако в стеке не было поддержки Также в стеке TCP/IP в Windows Для решения проблемы отката
IPv6. Поддержка стека была реали- Server 2003 иногда происходит мед- в механизме определения нерабочих
зована простым добавлением второ- ленная обработка пакетов в каналах шлюзов (dead gateway detection) ис-
го драйвера транспортного уровня с высокой пропускной способностью. пользуется похожий набор методов, ко-
Tcpip6.sys для существующего драй- Это вызвано тем, что стек настраива- торые IPv6 использует для определе-
вера Tcpip.sys для IPv4. Результатом ет TCP с помощью медленного стар- ния недоступных соседей в сетях IPv4,
этого явился двойной стек, в котором та (slow start) и устранения перегрузок что в основном включает мониторинг
транспорт для IPv4 и IPv6 поддержи- (congestion avoidance) – два стандарт- сессий TCP и обмен пакетами ARP. Ког-
вался двумя различными драйвера- ных алгоритма TCP/IP, которые были да система обнаруживает такую ситу-
ми, и для включения IPv6 администра- спроектированы еще до того, как гига- ацию, стек переключается на следую-
торы должны были установить компо- байтные сети стали нормой. Например, щий шлюз по умолчанию из списка, но
нент протокола IPv6 на своих машинах при использовании DFS (Distributed стек продолжает мониторинг предыду-
с Windows XP и Windows Server 2003. File System) вы можете иметь сервер щего шлюза, и если тот возобновляет
Очевидно, что такой подход имеет не- вместо концентратора, который мо- работу, то система переключается об-
сколько недостатков. Например, функ- жет копировать большое количество ратно на этот основной шлюз. Это поз-
циональность разделенного фильтра данных, проходящих по высокоско- воляет обеспечить оптимальную связь
пакета для каждого протокола IP при- ростной WAN через множество мар- с удаленными офисами, гарантируя,
водит к тому, что сложно настраивать шрутизаторов. Результатом является что резервные шлюзы будут исполь-
брандмауэр на машинах, на которых то, что WAN-соединение перегружа- зоваться, только пока не работает ос-
работают оба протокола. Также это ется, и копирование занимает боль- новной шлюз.
усложняет жизнь разработчикам се- ше времени, чем должно, иногда на- В новом стеке проблема низкой
тевых приложений, которые необхо- много больше. производительности в сетях с вы-
димы для поддержки как IPv4, так и Завершая перечисление недостат- сокой пропускной способностью ре-
IPv6. А это означает дублирование ко- ков старого стека, хотелось бы упомя- шена с помощью нового алгоритма
да и менее эффективный канал для нуть о проблемах с безопасностью. Де- вместо алгоритмов, использовавших-
выполнения стека. ло в том, что одна таблица маршрутов ся на других платформах. Этот новый
Еще одним недостатком прежней (routing table) используется для разде- подход называется Compound TCP
реализации стека является меха- ления трафика для каждой из сетей, (CTCP), и он может значительно повы-
низм определения нерабочих шлю- к которым подключен сервер, в том сить производительность при исполь-
зов (dead gateway detection), который числе и VPN-соединения, что в свою зовании в различных сетях.
был введен как способ поддержа- очередь означает, что если у пользо- Надеюсь, что информация о нов-
ния работоспособности, когда основ- вателя есть права локального админи- шествах в стеке протокола TCP/IP бу-
ной шлюз (gateway) или маршрутиза- стратора на машине, то он имеет воз- дет вам полезна при работе с Windows
тор (router) вышел из строя. В боль- можность для изменения таблицы мар- Server 2008.
ших компаниях часто есть резервный шрутов таким образом, чтобы создать
маршрутизатор, который может рабо- угрозу безопасности локальной сети, 1. ht tp://technet.microsof t.com /en-us/
тать в случае выхода из строя основ- разрешив доступ из Интернета. magazine/cc137807.aspx – описание
ного маршрутизатора, а определение Теперь рассмотрим, каким образом Weak And Strong Host Models.
нерабочих шлюзов позволяет исполь- приведенные выше недостатки были 2. http://www.microsoft.com/whdc/device/
зовать такие резервные шлюзы. Про- устранены в новой версии стека. network/WFP.mspx – описание Windows
блема реализации данного механиз- Проблема взаимодействия IPv4 Filtering Platform.
ма в Windows Server 2003 заключалась и IPv6 решена с помощью уже упо- 3. ht tp: // tec hnet.mic rosof t.c om /ru - ru /
в том, что не было возможности отка- минавшейся выше технологии Dual library/bb878108(en-us).aspx – ста-
та, другими словами, когда основной IP layer, которая существенно упро- тья на TechNet, посвященная Next
шлюз восстанавливал свою работо- щает взаимодействие этих двух про- Generation TCP/IP.
способность, система продолжала от- токолов. 4. http://www.netdocs.ru/articles/TCP-IP-
правлять пакеты на резервный шлюз В Windows Server 2008 полностью Networking-Windows-Vista.html – сеть
до следующей перезагрузки. Так как решена проблема гарантированной TCP/IP в Windows Vista.

18
bugtraq

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


Программа: IBM DB2 8 версии до Fixpak 17. в Cisco ASA и PIX
Опасность: Средняя. Программа: Cisco PIX 7.x; Cisco PIX 8.x; Cisco Adaptive
Описание: 1. Уязвимость существует из-за неизвестной Security Appliance (ASA) 7.x, 8.x.
ошибки при обработке CONNECT и ATTACH-запросов. Уда- Опасность: Средняя.
ленный пользователь может вызвать отказ в обслужива- Описание: 1. Уязвимость существует из-за неизвестной
нии приложения. ошибки при обработке SIP-пакетов. Удаленный пользова-
2. Уязвимость существует из-за неизвестной ошибки, тель может перезагрузить устройство с включенной про-
относящейся к DB2FMP-процессам. Подробности уязви- веркой SIP. Уязвимости подвержены Cisco PIX и ASA вер-
мости не разглашаются. сии до 7.0(7)16, 7.1(2)71, 7.2(4)7, 8.0(3)20 и 8.1(1)8.
URL производителя: www-3.ibm.com/software/data/db2. 2. Уязвимость существует из-за неизвестной ошибки,
Решение: Установите исправление Fixpak 17 с сайта про- когда устройства Cisco PIX и Cisco ASA настроены на за-
изводителя. вершение клиентских VPN-подключений. Удаленный поль-
зователь может перезагрузить устройство. Для успешной
Отказ в обслуживании в NetBSD эксплуатации уязвимости злоумышленник должен иметь
Программа: NetBSD 4.0. действительные учетные данные. Уязвимости подверже-
Опасность: Средняя. ны Cisco PIX и Cisco ASA версии до 7.2(4)2, 8.0(3)14 и 8.1(1)4.
Описание: Уязвимость существует из-за ошибки деле- Версии 7.0 и 7.1 не уязвимы.
ния на ноль при обработке ICMPv6-сообщений. Удален- 3. Уязвимость существует из-за утечки памяти в Cisco
ный пользователь может с помощью специально сфор- ASA-устройствах, сконфигурированных на завершение
мированного ICMPv6 MLD-QUERY-пакета, в котором поле безклиентных VPN-соединений. Удаленный пользова-
Maximum-Response-Delay установлено в значение, меньше тель может с помощью специально сформированного SSL
чем 0x0010, вызвать отказ в обслуживании системы. или HTTP-пакета вызвать перезагрузку устройства. Уяз-
URL производителя: www.netbsd.org. вимости подвержены Cisco ASA версии до 7.2(4)2, 8.0(3)14
Решение: Установите исправление из CVS-репозитория и 8.1(1)4. Версии 7.0 и 7.1 не уязвимы.
производителя. 4. Уязвимость существует из-за ошибки при обработке
URI в Cisco ASA-устройствах, которые завершают безкли-
Отказ в обслуживании в FreeBSD ентные удаленные VPN-соединения. Удаленный пользова-
Программа: FreeBSD 6.x, 7.0. тель может вызвать перезагрузку устройства. Уязвимости
Опасность: Средняя. подвержены Cisco ASA версии до 8.0(3)15, and 8.1(1)5. Вер-
Описание: Уязвимость существует из-за ошибки в функ- сии 7.0, 7.1 и 7.2 не уязвимы.
ции icmp6_mtudisc_update() в файле src/sys/netinet6/icmp6.c 5. Уязвимость существует из-за неизвестной ошибки
при обработке ICMPv6-сообщений «Packet Too Big». Удален- в Cisco ASA-устройствах, сконфигурированных на завер-
ный пользователь может с помощью специально сформиро- шение безклиентных VPN-соединений. Злоумышленник мо-
ванного ICMPv6-сообщения вызвать панику IPv6-стека. жет обманом заставить пользователя посетить специально
URL производителя: www.freebsd.org. сформированный веб-сайт или ответить на e‑mail и полу-
Решение: Установите исправление с сайта производителя. чить доступ к именам пользователей и паролям. Уязвимос-
ти подвержены Cisco ASA-устройства версии до 8.0 или 8.1
Уязвимости при обработке CHM-файлов с включенной поддержкой безклиентных VPN. Версии 7.0,
в ClamAV 7.1 и 7.2 не уязвимы.
Программа: ClamAV версии до 0.94. URL производителя: www.cisco.com
Опасность: Средняя. Решение: Установите исправление с сайта производителя.
Описание: 1. Уязвимость существует из-за ошибки в файле
libclamav/chmunpack.c при обработке CHM. Удаленный поль- Множественные уязвимости
зователь может с помощью специально сформированного в VMware ESX Server
CHM-файла заставить приложение обратиться к некоррект- Программа: VMware ESX Server 2.x.
ному адресу в памяти и аварийно завершить свою работу. Опасность: Средняя.
2. Уязвимость существует из-за ошибки разыменования Описание: 1. Уязвимость существует из-за ошибки в биб-
нулевого указателя в libclamav. Удаленный пользователь мо- лиотеке libpng. Удаленный пользователь может вызвать от-
жет вызвать отказ в обслуживании приложения. каз в обслуживании.
3. Уязвимости существуют из-за у течки памяти 2. Уязвимость существует из-за использования уязви-
в freshclam/manager.c. Удаленный пользователь может пот- мого кода библиотеки freetype. Удаленный пользователь
ребить все доступные ресурсы на системе. может скомпрометировать целевую систему.
4. Уязвимость существует из-за неизвестных ошибок, от- URL производителя: www.vmware.com/products/server/
носящихся к error path, в libclamav/others.c и libclamav/sis.c. esx_features.html.
URL производителя: www.clamav.net. Решение: В настоящее время способов устранения уязви-
Решение: Установите последнюю версию 0.94 с сайта про- мости не существует.
изводителя. Составил Александр Антипов

№9, сентябрь 2008 19


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

Используем check_relay
в Sendmail для борьбы со спамом

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

Борьба со спамом вечна, как и сам спам. Способов защиты придумано множество, но ничего
по-настоящему эффективного до сих пор не реализовано. Поэтому иногда приходится
прибегать к «полумерам» типа фильтрации по именам хостов, «типичным» для спамеров.
Такие почтовые серверы, как Postfix и Exim, предлагают сравнительно прозрачные способы
фильтрации соединений. Владельцы же Sendmail вынуждены попотеть, чтобы раскрыть весь
потенциал этого MTA.

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

З
ащита от спама на сервере про-
вайдера по сравнению с «корпо- Про «фальшивые» имена
ративным» почтовым сервером О блокировании соединений, разрешение имени для которых возвращает FORGED, сле-
имеет свои особенности. дует сказать особо. Злоумышленники иногда используют следующий приём. Соедине-
Во-первых, здесь нет жёстких пра- ние устанавливается с некоторого IP-адреса, обратную зону для которого контролирует
вил документооборота, позволяющих спамер (например, ему делегирована данная сеть адресов). Указать в PTR-записи мож-
быть уверенным, что никто не ждёт но всё что угодно, хоть barackobama.com. И поэтому имеет смысл дополнительно запро-
писем в одной из японских кодировок сить IP-адрес хоста barackobama.com (на этот запрос уже должен ответить DNS-сервер,
или идущих с израильских доменов. обслуживающий данный домен) и сравнить полученный IP-адрес с исходным. Правда,
Во-вторых, среднестатистический как показывает практика, в наше время под правило FORGED чаще попадают хосты, для
абонент обычно не настолько владеет которых по возвращённому в PTR-записи имени вообще невозможно определить IP‑ад-
компьютером, чтобы эффективно осу- рес (т.е. отсутствует соответствующая A‑запись в прямой зоне):
ществлять «обучение» различных сис- Однако иногда
$ grep "dns rule 2" /var/log/maillog | tail -1
тем контентной фильтрации, а сисад- можно встретить за-
мину заниматься анализом карантина мечания, что подоб- Sep 8 15:29:11 myhost sm-mta[32267]: m88BTATA032267:
ruleset=check_rcpt, arg1=<energo@mydom.ru>,
негоже (в том числе и по этическим со- ная блокировка мо- relay=18971199139.user.veloxzone.com.br [189.71.199.139]
ображениям). Всё это делает системы жет привести к про- (may be forged), reject=550 5.7.1 <energo@mydom.ru>... Relaying
denied (dns rule 2). IP name possibly forged [189.71.199.139]
типа Spamassassin или DSPAM не очень бл е м а м в с л у ч ае
эффективными либо требующими по- «парковки» на один $ nslookup 18971199139.user.veloxzone.com.br
вышенного внимания со стороны ад- IP-адрес нескольких Server: 10.161.193.5
министратора. доменов. Но посколь- Address: 10.161.193.5#53
К тому же контентная фильтрация ку сервер сначала ** server can't find 18971199139.user.veloxzone.com.br: NXDOMAIN
совсем не способствует экономии тра- запрашивает PTR-
фика. Более того, если значительная запись, а затем по полученному имени хоста – IP-адрес, то проблем быть не должно – в ито-
часть писем будет «рубиться» на сер- ге при любом «раскладе» мы выйдем на единственный, исходный IP-адрес. Несоответс-
вере после загрузки и не попадёт к ко- твие же теоретически может возникнуть лишь в случае, когда возвращённое имя хоста
нечным пользователям, то этот трафик указывает на несколько IP-адресов. На практике такое встречается крайне редко, когда
приходится рассматривать как пря- используется балансировка нагрузки (показаны только интересующие нас строки):
мые убытки компании (то есть компа- Но и в этом слу-
$ dig -x 77.88.21.3
ния «покупает» спам, но клиенту уже чае Sendmail, похо-
не «перепродаёт»). же, правильно отра- 3.21.88.77.in-addr.arpa. 13943 IN PTR www.yandex.ru.

Из методов же, позволяющих тра- батывает ситуацию, $ dig www.yandex.ru


фик экономить, более-менее безопас- проверяя, чтобы ис-
www.yandex.ru. 5865 IN A 93.158.134.3
но можно использовать разве что грей- ходный IP-адрес со- www.yandex.ru. 5865 IN A 77.88.21.3
листинг. Хотя в моей практике встреча- ответствовал хотя
лись клиенты, головные офисы кото- бы одному из адресов (если их несколько), возвращённых функцией sm_gethostbyname
рых оказывались не в состоянии обес- (см. src/daemon.c). Так что есть все основания надеяться, что правило FORGED будет
печить должную работу почтового сер- срабатывать только в случае действительных проблем с настройками DNS-сервера от-
вера (а виноват, как обычно, провай- правителя. Впрочем, если у вас остались сомнения, правило FORGED можно совсем
дер, поскольку «в другие районы всё удалить.
отправляется»).
Эффек тивность грейлистинга К тому же используемый мною ваний. От «чёрных списков» на осно-
сравнительно высока (на моём сер- milter-greylist (в связке с Sendmail) ве DNSBL я почти отказался – слиш-
вере он отсекал до 95% «мусора»), под нагрузкой иногда переставал вов- ком уж часто какой-то из «клиентских»
тем не менее есть и некоторые недо- ремя отвечать на запросы, что приво- серверов куда-нибудь попадает, и при-
статки: дило к тому, что соединения ещё доль- ходится разбираться с тамошними ад-
n его не так уж сложно обойти; ше оставались открытыми, увеличивая минами и клиентами. Поэтому я решил-
n каждое соединение отнимает оп- число одновременно работающих эк- таки залезть в дебри sendmail.cf и вос-
ределённое время, поскольку ре- земпляров sendmail до максимально пользоваться способностью Sendmail
шение принимается лишь после возможного, нарушая тем самым об- выполнять фильтрацию сообщений
этапа «RCPT TO» SMTP-диалога служивание клиентов. на основе регулярных выражений.
(а то и после команды «DATA», ес- Когда ресурсы сервера оказались Sendmail позволяет «вмешаться»
ли включены опции, призванные практически исчерпаны, было приня- в процесс приёма сообщения на раз-
обеспечить взаимодействие с сер- то решение о дополнительной филь- личных этапах (см. рисунок). Посколь-
верами, использующими конкури- трации на первой линии обороны, при- ку наша задача – отсечь вероятный
рующий алгоритм защиты от спа- званной снизить нагрузку на milter- спам как можно раньше, то интерес
ма – callback); greylist и используемый для проверки для нас представляет в первую оче-
n затрачиваются определённые ре- на вирусы ClamAV, пусть даже и ценой редь набор правил check_relay, получа-
сурсы на ведение базы триплетов. «разумного риска» ложных срабаты- ющий в качестве параметра выраже-

№9, сентябрь 2008 21


администрирование
Basic_check_relay. Синтаксис рассмот-
Синтаксис правил sendmail.cf вия и возвращает результат. Типы возвра- рим ниже, после того как определимся
Весь синтаксис этого файла мы рассмат- та могут быть следующими (указывается с общими правилами фильтрации.
ривать не будем (при желании вы всегда в начале «правой части»):
найдёте нужную информацию в Интерне-  $: – перейти на следующее правило; Определяем правила
те). Ограничимся лишь правилами прове-  $@ – выйти из данного набора правил фильтрации
рок. Каждое правило начинается с сим- (вернуться к точке вызова набора); В большинстве случаев источником
вола R (он обязательно должен быть пер-  $# – прекратить дальнейшую провер- спама являются «пользовательские»
вым в строке, без ведущих пробелов). Да- ку правил. подключения к сети Интернет, за-
лее следует «левая часть» (шаблон, напо- частую с динамическими IP-адреса-
минающий регулярное выражение) и че- Возврат $# OK или $@ OK (в зави- ми. Это могут быть как машины са-
рез символ табуляции (не пробелы!) – «пра- симости от того, требуется ли проверка мих спамеров, так и (что происходит
вая часть», то есть преобразование, ука- по другим наборам правил) означает «при- гораздо чаще) заражённые какой-ни-
зывающее, что нужно сделать со входны- нять данное сообщение». Если возвраща- будь гадостью компьютеры ничего не
ми данными, соответствующими шаблону. ется $#error, то соединение разрывается подозревающих простых абонентов.
В шаблоне могут использоваться следую- с выдачей следующего за $#error сообще- Так что наша задача – определить пра-
щие лексемы: ния (оно же записывается и в лог-файл). вила, позволяющие предположить, яв-
 $* – ноль и более токенов; Кроме того, можно задать преобразование ляется ли клиент «законным» почто-
 $+ – один и более токенов; входящих данных, результат которого будет вым сервером, или это обычный або-
 $- – ровно один токен; передан дальше. С помощью лексем вида нентский компьютер, с которого пря-
 $@ – ни одного токена; $1, $2 и т. д. в правой части можно ссылать- мая отправка почты не предусматри-
 $=X – соответствует некоторому эле- ся на фрагменты шаблона (соответствую- вается (скорей бы уж SPF начал при-
менту класса X; щие каждой отдельной лексеме). Напри- носить реальную пользу...). Попытаем-
 $~X – не соответствует ни одному эле- мер, так можно преобразовать адрес ви- ся найти наиболее характерные отли-
менту из класса X. да domain.ru!user в user@domain.ru: чия в именах «правильных» и «непра-
вильных» хостов.
R$+!$+ $: $2@$1
Токен – это подстрока, разделённая Но сначала ненадолго отойдём от
пробелом или одним из символов, перечис- Также в правой части часто использу- собственно имён, чтобы рассмотреть
ленных в опции OperatorChars. По умолча- ются следующие лексемы: другой вопрос. В идеале каждый поч-
нию это «.:%@!^/[]+». Поэтому не рассмат-  >ruleset – вызов указанного набора товый сервер должен иметь доменное
ривайте шаблон как чистое регулярное правил; имя, тем более что таково требование
выражение – они работают с отдельны-  $&{macro} – выполнение указанного RFC2821 (хотя теоретически можно
ми символами, а «левая часть» правил макроса; отправлять почту и на user@[1.2.4.5],
в sendmail.cf – с токенами. То есть стро-  $(db args $) – проверка аргументов args но на практике с таким сталкиваться
ка «qwe_asd» будет соответствовать ре- по карте db. не приходилось), в то время как адре-
гулярному выражению «.*_.*», но не шаб- са, динамически назначаемые клиен-
лону «$*_$*», поскольку символ «_» не яв- Правила исполняются последователь- там, зачастую в DNS не представлены.
ляется разделителем токенов, и, следова- но (за исключением выходов из набора Конечно, имя почтового домена и до-
тельно, входная строка представляет со- по $@ и $#), каждое следующее использу- менное имя SMTP-сервера – вещи не-
бой один-единственный токен. ет в качестве входных данных выход пре- сколько различные, и к имени серве-
Преобразование можно рассматривать дыдущего правила. Если входные данные ра особых требований не предъявля-
как некоторую процедуру, которая, полу- шаблону не соответствуют, они проходят ется, но всё же серверы без PTR-за-
чая на входе строку, совпавшую с шабло- дальше без преобразований. писи мне пока не встречались. Так что
ном, выполняет над ней некоторые дейст- хотя вероятность ложных срабатыва-
ний и остаётся, но ею, на мой взгляд,
ние вида «<hostname> $| <ip-address>», ющийся после приёма всего сообще- можно пренебречь, поэтому первым
где hostname – имя хоста, ip-address – ния. Сейчас эти наборы нам не столь правилом введём «Блокировать почту
IP-адрес источника соединения. (Набо- интересны.) По умолчанию check_relay с адресов, не имеющих PTR-записи».
ры check_mail и check_rcpt срабатыва- (точнее, Basic_check_relay) отвеча- Здесь нам поможет не регулярное вы-
ют после SMTP-команд «MAIL FROM» ет за «прогон» соединений по ба- ражение, а способность Sendmail вы-
и «RCPT TO», получая в качестве па- зе access и за работу «чёрных спис- полнять DNS-разрешение клиентско-
раметра соответственно адрес отпра- ков» (dnsbl) и выполняется до того, как го адреса и осуществлять то или иное
вителя или адрес получателя. Так- в работу включатся внешние филь- действие в зависимости от результата
же опцией FEATURE(`compat_check') тры (работающие через milter-интер- (см. ниже листинг конфигурации, четы-
в mc-файле можно подключить не по- фейс). Определять свои правила об- ре строки, начиная с обращения к мак-
казанный на рисунке «общий» набор работки лучше всего в наборе пра- росу &{client_resolve}). В данном при-
check_compat, принимающий в ка- вил Local_check_relay (по умолча- мере я показал блокировку всех трёх
честве параметра и адрес отправи- нию наборы Local_check_* пусты), ко- возможных ошибок – TEMP, FORGED
теля, и адрес получателя и выполня- торый будет вызываться первым, до и FAIL, то есть помимо отсутствия PTR-

22
администрирование
записи (FAIL) блокируются также вре- > /map block5 pool-127-165.gen.ua
менные ошибки DNS и ситуации, когда Тестирование правил map_lookup: block5 (pool-127-165.gen.ua)
запрос A-записи по доменному имени Как известно, от ошибок никто не застрахо- returns @MATCH (0)
возвращает IP-адрес, отличный от ис- ван. Синтаксис регулярных выражений, ес-
ходного (FORGED). ли можно так сказать, «поощряет» опечат- > /quit
Кстати говоря, проверку на раз- ки – один пропущенный символ экраниро- Команда /map проверяет имя хоста
решение имени в последних версиях вания перед точкой, и результат может уже на соответствие той или иной «карте». На-
Sendmail можно включить и просто оп- довольно сильно отличаться от ожидаемо- ши правила тоже являются картами. Ес-
цией FEATURE(`require_rdns'). Но нас- го. Поэтому каждое правило имеет смысл ли соответствие найдено, возвращается
тройка вручную позволит лучше кон- предварительно протестировать (тем бо- @MATCH, если нет – вы получите сообще-
тролировать как порядок, так и сос- лее, что разрабатывать правила вы, ско- ние «no match».
тав проверок. рее всего, будете, ориентируясь на впол- Проводить тестирование лучше все-
Как показывает практика, льви- не определённые имена хостов). Сделать го после компиляции нового конфи-
ная доля спама идёт с адресов вида это можно следующим образом: гурационного файла (make), но до его
123-45-67-89-nekiy.domen.provaidera.ru $ sendmail -bt инста лляции (make install) и переза-
или m123.dialup.domain.com. Имен- пуска работающего почтового сервера
ADDRESS TEST MODE
но такие имена хостов провайде- (ruleset 3 NOT automatically invoked) (make restart). В этом случае потребуется
ры, не мудрствуя лукаво, обычно на- Enter <ruleset> <address> явно указать новый конфигурационный
значают динамическим соединени- файл (sendmail ‑bt ‑C mydom.ru.cf), но за-
ям. То есть либо в имени присутству- > /map block4 pool-127-165.gen.ua то в случае ошибок вы сможете их испра-
ет в том или ином виде сам IP-адрес map_lookup: block4 (pool-127-165.gen.ua) вить до того, как они скажутся на реаль-
(цифры, разделённые точками, под- no match (0) ной работе.
чёркиваниями, дефисами и иногда
символами «x»), либо фигурируют некоторые характер- верхнюю границу на число цифр в группе, так как циф-
ные «слова» – dial, ppp, adsl, dynamic, dhcp, pool, client и т. п. ры в данном случае не всегда означают часть IP-адреса):
Оформим эти случаи в следующие правила (поскольку ([0‑9]+[._x-]){2,}.*(\..*){2,}. Продолжим.
на второй линии обороны у нас стоит milter-greylist, то пра-
вила будут достаточно строгими, чтобы свести к миниму- Правило 3: Имя хоста содержит более восьми
му риск блокировки нормальных соединений). шестнадцатеричных цифр подряд
Иногда встречаются и такие имена, как bd21a1bd.virtua.com.br
Правило 1: Имя хоста содержит четыре группы (обычно цифр 8, т.е. записывается IP-адрес в hex-формате,
цифр, разделённых символами [._x-] но может встречаться и больше). Поскольку здесь участ-
Соответствующее регулярное выражение будет выглядеть вуют и буквы, то можно «нарваться» на добропорядочный
так: ([0-9]{1,3}[._x-]){4}. Под это выражение будут подпадать адрес типа affeccade.chto-to.tld, так что дополнительно пот-
имена следующего вида (показанные здесь и далее имена ребуем, чтобы такая группа символов была частью домена
хостов взяты из лог-файла и соответствуют хостам, с кото- не менее четвёртого уровня: [0-9a-f]{8,}(\..*){3,}. Ну и для се-
рых реально поступал спам; если кто увидит свой домен – бя отметим, что здесь требуется дополнительное внима-
я не специально): ние к логам (по-хорошему, это правило лучше бы вообще
n cpe-98-27-181-209.neo.res.rr.com; исключить, но мне пока оно проблем не создавало; вас же
n dialup-88-147-133-182.san.ru; я предупредил).
n 109.251-224-87.telenet.ru;
n 125x103x16x176.ap125.ftth.ucom.ne.jp;
n 219-180-207-85.zapcechy.adsl-llu.static.bluetone.cz.

К сожалению, нередки имена, включающие меньшее


число цифровых групп:
n 100-240-90.adsl.terra.cl;
n 103-185.trifle.net.

Можно, конечно, в предыдущем правиле просто умень-


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

Правило 2: Имя хоста содержит как минимум


две группы цифр
В порядке ужесточения также потребуем, чтобы это не бы-
ло частью имени домена 2-го уровня (но при этом уберём Порядок вызова наборов правил check_*

№9, сентябрь 2008 23


администрирование
nat добавим сюда же, поскольку в дан-
Что ответить на HELO? ентов, не соблюдающих стандарт (кста- ном контексте они уже более «безо-
Наверняка вы обратили внимание, что ти говоря, в RFC 2821 ясно обозначено, пасны».
в показанной схеме один этап отсутству- что сервер не должен отказывать в соеди- И ещё одно правило предусмотрим
ет – команда HELO/EHLO, которой клиент нении на основании неправильного име- для явного указания конкретных доме-
(под «клиентом» здесь и далее подразу- ни в HELO/EHLO), можете воспользовать- нов, почту от которых мы не хотели бы
мевается программа, устанавливающая ся рядом приёмов, которые можно най- принимать ни при каких обстоятельс-
соединение с вашим сервером) приветс- ти в Интернете. Обычно ограничиваются твах. Пример можно посмотреть ниже,
твует сервер сразу после подключения. блокировкой клиентов, которые сообща- в листинге конфигурации.
Согласно стандарту в HELO/EHLO клиент ют в приветствии имя сервера, к которому
должен передать своё полное имя (FQDN), подключаются (такая блокировка сравни- Правила-исключения
которое, очевидно, должно соответство- тельно безопасна, но тоже могут быть ню- Пока будем считать, что этого до-
вать IP-адресу клиента. Однако на прак- ансы). Вот несколько ссылок: статочно. (Думаю, вы понимаете, что
тике здесь может быть множество «под- дальше вам предстоит не один ме-
 ht t p: // w w w.o p e n n et .r u /o p e nfo r u m /
водных камней». vsluhforumID1/57895.html; сяц кропотливого анализа лог-файлов
Во-первых, у различных клиентов мо- на предмет выявления ложных сраба-
 h t t p : / / w w w. m t a . o r g . u a / s e n d m a i l /
гут быть различные понятия о стандартах тываний и пропуска спама с последу-
s t u f f / w w w. c s . n i u . e d u /~ r i c k e r t / c f /
(особенно это касается собственно почто- bad-ehlo.html; ющей корректировкой данных правил.)
вых клиентов типа Outlook, The Bat! и т. п.,  http://www.mta.org.ua/sendmail/stuff/ Но нужно предусмотреть ещё кое-что.
так что в первую очередь фильтрация по Во-первых, рано или поздно вы
w w w. c s . n i u . e d u /~ r i c k e r t /c f / h a c k /
HELO может сказаться на ваших же поль- block_bad_helo.m4; столкнётесь с тем, что некоторые «хо-
зователях) – не всегда в HELO будет ука-  http://www.vttoth.com/heloehlo.htm. рошие» почтовые серверы попадут
зано именно то, что нужно. Во-вторых, кли- под ваши правила, а корректировка са-
ент может соединяться через какой-нибудь Наконец, можно (целиком положив- мих правил с целью учесть эту ошиб-
NAT- или прокси-сервер и, передавая HELO, шись на разработчиков Sendmail) доба- ку либо сделает правила излишне гро-
может понятия не иметь, с какого IP-адре- вить в mc-файл опцию FEATURE(`block_ моздкими, либо приведёт к увеличе-
са фактически будет идти соединение. На- bad_helo'). Любопытных отсылаю к фай- нию числа спама, просачивающегося
конец, в-третьих, у клиента может быть не- л у c f/m 4 /p roto.m 4, н ач и н а я с о с т р о - сквозь фильтрацию.
сколько интерфейсов, и не факт, что FQDN ки «ifdef(`_BLOCK_BAD_HELO_', `dnl», Во-вторых, если своим собствен-
будет соответствовать именно тому, с кото- где можно посмотреть, какие именно пра- ным клиентам вы назначаете DNS-
рого осуществляется подключение к сер- вила будут применяться. имена так, что они попадают под одно
веру. В общем, на мой взгляд, «безуслов- Однако, на мой взгляд, проверк у из правил (либо не назначаете имён во-
ная» фильтрация по HELO слишком опас- по HELO лучше использовать иск лю - обще), то может получиться так, что они
на, и её лучше исключить. чительно в комплексных системах типа не смогут отправлять почту через ваш
Но, с другой стороны, такая проверка Spamassassin как один из критериев «спам- сервер. Таким образом, мы приходим
может быть весьма эффективной. Так что ности». Но эта тема уже далеко выходит к необходимости создать правила-ис-
если вы всё-таки хотите «наказать» кли- за рамки статьи. ключения, которые будут стоять до рас-
смотренных выше правил блокировки
Правило 4: Имя хоста содержит Регулярное выражение получается и пропускать те соединения, которые,
одно из указанных сочетаний довольно длинным: [0-9].*(dsl|dial|dyna безусловно, должны быть пропущены.
Сочетания будем отслеживать сле- mic|static|ppp|pool|client|user|dhcp|gprs). Таких правил для начала будет три:
дующие: dsl, dial, dynamic, static, ppp, *(\..*){2,}. К сожалению, в «динамичес- n ^(mail|relay|mx|smtp|mta).*[0‑9]
pool, client, user, dhcp, gprs. В поряд- ких» именах часто попадаются также *(\..*){2,} – то есть будем пропус-
ке ужесточения правила потребу- сочетания dyn, vpn и ip, но здесь уже кать адреса вида relay2.mydom.
ем, чтобы перед указанным сочета- вероятность ложных срабатываний по- com. (Сейчас они и без того будут
нием в имени фигурировала, как ми- вышается, так что в этом случае будем проходить через наши правила без
нимум, одна цифра (поскольку дина- полагаться на грейлистинг. проблем, но, во-первых, лучше об-
мические имена, как правило, похо- Бывает также, что цифры следу- работать потенциально частые со-
жи, отличаясь лишь некоторым но- ют не перед, а после указанного соче- единения пораньше, чтобы не про-
мером). Кроме того, будем считать, тания в одной части доменного име- гонять каждое через все правила,
что искомое сочетание не может быть ни: pool3.provider.ru. Учтём это следу- а, во-вторых, это позволит умень-
частью домена второго уровня (чтобы ющим правилом. шить тяжесть последствий оши-
избежать блокировки адресов типа бок в будущем, когда нам захочет-
relay2.dynamic-hosting.org). Примеры: Правило 5: Имя хоста содержит ся «закрутить гайки».)
n 1.pool85-58-70.dynamic.orange.es; указанные сочетания n \.(mydom\.ru|rambler\.ru|yandex\
n 0x5735c879.esnxx7.dynamic.dsl.tele.dk; с последующими цифрами .ru|mail\.ru)$ – это правило для до-
n 122.208.c10008-a53.dsl-dynamic.vsi.ru; Правило: (dsl|dial|dyn|static|ppp|pool| менов-исключений. Сюда имеет
n 17-4.gprs.tmcz.cz; client|user|dhcp|gprs|ip|vpn|nat)[a-z_-]* смысл занести свой домен, а также
n abfx26.neoplus.adsl.tpnet.pl. [0-9]+.*(\..*){2,}. Сочетания dyn, ip, vpn, домены, с которых получить спам –

24
администрирование
меньшее зло, нежели отвергнуть
нужное сообщение. Рассматри- Стандарт есть стандарт этого будут выполняться наши проверки
ваются лишь поддомены и отде- Согласно RFC822 и RFC1123 каждый почто- check_relay. Кстати, в лог-файл информа-
льные хосты указанных доменов вый сервер должен безоговорочно прини- ция о блокировках отныне будет заносить-
(предполагается, что сами домен- мать почту на адрес postmaster@<domain.tld>. ся с пометкой «ruleset=check_rcpt», пос-
ные имена ни под одно из последу- RFC2142 добавляет к этому списку также кольку теперь наборов правил check_relay
ющих правил блокировки не под- адрес abuse@<domain.tld>. Это обуслов- и check_mail в sendmail.cf нет – вместо них
падают). Не забывайте экраниро- лено тем, что у отправителя всегда долж- при использовании вышеуказанной ди-
вать символы «.». на быть возможность сообщить вам о про- рективы появляются «нестандартные»
n 10\.5\.([0-9]){1,3}\.([0-9]){1,3} – блеме. В нашем примере это требование checkrelay и checkmail соответственно, ко-
здесь мы будем пропускать соеди- стандарта не выполняется, т.к. в случае торые вызываются из check_rcpt. Побоч-
нения с IP-адресов вида 10.5.x.y, «неправильного» имени хоста наш сервер ным эффектом этого будет то, что в daily-
предполагая, что данные адре- сразу разорвёт соединение, не спросив да- сообщениях везде будет фигурировать
са принадлежат нашим клиентам, же имени отправителя (MAIL FROM), не го- ваш домен:
для которых имена хостов в DNS воря уже о том, чтобы узнать, кому тот хо-
Checking for rejected mail hosts:
не прописаны (а значит, в качестве тел написать письмо (RCPT TO). 8252 mydom.ru (554... 1))
таковых будут передаваться IP-ад- Как было показано, проверки check_ 1492 mydom.ru (554... 2))
668 mydom.ru (554... 3))
реса). Если «своих» сетей несколь- relay выполняются до проверок check_mail 534 mydom.ru (554... 4))
ко, лучше для каждой из них ука- и check_rcpt. Однако этот порядок можно 424 mydom.ru (554... 5))
зать отдельное правило. изменить. Для этого в mc-файл нужно до- 111 mydom.ru (550... [218.9.79.68])
108 mydom.ru (550... [89.38.12.29])
бавить следующую директиву: 91 mydom.ru (550... dul.ru)
Изменяем конфигурацию FEATURE(`delay_checks', `friend')
76 mydom.ru (451... resolve)
. . .
Теперь добавим всё это в файл кон-
фигурации Sendmail. Редактировать Это, во-первых, отложит проверки Происходит это из-за того, что скрипт
непосредственно sendmail.cf – не са- check_relay и check_mail до того момен- /etc/periodic/daily/460.status-mail-rejects (на-
мая лучшая идея, так как этим вы об- та, пока не пройдёт check_rcpt. Во-вторых, помню, что речь идёт о FreeBSD) выбира-
речёте себя на необходимость выпол- аргумент «friend», переданный директиве, ет домен из подстроки arg1, записываемой
нять абсолютно всю настройку именно позволяет задать в базе access правило в лог-файл для каждого факта блокиров-
в этом файле, поскольку при использо- SPAMFRIEND для нужных адресов: ки, а для check_rcpt туда передаётся адрес
вании mc-файла внесённые в cf‑файл To:postmaster@ SPAMFRIEND получателя (т.е. адрес вашего пользовате-
изменения будут теряться. К счастью, To:abuse@ SPAMFRIEND ля). Кроме того, такое изменение порядка
«cf‑фрагменты» при необходимости Пересобрав базу access (командой следования правил увеличивает нагрузку
можно добавлять и в mc-файл, где они make в каталоге /etc/mail), вы обеспечи- на систему. Но зато у отправителей будет
будут учитываться препроцессором m4 те безоговорочное прохождение сообще- больше шансов сообщить вам о допущен-
и переноситься в итоговый cf-файл. ний на указанные адреса, и лишь после ной вами ошибке.
Для этого в самом конце mc-файла
(после опций MAILER) добавим следующее (длинные стро- # Выполняем разрешение имени клиента
R$* $: < $&{client_resolve} >
ки для удобства разбиты на несколько, строка-продолже- R<TEMP> $#error $@ 4.4.0 $: ↵
ние начинается с пробелов): "450 Temp. (dns rule 1). Cannot resolve PTR for " ↵
$&{client_addr}
R<FORGED> $#error $@ 5.7.1 $: ↵
LOCAL_CONFIG "550 Denied (dns rule 2). IP name forged " ↵
$&{client_name}
# Правила-исключения R<FAIL> $#error $@ 5.7.1 $: ↵
Krelays regex -a@MATCH ^(mail|relay|mx| ↵ "550 Denied (dns rule 3). IP name lookup failed " ↵
smtp|mta).*[0-9]*(\..*){2,} $&{client_name}
Kexdoms regex -a@MATCH \.(mydom\.ru|hotmail\.com| ↵
rambler\.ru|yandex\.ru|mail\.ru)$ # Применяем оставшиеся правила-исключения
Kournet1 regex -a@MATCH 10\.5\.[0-9]{1,3}\.[0-9]{1,3} R$* $: $(relays $&{client_name} $)
R@MATCH $@ OK
# Правила блокировки R$* $: $(exdoms $&{client_name} $)
Kblock1 regex -a@MATCH ([0-9]{1,3}[._x-]){4} R@MATCH $@ OK
Kblock2 regex -a@MATCH ([0-9]+[._x-]){2,}.*(\..*){2,}
Kblock3 regex -a@MATCH [0-9a-f]{8,}(\..*){3,} # Блокируем соединения согласно правилам блокировки
Kblock4 regex -a@MATCH [0-9].*(dsl|dial|dynamic| ↵ R$* $: $(block1 $&{client_name} $)
static|ppp|pool|client|user|dhcp|gprs).*(\..*){2,} R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
Kblock5 regex -a@MATCH (dsl|dial|dyn|static| ↵ for mailserver: " $&{client_name} " (regex rule 1)"
ppp|pool|client|user|dhcp|gprs|ip| ↵ R$* $: $(block2 $&{client_name} $)
vpn|nat)[a-z_-]*[0-9]+.*(\..*){2,} R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
Kblock6 regex -a@MATCH (vectranet\.pl| ↵ for mailserver: " $&{client_name} " (regex rule 2)"
mediating\.barrier\.volia\.net)$ R$* $: $(block3 $&{client_name} $)
R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
LOCAL_RULESETS for mailserver: " $&{client_name} " (regex rule 3)"
R$* $: $(block4 $&{client_name} $)
SLocal_check_relay R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
for mailserver: " $&{client_name} " (regex rule 4)"
# Пропускаем соединения со своей подсети R$* $: $(block5 $&{client_name} $)
R$* $: $(ournet1 $&{client_name} $) R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
R@MATCH $@ OK for mailserver: " $&{client_name} " (regex rule 5)"

№9, сентябрь 2008 25


администрирование
R$* $: $(block6 $&{client_name} $) 5760
R@MATCH $#error $@ 5.7.1 $: "554 Bad hostname ↵
for mailserver: " $&{client_name} " (regex rule 6)" $ bzcat maillog.0.bz2 | grep "5.7.1" | wc -l
44931
Итак, что здесь происходит?
В секции LOCAL_CONFIG прописаны все наши правила. $ bzcat maillog.0.bz2 | grep "stat=Sent" | wc -l
Строки, начинающиеся с «K» – это так называемые «кар- 1243
ты» (maps), в нашем случае имеющие тип regex и проверя-
ющие соответствие входящих аргументов указанному ре- При желании можно получить статистику по конкретным
гулярному выражению. сработавшим правилам, например, командой:
Далее, в секции LOCAL_RULESETS, определяются ло-
кальные наборы правил преобразования. В нашем слу- grep 'regex rule 3' maillog | wc -l
чае такой набор один – Local_check_relay. И здесь мы пос-
ледовательно проверяем соответствие имени клиента можно получить количество соединений, заблокированных
($&{client_name}) нашим правилам. третьим правилом. Поскольку делать подобный анализ нуж-
Сперва безоговорочно пропускаем ($@ OK) клиентов, но будет довольно часто, имеет смысл создать для этих це-
подпадающих под правило ournet1. Затем выполняем раз- лей shell-скрипт (один из возможных вариантов вы найдёте
решение имени клиента ($&{client_resolve}) с выдачей соот- на сайте журнала, в разделе «Исходный код»):
ветствующих сообщений об ошибках в зависимости от ре-
зультата. Если проверку на ournet1 делать после разреше- $ ./getsendmailstat.sh /var/log/maillog.0.bz2
ния имени, то соединения наших клиентов, не имеющих [Extracting /var/log/maillog.0.bz2 to /tmp/getsendmailstat...]
PTR-записи, будут отклонены. DNS rule 1: 704
DNS rule 2: 11913
Клиенты, успешно прошедшие проверку на соответс- DNS rule 3: 21472
твие PTR- и A-записей, переходят к дальнейшим правилам.
Regex rule 1: 8248
Сначала применяем наши правила-исключения, пропуская Regex rule 2: 1492
клиентов, имя которых соответствует данным регулярным Regex rule 3: 668
выражениям (если у вашего домена есть проблемы с раз- Regex rule 4: 534
Regex rule 5: 424
решением имён, то эти правила можно поставить сразу пос- Regex rule 6: 0
ле ournet1; хотя лучше навести порядок в DNS).
Total 5.7.1: 44931
Ну а затем блокируем соединения по нашим прави-
Greylisting: 5760
лам блокировки. Для удобства последующего анализа Total sent: 1243
лог-файла каждое сообщение об ошибке помечаем номе- [/tmp/getsendmailstat removed.]
ром правила.
Итак, вместо более чем 200 тысяч срабатываний грей-
Запускаем и тестируем листинга за сутки, после включения правил фильтрации
Теперь можно ещё раз всё проверить (обратите особое вни- по имени хоста на долю milter-greylist осталось лишь 5-7 ты-
мание, чтобы левая и правая части каждой строки разделя- сяч подключений. (При анализе этих данных нужно учи-
лись символами табуляции, а не пробелами), пересобрать тывать тот факт, что если сообщение отправляется сразу
sendmail.cf и поставить его на «боевое дежурство» (в дан- на несколько адресов получателей, то в случае грейлистин-
ной статье я имею в виду FreeBSD; на вашей системе мо- га создаётся запись в лог-файле для каждого адреса, бло-
гут потребоваться другие команды): кировка же сопровождается одной записью на всё соеди-
нение. Так что можно считать, что одна строка «5.7.1» идёт
# cd /etc/mail за три-четыре «Greylisting in action».) Нагрузка на систему
# make && make install
# make restart заметно снизилась, так что поставленную задачу можно
считать решённой. Первое время придётся, конечно, кри-
Результат работы можно будет получить, проанализи- тично просматривать лог-файлы и более чутко реагиро-
ровав лог-файлы (maillog.7.bz2 собран, когда данные пра- вать на жалобы клиентов, зато необходимость поиска но-
вила фильтрации ещё не использовались; maillog.0.bz2 – вого «железа» для сервера ещё на некоторое время теря-
уже с работающими регулярными выражениями): ет свою актуальность.

$ cd /var/log 1. Супрунов С. Greylisting: панацея от спама или «мыльный пу-


$ bzcat maillog.7.bz2 | grep "Greylisting in action" | ↵
wc -l зырь»? //Системный администратор, №7, 2006 г. – С. 12-15. –
http://www.samag.ru/art/07.2006/07.2006_04.html.
203944
2. К лаус Ас ман. Using check _* in sendmail 8.8 – ht tp://
$ bzcat maillog.7.bz2 | grep "stat=Sent" | wc -l www.sendmail.org/~ca/email/check.html.
1188 3. Эрик Олман. Anti-Spam Configuration Control – http://
www.sendmail.org/m4/anti_spam.html.
$ bzcat maillog.7.bz2 | grep "5.7.1" | wc -l
4. Д. Сени. Considerations for the use of DNS Reverse Mapping draft-
1179 ietf-dnsop-reverse-mapping-considerations-06 – http://tools.ietf.org/
$ bzcat maillog.0.bz2 | grep "Greylisting in action" | wc -l html/draft-ietf-dnsop-reverse-mapping-considerations‑06.

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

Jabberd2 – простой и нетребовательный


к ресурсам XMPP-сервер
Часть 2. Управление базами данных BerkeleyDB
и тонкая настройка Jabberd2

Михаил Кондрин
В первой части статьи [1] была рассмотрена установка и базовая настройка XMPP‑сервера
Jabberd2. Однако дальнейшая настройка и отладка потребуют «хирургического» вмешательства
и непосредственного редактирования его баз данных.

И
так, сервер запущен, список можно обмениваться сообщениями ше? Как вы помните, одним из условий
пользователей создан, с по- как с пользователями нашего сервера, техзадания для нашего Jabber-серве-
мощью Jabber-клиента Pidgin так и с внешними серверами. Что даль- ра был отказ от использования специ-

№9, сентябрь 2008 27


администрирование
ализированных серверов баз данных лизу операционной системы BSD 4.4. сколько файлов типа log.0000xx, а так-
для хранения учётных записей поль- Эта модификация оказалась удачной, же несколько файлов вида __db.00*.
зователей и другой необходимой ин- и уже в 1996 году Кейт Бостич и Мар- И что же с ними делать?
формации. Поддержка сервера баз го Зельцер основали семейный биз- Директория /var/jabberd/db/ – это
данных требует дополнительных уси- нес (к тому времени они поженились) – домашняя директория environment.
лий, так что гораздо проще хранить ин- компанию Sleepycat, которая занима- Файлы с расширением *.db – это ба-
формацию в дисковых файлах, тем бо- лась продвижением BerkeleyDB. за данных (authreg – регистрационная
лее что в большей степени эта инфор- Благодаря сотрудничеству с уни- информация, а sm – пользовательские
мация представляет интерес только верситетом Мичигана (где был реали- данные). Файлы log.* – это, так ска-
для самого сервера Jabberd2, и у вас зован один из первых серверов LDAP) зать, оперативные поправки, внесён-
вряд ли появится необходимость де- и с компанией Netscape первоначаль- ные в базу данных, которые по мере
литься ею с каким-нибудь другим сер- ный проект был существенно усовер- заполнения сбрасываются в файлы
висом. Также для доступа к этим дис- шенствован и приобрёл широкую по- *.db. А файлы __db.* – это отображе-
ковым файлам была выбрана библио- пулярность. ние областей памяти в дисковые фай-
тека BerkeleyDB. В 2006 году компания SleepyCat лы, которые и составляют environment,
Обычно базы данных BerkeleyDB (к которой к тому времени присоеди- поскольку реализуют совместную ра-
характеризуют как не нуждающиеся нился и Майк Олсон) была куплена боту нескольких приложений над ба-
в администрировании. Это справедли- лидером на рынке баз данных – ком- зой данных. Тут следует заметить, что
во в том смысле, что приложение мо- панией Oracle. До этого долгое время Jabberd2 состоит из нескольких неза-
жет само решать административные BerkeleyDB выходила под двойной ли- висимых процессов, так что для не-
вопросы в более-менее автоматичес- цензией, поэтому на программистких го разделение доступа к базе данных
ком режиме в процессе выполнения. форумах слухи об этой покупке вызва- весьма актуально.
В большинстве случаев это даже поз- ли обеспокоенность, что Oracle закро- Вся информация хранится в фай-
воляет восстанавливать базы данных ет код BerkeleyDB. Однако эти опасе- лах *.db и в одном из log-файлов, в том,
BerkeleyDB после аварийного завер- ния не подтвердились, и за последу- что активен на текущий момент. Длина
шения. Вопрос же создания резерв- ющие два года вышло несколько но- log-файла фиксирована, по умолчанию
ных копий (вторая головная боль сис- вых релизов этой библиотеки, причем она задаётся во время компиляции
темных администраторов) при этом ре- Oracle продолжает выполнять свое и составляет примерно 10 Mб, и мо-
шается созданием специализирован- обещание оставить код этой библио- жет варьироваться с помощью файла
ных утилит, которые решают задачу теки открытым и свободным. настроек DB_CONFIG (о нем ещё пой-
резервирования для всего приложе- Все трое сотрудников SleepyCat по- дёт речь дальше).
ния целиком. прежнему работают над своим про- По мере заполнения log‑файла со-
Но это в том случае, если разра- дуктом, совмещая программистскую здаётся новый, с порядковым номером
ботчики позаботились о создании та- деятельность с преподавательской: на единицу больше. Поскольку инфор-
ких инструментов. К сожалению, под- Марго Зельцер одновременно явля- мация из старых log‑файлов уже сбро-
ход авторов Jabberd2 в том, что каса- ется профессором Гарвардского уни- шена в файлы *.db, то они, вообще го-
ется баз данных BerkeleyDB, не слиш- верситета. воря, не нужны, так что в этом случае
ком конструктивен, поскольку ничего необходимо будет позаботиться о ро-
подобного они предложить не могут. Администрирование баз тации логов, что также может осущест-
Поэтому если вы решите хранить дан- данных BerkeleyDB вляться автоматически приложением,
ные Jabberd2 средствами BerkeleyDB, Как вы уже знаете, BerkeleyDB – это если только его автор об этом позабо-
то вам придётся волей-неволей вникать библиотека, которая позволяет не- тился. Как вы понимаете, Jabberd2 –
во внутреннее устройство и методы скольким приложениям совместно ра- это не тот случай.
работы с базами данных этого типа. ботать как над дисковыми, так и опе- Все файлы – бинарные, так что их
Есть, правда, и хорошая новость – ративными (расположенных в памяти) просмотр в текстовом редакторе или ко-
это не слишком сложно. базами данных. Раз речь идёт о сов- мандой less вам мало что даст. Для это-
местной работе с дисковым файлом, го случая предусмотрены специальные
От BSD 4.4 до Oracle то возникает вопрос контроля досту- утилиты, например, db_printlog, которая
История BerkeleyDB, библиотеки, ко- па к этому файлу, чтобы информация позволит посмотреть последние правки,
торая в настоящее время насчитывает для каждого из активных приложе- внесённые в базу данных (или по край-
десятки миллионов инсталляций, на- ний была консистентной и чтобы ра- ней мере время, когда они сделаны,
чалась в 1992 году, когда молодые со- бота нескольких приложений в парал- поскольку остальная информация
трудники университета Беркли Марго лельном режиме не приводила к пор- не слишком вразумительна).
Зельцер (Margo Seltzer) и Майк Олсон че данных. Это одна из задач, которую Какие именно из log-файлов ак-
(Mike Olson) под руководством Кейта BerkeleyDB решает с помощью «окру- тивны в данный момент, можно узнать
Бостича (Keith Bostic) взялись за мо- жений» (environment). с помощью команды:
дификацию утилиты ndbm (которая Если вы заглянете в директорию
использовалась для работы с базами /var/jabberd/db/, то обнаружите там два # db_archive -l
данных в оперативной памяти) к ре- файла authreg.db и sm.db, один или не- log.0000000001

28
администрирование
и удалить лишние с помощью: # db_recover -c -v -h ./ -e

Finding last valid log LSN: file: 1 offset 522761


# db_archive -d
Recovery starting from [1][28]
Recovery complete at Sun May 4 00:49:52 2008
Также эта утилита позволяет выяснить, какие файлы Maximum transaction ID 800003eb Recovery checkpoint [1][522761]
данных содержатся в каталоге (если вы забыли об этом):
Здесь ключи запуска, помимо очевидного -v (verbose),
# db_archive -s означают, что команда делает восстановление после катас-
authreg.db трофического завершения (-c) и восстанавливает окруже-
sm.db ние -e в текущей директории (-h ./). Последняя строка ре-
зультата указывает, какой записи в лог-файле соответству-
Вывод этих двух команд указывает, какие файлы нуж- ет точка синхронизации. С помощью db_printlog можно убе-
даются в архивировании при создании резервных копий – диться, что это предпоследняя запись в log-файле.
всего три штуки: log.0000000001, authreg.db, sm.db. Файлы Теперь резервный каталог выглядит таким образом:
вида __db.* системно зависимы и поэтому непереносимы,
однако они могут быть восстановлены при наличии пра- # ls ./
вильно созданной резервной копии. DB_CONFIG __db.002 __db.004 __db.006 log.0000000001
Проще всего при архивировании не копировать файлы __db.001 __db.003 __db.005 authreg.db sm.db

вручную, а использовать готовую команду:


Проверим результат:
# db_hotbackup -v -c -h ./ -b /root/backup
# db_verify -h ./ authreg.db sm.db
db_hotbackup: hot backup started at Sun May 4 00:29:55 2008
db_hotbackup: ./: force checkpoint
db_hotbackup: ./: remove unnecessary log files
db_hotbackup: copying .//authreg.db to /root/backup/authreg.db Отсутствие сообщений об ошибках указывает, что копи-
db_hotbackup: copying .//sm.db to /root/backup/sm.db рование и восстановление базы данных прошло удачно.
db_hotbackup: copying .//log.0000000001 to /root/backup/log.0000000001 По мере обновления программного обеспечения мо-
db_hotbackup: lowest numbered log file copied: 1
db_hotbackup: /root/backup: run catastrophic recovery жет возникнуть ситуация, что формат базы данных не со-
db_hotbackup: /root/backup: remove unnecessary log files ответствует новой версии библиотеки BerkeleyDB, которая
db_hotbackup: hot backup completed at Sun May 4 00:29:57 2008
была установлена на компьютере в процессе обновления.
В этом случае нужно также обновить базы данных с помо-
Ключ -h указывает домашнюю директорию environment, щью утилиты db_upgrade, соответствующей новой версии
а ключ -b – директорию, куда осуществляется копирование. библиотеки:
С помощью ключа -c перед копированием происходит сбра-
сывание последних изменений из log-файла в базы дан- # db_upgrade -v -h ./ authreg.db sm.db
ных и удаление устаревших log-файлов. Кстати, принуди- db_upgrade: authreg.db upgraded successfully
тельное сбрасывание данных можно осуществить с помо- db_upgrade: sm.db upgraded successfully

щью команды:
Последний вопрос, который обычно возникает у адми-
# db_checkpoint -v -1 нистраторов баз данных, – это оптимизация работы ба-
db_checkpoint: checkpoint begin: Sun May 4 00:32:31 2008 зы данных. Для BerkeleyDB решение этого вопроса сво-
db_checkpoint: checkpoint complete: Sun May 4 00:32:31 2008 дится к написанию файла DB_CONFIG с параметрами
environment, более отвечающими мощности и возможнос-
Только учтите, что на самом деле db_checkpoint – это тям вашей системы.
не одноразовая операция, а демон, который, будучи за- С помощью перечисленных параметров можно управ-
пущенным без ключа -1, периодически проверяет состоя- лять величиной дискового кэша и кэша в памяти, мето-
ние log-ов в текущей директории и по мере их заполнения дом ведения логов и их размерами, механизмами блоки-
или в определённые промежутки времени производит син- ровок и т. д.:
хронизацию баз данных. n set_cachesize
Содержимое директории с резервной копией сейчас вы- n set_data_dir
глядит таким образом: n set_flags DB_AUTO_COMMIT|DB_CDB_ALLDB|DB_
DIRECT_DB|DB_DIRECT_LOG|DB_DSYNC_DB|DB_
# ls /root/backup DSYN C_ LOG|D B _ LOG _ AUTO REMOVE|D B _ LOG _
authreg.db log.0000000001 sm.db INMEMORY|DB_NOLOCKING|DB_MULTIVERSION|DB_
N O M M A P | D B _ N O PA N I C | D B _ O V E R W R I T E | D B _
В таком виде база данных не работоспособна. То есть PA N I C _ E N V I R O N M E N T | D B _ R E G I O N _ I N I T | D B _
после копирования необходимо будет её восстановить, TIME_ NOTGRANTED|DB_TXN _ NOSYNC|DB_TXN _
предварительно переместив в ту же директорию конфигу- SNAPSHOT|DB_TXN_WRITE_NOSYNC|DB_YIELDCPU
рационный файл DB_CONFIG (если вас не устраивают па- n set_lg_bsize
раметры по умолчанию) и запустив там команду: n set_lg_dir

№9, сентябрь 2008 29


администрирование
n set_lg_max тым обращениям к файлу базы данных (published roster), хранящегося на сто-
n set_lg_mode на диске), ограничивает размер дис- роне сервера. Для этого нам придётся
n set_lg_regionmax кового log-файла 2 Мб, а log-файла вручную отредактировать базу данных
n s e t _ l k _ d e t e c t D B _ L O C K _ в оперативной памяти – 262 Кб. sm.db, которая содержит динамически
DEFAULT|DB_LOCK_EXPIRE|DB_ Кроме того, с помощью флагов кон- изменяемые настройки Jabberd2 и ис-
LOCK_MAXWRITE|DB_ фигурируется автоматическое удале- пользуется, в основном, компонентом
LO C K _ M I N LO C KS | D B _ LO C K _ ние устаревших логов, а также отклю- sm. В отличие от authreg.db её не нуж-
MINWRITE|DB_LOCK_OLDEST|DB_ чается системная буферизация досту- но создавать до запуска сервера; со-
LOCK _ RANDOM|DB_ LOCK _ па к файлам баз данных и логов (пос- здаётся она при регистрации перво-
YOUNGEST кольку они и так буферизуются средст- го пользователя, а затем пополняет-
n set_lk_max_lockers вами BerkeleyDB). ся по большей части в автоматичес-
n set_lk_max_locks Проверить эффек т от измене- ком режиме.
n set_lk_max_objects ния параметров по умолчанию мож- Попутно нам придётся немного
n set_mp_mmapsize но с помощью команды «db_stats ‑e», глубже разобраться с устройством
n set_shm_key которая позволяет получить суммар- BerkleyDB. В качестве рабочего инс-
n set_thread_count ную информацию о размерах кэша, трумента будем использовать скрип-
n set_timeout размерах лог-файлов, количества вы- товой язык TCL, который завоевал по-
n set_tmp_dir полненных и незаконченных транзак- пулярность благодаря простоте своего
n set_tx_max ций, установленных локах и реплика- синтаксиса («все есть строка, а каждая
n set_verbose циях (по отдельности эту информацию инструкция начинается с имени проце-
n mutex_set_align можно получить с помощью ключей -m, дуры, за которым следует список фак-
n mutex_set_max -l, -t, -c и ‑r соответственно). Также эта тических параметров»).
n set_tas_spins команда с помощью ключей -s и -d вы- Более того, BerkeleyDB имеет
n r e p _ s e t _ c o n f i g D B _ R E P _ даёт минимальные сведения о состо- встроенный интерфейс под этот язык,
C O N F_ B U L K | D B _ R E P_ C O N F_ янии баз данных, например, количес- наравне с С++ и Java, сборка которо-
DEL AYCLIENT|DB_ REP_CONF_ тве записей в них. го активируется выбором парамет-
N OAU TO I N I T | D B _ R E P_ C O N F_ Для полноты стоит упомяну ть ра --enable‑tcl при компиляции библи-
NOWAIT об уже встречавшейся в предыдущей отеки. Более полное представление
части команде db_load. Хотя в преды- об архитектуре и программировании
Более подробную информацию по дущей статье с помощью этой команды BerkeleyDB можно получить из кни-
каждому из параметров можно полу- нам удалось создать и загрузить спи- ги [2], однако там в качестве рабоче-
чить в документации по соответству- сок пользователей authreg.db, однако го языка при разборе примеров взят
ющей C функции из BerkeleyDB API для более сложных случаев создание C++.
в каталоге docs/api_c, где файлы ру- текстового файла в формате, пригод- В качестве напоминания в одном
ководства для этого класса функций ном для загрузки в BerkeleyDB, оказы- абзаце будут перечислены основные
имеют приставку env_. Так что, ска- вается ничем не легче, чем прямое ре- элементы языка Tcl. Этого хватит, что-
жем, справка по set_cachesize нахо- дактирование баз данных с помощью бы разобраться с приведёнными ниже
дится в файле env_set_cachesize.html. программного интерфейса. В следую- скриптами.
Большинство параметров принимают щем разделе мы как раз и перейдём Tcl – это фактически shell, у пере-
в качестве значений одно или несколь- к программированию с помощью биб- менных типов нет, всё является стро-
ко строчных или целочисленных зна- лиотеки BerkeleyDB. кой. Каждая команда Tcl представля-
чений, что можно узнать в документа- ет собой вызов функции, за которым
ции. Для случаев, когда выбор ограни- В недрах sm.db следует список параметров. Например,
чен набором элементов, варианты до- Иногда бывает нужно оперативно создание собственной функции:
пустимых значений приведены ранее. изменить данные в базах данных
Например, можно использовать такой BerkeleyDB или посмотреть уже име- proc myfunction { z } {
puts [set z]
DB_CONFIG-файл: ющуюся там информацию. Если для }
решения первой части задачи мож-
# one 0GB 2MB cache но прибегнуть к команде db_load, представляет собой вызов функции
set_cachesize 0 2097152 1
то со второй частью не всё так просто. proc, которой передано три пара-
# Transaction Log settings К сожалению универсального инстру- метра – имя определяемой функции
set_lg_max 2097152
set_lg_bsize 262144 мента для этой цели нет и быть не мо- myfunction, список формальных пара-
set_flags DB_LOG_AUTOREMOVE жет, что связано именно с присущими метров, состоящий из одного элемен-
set_flags DB_DIRECT_LOG
set_flags DB_DIRECT_DB BerkeleyDB ограничениями. Но эта за- та z и тела процедуры, в котором вы-
дача может быть решена с помощью даётся на печать значение парамет-
который увеличивает размер кэша написания скрипта для каждого кон- ра. Фигурные скобки являются груп-
до 2 Мб (стандартных 256 Кб для сов- кретного случая, в данном случае на- пирующими элементами, квадратные
ременных программ обычно всегда шей целью будет создание «официаль- означают выполнение функции и под-
оказывается мало, что приводит к час- но утверждённого списка контактов» становку результата. То есть в дан-

30
администрирование
ном случае [set z] приводит к подстановке вместо пере- вание db_load применимо только для баз данных, содер-
менной её значение. В качестве синтакcической глазури жащих только строковые значения, так что нам в некото-
в tcl для той же самой цели используется более привыч- ром смысле повезло, что authreg.db не содержит записей
ный $. Команда set используется также для присваивания другого типа.
set z 1, например. Тип доступа и механизм индексации в базах данных мож-
BerkeleyDB устроена более примитивно, чем более попу- но выбрать при создании базы данных. Всего BerkeleyDB
лярные иерархические или реляционные базы данных, пос- поддерживает 4 типа – Queue, Recno, Hash, BTree. Ус-
кольку все данные в BerkeleyDB хранятся в виде списков ловно говоря, эти типы означают, каким именно образом
пар – «ключ-значение». Если проводить аналогию с реляци- BerkeleyDB индексирует и хранит базы данных. Все базы,
онными базами данных, то мы имеем как бы таблицу с од- используемые в Jabberd2, представляют собой хэши.
ной колонкой – первичным индексом, и второй – значени- Любой файл базы данных BerkeleyDB (*.db) на самом
ем. В то же время именно простота устройства BerkeleyDB деле может содержать несколько «таблиц»/списков. Чтобы
позволяет использовать её в качестве строительного бло- посмотреть, что представляет собой база данных sm.db из-
ка для создания как иерархических (OpenLDAP), так и ре- нутри, откроем её с помощью скрипта list-sm.tcl:
ляционных (MySQL) баз данных.
Вторым отличительным моментом BerkeleyDB являет- load /usr/lib/libdb_tcl-4.4.so
[berkdb env -home ./ -recover] close
ся отсутствие типизации данных, так что в качестве клю- set e [berkdb env -data_dir ./ -home ./]
чей и их значений могут быть использованы любые типы set h [berkdb open -rdonly -env $e sm.db]
set c [$h cursor]
данных, в том числе массивы, списки, если только прило- catch {
жения, подключённые к базе данных, умеют их правиль- for {set entry [$c get -first] } { $entry != {} } ↵
{ set entry [$c get -next] } {
но интерпретировать. C одной стороны, это даёт боль- eval entry $entry
ший простор для разработчиков приложений, так как они puts [lindex $entry 0]
}
не ограничены в выборе структур данных. А с другой – ус- }
ложняет обмен данными между приложениями, поскольку $c close
$h close
для работы с базой данных приложение должно изначаль- $e close
но точно знать используемые типы структур. Собственно
поэтому и не существует универсальных утилит для дос- Идея проста. Вначале подгружается интерфейс доступа
тупа к базам данных BerkeleyDB. Вообще-то, и использо- к библиотеке BerkeleyDB, а потом открывается environment,

№9, сентябрь 2008 31


администрирование
Так выглядит список «таблиц» в только что созданной
базе данных. Здесь и далее предполагается, что все скрип-
ты собраны в отдельной директории /var/jabberd/scripts. За-
метьте также, что в скрипте нужно указывать ту версию биб-
лиотеки BerkeleyDB, с которой фактически собран Jabberd2.
Как правило, в системе (для совместимости) присутству-
ют несколько версий этой библиотеки, так что тут нужно
быть внимательным.
Попробуем теперь продвинуться дальше и прочитать
из таблицы vcard список виртуальных визитных карточек
с информацией о пользователях, которую они сочли нуж-
ным опубликовать в Jabberd. Впоследствии, например, мож-
но будет сделать скрипт, который переносил бы эту инфор-
мацию или её часть на LDAP-сервер.
Чтение таблицы осуществляется скриптом list-vcard.tcl:

source ../scripts/serialize.tcl
load /usr/lib/libdb_tcl-4.4.so
[berkdb env -home ./ -recover] close
set e [berkdb env -home ./]
set h [berkdb open -env $e sm.db vcard]
set c [$h cursor]
catch {
for {set entry [$c get -first] } { $entry != {} } ↵
{ set entry [$c get -next] } {
eval set vcards $entry
puts "->key(jid) = [lindex $vcards 0]"
set card [deserialize [lindex $vcards 1]]
foreach {field value} $card {
puts "$field : $value"
Рисунок 1. Электронная визитка }
}
}
что (как вы помните) позволяет безопасным образом конт- $c close
ролировать доступ к базам данных. $h close
$e close
На самом деле окружение открывается дважды, пер-
вый раз в режиме восстановления, что является рекомен- Как видите, по сравнению с предыдущим скриптом из-
дуемым способом обработки ошибок, вызванных возмож- менений немного. Во-первых, на этот раз открывается толь-
ным некорректным завершением работы при предыду- ко одна из «таблиц» (vcard) базы данных sm.db, и, во-вторых,
щем открытии базы данных. Затем в уже созданном окру- добавлена специальная обработка значений с помощью до-
жении открывается интересующая нас база данных, при- полнительного файла serialize.tcl. Хотя как ключ, так и дан-
чём делается это в режиме read-only, поскольку для баз, ные в BerkeleyDB могут быть любого типа, но разработчики
содержащих несколько таблиц, иного выбора нет (поз- Jabberd2, как правило, используют в качестве ключей стро-
же вы увидите, как открыть доступ к отдельным табли- ки, а для значений используют список-хэш. Формат спис-
цам на запись). ка выглядит так – вначале идёт имя элемента списка в ви-
Далее в базе данных создаётся курсор-итератор, и в цик- де строки, заканчивающейся нулём, затем идёт целое чис-
ле последовательно перебираются все ключи, которые пред- ло, которое обозначает тип элемента, затем его значение,
ставляют собой имена списков. Вся логика работы с базой и так для каждого из элементов.
данных собрана в операторе перехвата ошибок catch, что Функция deserialize как раз и служит для разбора запи-
гарантирует корректный переход к закрытию всех откры- сей, выполненых в таком форматe, и возвращает их в ви-
тых дескрипторов точек доступа к файлам и базам данных де парного Tcl-списка, который потом группируется попар-
при возникновении ошибок. но через разделитель-двоеточие и выводится на экран.
Запускается скрипт в директории, где находится файл Вот, например, моя электронная визитка (та же самая, что
sm.db, таким образом: и на рис. 1):

$ tclsh ../scripts/list-sm.tcl $ tclsh ../scripts/list-vcard.tcl


->key(jid) = mike@hppi.troitsk.ru
active nickname : mike
disco-items email : mkondrin@hppi.troitsk.ru
logout fn : Kondrin Mikhail
motd-message adr-region : MO
privacy-default adr-country : RU
privacy-items n-given : Mikhail
queue n-family : Kondrin
roster-groups
roster-items До настоящего ldif-формата, пригодного для загрузки
status
vacation-settings на сервер LDAP, пока ещё далеко, но направление движе-
vcard ние, по крайней мере, понятно.

32
администрирование
Не стоит думать, что BerkeleyDB поддерживает толь- мещения в базу дан-
ко простые таблицы. Поскольку BerkeleyDB позволяет осу- ных выглядит доволь-
ществлять объединение (join) по первичному и вторичному но уродливо, и поэто-
индексам, в нем можно хранить данные достаточно слож- му вынесена также в
ной структуры. Также замечательной чертой BerkeleyDB подгружаемый файл
является наличие транзакций, что позволяет вносить из- serialize.tcl. В итоге
менения в несколько таблиц атомарным способом, в сти- результат выглядит
ле «всё или ничего». примерно так, как по-
Как раз для решения поставленной вначале задачи – казано на рис. 2.
заполнение published-roster – нам и придётся столкнуться На этом зада-
с транзакциями. В данном случае это будет скорее вынуж- ч у м ож н о с ч и т а т ь
денной мерой, поскольку в Jabberd2 доступ ко всем табли- решённой. При вхо-
цам из sm.db возможен только в режиме транзакций. Чтобы де на сервер каждый
Jabberd2 мог использовать созданную нами таблицу, в точ- пользователь теперь
но таком же режиме нам и следует открыть published-roster. должен видеть от- Рисунок 2. Открытая база данных
Все элементы в таблице имеют ключ, состоящий из пустой дельные общие груп-
строки, а в качестве значений используется хэш-список пы со списком «опубликованных» пользователей, которые
с полями ask from to (целочисленными) jid name group (стро- администратор может пополнять с помощью скрипта, при-
кового типа). Эта информация построчно заносится в текс- ведённого выше. Следует подчеркнуть, что использова-
товый файл published.txt, откуда она и будет впоследствии ние именно локальной базы данных для этой цели связа-
считываться скриптом. Например, в нашем случае можно но с «техническим заданием», которое мы перед собой пос-
предложить такой вариант этого файла: тавили. Если же, скажем, у вас уже есть готовый каталог
LDAP с электронными визитными карточками сотрудников,
root@myrealm.ru 0 0 0 Admin root то вам, скорее, имеет смысл использовать его в качестве
postmaster@myrealm.ru 0 0 0 Admin postmaster
mike@myrealm.ru 0 0 0 Colleagues mike хранилища v‑cards. Jabberd2 достаточно гибок в этом от-
ношении и позволяет выбрать тип хранилища информации
где учётные записи разнесены по двум группам – реаль- для каждого из модулей индивидуально. Например, в кон-
ных пользователей (группа Colleagues) и административ- фигурационном файле sm.xml.dist из дистрибутива Jabberd2
ных/технических аккаунтов (Admin). Скрипт выглядит та- показано, каким образом можно настроить хранение визи-
ким образом: ток и published roster в каталоге LDAP, отдельно от осталь-
ных данных, для которых используется сервер MySQL.
source ../scripts/serialize.tcl И в завершение небольшая ложка дёгтя. Как уже гово-
load /usr/lib/libdb_tcl-4.5.so
[berkdb env -home ./ -recover] close рилось, основной недостаток Jabberd2 – это практически
set e [berkdb env -home ./] полное отсутствие документации и несовпадение уже име-
set h [berkdb open -dup -hash -create -auto_commit -env ↵
$e sm.db published-roster] ющихся руководств с реальным положением дел. В эту же
set f [open published.txt] ловушку попал и я сам. Этот цикл статей был написан в рас-
set t [$e txn]
set err [ catch { счете на серию релизов Jabberd2 2.1.x, последний из кото-
foreach line [split [read $f] "\n"] { рых (2.1.24.1) вышел в апреле этого года. Однако уже в сле-
set a [ pub_roster_format $k]
$h put -txn $t "" $a дующем релизе (2.2.0) произошли изменения в архитекту-
} ре Jabberd2, в результате чего схема, приведенная в пре-
}]
if { $err } { дыдущей статье, уже не соответствует действительнос-
$t abort ти. Компонент resolver был упразднен, а вся его функцио-
} else {
$t commit нальность перенесена в компонент s2s. При этом единст-
} венный информативный блок <lookup> из его конфигура-
close $f
$h sync ционного файла также перемещен в файл s2s.xml. В об-
$h close щем-то, для динамично меняющегося проекта такие рез-
$e close
кие изменения не являются чем-то необычным, но хоте-
Открытие базы данных sm.db происходит в транзакци- лось бы, чтобы эти изменения хоть каким-то образом на-
онном режиме за счёт выставленного флага auto_commit, ходили свое отражение в документации, хотя бы на уров-
она имеет тип Hash и не требует уникальности индекса не файлов README (где по-прежнему упоминается resolver,
(‑dup). Все изменения, вносимые в файл, обернуты в тран- как один из независимых компонентов) и ChangeLog. К со-
закцию, причём в отличие от предыдущих случаев вызов жалению, этот призыв можно адресовать не только авто-
catch анализируется на предмет обнаружения ошибок, рам Jabberd2, но и многим другим разработчикам свобод-
и (в зависимости от результата) транзакция либо откатыва- ного программного обеспечения.
ется, либо нормальным образом завершается после прочте-
ния файла и заполнения published-roster. Затем база данных 1. Кондрин М. Jabberd2 – простой и нетребовательный к ресур-
синхронизируется, т.е. все изменения, хранящиеся в кэше, сам XMPP-сервер. //Системный администратор, №8, 2008 г. –
в памяти, принудительно сбрасываются на диск. Сама про- С. 34-40.
цедура форматирования записей pub_roster_format для по- 2. Himanshu Yadava. The Berkeley DB Book. Apress, 2007.

№9, сентябрь 2008 33


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

Работаем с данными
Active Directory из скриптов
Часть первая. Применение Bourne Shell

Рашид Ачилов
В корпоративной среде при разработке скриптов рано или поздно возникает вопрос:
«А неплохо было бы иметь базу всех сотрудников с именами, должностями, адресами
и номерами ICQ...», что зачастую приводит к самостоятельным разработкам разной степени
удачливости. Но есть и более простой способ. Такая база уже есть. Ее за нас придумала
Microsoft. Это Active Directory. Нужно только уметь с ней общаться.

Просто LDAP, называть ее AD) в серьезных справоч- нем (pre-Windows 2000) «CATS», име-
и ничего особенного никах для администраторов Windows, нем самого компьютера BIGCAT.
В статье не будет рассматриватся, например [3]. Мы обсудим здесь толь- Человек, никогда не видевший AD,
что такое Active Directory и как она ра- ко те особенности, которые пригодят- получив сетевой доступ к серверу AD,
ботает – на эту тему написано мно- ся нам в дальнейшем. непременно воскликнет: «Так ведь
жество книг, например [1, 2], а так- Для тестирования всюду будет ис- это же сервер LDAP!». И будет прав.
же описание принципов работы Active пользоваться Windows 2003 Server Действительно, со стороны сети сер-
Directory (договоримся в дальнейшем с именем AD shelton.net, коротким име- вер AD выглядит как сервер LDAP.

34
администрирование
Вот какие открытые порты можно обнаружить на нем: программа, написанная на Java (Swing), для работы с LDAP
в графическом режиме (см. рисунок).
Starting Nmap 4.62 ( http://nmap.org ) at 2008-08-01 01:45 NOVST
Interesting ports on bigcat (192.168.50.1):
Что касается ldapbrowser, то с ним практически сразу все
Not shown: 1699 closed ports ясно (кроме настроек подключения, которые станут ясными
PORT STATE SERVICE сами по себе после описания ldapsearch). А вот о ldapsearch
42/tcp open nameserver
53/tcp open domain хотелось бы поговорить особо.
88/tcp open kerberos-sec Ldapsearch – это программа, чрезвычайно важная
135/tcp open msrpc
139/tcp open netbios-ssn
для администратора LDAP, примерно такая же, как ping
389/tcp open ldap и traceroute для администратора сетевого. Она позволяет
445/tcp open microsoft-ds получить, а после несложных манипуляций и использовать
464/tcp open kpasswd5
593/tcp open http-rpc-epmap практически любые данные, что есть в LDAP. Но...
636/tcp open ldapssl У нее собственный язык запросов. Он не то что бы яв-
1026/tcp open LSA-or-nterm
1027/tcp open IIS
ляется сильно сложным, но повергает в изумление лю-
1067/tcp open instl_boots бого, кто сталкивается с ним в первый раз. Он построен
3268/tcp open globalcatLDAP в соответствии с принципом «обратной польской записи»,
3269/tcp open globalcatLDAPssl
3389/tcp open ms-term-serv как в старинных программируемых калькуляторах, ког-
да сначала задается знак операции, а потом перечисля-
Это типичный набор сервисов для контроллера доме- ются операнды. Все операнды разделяются отдельными
на (domain controller, dc). Он может слегка варьировать- скобками, из-за этого выражения приобретают невероят-
ся, но сервис, который нас интересует – ldap (порт 389), – ную громоздкость. Поскольку это язык запросов, то в нем
обязан присутствовать. Неизвестно, почему Microsoft ре- присутствуют только логические операции – И (&), ИЛИ (|),
шила не изобретать свой велосипед, как поступает обыч- НЕ (!). Не путайте ИЛИ и НЕ, несмотря на то, что они сход-
но, а использовало хорошо известный и хорошо докумен- ны по начертанию! Например:
тированный LDAP. Зато над созданием схемы LDAP она n (description=*) – любой объект, у которого определе-
«поработала» изрядно – скажем, на схему inetOrgPerson но поле description. При этом совершенно не важно бу-
ее схема непохожа совершенно – типичный объект AD дет, сколько и каких в поле символов – один символ «?»
«пользователь» с точки зрения ldapsearch выглядит вот точно так же попадет под этот фильтр, как и «длинная-
таким образом: длинная строка».
n (&(objectClass=user)(mail=*)) – любой объект, у которо-
dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=net
objectClass: top
го поле objectClass равно user и определено поле mail.
objectClass: person n (&(objectClass=user)(!(mobile=100*)(mobile=200*))) –
objectClass: organizationalPerson
objectClass: user
любой объект класса user, у которого поле mobile начи-
cn: LDAP Reader нается с цифр 100 или 200.
sn: Reader
givenName: LDAP
n (&(sAMAccountName=*)(homeMTA=*)(!(|(title=*)
distinguishedName: CN=LDAP Reader,CN=Users,DC=shelton,DC=net (department=*)))) – любой объект, у которого определе-
instanceType: 4
whenCreated: 20080817091820.0Z
ны поля sAMAccountName и homeMTA и не определены
whenChanged: 20080817091820.0Z поля title или department. Обратите внимание на распо-
displayName: LDAP Reader
uSNCreated: 954394
ложение знаков логических операций и баланс скобок
uSNChanged: 954399 в последнем примере.
name: LDAP Reader n (&(&(&(mailnickname=*)(|(&(objectCategory=person)
objectGUID:: S2M6nZo2XkCfS2jjHt4XBg==
userAccountControl: 66048 (objectClass=user)(!(homeMDB=*))(!(msExchHome
badPwdCount: 0 ServerName=*)))(&(objectCategory=person)(object
codePage: 0
countryCode: 0 Class=user)(|(homeMDB=*)(msExchHomeServer
badPasswordTime: 128634384464218750 Name=*)))(&(objectCategory=person)(objectClass=
lastLogoff: 0
lastLogon: 128634384682968750 contact))(objectCategory=group)(objectCategory=
pwdLastSet: 128634383003906250 publicFolder))))) – этот поистине чудовищный запрос ис-
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAtInjRe4dmI0lvJgpVwQAAA== пользуется в KAddressbook для получения глобальной
accountExpires: 9223372036854775807 адресной книги из LDAP. Вы можете попрактиковаться
logonCount: 0
sAMAccountName: ldapread в его разборе самостоятельно. Создавал его не я, мне
sAMAccountType: 805306368 его посоветовали в рассылке, посвященной KDE PIM.
userPrincipalName: ldapread@shelton.net
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=shelton,DC=net Тот, кто его создавал, явно не знал ничего про структу-
ру AD, потому что то же самое можно добиться запросом
Это, разумеется далеко не полный перечень полей объ- (&(sAMAccountName=*)(|(sAMAccountType=805306368)
екта, а только те, что создаются при создании учетной запи- (sAMAccountType=268435456))(mail=*)). В приводимых
си пользователя с минимальным вводом данных о нем. числах в sAMAccountType нет ничего магического – это
Ну и раз мы условились считать AD «просто LDAP», просто 0x30000000 и 0x10000000 в десятичной форме.
то, естественно, к ней будут применимы все средства тести-
рования для работы с LDAP, например, ldapsearch, програм- Более подробно язык запросов описан в [5].
ма из комплекта OpenLDAP Toolkit, а также ldapbrowser – С языком запросов немного разобрались. Остается сле-

№9, сентябрь 2008 35


администрирование
дующий вопрос – как подключиться
к LDAP? Здесь надо учесть несколь-
ко вещей.
Во-первых, в Windows Server от-
сутствует так называемый anonymous
bind, то есть возможность подклю-
чения к LDAP без предъявления ка-
кого-либо имени и пароля. Это, ко-
нечно, можно включить, но по умол-
чанию это выключено. Поэтому пе-
ред тем, как начать работать с LDAP
через ldapsearch или разрабатывать
скрипты, необходимо создать отде-
льную учетную запись, отобрать у нее
все права, какие только можно, уста-
новить достаточно простой пароль,
не содержащий символов, которые
при передаче через шелл могут быть
интерпретированы (прямые и обрат-
ные слэши, амперсанд, знак вопро- Ldapbrowser — программа работы с LDAP
са и т. д.). Я обычно использую па-
роль «qwerty{123}» – почему-то системой Windows 2003 Использованные ключи имеют следующее значение:
Server он считается достаточно сложным и имя пользова- n -D – задает binddn;
теля ldapread. Для ldapsearch (и далее повсюду) в парамет- n -w – пароль для подключения;
ре, задающем так называемый bind dn, указывается стро- n -LLL – обеспечивает максимальное упрощение выводи-
ка <имя_пользователя>@<ДОМЕН>, причем с указанным мой информации;
соблюдением регистра, например, ldapread@SHELTON.NET. n -h – адрес сервера;
<ДОМЕН> – это имя AD, переведенное в верхний регистр. n -b – задает basedn;
Во-вторых, что указывать в качестве корня для подклю- n -P – версия протокола LDAP;
чения (base dn)? Обычно base dn формируется следующим n -a – описан в man ldapsearch.
образом: если AD называется, допустим, shelton.net, то соот-
ветствующее значение base dn будет dc=shelton,dc=net. Ес- Далее идет фильтр отбора записей (простейший) и пе-
ли же оно называется, например, kitten.cats.shelton.net (такие речень атрибутов, которые нужно вывести. Если не указать
длинные имена возможны в больших инсталляциях), то со- ничего, будут выведены все атрибуты. В данном случае мы
ответствующее значение base dn будет dc=kitten,dc=cats, запросили атрибуты distinguishedName и sAMAccountType.
dc=shelton,dc=net. Разумеется, можно при подключении Обратите внимание, что атрибуты, которые необходимо вы-
указать не корень AD, а какую-либо его ветку, например, вести, перечисляются через пробел, а не через запятые.
CN=Computers,DC=shelton,DC=net, но в таком случае поиск Теперь добавляем в информацию о пользователе
никогда не поднимется выше ее границы. Проблема же со- (средствами Microsoft) поле title, равное «Читатель», и за-
стоит в том, что логически правильным является создание прашиваем его через ldapsearch:
организационных единиц (OU – Organizational Unit), допус-
тим, соответствующих разным филиалам непосредствен- # ldapsearch -D ldapread@SHELTON.NET -w qwerty{123} ↵
-LLL -h 192.168.50.1 -b dc=shelton,dc=net -P 3 ↵
но в корне AD, поскольку эти ou будут содержать объекты -a always (sAMAccountName=ld*) title sAmAccountType
разных типов – пользователей, компьютеры, группы, дру-
dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=net
гие OU. Поэтому для просмотра всей AD лучше указывать title:: 0KfQuNGC0LDRgtC10LvRjA==
корень. sAMAccountType: 805306368
В третьих, как в AD хранится информация, заносимая
не ASCII символами, то есть на национальных (и на русском Здесь атрибут title закодирован согласно [6], что легко
в том числе) языках? Хранится она в виде текста в коди- узнается по двум знакам «=». Проверяем:
ровке UTF-8, преобразованного с помощью Base64 в набор
символов ASCII. Подробности кодирования изложены в [6]. # echo 0KfQuNGC0LDRgtC10LvRjA== | mmencode -u | iconv ↵
-f utf-8 -t koi8-r
В том, что там именно Base64, мы вскоре убедимся.
Теперь пора попробовать ldapsearch в деле. Читатель

# ldapsearch -D ldapread@SHELTON.NET -w qwerty{123} ↵ Как мы видим, [6] не обманывает нас – это действитель-
-LLL -h 192.168.50.1 -b dc=shelton,dc=net -P 3 ↵
-a always (sAMAccountName=ld*) distinguishedName ↵ но строка UTF-8, закодированная через Base64. Этот при-
sAMAccountType ем – перекодирование через mmencode и преобразование
dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=net через iconv – это уже практически готовая часть скрипта,
sAMAccountType: 805306368 к рассмотрению которого мы сейчас и приступим.

36
администрирование
Работаем из Bourne Shell done
fi
Разумеется, решать «задачу ради задачи» скучно. Поэтому _passwd=`echo $_ideconv | $util_mmencode -u`
возьмем вполне конкретный пример – для использования }
программой Sarg сформировать так называемый usertab-
файл, который задает соответствие логинов, использован- Пояснять тут особо нечего – если второй параметр
ных в процессе аутентификации в Squid и их имен, так как не нуль, то циклом дописать в конец строки столько зна-
они будут выведены в отчете, так что получается вроде: ков заполнения, сколько передано во втором параметре,
и декодировать строку.
ivanov-iv Иванов Иван Основной принцип работы скрипта следующий: после
petrov-pp Петров Петр
root Администратор вводной части (загрузки конфигурационного файла, раз-
бора командной строки, поиска необходимых программ)
Последовательность действий будет практически та- скрипт «расшифровывает» пароль, создает временный
кая же, как мы только что проводили вручную – подклю- каталог для работы, потом запрашивает из LDAP логины
чаемся к LDAP с соответствующим фильтром и списком и имена пользователей и сохраняет их во временных фай-
полей, получаем вывод, преобразовываем его и сохраня- лах (процедуры описаны ниже и довольно подробно):
ем в виде файла. Нас интересуют только поля displayName
и sAMAccountName. Поскольку это демонстрационный safe_logger "LDAPQuery ver. $revisionNumber started"
# Обратное преобразование пароля
скрипт, а не полная версия (полная версия содержит боль- demux_passwd $ldap_password
ше элементов и исполняется в соответствующем окруже- _ldap_pwd=$_passwd
# Создать временный каталог, если еще не создан,
нии), то некоторые части его будут опущены – они в прин- # и перейти в него
ципе уже не раз приводились и могут быть взяты из любо- make_tempdir
# Выполнить поиск в LDAP и сохранить результат
го другого скрипта с [4]. Рассматриваться будут только те ldap_data_query sAMAccountName $tempdir/users.ldif
части, которые непосредственно отвечают за выполнение # Преобразовать данные в читаемый вид
ldap_data_deconvert $tempdir/users.ldif $tempdir/users.list
интересующих нас действий. Так, например, не будут рас- # Выполнить поиск в LDAP и сохранить результат
сматриваться функции usage() и safe_logger(). ldap_data_query displayName $tempdir/names.ldif
# Преобразовать данные в читаемый вид
Данный скрипт будет использовать конфигурационный ldap_data_deconvert $tempdir/names.ldif $tempdir/names.list
файл типового формата, в котором собраны настройки под-
ключения к LDAP: Далее выполняется прием, который я применяю очень
часто – два вложенных цикла сравнения двух списков. Пер-
ldap_server=192.168.50.1 вый список – это список полученных из LDAP логинов, вто-
ldap_basedn="dc=shelton,dc=net"
ldap_binddn=ldapread@SHELTON.NET рой – список логинов пользователей, уже присутствующих
ldap_password="cXdlcnR5YXNkZgo 1" в файле. Он получается тривиальной командой на awk.
ldap_common_filter="(&(sAMAccountName=*) ↵
(sAMAccountType=805306368)(telephoneNumber=*))" Суть его в том, что оба списка считываются в переменные,
etcdir=/usr/local/etc берется один элемент «внешнего» списка и сравнивается
sargdir=sarg2
sargfile=sargusers со всеми по очереди элементами «внутреннего» списка.
Когда находится совпадение, выполняются необходимые
Здесь все должно быть понятно. Кроме пароля. Для па- действия, потом внешний цикл переходит к следующему
роля применена такая странная запись по следующим при- элементу (в Bourne Shell такое возможно – указать опера-
чинам. Во-первых, то, что хранить пароли в открытом виде – тору break или continue число уровней вложенности, на ко-
зло, знают все. Но в то же время трудно найти обратимую торые он одновременно воздействует).
функцию для того, чтобы надежно зашифровать пароль, Во внешнем цикле, идущем по списку логинов из LDAP,
и потом столько же надежно его расшифровать, не прибе- обнуляется счетчик позиции, который будет отмечать пози-
гая к помощи PGP. Поэтому был выбран компромисс – про- цию имени в списке имен. Внутренний же цикл идет по спис-
стейшее преобразование формата, защищающее от слу- ку пользователей, уже присутствующих в файле. Если ло-
чайного взгляда, и не более. Это именно преобразование, гин из LDAP уже присутствует в файле, то незачем его ис-
а не шифр. Точнее говоря, это Base64, у которого отброше- кать дальше, и переходим к следующему логину. Если же от-
ны заполнители и вместо них проставлено их число, что- сутствует, то берется имя пользователя из списка имен, от-
бы слегка запутать. Разворачивается этот пароль вот та- ступив с помощью tail на значение счетчика позиции и взяв
кой несложной процедурой: оттуда одну строку, после чего формируется строка вывода
и выводится в список пользователей Sarg с дозаписью:
# Обратное преобразование строки пароля
# Вход: $1 enconved (строка) - пароль из файла конфигурации # Внешний цикл по списку пользователей из LDAP
# Выход: _passwd - пароль в текстовом виде for _oneldapuser in $ldapusers
demux_passwd() do
{ _togo=0
local _ideconv _iadd _ifill # Внутренний цикл по списку пользователей Sarg
_ifill="=" for _onesarguser in $sargusers
_ideconv=$1 do
if [ ! $2 -eq 0 ]; then # Если пользователь найден, то мы прерываем
_iadd=$2 # и внутренний, и внешний циклы.
while [ $_iadd -gt 0 ]; do # Переходим к следующей записи внешнего цикла
_ideconv=$_ideconv$_ifill if [ $_oneldapuser = $_onesargluser ]; then
_iadd=$(($_iadd-1)) continue 2

№9, сентябрь 2008 37


администрирование
fi make_tempdir() исключительно проста – она создает
done
# Если мы находимся здесь, значит, пользователь LDAP временный каталог с уникальным именем, если такового
# не найден в списке пользователей Sarg. Мы записываем еще не было создано. Сделано это для удобства исполь-
# в список пользователей Sarg строку с логином
# из names.list и именем из names.list зования данного скрипта из других скриптов, чтобы избе-
_oneusername=`cat $tempdir/names.list | ↵ жать гонок (race condition).
tail -n +$_togo | head -n 1`
echo -e "$_oneldapuser \t$_oneusername\n" >> ↵ Наиболее сложными для понимания являются две ос-
$etcdir/$sargdir/$sarglist новные процедуры – ldap_data_deconvert() и write_when_not_
_togo=$(($_togo+1))
_added=$(($_added+1)) dn(). В чем их смысл?
done Дело в том, что ldapsearch в обязательном порядке вы-
водит строку dn для того объекта, поля которого печатаются.
Наибольший интерес, конечно, представляют процеду- Эту строку необходимо пропустить. Но здесь мы имеем еще
ры ldap_data_query() и ldap_data_deconvert(). одну проблему: если в dn есть символы национальных алфа-
ldap_data_query() – достаточно простая процедура, ко- витов, то оно будет представлено base64-кодом. Поскольку
торая всего лишь вызывает ldapsearch, передавая ему все dn может быть очень длинным, то кодировка его зачастую
необходимые параметры из конфигурационного файла значительно превышает по длине 80 символов, а у ldapsearch
и списка переданных параметров. Единственное, что здесь есть еще одна «особенность» – после 80 позиций текста обя-
делается до вызова ldapsearch, – это замена запятых в спис- зательно ставится символ перевода строки, так что просто
ке запрашиваемых полей на пробелы: разобрать по строкам не получается. И выбрасывать пере-
воды строк нельзя – тогда пропадет разбиение между ат-
# Запросить некоторые данные у LDAP-сервера рибутами. Поэтому и пришлось сделать несколько нетриви-
# Вход: $1 fieldname (строка) - Имя атрибута(ов),
# запрашиваемых в AD альных ходов. Для описания ldap_data_deconvert() скажем,
# $2 outfile (строка) - Имя файла для сохранения что write_when_not_dn() выводит данные, требующие преоб-
# полученных данных
# Выход: none разования в один файл, не требующие – в другой и пропуска-
ldap_data_query() ет поле dn при чтении. Кроме того, есть еще одна очень важ-
{
local _ldapfield _outfile ная для нас особенность ldapsearch – если атрибут содержит
_ldapfield=`echo $1 | sed -e "s:,: :g"` данные в base64, то значение отделяется от имени атрибу-
_outfile=$2
# Выполнить запрос к LDAP и сохранить результат та двумя символами двоеточия вместо одного, то есть если
$util_ldapsearch -T $tempdir -D $ldap_binddn ↵ есть второе поле – это данные, которые нет необходимости
-w $_ldap_pwd -LLL -h $ldap_server \
-b $ldap_basedn -P 3 -a always ↵ перекодировать, если его нет, но есть третье – это данные,
$ldap_common_filter $_ldapfield > $_outfile которые необходимо перекодировать.
# Проверить код возврата
status=$? Собственно же ldap_data_deconvert() выглядит следу-
if [ $status -ne 0 ]; then ющим образом:
safe_logger "Unable to complete LDAP request to get ↵
$_ldapfield from AD"
exit # Обратное преобразование данных, прочитанных из AD
fi # Вход: $1 source (строка) - имя файла с исходными
} # данными
# $2 dest (строка) - имя файла для записи
# выходных данных
А вот процедура ldap_data_deconvert() гораздо интерес- # Выход: none
нее. Предварительно рассмотрим вспомогательные проце- ldap_data_deconvert()
{
дуры unspace() и make_tempdir(). local _tempsfx _outfile _tempstr _enconved _skip
# Из строки типа /path/to/filename.ext мы выбираем
# только имя файла. Первая команда отбрасывает путь
# Удалить пробелы и строки комментариев из файла # (шаблон – наибольший префикс). Вторая команда
# Вход: $1 source (строка) - Имя исходного файла # отбрасывает расширение (шаблон – наименьший суффикс)
# $2 destination (строка) - Имя файла результата _tempsfx=${1##*/}
# Выход: none _tempsfx=${_tempsfx%.*}
_unspace() _outfile=$2
{ # Удаляем из файла все пробелы и строки комментариев
cat $1 | grep -v ^# | sed -e "s: ::g" > $2 _unspace $1 stripped.$_tempsfx
} # Готовимся разбивать по строкам, для чего используем
# глобал $newline, равный переводу строки
Процедура unspace() удаляет из файла, заданного пер- saveifs=$IFS
вым параметром, все строки, начинающиеся со знака «#», IFS=$newline
_skip=0
а также удаляет все пробелы. В итоге на выходе будут толь- _tempstr=""
ко строки вывода ldapsearch: _enconved=0
conved=`cat stripped.$_tempsfx`
for one in $conved
# Создать временный каталог, если он еще не был создан, do
# и перейти в него # Внутри строки разбиваем по символу двоеточия
# Вход: none IFS=:
# Выход: tempdir (строка) - имя временного каталога set $one
make_tempdir() # Если $2 установлен, это значит, что значение в коде
{ # ASCII и может быть записано в выходной файл
if [ ${#tempdir} -eq 0 ]; then # напрямую, если это не dn
tempdir=`mktemp -d /tmp/adphones.XXXXXX` write_when_not_dn "$2" $1 1
fi # Если $3 установлен, значит, что значение в коде
cd $tempdir # base64 и должно быть преобразовано перед записью,
} # если это не dn
write_when_not_dn "$3" $1 0

38
администрирование
# Если же одна переменная – это промежуточная строка, # $2 attribute (строка) - имя атрибута
# и она должна быть присоединена к значению буфера # $3 enconved (digit) - 1 значит, что данные
if [ ${#2} -eq 0 ] && [ ${#3} -eq 0 ] && ↵ # не требуют преобразования
[ $_skip -eq 0 ]; then # Выход: none
_tempstr=$_tempstr$1 write_when_not_dn()
fi {
IFS=$newline # Если установлен $1, значит, это первая строка данных,
done # и нужно записать предыдущее содержимое
# Если данные не требуют преобразования – выводим # промежуточного буфера
# в один файл, если требуют - в другой, потому что [ ${#1} -eq 0 ] && return
# mmencode пытается преобразовать все данные, # Если промежуточный буфер содержит накопленные данные,
# переданные ей # их нужно записать
if [ $_enconved -eq 1 ]; then if [ ${#_tempstr} -ne 0 ] && [ $_skip -ne 1 ]; then
echo $_tempstr >> unconved.data # Если данные не требуют преобразования, записать
else # в один файл, если требуют — в другой, потому что
echo $_tempstr >> conved.data # mmencode преобразовывает все
fi if [ $_enconved -eq 1 ]; then
# Сортируем данные в обоих файлах и удаляем echo $_tempstr >> unconved.data
# дублирующие строки _enconved=0
cat unconved.data | sort -df | uniq > $_outfile else
cat conved.data | sort -df | uniq > deconved.data echo $_tempstr >> conved.data
# Построчно перекодируем файл fi
deconved=`cat deconved.data` fi
for one in $deconved # Если атрибут — dn, мы пропускаем эту и следующие строки
do # до тех пор, пока не начнется
echo $one | $util_mmencode -u | $util_iconv ↵ # новый атрибут
-f utf-8 -t koi8-r >> $_outfile if [ $2 = "dn" ]; then
printf "\n" >> $_outfile # Пропускать следующие строки
done _skip=1
IFS=$saveifs return
} else
# Использовать следующие строки и накапливать данные
# во временном буфере
Первые три строки после объявления переменных – _skip=0
_tempstr=$1
пример того, как можно отбросить путь (еще для этого ис- # Отметим, если данные не требуют преобразования
пользуется $(basename $1)) и расширение файла, оставив if [ $3 -eq 1 ]; then
_enconved=1
только его имя. Затем отбрасываем в файле все коммен- fi
тарии и пустые строки (unspace()) и начинаем его построч- fi
}
ную разборку. Поскольку в выводе ldapsearch имя поля от-
деляется от данных двоеточием, каждую строку разбива- Если первый параметр не задан (а такое сплошь и ря-
ем по этому символу. дом, когда разбираются закодированные данные), то сразу
Если после разбора есть второе поле, то данные не нуж- выйти, ничего не делать. Если существуют данные во вре-
но преобразовывать, достаточно проверить, не dn ли это менном буфере, сброшенные туда при предыдущем вызо-
(write_when_not_dn()). Если же после разбора есть третье по- ве, то их нужно записать в соответствующий файл.
ле (второе при этом не проверяется), то значит, это base64- Если атрибут – dn, то пропустить данные, переданные
данные, и они должны быть преобразованы, опять же, ес- при вызове, и все следующие строки, пока не будет сно-
ли это не dn (write_when_not_dn()). Если же нет ни второго, ва обнаружено два поля в строке. Иначе – поместить дан-
ни третьего полей – это промежуточная строка закодиро- ные во временный буфер, и, если они не требуют преобра-
ванных данных, и она должна быть присоединена к буфе- зования, отметить это.
ру, в которые помещается недописанная строка. Это про-
должается до конца входного файла. Заключение
Если были обнаружены закодированные данные, Язык Bourne Shell не очень-то годится для таких вещей, как
то сбросить последнюю строку данных в файл с данными обработка данных, полученных из AD, честно говоря. При-
для раскодирования, иначе в файл, который не будет рас- ходится пускаться на различные ухищрения, и все равно
кодирован. Дело в том, что mmencode не проверяет пере- работа получается с ограничениями – например, мне так и
данный ей текст, а пытается перекодировать его, незави- не удалось сделать одновременный запрос нескольких по-
симо от содержимого. лей. Но для решения несложных задач типа приведенной
После этого отсортировать файлы, отобрать уникаль- его вполне можно использовать.
ный текст (зачем перекодировать что-то более одного ра-
за?) и декодировать файл с кодированным текстом. Деко- 1. C. Реймер, М. Малкер. Active Directory для Windows 2003 Server.
дирование идет по одной строчке с последующим преобра- Справочник администратора. Пер. с англ. – М.: «СП-ЭКОМ»,
зованием в KOI8 (это можно убрать, кому не нужно) и выво- 2004 – 512 с.
дом символа перевода строки после каждой строки. 2. Active Directory, 2nd Edition. Robbie Allen, Alistair G. Lowe-Norris.
Последней интересной процедурой является write_when_ O'Reilly, 2003. ISBN 0-596-00466-4.
not_dn(). Она не очень большая, но весьма запутанная, по- 3. Ч. Расселл, Ш. Кроуфорд, Дж. Деренд. Microsoft Windows 2003
тому что постоянно используются внешние переменные: Server. Справочник администратора/Пер. с англ. – М.: Изда-
тельство «СП ЭКОМ», 2004 – 1392 с.: ил. ISBN 5-9570-0016-7.
# Сформировать файл с данными для преобразования, если оно 4. http://openoffice.mirahost.ru – Сайт, где выложен скрипт.
# требуется, иначе с данными, не требующими преобразования,
# в том случае, если это не dn 5. http://www.ietf.org/rfc/rfc2254.txt.
# Вход: $1 line (строка) - данные из исходного файла 6. http://www.ietf.org/rfc/rfc2849.txt.

№9, сентябрь 2008 39


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

Панель управления
хостингом ISPConfig

Сергей Яремчук
Управление хостингом никогда не являлось простой задачей. Здесь на помощь приходят
специальные инструменты, называемые панелями управления хостингом. Одним из таких
решений является ISPConfig.

В
журнале уже шла речь об одной но, но в процессе установки и работы n управлять виртуальными почтовы-
из панелей управления хостин- он не предлагается вообще (см. рис. 1), ми серверами и ящиками пользова-
гом – SysCP [1]. Недавнее зна- хотя языковые файлы присутствуют телей;
комство с этим продуктом показало, (не для всех меню). Отдельно файлы n управлять почтовыми фильтрами,
что за прошедший год мало что изме- локализации можно скачать по адре- автоответчиками, антиспам- и ан-
нилось, номер версии далеко вперед су [3]. В версии 3, находящейся в ста- тивирус-проверками, работать
не ушел (сегодня актуальна 1.2.19). дии активной разработки, русский ин- с почтой через веб-интерфейс;
Но анализ ссылок по запросу «hosting» терфейс пока недоступен. Но система n устанавливать дисковые квоты
на сайте freshmeat.net показал, что рас- имеет удобный интерфейс для его ло- и лимиты трафика;
клад среди свободных решений стал кализации, и при знании базового ан- n управлять виртуальными FTP-сер-
несколько иной. Из всего списка пос- глийского, потратив несколько часов, верами и пользователями;
тоянно обновляются всего десяток легко это сделать самостоятельно. Го- n управлять SSL-сертификатами, ис-
проектов. На момент написания этих товый на 80% файл доступен на стра- пользованием PHP и CGI;
строк проблем с локализацией не бы- нице «Исходный код» сайта журнала [4] n несколько уровней доступа в за-
ло в SysCP, DTC, VHCS, ispCP. Проект и отправлен авторам ISPConfig, по за- висимости от задач: администра-
VHCS (Virtual Hosting Control Panel) [6] вереням которых будет в ближайшем тор сервера, реселлер, пользова-
уже практически два года не обновлял- времени выложен на SVN. тель (ресурсов сервера). Некото-
ся и содержит несколько критических В остальном функции проектов рые решения предоставляют и воз-
ошибок. Учитывая, что некоторые раз- схожи, и, выбрав любой, можно: можность доступа к почтовым ящи-
работчики на его основе создали ispCP, n управлять веб-сервером (обычно кам и обычным пользователям;
использовать VHCS не стоит. Apache 1.x/2.x), создавать вирту- n собирать статистику по всем воп-
Есть средства для локализации альные серверы; росам;
и в ISPConfig [2], о котором речь пойдет n редактировать DNS-записи (A, n отслеживать обращения в техпод-
дальше, но в последней стабильной CNAME, MX, иногда SPF) на под- держку (ticket system).
версии 2.2.25 этому вопросу приходит- держиваемом DNS-сервере, соз-
ся уделять несколько больше времени, давать домены и субдомены; Все эти функции есть и ISPConfig.
чем в остальных продуктах. Тем бо- n управлять базами и пользователя- Отличия лишь в серверах, которые
лее что здесь небольшая путаница. ми MySQL (другие почему-то мне поддерживает та или иная панель. Ес-
В описании на сайте сказано, что рус- не встречались, по крайней мере ли места для веб и СУБД традиционно
ский язык поддерживается изначаль- в списке основных); заняты Apache и MySQL (альтернативы

40
администрирование
для них предлагаются реже), то для ор-
ганизации SMTP/POP3/IMAP может
быть задействовано любое из до-
ступных сегодня свободных решений.
Поэтому при выборе хостинг-панели
следует внимательно присмотреться
к требованиям. Но, например, Domain
Technologie Control (DTC) [5], который
на сегодня поддерживает самое боль-
шое количество серверов, из-за своей
функциональности не так прост в уста-
новке. Не спасает и то, что он есть в ре-
позитариях многих дистрибутивов (на- Рисунок 1. В интерфейсе ISPConfig русский язык не предлагается
пример, в отличие от остальных реше-
ний он единственный присутствует в Ubuntu). ностью, поэтому грань между ним и пользователем прак-
Официально ISPConfig поддерживает все популярные тически отсутствует. Но для организации хостинга без ре-
сегодня дистрибутивы: Mandrake 8.1 – 10.2, Mandriva от 2006, селлеров того, что есть, вполне достаточно. Также будем
Red Hat Linux 7.3 – 9.0, Fedora (Core) от 1, CentOS 4.1 до 5.2, учитывать, что перед нами все-таки бета, и в дальнейшем
SuSE Linux 7.2 – 11.0, OpenSuSE от 5.2, Debian от 3.0 и Ubuntu все может измениться.
от 5.04. Хотя, вероятно, будет работать и в других решени- В качестве системы для установки рекомендованы
ях, для которых доступны: Debian 4.0 или Ubuntu 7.10. Я использовал Ubuntu 8.04 LTS,
n Apache 1.3.х или / 2.х; проблем в работе замечено не было. Инструкции по уста-
n Sendmail или Postfix; новке найдете на сайте проекта и внутри архива.
n ProFTPd и Pure-FTPd как (standalone) или vsftpd как (inetd/ Вначале обновляем систему:
xinetd/standalone);
n PHP 4.0.5 и выше; $ sudo apt-get update
$ sudo apt-get -u upgrade
n MySQL 4/5;
n POP3/IMAP, поддерживающий форматы – традиционный Приступаем к установке компонентов будущей систе-
Unix-Mailbox (gnu-pop3d, qpopper, ipop3d, popa3d или vm- мы, если какие-то из пакетов уже в системе присутству-
pop3d) или Maildir (Courier-IMAP, Dovecot); ют, их установку можно пропустить. Устанавливаем Postfix,
n BIND 8/9 для ISPConfig 2 или MyDNS для ISPConfig 3; Courier, Saslauthd, MySQL, phpMyAdmin:
n phpMyAdmin, Webalizer, Quota, iptables или ipchains.
$ sudo apt-get install postfix postfix-mysql mysql-client ↵
mysql-server courier-authdaemon courier-authlib-mysql ↵
И некоторые другие приложения. На странице закачки courier-pop courier-pop-ssl courier-imap ↵
можно найти ссылки на некоторые дополнительные инстру- courier-imap-ssl libsasl2-2 libsasl2-modules ↵
libsasl2-modules-sql sasl2-bin libpam-mysql ↵
менты, расширяющие стандартные возможности ISPConfig. openssl courier-maildrop getmail4
Распространяется ISPConfig по BSD-лицензии.
В процессе установки приложений мастер настройки
Установка ISPConfig пакетов будет задавать вопросы по конфигурации. При ус-
Как уже говорилось, на данный момент развиваются две тановке Courier на вопрос «Create directories for web-based
версии: стабильная 2.2.25 и тестовая 3.0.0.6 Beta. Их ин- administration?» отвечаем «No». При установке Postfix
терфейс, а также процесс установки и локализации от- на вопрос «General type of configuration?» выбираем «Internet
личаются. Например, в версии 3 для установки компонен- site». Далее вводим имя почтового домена и на вопрос «SSL
тов используются программы из репозитария дистрибу- certificate required» выбираем «Ok».
тива, а в версии 2 некоторые приложения (Apache 1.3.41, Пароль для пользователя root в MySQL по умолчанию
ClamAV 0.93.3, PHP 5.2.6 и некоторые другие) компилиру- отсутствует. Его нужно добавить.
ются из исходных текстов. Все программы, которые нужно
компилировать, включены в архив, поэтому и размер его $ mysqladmin -u root password password
почти 45 Мб. Даже при соблюдении всех инструкций ком-
пиляция иногда заканчивается неудачей, и установочные Теперь очередь Amavisd-new, Spamassassin и Clamav:
скрипты по разным причинам (чаще несовместимость биб-
лиотек) отказываются дальше работать. Скрипты рассчи- $ sudo apt-get install amavisd-new spamassassin clamav ↵
clamav-daemon zoo nomarch lzop cabextract ↵
таны именно на такую установку, к ним привязаны и инс- apt-listchanges libnet-ldap-perl ↵
трукции. Если, к примеру, необходим Apache2, процесс ус- libauthen-sasl-perl daemon libio-string-perl ↵
libio-socket-ssl-perl libnet-ident-perl ↵
тановки несколько усложняется. libnet-dns-perl
Так как в будущем, вероятно, версия 3 будет основной,
о ней и пойдет речь дальше. Хотя, сравнивая возможности Дальше Apache2, PHP5 и phpMyAdmin:
интерфейса, версия 3 на данный момент проигрывает 2. На-
пример, возможности реселлера пока реализованы не пол- $ sudo apt-get install apache2 apache2.2-common ↵

№9, сентябрь 2008 41


администрирование
apache2-mpm-prefork apache2-utils libexpat1 ↵ И, наконец, средства анализа файлов журналов vlogger
ssl-cert libapache2-mod-php5 php5 php5-common ↵
php5-gd php5-mysql php5-imap phpmyadmin php5-cli и Webalizer.

После установки веб-сервера следует активировать не- $ sudo apt-get install vlogger webalizer
которые модули:
С установкой зависимостей закончили. Теперь скачива-
$ sudo a2enmod suexec ем архив с ISPConfig, распаковываем и ставим:
$ sudo a2enmod rewrite
$ sudo a2enmod ssl
$ sudo a2enmod fastcgi $ wget http://www.ispconfig.org/downloads/ ↵
ISPConfig-3.0.0.6-beta.tar.gz
$ tar xvfz ISPConfig-3.0.0.6-beta.tar.gz
Далее для работы потребуется модуль capability. В вер- $ cd ispconfig3_install/install/
$ sudo php -q install.php
сии 8.04 он вкомпилирован в ядро:
После запуска установочный скрипт будет задавать ряд
$ grep -i capabilities /boot/config-2.6.24-16-generic вопросов (см. рис. 2). Здесь ничего необычного. В квадрат-
CONFIG_SECURITY_CAPABILITIES=y
ных скобках предлагаются ответы по умолчанию, если он не
Иначе его следует загружать в виде модуля: подходит, вводим свое значение. После установки инфор-
мацию можно найти в журнале /var/log/ispconfig_install.log:
$ sudo modprobe capability n Select language (en,de) [en]: – выбираем язык;
$ sudo echo 'capability' >> /etc/modules
n Installation mode (Standard,Expert) [Standard]: – вариант
Ставим пакеты Pure-FTPd и quota: установки.

$ sudo apt-get install pure-ftpd-common ↵ В варианте Expert скрипт будет задавать чуть больше
pure-ftpd-mysql quota quotatool
вопросов по настройке конкретного сервиса, обычно необ-
Отключаем определение имен узлов в журнале Pure- ходимости прибегать к нему нет.
FTPd, при этом записи станут менее информативными, n Fu l l q u a l i f i e d h o s t n a m e ( FQ D N ) o f t h e s e r ve r,
но зато будет требоваться меньше ресурсов: eg foo.example.com [example.com]: – вводим полное имя
сервера;
$ sudo sh -c 'echo 'yes' > /etc/pure-ftpd/conf/DontResolv' n MySQL server hostname [localhost]: – параметры для дос-
тупа к MySQL.
Для третьей версии ISPConfig в качестве DNS-серве-
ра рекомендуется MyDNS. На вопрос «Почему?» ответа Если MySQL принимает подключения не на стандартном
не получил. Все стартовые скрипты рассчитаны именно порту, придется подправить команду подключения внутри
на него, а не BIND. В репозитарии Ubuntu MyDNS нет, по- установочного скрипта.
этому его нужно скомпилировать. Ставим пакеты, необхо- n MySQL root username [root]: – имя root;
димые для сборки: n MySQL root password []:password – пароль для root;
n MySQL database to create [dbispconfig]: – создание базы
$ sudo apt-get install build-essential libmysqlclient15-dev данных.

Скачиваем и устанавливаем MyDNS обычным образом: Далее скрипт создаст базы данных и таблиц, и будет
сгенерирован сертификат, в процессе создания которого
$ wget http://mydns.bboy.net/download/mydns-1.1.0.tar.gz будут заданы традиционные вопросы (страна, город, орга-
$ tar xvfz mydns-1.1.0.tar.gz
$ cd mydns-1.1.0 низация и так далее) и предложено указать порт для под-
$./configure ключения к ISPConfig. По умолчанию – 8080, если этот порт
$ make
$ sudo make install уже занят, меняем его, введя новое значение.
Затем будут созданы пользователь и группа ispconfig, ус-
тановлены задания для crontab и запущены все сервисы.

Веб-интерфейс ISPConfig
После установки набираем в браузере http://hostname:8080,
для регистрации используем учетную запись – admin и па-
роль – admin (пароль после регистрации не забываем сме-
нить). Интерфейс визуально разделен на три поля и стан-
дартен для такого рода программ (см. рис. 3). Вверху на-
ходится основное меню, открывающее доступ к опреде-
ленным настройкам: System, Client, Email, Monitor, Sites,
DNS. Плюс по умолчанию отключенный модуль BE Designer
(включается в настройках учетной записи). При выборе лю-
бого пункта слева будет доступна группа меню, относяща-
Рисунок 2. Работа установочного скрипта яся к нему. Все настройки производятся в центре страни-

42
администрирование
цы. Чтобы разобраться с возможнос-
тями интерфейса, достаточно потра-
тить полчаса времени, все находится
на своих местах и там, где ожидаешь.
Сюрпризов не возникает. На создание
новой DNS-записи, домена, субдоме-
на, виртуального почтового или веб-
сервера, почтового ящика и прочего
уходит 1-2 минуты. Заполняем пред-
ложенные поля и следуем указаниям
системы, в случае проблем появится
предупреждающая надпись.
При создании учетной записи но-
вого пользователя доступные ему
пункты меню реализуются при помо-
щи подключения модулей. Последняя
функция очень удобна, так как пользо-
вателю можно дать именно такой ин-
терфейс, который полностью подхо-
дит для выбранной задачи. Ни больше
ни меньше. Например, можно создать
несколько записей с правами админи-
стратора, передав им часть функций по
управлению. Меню BE Designer позво-
ляет редактировать меню, убирать или Рисунок 3. Интерфейс администратора ISPConfig
добавлять новые пункты. При созда-
нии клиентской учетной записи есть
возможность установки разнообраз-
ных лимитов.
Интерфейс версии 3 переведен
на 6 языков, русского в этом списке нет.
Но разработчики предоставили удоб-
ный инструмент, чтобы сделать это са-
мостоятельно.
В меню System находится отдель-
ный пункт Language Editor. Есть, как
минимум, два варианта работы с ним.
Для начала создаем новый язык, вы-
брав New Language, затем в поле Select
language basis указываем язык, ис-
пользуемый в качестве базового, и
вводим название из двух букв, в New
language (в нашем случае ru). Теперь,
перейдя в меню Languages, выбира-
ем в списке Select language свой язык
и получаем возможность редактиро-
вания отдельных файлов при помощи
веб-интерфейса (см. рис. 4). Но удоб-
нее экспортировать языковый файл, Рисунок 4. Редактирование языкового файла
выбрав в меню Export язык. Создан-
ный файл сохраняем на жесткий диск, ляется со своими задачами. Если час- 2. Сайт проекта ISPConfig – http://www.
в дальнейшем его можно редактиро- то необходимо редактировать DNS-за- ispconfig.org.
вать при помощи любого текстового писи, создавать виртуальные серве- 3. Файл локализации для версии 2.x –
редактора, поддерживающего юникод. ры, стоит присмотреться к этому ре- http://www.wifi-ufa.ru/ispconfig.ru.lng.zip.
По окончании импортируем его через шению. 4. http://www.samag.ru/source.
меню Import. 5. Сайт проек та Domain Technologie
Несмотря на то что перед нами по- 1. Яремчук С. Панель управления хостин- Control – http://www.gplhost.com/software-
ка еще версия ISPConfig, находящая- гом SysCP. //Системный администра- dtc.html.
ся в разработке, она полностью справ- тор, №8, 2007 г. – С. 74-79. 6. Сайт проекта VHCS – http://vhcs.net.

№9, сентябрь 2008 43


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

Лебедь, рак да щука:


САМО-Софт, wine, Etersoft

Сергей Барановский
История о том, как «лебедь, рак да щука везти с поклажей воз взялись», известна всем.
Если рассмотреть эту басню с точки зрения механики удалось Якову Перельману в своей книге
«Занимательная физика», то с точки зрения автоматизации работы турфирм ситуация очень
похожа и можно назвать аналогичную троицу: «САМО-Софт», wine, Etersoft.

О
бщее положение т урф ирм продукт – «САМО-ТурАгент» и описы- ня задуматься. Например, оказалось,
на рынке автоматизации их де- вается способ его запуска под Linux. что тираж журнала велик, продукт бо-
ятельности было описано в май- лее чем известен и интересен читате-
ском номере [2], как и решение по за- «Жареный петух клюнул» лям, а территория распространения
пуску «САМО-Тур» под Linux. Дальше Результат от моей первой статьи пре- журнала широка.
описываются произошедшие измене- взошёл ожидания. Если вопросы ви- Так, при личном общении главный
ния после выхода статьи, а также рас- да «А твоя ли эта статья?» были ожи- разработчик фирмы «САМО» признал-
сматривается ещё один туристический даемы, то другие вещи заставили ме- ся, что «ксерокс» статьи ему подарили

44
администрирование
коллеги сразу после выхода журнала в свет, когда он был
в командировке в Украине.
Ошибка «Variant does not reference an automation object.»
была исправлена уже в июньском выпуске «САМО-Тура»,
а вот сообщить нам об этом и что делать дальше «САМО»
так и не смогли. Самое главное, что дело сдвинулось
с «мёртвой точки» и начался диалог. Нами был передан на
временное хранение в фирму «САМО» компьютер с уста-
новленным Linux для «экспериментов на месте», а так как
наша фирма использует в своей деятельности ещё и дру-
гой продукт фирмы «САМО», о котором речь пойдёт в этой
статье, то общение шло по двум направлениям. Так, про-
граммистом из «САМО» Игорем Калашниковым мы были
направлены в фирму Etersoft [3], которая как раз специа-
лизируется на запуске различных приложений под Linux,
а другой программист – Куракин Вячеслав исправил ряд
ошибок в работе «САМО-ТурАгента». Всё это положитель-
но сказалось на автоматизации нашей турфирмы, но, не-
смотря на это, оперативность, инициативность и качество
работы с клиентами оставляют желать лучшего.

Etersoft
Если зайти на сайт компании [3], то в разделе «о фирме» Рисунок 1. Переключение на OpenOffice в профиле пользователя
можно узнать, что «компания «Этерсофт» была создана
в конце 2003 года группой Linux-разработчиков для оказа- что они отнюдь не заинтересованы в совместных проек-
ния услуг по разработке решений на базе операционной тах, хотя их координаты неоднократно пересылались друг
системы ALT Linux; одной из миссий является популяриза- другу и доступны на сайтах фирм.
ция и внедрение свободных программ в любых областях, Скорее всего, эта ситуация связана с недостаточно
где применяется компьютерная техника». сформированным спросом на услуги со стороны турфирм
Фирма выпускает много интересных решений по разум- и с тем, что у производителей программного обеспечения
ным ценам и бесплатных. Вот некоторые из них, что при- нет существенных конкурентов. Многие маленькие турфир-
влекли наше внимание: модифицированная и улучшен- мы по всей России имеют число компьютеров не больше
ная версия wine, универсальный транслятор SQL-запро- числа пальцев на одной руке и, как вариант, не содержат
сов из диалекта T-SQL в pgSQL (он позволяет использо- технических отделов, т.е. не способны обоснованно сделать
вать PostgreSQL в приложениях, разработанных для работы выбор программного обеспечения, а также имеют затруд-
с MS SQL), UniOffice (позволяет использовать Open Office. нения с настройкой.
org вместо MS Office, выполняя трансляцию COM-запросов В случае каких-либо проверок по используемому про-
к MS Office в вызовы Open Office.org). граммному обеспечению турагентствам проще перепла-
Что интересно, фирма открыта к сотрудничеству тить и купить понятный им Windows, чем связываться с оте-
и без труда предоставляет коммерческие версии своих про- чественными разработчиками программного обеспечения.
дуктов для тестирования по «гарантийному письму» в их ад- То есть вместо того, чтобы кормить свою армию програм-
рес, чем мы и воспользовались. мистов, мы кормим чужую.
Общение с техподдержкой, как для клиентов, так и для «Под лежачий камень вода не течёт» – гласит послови-
«тестеров», происходит по электронной почте. ца. Поэтому наша фирма вынуждена заниматься не толь-
Договориться об иной форме сотрудничества с этой ко своей основной деятельностью – туризмом, но и разра-
фирмой у нас, увы, не получилось, даже в ответ на наше боткой, усовершенствованием и настройкой программно-
предложение оплатить командировку для представителя го обеспечения. Чтобы опыт не пропал зря, я хочу им по-
Etersoft в наш офис. делиться с вами на страницах журнала.

Лебедь, рак да щука Экспорт из «САМО-Тура»


Нельзя сказать, что «воз и ныне там», но ситуация очень При запуске «САМО-Тур» под Linux ранее [2] имелась про-
похожа. Несмотря на столь радужные перспективы, откры- блема экспорта. На сегодня есть несколько решений. Первое
тые журналом в мае, «русский сервис» продолжает быть из них сделано средствами «САМО-Тура», через xml-файл,
ненавязчивым. Как фирма «САМО» вырыла себе большую второе – с использованием транслятора COM-объектов.
яму и не справляется с валом запросов от клиентов на фо-
не текучести кадров, так и фирма «Этерсофт» не успела Xmlfile
достаточно вырасти, чтобы понять, насколько перспектив- Если в любом из выводимых списков или таблице выде-
ным может быть рынок по автоматизации работы турфирм. лить несколько строк, например, пробелом, то можно вы-
При этом месяцы общения с обеими фирмами показали, звать правой кнопкой мыши меню, где будет пункт «экс-

№9, сентябрь 2008 45


администрирование
Также на сайте можно найти ссылки
на похожие проекты, позволяющие
программам вроде «1C» успешно ра-
ботать с OpenOffice.

Другие решения
Существует достаточно много реше-
ний по запуску бухгалтерских про-
Рисунок 2. Ошибка «OLE error 800401F3» Рисунок 3. Сообщение об ошибке
при осуществлении операции экспорта «Вход в систему невозможен» грамм «1С» под Linux. Один из спо-
собов – использование различных
порт». Далее можно осуществить вы- на кнопку со значком Excel, выска- библиотек вместе с wine (например
грузку выбранных данных в Excel или кивает ошибка «OLE error 800401F3» dcom98). Cкорее всего, этим опытом
Open Office Calc в зависимости от то- (см. рис. 2). можно воспользоваться и для продук-
го, как настроен ваш профиль. А в ряде мест так и не исправлена тов «САМО». По крайней мере, фору-
Для того чтобы можно было сделать ошибка «Variant does not reference an мы изобилуют различной информа-
выгрузку в Open Office Calc под Linux, automation object.» Очень напомина- цией, на переработку и проверку ко-
необходимо: ет случай: «Обработать напильником торой требуется время. Также не сле-
Установить под wine ещё один па- до придания нужной формы». дует забывать и про другие сущест-
кет OpenOffice (для Windows c под- Позиция фирмы «САМО» понятна, вующие эмуляторы вроде CrossOver
держкой Java), например, послед- они не видят смысла тратить время Office. В любом случае решение бу-
нюю версию 2.4.1-1. Поддержка Java на переписывание нечасто использу- дет найдено.
для экспорта обязательна и в слу- емых форм экспорта, когда нет време-
чае работы под Windows тоже нуж- ни и во всю идёт разработка «САМО2», Экспорт в почтовую
на. Иначе при попытке экспорта бу- а также появилась возможность вы- систему
дет выдана ошибка «Для выполнения вода форм через «FastReport» [5] Кроме экспорта различных таблиц,
данного задания OpenOffice.org не- и «QuickReport». связь «САМО-Тура» с внешним миром
обходимо установленное окружение происходит и через электронную почту.
Java(JRE). Установите JRE и переза- FastReport Сотрудники туроператорских офисов
пустите OpenOffice.org.». Использова- Хочется отметить, что «FastReport» [5] – регулярно отправляют письма по элек-
ние двух пакетов OpenOffice (родной это интересный проект, заслуживаю- тронной почте как своим партнёрам
под Linux и второй под wine) можно от- щий отдельного внимания. Он удобен с просьбой забронировать ту или иную
нести к издержкам данного способа тем, что без программирования поз- услугу, так и агентствам в виде писем-
и понадеяться, что когда-нибудь про- воляет делать вывод всевозможных подтверждений.
грамма будет одна. форм и отчётов, вставляя в них различ- По мере увеличения объёмов про-
Переключить в профиле пользова- ную информацию, выдаваемую про- даж создание новых писем и нахож-
теля «Использовать пакет OpenOffice» граммами. Несколько слов о настрой- дение нужного адреса занимает мно-
(см. рис 1). ке wine на работу с «FastReport» будет го времени, поэтому требуется автома-
Под wine запустить редактор реест- сказано в разделе «САМО-ТурАгент». тизация этого процесса. Время сокра-
ра (wine regedit), далее в нём перейти Всё упомянутое дальше можно сме- щается за счёт использования различ-
в следующий раздел HKEY_CLASSES_ ло использовать при работе с «САМО- ных шаблонов писем и экспорта в поч-
ROOT\xmlfile\shell\open\command и ис- Туром» и тем самым увеличить число ту. Путём одного-двух кликов менед-
править значение по умолчанию на мест в программе, откуда можно де- жеры получают готовое письмо, кото-
«"путь_к_openoffice" %1». Например: лать вывод информации. рое остаётся только прочитать и на-
жать кнопку «Отправить». В качест-
"С:\Program Files\OpenOffice.org 2.4\ ↵
program\soffice.exe" %1
Uni Office ве почтового клиента нами исполь-
Вторым из решений может быть ис- зуется Mozilla Thunderbird. Несмотря
В половине используемых на прак- пользование транслятора COM-объ- на то что этот клиент является крос-
тике случаев этого хватает. Но дру- ектов [4]. Для этого следует скачать сплатформенным, использование
гая половина экспорта остаётся так с сайта [4] дистрибутив unioffice.msi под Linux имеет свои тонкости. Род-
и недоделанной со стороны фирмы и установить его командой: ная Linux-версия не подойдёт, придёт-
«САМО». Проблема экспорта у них су- ся ставить ещё одну под wine, ситуация
ществует не только под Linux. Если $ wine msiexec /i /путь/unioffice.msi схожа с OpenOffice. Далее, в Windows
взять компьютер, где будет Windows, передачей данных от «САМО-Тура»
«САМО-Тур» и OpenOffice и не будет По факту установка данного паке- к Thunderbird занимается библиоте-
MSOffice (т.е. исключаем проблемы та не сильно повлияла на экспорт. Ос- ка mapi32.dll – её надо скопировать.
портирования под Linux), то в ряде мест новные необходимые функции экс- Есть и 16-битная версия этой библио-
экспорт всё равно не работает. Естест- порта продолжают не работать. Плюс теки – mapi.dll. Чтобы читатель на на-
венно, все эти проблемы наследуются в том, что этот продукт бесплатный ступал на грабли, отмечу, что, исполь-
при запуске под wine. Так, если нажать и может быть полезен кому-либо ещё. зуя Dependency Walker [6], можно вы-

46
администрирование
яснить зависимости и получить име-
на ещё шести библиотек: advapi32.dll,
gdi32.dll, kernel32.dll,ntdll.dll, rpcrt4.dll,
user32.dll, которые, казалось бы, тоже
нужны, но на практике установка всех
их под wine приводит к ошибкам и не-
работоспособности приложений. Из-
начально имеющиеся wine-аналоги
в директории system32 работают луч-
ше, поэтому мы ограничимся копиро-
ванием файлов mapi32.dll и mapi.dll
в директорию ~/.wine/drive_c/windows/
system32. Скорее всего и 16-битная
версия не нужна.
После копирования следует сооб-
щить wine о библиотеке, для этого че-
рез меню «Приложения → Wine → Wine
Configuration» нужно запустить на-
стройщик (см. рис. 7), где следует вы- Рисунок 4. Установка «САМО-ТурАгента»
брать вкладку «Библиотеки» и там в па-
дающем меню «Новое замещение для их деятельности. Одни работают не- шие проблемы. Если его устанавли-
библиотеки» найти по одной (или на-посредственно с будущими туриста- вать через:
писать) названия библиотек, после ми – они называются турагентствами,
нажать кнопку «Добавить» и увидеть,а другие не работают с туристами на- # yum install wine
как они добавятся в окошечке ниже. прямую, но обеспечивают сами услу-
После необходимо в реес тре ги – это туроператоры. то установится его последняя версия
wine (меню «Приложения → Wine → Если продукт САМО-Тур нужен опе- 1.0.1, а она, увы, не «дружит» с «САМО-
раторам, то для автоматизации работы ТурАгентом». Всё ставится, запускает-
regedit») создать раздел HKEY_LOCAL_
агентств существует другой продукт – ся, выдаётся окно запроса логина и па-
M AC H I N E \ S O F T WA R E \ M i c ro s of t \
Windows Messaging Subsystem и про- это «САМО-ТурАгент». роля на вход, но после подключения
писать в нём значение параметра Агентств больше, и наверно, бо- не происходит и выдаётся сообщение
«"MAPI"="1"». лее правильным было бы первую ста- об ошибке «Вход в систему невозмо-
тью посвятить именно этой програм- жен» (см. рис. 3). Проблема решает-
После этих операций у нас местами
ме, но т.к. её запуск значительно про- ся установкой версии 0.9.58-1.fc8. Вы-
заработал экспорт в почту, например,
если из меню «Справочники → Заяв- ще запуска «САМО-Тура», то эта про- яснилось это случайно, т.к. на момент
грамма идёт вторым планом.
ки» выбрать заявку с гостиницей и на- начала работы с программой это бы-
жать на правом меню «E-mail → Бро- Имея за плечами опыт использова- ла самая последняя версия wine и всё
нирование → Для партнёра гостини- ния этой программы под Linux во всех работало. После вышло обновление,
наших офисах продаж уже около го- с которым и возникли проблемы. Раз-
цы ...», то там работает. А вот соседний
пункт «E-mail → Подтверждение/Отме-да, хотелось бы рассказать о том, работчики «САМО» подтвердили ситу-
на – ...» выдаёт сообщение «Ошибка как заставить работать этот продукт ацию, да и вообще на версию 1.0.1 мно-
под Linux, а также о тех недостатках, го нареканий, поэтому пока единствен-
при отправке электронной почты». Ис-
править пока не удалось. с которыми приходилось и приходит- ное доступное решение сделать down-
ся сталкиваться в работе.
Бол е е п рав ил ьн а я п о з и ц ия – grade до версии 0.9.58. На других вер-
это не работать с различными транс- Допускаю наличие более удоб- сиях проверка не производилась.
ляторами запросов и конверторами, ных продуктов других фирм, и было Найти старые версии в виде rpm
проводя рабочие часы на форумах, бы хорошо прочитать о них на стра- можно, например, на http://rpmfind.net.
а чтобы разработчики программного ницах журнала, но по ряду причин на-
обеспечения учитывали потребности ша фирма не смогла найти альтерна-
рынка более гибко и сами создавали тивный продукт и мы вынуждены бы-
необходимые функции в своих продук-ли купить этот.
тах. Никто, кроме самих разработчи- В установке «САМО-ТурАгента» нет
ничего сложного. Для этого требуется
ков, не знает лучше свой собственный
дистрибутив программы, установлен-
код, но по жизни получается, что мир
держится на Кулибиных. ный Linux, например Fedora 8, а также
пакет wine. Если вы прочитали первую
САМО-ТурАгент часть статьи [2], то проделать эти шаги
Все туристические фирмы можно гру- для вас не составит труда.
бо поделить на две части по сферам А вот с wine нас ожидают неболь- Рисунок 5. Вводим логин и пароль

№9, сентябрь 2008 47


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

Рисунок 6. «Ошибка подключения» Рисунок 7. Wine Configuration

Если у вас не получится найти, то пи- сами примерно со следующим содер- под Windows, если в настройках IE
шите на форум журнала – поделюсь. жанием: был прописан прокси, то и программа
По-хорошему, следует откатывать подключалась, используя этот прок-
все файлы, но у меня работает и для [Settings]^M си. При этом галочка «Использовать
Locale=0^M
двух основных. Сначала удаляем фай- ConnectionIndex=0^M прокси-сервер» установлена не была.
лы с ключом --nodeps: ^M Приходилось её ставить, прописывать
[Connection0]^M
Port=88^M «левый» прокси, а после в списке ис-
# rpm -e wine wine-core –nodeps Name=Connection^M ключений прописывать реальный ад-
Host=192.168.0.1^M
UserName=^M рес сервера, тогда подключение к не-
а затем устанавливаем предыдущие: Login=^M му шло напрямую.
Также интересно, что настройка
# rpm -ihv wine-0.9.58-1.fc8.i386.rpm ↵ где ^M – так отображается перевод для поля agentinfo находится отдель-
wine-core-0.9.58-1.fc8.i386.rpm ↵
--nodeps --force строки. Не забывайте, что в Windows но от настроек подключения. Так раз-
и Linux есть различия. Поэтому или работчики нам сообщили, что сама
Да лее копируем дис трибу тив по другим причинам с созданием фай- программа при подключении к сер-
«САМО-ТурАгента» на компьютер и за- ла автоматически, при запуске про- веру не обращает внимания на сис-
пускаем из-под wine файл setup.exe, граммы, возможны проблемы. При ко- темные настройки прокси у IE, а вот
после чего начинается обычная уста- пировании работающего файла проб- agentinfo (справа внизу) на них смот-
новка (см. рис. 4). лем нет. реть будет. Настройки лежат в реес-
Далее, копируем с Windows-ма- Далее, запускаем программу, щёл- тре wine. Проверьте в ветке реест-
шины файл client.conf в директорию: кнув по иконке (пальмочка в меню ра HKCU\Software\Microsoft\Windows\
~/.wine/drive_c/Program Files/SAMO-Soft/ «Приложения → Wine → Программы → CurrentVersion\Internet Settings пара-
TourAgent SQLNet 5.2 или создаём его САМО-ТурАгент SQL 5.2 → САМО-Тур- метр ProxyEnable, он должен быть
Агент SQL 5.2»). Вводим логин и пароль установлен в 1. ProxyServer хранит
и подключаемся (см. рис. 5). адрес прокси-сервера, например
При первой установке будет за- server:3128. Параметры аутентифи-
прос от Wine Gecko Installer – нажима- кации, скорее всего, следует пропи-
ем Install. В случае отмены – нажатие сать там же.
Cancel, вопрос будет задан при повтор- На мой взгляд, это не самое удач-
ном запуске, а в правом нижнем углу ное решение, но другого нет.
не будет показана информационная
панель agentinfo. Что ещё не работает
Информация на панели берётся (не работало)?
с адреса http://www.samo.ru/agentinfo/?, Первые версии программы не закры-
и кажется, в настройках программы вались с помощью «крестика» в пра-
этот адрес не меняется. Если в вашем вом верхнем углу. Пришлось обучить
случае для выхода во внешний мир всех пользователей использовать xkill.
используется прокси-сервер с аутен- Далее, в середине лета Вячеславом
тификацией, то программа не предо- Куракиным ошибка была исправле-
ставляет отдельного меню по настрой- на. Размер файла client_sqlnet.exe,
ке его параметров. где ошибка исправлена, равен 5710336
Что интересно, в первых версиях байт.
«САМО-ТурАгента» при работе из ло- При сворачивании окна оно прак-
Рисунок 8. Настройка wine,
замещения dll кальной сети версий, запущенных тически никогда после не разворачи-

48
администрирование
вается, и программу приходится за- wine (меню «Приложения → Wine → знаменитым «квартетом» из всё той же
вершать и запускать заново. Для это- Wine Configuration») (см. рис. 7). басни И.А. Крылова.
го пользователи были научены рабо- Во вкладке «Библиотеки» следу-
тать с разными виртуальными столами ет выбрать в падающем меню «Новое 1. Я.И. Перельман. Занимательная фи-
и запускают «САМО-ТурАгент» на от- замещение для библиотеки» нужные зика, изд. 15-е, Государственное изда-
дельном столе. файлы и нажать после кнопку «Доба- тельство технико-теоретической лите-
При попытке сохранить данные вить», после чего они появятся в око- ратуры, М.:1949.
из «Мастера оформления заявки» шечке ниже (см. рис. 8). 2. Барановский С. Как запустить «САМО-
выдаётся окно «Ошибка подключе- После следует скопировать нуж- Тур» для Windows под Linux. //Сис-
ния» (см. рис. 6). При этом данные всё ные шрифты в папку ~/.wine/drive_c/ темный администратор, №5, 2008 г. –
же сохраняются. Аналогичная ошиб- windows/fonts. Например, можно поп- С. 42‑29.
ка выскакивает при удалении заяв- робовать взять целиком папку Fonts 3. Сайт фирмы Etersoft, занимающей-
ки. Пользователи просто игнориру- с какой-нибудь Windows-машины. Пос- ся вопросами запуска приложений
ют ошибку и работают, как если бы ле этих действий все отчёты через под Linux – http://www.etersoft.ru.
её не было. FastReport отображаются, и их можно 4. Uni Office@Etersoft, транслятор COM-
При печати отчётов использует- печатать, например, «Договор с кли- объектов MS Office – http://wiki.etersoft.ru/
ся «FastReport» [5]. Была ситуация, ентом» и другие. UniOffice.
что не видны часть шрифтов, пропа- 5. Fast Reports Inc., генератор отчётов,
дают буквы и абзацы текста. Реше- Заключение создание и разработка отчётов – http://
ние было найдено следующее – ско- Очень хочется, чтобы упоминаемые fast-report.com/ru.
пировать с Windows машины в папку «лебедь, рак да щука» решили пробле- 6. С а й т п р о г р а м м ы D e p e n d e n c y
~/.wine/drive_c/windows/system32 фай- му, сместив воз с места, без привлече- Walker, которая ищет зависимос-
лы riched20.dll и riched32.dll. После это- ния кого-то четвёртого, иначе «знаме- ти меж ду би блиотеками – ht tp: //
го надо их прописать в конфигурации нитое трио» может оказаться не менее www.dependencywalker.com.

Рисунок 9. Программа «САМО-ТурАгент», работающая под Linix

№9, сентябрь 2008 49


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

Обзор
ALT Linux 4.0
Children
Сергей Яремчук
В конце июля компания ALT Linux представила бета-версию необычного дистрибутива,
предназначенного для детского творчества – ALT Linux 4.0 Children. Познакомимся с новинкой.
Мысли вслух циализированные дистрибутивы, с ко- ку общаться с компьютером на рав-
Дистрибутивов Linux сегодня насчиты- торыми удалось за это время познако- ных. Дети быстро осваивают основные
вается уже не одна сотня, а новые ре- миться, ориентированы в первую оче- манипуляции и с радостью предаются
шения появляются практически еже- редь на образование, а значит, на при- игре. С другой стороны, ту часть зна-
недельно. Места среди дистрибутивов сутствие специалистов, которые будут ний, которую дети могут освоить в до-
массового пользования отлично вид- настраивать и обслуживать систему. школьном возврасте, они вполне мо-
но по рейтингу сайта Distrowatch.com. Поэтому, почитав описание ALT Linux гут получить и без помощи компьюте-
Но это не значит, что остальные реше- Children, делаем вывод, что этот дис- ра. Ситуацию обостряют и разнообраз-
ния являются плохими и не заслужива- трибутив несколько выпадает из это- ные публикации на эту тему, в которых
ют внимания. Среди специализирован- го списка, так как «использование де- рассказывается о возможных пробле-
ных дистрибутивов уже нет такой жест- тьми любого дошкольного возраста» мах со здоровьем у детей: ухудшает-
кой конкуренции и распределения сим- подразумевает скорее работу на до- ся зрение, плохо развивается опорно-
патий пользователей. И поэтому впол- машнем компьютере и, что немало- двигательный аппарат, а еще добавим
не можно создать решение, которое бу- важно, без наличия рядом специалис- электромагнитное поле, которое также
дет замечено и принято пользователя- та. Отсюда выдвигаем несколько сво- здоровья не прибавляет. При длитель-
ми. Дистрибутив ALT Linux Children, на- их требований к этому дистрибутиву: ном «общении» с компьютером ребе-
верное, можно отнести к специализи- простота в настройке и использовании, нок становится «чужим», все больше
рованным решениям, направленность автоматическое определение обору- погружаясь в виртуальный мир. Неко-
его звучит как развивающий дистри- дования, наличие удобных программ торые психологи устанавливают воз-
бутив для детского творчества. Ори- для всех возможных задач. С этой точ- растной ценз при знакомстве с ком-
ентирован Children на использование ки зрения и будем в дальнейшем рас- пьютером в 12 лет, Интернет – еще че-
детьми любого дошкольного и школь- сматривать ALT Linux 4.0 Children. рез 2-3 года.
ного возраста, начиная от 4 лет. Нуж- Некоторая доля правды здесь есть.
но отметить, что сегодня уже есть не- Спорный вопрос Но параллельно слышим обратное
сколько дистрибутивов, направленных Единственный вопрос, который мож- мнение, что ребенок, незнакомый с де-
на образовательные цели, частично но назвать спорным при знакомстве тсадовского возраста с компьютером,
о них рассказывалось в статье «Linux с описанием дистрибутива, это воз- уже отстает в развитии. Сегодняшние
в школе?» [2]. За это время ситуация раст ребенка – от 4 лет, при котором компьютерные энциклопедии для ре-
мало изменилась, хотя некоторые про- ему предлагается «осуществить плав- бенка с успехом заменяют бумаж-
екты уже прекратили существование ное погружение в мир свободного про- ные, ведь можно не только прочитать,
или изменили прописку. граммного обеспечения». но и увидеть предмет, описание кото-
В каталоге ПО для Linux на сай- Если почитать советы специалис- рого сейчас интересует. Это намного
те виртуальной энциклопедии http:// тов, то их мнения по поводу того, с ка- интереснее. Добавим сюда еще и обу-
rus-linux.net имеется специальный кого возраста можно начинать зна- чающие видео, недостатка в которых
раздел, содержащий ссылки на об- комство с компьютером, сильно рас- сейчас нет. Хотя это не сделает из ре-
разовательное и развивающее ПО ходятся. C одной стороны, интерак- бенка вундеркинда, но положительный
для Linux. Но сработает это при усло- тивность – одно из главных достоинств результат в любом случае гарантиро-
вии, что Linux уже установлен. Все спе- любой программы – позволяет ребен- ван. На моем домашнем компьютере

50
администрирование
Edubuntu появился на полгода раньше
Ubuntu и именно из-за наличия разви-
вающих программ, полезных для мо-
его ребенка. Благодаря ему мы быст-
ро выучили азбуку, математику, узнали
про космос, окружающий мир и многое
другое. Не говоря уже о том, что прос-
то провели вместе время.
Но есть еще один немаловажный
момент. На некоторых форумах мне
встречались сообщения о детях, ко-
торые в трехлетнем возрасте уже про-
шли Silent Hill, и родители пытаются
для своего чада найти что-то подоб-
ное. Естественно, что можно говорить
о психике такого ребенка и о подходе
родителей? Ведь даже на то, чтобы
пройти игру полностью, следует пот-
ратить не один час времени. Это очень
много. В 12 лет просмотр телевизора
не должен составлять больше 30 ми- Рисунок 1. Меню загрузки ALT Linux 4.0 Children
нут в сутки, а для младшего возраста
эти требования еще жестче. Я уже не темы, терпеть-то ребенок уже не мо- не совсем комфортное на современ-
говорю об игровой атмосфере, кото- жет, ему нужно сейчас и сразу. ных мониторах.
рую создали разработчики Silent Hill. По кнопке <F2> можно выбрать Итак, через некоторое время пе-
Стоит ли говорить, что это явный пере- язык системы, но только при акти- ред нами предстанет рабочий стол
бор. Очевидно, взрослым следует по- вации «Россия» и «Украина» систе- KDE 3.5.9. Все разделы жесткого дис-
нимать, что компьютер не нянька, зада- ма сразу же начнет «говорить» на вы- ка, в том числе и NTFS, монтируются
ча которой отвлечь ребенка, пока ро- бранном языке. Проблем с локализа- в режиме чтение-запись. Их ярлыки
дители чем-то заняты. Самостоятель- цией в дальнейшем для этих языков выводятся на рабочий стол, обеспечи-
ное и бесконтрольное освоение ком- нет. Но если выбрать Казахстан или вая быстрый доступ к файлам на жест-
пьютера не может дать положитель- Беларусь, язык меню становится анг- ком диске. Вставленные в USB флеш-
ного результата. лийским, а как показали дальнейшие накопитель и цифровой фотоаппарат
эксперименты, рабочий стол в таких тут же обнаруживаются, ярлык поме-
Пробуем в работе системах содержит подписи как мини- щается на рабочий стол. Безопасно
Стильное меню, появившееся после мум на трех языках (русском, английс- извлечь его можно при помощи кон-
инициализации диска по умолчанию, ком и выбранном) (см. рис. 2). Но, оче- текстного меню. Правда, появляюще-
предлагает загрузку с жесткого дис- видно, это не недостаток конкретно- еся сообщение «Накопитель отключен,
ка (см. рис. 1). В качестве альтерна- го дистрибутива, а уровень локализа- но не может быть извлечен» пугает да-
тивы – работа в Live CD и тест памяти. ции рабочей среды на этом языке, что же бывалого пользователя. Команда
Честно говоря, почитав описание дис- косвенно подтверждает и информа- mount показывает, что все нормально
трибутива на сайте проекта, я поче- ция о состоянии перевода интерфей- и флешку можно удалять из разъема.
му-то предполагал, что основным бу- са на странице Translations Ubuntu [5]. Повседневная работа ведется от име-
дет работа в LiveCD. То есть ребенок Несмотря на то что <F4> подписана как ни пользователя altlinux, прав у которо-
вставил диск в привод, нажал кнопку «Источник установки», установка дис- го хватает на все операции, в которых
включения питания, подождал некото- трибутива на жесткий диск не предус- может возникнуть необходимость.
рое время и затем спокойно запустил мотрена. Во всяком случае, в меню та-
любимую программу (даже учитывая кого пункта я не обнаружил. Проблем Приложения
все сказанное выше, загрузку систе- с определением оборудования на ком- В ALT Linux Children разработчики по-
мы вполне можно ему поручить). Ко- пьютерах, которые имелись под рукой, местили приложения для самых раз-
нечно, объяснить 4-летнему ребенку, не было. Также тестирование показа- нообразных задач, с которыми может
что нужно переключиться, просто, он ло, что дистрибутив неплохо работа- столкнуться юный пользователь. Этот
поймет (проверено), но вот на его реак- ет и в виртуальных машинах. Поэто- набор тщательно выверен, и состав
цию я бы сильно рассчитывать не стал. му не обязательно прожигать болван- минимизирован. Критерием подбора
Опыт показывает, что в большинстве ку и перегружать систему, когда при- служила простота освоения и удобс-
случаев дети отвлекаются и «забыва- шло «детское время». Проще запустить тво использования. При этом дистри-
ют» вовремя среагировать. Как итог – VirtualBox и переключить в полноэк- бутив не забит «под завязку», размер
утомительная процедура перезагрузки ранный режим. Единственный минус – ISO-образа чуть больше 500 Мб. Ме-
установленной на жестком диске сис- низкое разрешение экрана 800х600, ню KDE выполнено традиционно. Все

№9, сентябрь 2008 51


администрирование
хотелось бы увидеть Gcompris (http://
gcompris.net), который уже давно стал
стандартом де-факто для обучающих
дистрибутивов. Нет двух очень полез-
ных программ от проекта Tux4kids [6] –
TuxMath и TuxTyping, которые могут по-
мочь в изучении математики и английс-
кого языка. Удивляет также полное от-
сутствие программ из KDE edutainment
module [7] , хотя проект предлагает 21
программу. И этот список можно еще
продолжать.
Из всех представленных программ
дети в возрасте 4 и 9 лет могут без
проблем освоить TuxPaint, Potato Guy
и еще несколько логических игр. Ос-
тальные явно рассчитаны на детей
старшего возраста.
Кроме этого, на диске есть фото-
графии и примеры из библиотеки Open
Рисунок 2. При выборе белорусского языка меню будет на 3 языках Clip Art, ссылки на которые расположе-
ны на рабочем столе. Освоить некото-
пользовательские приложения поме- и так далее. Возможности подключе- рые приемы работы с Digikam, GIMP,
щены в четыре пункта меню: «Графи- ния к Интернету урезаны, в графичес- Xara LX и Kdenlive поможет краткий
ка», «Игры», «Интернет» и «Мультиме- ких меню нет пункта настройки сети обучающий курс.
диа». Плюс в нескольких меню собра- или подключения к Интернету. В слу- Минимальная конфигурация ком-
ны программы для настройки системы, чае необходимости все действия при- пьютера, на которой удалось протести-
так как в процессе работы сюда загля- дется выполнять вручную через etcnet. ровать ALTLinux Children, – процессор
дывать не понадобилось, то и говорить Наверное, поэтому в списках прило- Celeron 633, с 256 Мб ОЗУ, видеокар-
о них не будем. жений отсутствуют средства ограни- та Radeon 7000. Проблем и подторма-
Набор приложений для работы чения контента, блокирующие доступ живания не было. Хотя редактировать
с графикой представлен редактора- к неблагонадежным ресурсам, вроде большие изображения и видео пробле-
ми – растровым (GIMP), векторны- DansGuardian, обычно присутствую- матично, в том числе из-за особеннос-
ми (Inkscape и Xara LX) и фракталь- щие в такого рода дистрибутивах. тей работы в LiveCD.
ным Qosmic, просмотрщиками изоб- Меню «Мультимедиа» также не бо- Вот такой он, ALT Linux 4.0 Children,
ражений и работы с фотографиями гато приложениями: аудиопроигры- такие дистрибутивы хотя и не зани-
(showFoto, digiKam и Gwenview). Не за- ватель Amarok, видеопроигрыватели мают топовых позиций в рейтингах,
быта и любимая многими детьми ве- SMPlayer и Kaffeine, нелинейный ре- но они нужны и полезны, хотя бы по-
селая рисовалка – TuxPaint. Жаль, дактор Kdenlive. тому, что это лишний повод провести
что в комплекте всего несколько шаб- Кодеки WIN32 в комплекте отсут- время со своими детьми. Не стоит за-
лонов «Штамп». В Edubuntu и некото- ствуют, поэтому проигрывание видео бывать, что перед нами пока Beta-вер-
рых других дистрибутивах этот пункт в некоторых форматах (Real Media сия, возможно, в финальном релизе
заполнен несколькими десятками кар- и Windows Media 9) невозможно (учи- будут изменения, в том числе и в со-
тинок. тывая специфику, это и не нужно). ставе программ и утилит.
В меню «Интернет» найдем только При щелчке на MP3 файле открыл-
Konqueror и KNetAttach. Здесь нужно ся SMPlayer, который сразу же завис. 1. Сайт компании ALT Linux – http://
отметить, что дистрибутив предназна- Не скажу, что это для него характер- altlinux.ru.
чен больше для развлечения и твор- но, в дальнейшем он без проблем вос- 2. Яремчук С. Linux в школе? //Системный
чества. Хотя и есть возможность со- производил видео. Amarok справился администратор, №6, 2006 г. – С. 74-76.
хранения результатов работы на жест- с воспроизведением MP3 без установ- 3. Сайт проекта Schoolforge – http://www.
кий диск или флешку, но это не каса- ки дополнительных кодеков. schoolforge.net.
ется настроек системы для последую- И наконец, в меню «Игры» можно 4. Сайт «Linux в образовании» – http://
щего восстановления при загрузке. По- найти ссылки на 33 игры самых разных linuxed.ru.
этому Children для повседневной рабо- жанров – аркады, настольные и карто- 5. Страница Translations Ubuntu – https://
ты не подходит. Убраны все привыч- чные игры, простые стратегии (морс- translations.launchpad.net/ubuntu.
ные офисные программы, браузеры кой бой, минер). Признаться, выбор игр 6. Сайт проекта Tux4kids – http://www.
(Konqueror используется как файловый довольно неудачен, действительно об- geekcomix.com/tux4kids.
менеджер), почтовые клиенты, сред- разовательные программы практичес- 7. Сайт проекта KDE edutainment – http://
ства планирования, адресные книги ки не представлены. Например, очень edu.kde.org.

52
закон есть закон
(Продолжение, начало в №7 и №8 следствию пароли и коды шифро-
за 2008 г.) вания?
Такой обязанности не предусмотре-
Для чего и как производится опеча- но. Всегда можно сослаться на свою
тывание изымаемой техники? Как забывчивость. Другое дело, что чело-
можно опечатать ноутбук или ком- век на предприятии – это слабое зве-
муникатор и какая следственная но: пароли оставляются прямо на ра-
процедура гарантирует от злоупот- бочем столе, лежат на видном месте.
ребления следствия и от того, что- Да и смысла скрывать пароль обычно-
бы сами следователи могли допи- му работнику нет, он не несет ответс-
сать что-то на системы хранения твенности за установленное на его
данных? компьютере ПО. Системный адми-
Опечатывание изымаемой техники нистратор и директор могут сослаться
Рубрику ведет юрист
делается для того, чтобы впослед- на право не свидетельствовать против Юлия Штокало
ствии доказать неизменность ком- себя. Даже в случае привлечения в ка-
пьютерной информации. Техника опе- честве свидетелей это право остаётся ля администрации соответствующей
чатывается и упаковывается таким и распространяется на информацию, организации. Под представителем ор-
образом, чтобы ее нельзя было до- которая может быть в дальнейшем ис- ганизации в данном случае будет по-
стать, не нарушив целостности упа- пользована против этих лиц. ниматься любой управленческий пер-
ковки. В протоколе осмотра отража- сонал организации, даже не уполномо-
ется, какой печатью (наименование, Подлежат ли досмотру данные, раз- ченный на то руководителем.
номер и принадлежность определен- мещенные на миниатюрных устрой- Несогласие с порядком, процеду-
ному учреждению печати) опечатана ствах хранения – флешках, карточ- рой проверки, любые замечания и до-
упаковка и чьими подписями данное ках, данные на CD? Существует ли полнения по ходу проводимой провер-
действие заверено: данные о следо- в этом случае категория личных ве- ки фиксируются представителем ад-
вателе и понятых. Эксперт в заключе- щей, не подвергаемых проверке? министрации, участвующим в данной
нии должен указать на неизменность Все зависит от того, с каким постанов- проверке, в протоколе. Не следует от-
доказательств, а именно: были ли опе- лением к вам пришли. Если это поста- казываться от подписания протокола,
чатаны разъемы питания и подключе- новление на обыск, то следователь мо- лучше изложите замечания к нему;
ния периферии у изъятых компьюте- жет потребовать открыть запертые по- не следует также подписывать неза-
ров, не нарушена ли их целостность, мещения, а в случае отказа вскрыть их; полненный протокол; всегда требуйте
если техника упакована – не наруше- может быть проведен личный обыск – копию протокола – обязанность пре-
на ли целостность упаковки. если у следователя возникнут доста- доставить вам копию предусмотрена
По правилам ноутбук должен изы- точные основания полагать, что лицо, законодательством.
маться следующим образом: вытас- находящееся в помещении, в котором
кивается батарейка, опечатывается производится обыск, скрывает при се- Какой в точности перечень докумен-
разъем под батарейку, разъем под пи- бе предметы или документы, которые тов, созданных на этапе и по резуль-
тание, периферию: чтобы не допустить могут иметь значение для уголовного татам проверки, будет представлен
доступ к ноутбуку, либо ноутбук упа- дела. При проведении осмотра и про- в суде, например протокол, акты, ак-
ковывается таким образом, чтобы его верок милиции – досмотр личных ве- ты экспертизы и прочее?
нельзя было достать, не нарушив це- щей и личный обыск возможны толь- Точного перечня документов назвать
лостность упаковки. ко на основании отдельного постанов- нельзя. Нет такого положения, кото-
Коммуникатор и наладонный ком- ления на выполнение каждого из этих рое бы регламентировало, что по од-
пьютер (КПК) изымаются в режиме за- действий. ному делу должны быть обязательно
сыпания без выключения, так как пос- представлены на рассмотрение доку-
ле выключения теряется часть инфор- Кем должен подписываться акт менты согласно определенному спис-
мации. При изъятии не допускается на- со стороны компании? Если ли- ку. Каждый следователь формирует
жатия на его сенсорный экран, опеча- цо, действующее без довереннос- дело исходя из наработанного опыта
тываются его разъемы и устройство ти (директор) отсутствует, то кто и знаний. Обязательными являются
упаковывается так, чтобы доступ к его выпишет доверенность выступать документы, фиксирующие процессу-
управлению был невозможен. В про- от имени проверяемого юридичес- альные действия, как то: возбуждение
тивном случае такую улику можно пос- кого лица? Как, в какой форме мож- уголовного дела, проведение обысков,
тавить под сомнение. но заявить свое несогласие с пред- проверок, привлечение в качестве об-
метом проверки, с процедурой про- виняемого, назначение производства
Во многих сетях применяются сис- верки и с её результатами? Как дан- экспертизы и другие.
темы шифрования. Кроме того, ное несогласие должно быть зафик-
все системы защищаются пароля- сировано проверяющими? Присылайте Ваши вопросы по адресу
ми. Обязаны ли служащие прове- Осмотр помещения организации про- sekretar@samag.ru или оставляйте на фо-
ряемой компании предоставлять изводится в присутствии представите- руме журнала www.samag.ru/forum.

№9, сентябрь 2008 53


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

На страже
безопасности –
Software Restriction Policies

Вадим Поданс

Заботитесь о безопасности сети? Для этого необязательно покупать новые дорогостоящие


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

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

З
адачей каждого системного ад- Политики SRP имеют 3 уровня
министратора является поддер- безопасности, которые отображены
жание в безопасности IT-инфра- в Security Levels:
структуры своего предприятия, а также n Disallowed – запрещено всё, кро-
ограничивать запуск ненужных пользо- ме исключений в Additional Rules.
вателю для работы приложений. n Unrestricted – разрешено всё, кро-
Microsoft предлагает интегриро- ме исключений в Additional Rules. Рисунок 1. Внешний вид консоли
управления политикой Software
ванное в линейку Windows Server n Basic User – то же самое, что и Restriction Policies
и линейку корпоративных настольных Unrestricted, только дополнитель-
систем Windows XP/Windows Vista ре- но включает запрет запуска при-
шение, которое называется Software ложений с повышенными приви-
Restriction Policies (сокращённо SRP) – легиями.
политики ограниченного использова-
ния программ. Далее следует объект Enforcement
Данная технология предлагается (см. рис. 2). В этом окне можно форси-
ещё с линейки Windows 2000 и раз- ровать применение политики не толь-
вивается до сих пор. Тем не менее ко к исполняемым файлам, но и к свя-
многие системные администраторы занным с ними библиотекам DLL.
не знают даже о существовании этой Включение данной опции может зна-
политики или избегают её исполь- чительно повысить нагрузку на сис-
зования из-за сложности настройки. тему, так как при запуске приложения
В широком смысле данная политика через политику проходят и все фай-
определяет, какие приложения мож- лы библиотек, из-за чего расходует-
но запускать пользователю, а какие ся и время, и процессорные мощнос-
запрещено, тем самым снижая риск, ти. Но при этом данная опция позво- Рисунок 2. Окно выбора степени
что пользователь запустит недозво- ляет программе при старте подгру- воздействия политики SRP. Настройки
этого окна влияют на глобальную
ленное программное обеспечение, жать библиотеки только из разре- эффективность политик SRP
скачанное из Интернета, принесен- шенных мест. Например, если при за-
ное на флешке или полученное дру- пуске программы последняя пытает- лируются Software Restriction Policies.
гими противоречащими корпоратив- ся загрузить библиотеки из профи- Если пользователям необходимо за-
ной политике способами. ля пользователя и путь размещения пускать (или запрещено запускать)
Самый простой способ назначить библиотек не указан в исключени- файлы с указанными в этом списке
политику – запустить Group Policy ях, то политика блокирует их загруз- расширениями, то для них нужно со-
Management Console. Затем перейти ку в память. ставлять исключения для уровня бе-
в узел: «Computer/User Configuration → Чуть ниже предлагается выбор при- зопасности по умолчанию (об этом
Windows Setings → Security Settings → менения политики для всех пользова- подробнее чуть дальше). Данный спи-
Software Restriction Policies». телей без исключения или для всех сок можно редактировать под свои
При создании политики (кликнуть пользователей, кроме членов группы условия.
правой кнопкой мыши и выбрать Create Administrators. И последний элемент – Trusted
New Policy) она переходит в состояние Здесь хочу отметить, что при вклю- Publishers (см. рис. 3). В этом окне ре-
Unrestricted, то есть не запрещает ни- ченном UAC (User Account Control) ло- гулируются настройки доверенных из-
чего. Внутри консоли будет 5 объек- кальные администраторы не выво- дателей сертификатов, которыми под-
тов (см. рис. 1): дятся из-под действия политики SRP писываются приложения. Данное окно
n Security Levels – определяет ос- и освобождаются от фильтрации толь- актуально, только если используются
новной уровень безопасности по- ко приложения, которые запущены с правила для сертификатов. В осталь-
литики по умолчанию. использованием повышенных приви- ных случаях оно не используется. Од-
n Additional Rules – здесь задаются легий. Также в доменной среде дан- нако для корректной работы некоторых
исключения для уровня по умолча- ная опция доступна только в секции программ (например, Windows Update
нию. Computer Configuration редактора груп- в Windows XP/Windows Server 2003) не-
n Enforcement – окно для выбора повых политик. обходимо разрешить управление спис-
степени действия политики. И последняя опция – Enforce ком Trusted Publishers для End users (са-
n Designated File Types – окно управ- Certificate Rule. На практике прави- мая верхняя опция).
ления списком расширений фай- ла сертификатов редко используют- И, наконец, рабочая область – раз-
лов, которые проверяются прави- ся, и зачастую есть смысл отключить дел Additional Rules (см. рис. 4). В этом
лом по умолчанию. их проверку, что приведет к ускорению разделе составляются все исключения
n Trusted Publishers – представляет обработки политики. для действия политики по умолчанию.
настройки управления списками Следом идёт элемент Designated Можно использовать следующие типы
доверенных подписчиков для при- File Type. Здесь перечислен список исключений (дополнительных правил)
ложений и скриптов. расширений файлов, которые контро- с учётом порядка их применения:

№9, сентябрь 2008 55


безопасность
n Certificate Rule – правило для сертификатов. Данный Практическая реализация
тип правила используется только для подписанных при- на примерах
ложений и скриптов. Например, можно разрешить за- Итак, мы рассмотрели все необходимые опции, которые
пуск всех приложений, которые подписаны сертифика- присутствуют в консоли MMC – Software Restriction Policies.
том Microsoft Corporation, вне зависимости от их распо- Изучив вышеизложенный материал, можно начинать соз-
ложения и запретить запуск приложений, которые подпи- давать свои правила политики SRP, но для полноты карти-
саны Adobe Systems. При этом нужно указать сертифи- ны я расскажу о некоторых принципах построения надёж-
каты соответствующих издателей, которые должны быть ных политик и важных вещах при работе с SRP.
загружены либо локально, либо на сетевую папку. Наиболее эффективным применением политик Software
n Hash Rule – правило хэша. Для каждого приложения Restriction Policies будет разрешение запуска файлов из па-
требуется создание отдельного правила. Данный тип пок, куда пользователи не имеют права записи, и запре-
правил очень полезен для приложений и файлов, кото- щение запуска файлов из папок, куда пользователи име-
рые находятся в открытых для записи пользователями ют право записи. В таком случае пользователь гаранти-
папках. Например, можно разрешить запуск приложения рованно не сможет запустить файл с рабочего стола (ку-
из папки My Documents (куда пользователь имеет права да он имеет права на запись), но может запустить файл из
записи) по хэшу. В таком случае гарантируется защи- системной папки Windows (куда обычный пользователь не
та от подмены файла (с таким же именем) или при ин- имеет права записи). Этой схеме наиболее полно отвеча-
фицировании файла вирусом, так как в обоих случаях ет уровень безопасности по умолчанию – Disallowed, кото-
хэш самого файла изменится и не подпадёт под прави- рое имеет значение – запретить всё, кроме правил, кото-
ло хэша политики SRP и запуск его будет невозможен. рые указаны в Additional Rules.
В Windows Vista/Windows Server 2008 хранится 2 хэ- Если применить уровень безопасности по умолчанию
ша – MD5 для совместимости с клиентами Windows XP Disallowed, то для запуска файлов придётся запускать не-
и SHA256, как «родной» алгоритм хэширования новых посредственно сами файлы в папках, в которых они раз-
систем. мещены, так как запуск ярлыков из пользовательского ок-
n Network Zone Rule – правило зоны сети. В Windows ре- ружения запрещён. Поэтому в Additional Rules необходимо
ализовано несколько зон сети, как Интернет, Trusted будет создать разрешительные правила, которые позволят
Sites, Restricted Sites, Local Intranet и Local Computer. запускать ярлыки из Start Menu (это ярлыки, которые отоб-
Данный тип правил регулирует, какие установочные па- ражаются в меню Start и «Start → All Programs»). Для это-
кеты разрешены для скачивания исходя из условия их го в Additional Rules необходимо создать правила для пути,
размещения. Для корректной работы правил на основе которые будут указывать на:
зон сети установочные пакеты должны быть основаны
на Windows Installer (иметь расширение .MSI). Например, C:\Users\%username%\AppData\Roaming\Microsoft\Windows\ ↵
Start Menu\*.lnk
можно разрешить скачивание пакетов Windows Installer C:\Users\%username%\AppData\Roaming\Microsoft\Windows\ ↵
из зоны Trusted Sites и запретить скачивание из зоны Start Menu\*\*.lnk
C:\ProgramData\Microsoft\Windows\Start Menu\*.lnk
Restricted Sites. Однако следует учесть, что данная по- C:\ProgramData\Microsoft\Windows\Start Menu\*\*.lnk
литика не влияет на скачивание файлов из браузера
Internet Explorer. На практике правила зон сети исполь- Здесь используется системная переменная %username%,
зуются достаточно редко. вместо которой при работе автоматически будет подстав-
n Path Rule – правило пути. Правила данного типа поз- ляться имя текущего пользователя. Однако следует учесть,
воляют указывать размещение приложений и файлов, что разрешение запуска ярлыка ещё не значит, что разре-
которые не будут проверяться по-
литикой и будут разрешены для
запуска. По умолчанию уже со-
зданы два разрешающих прави-
ла для системных папок Windows
и Program Files. Благодаря этому
приложения из данных папок бу-
дут разрешены для запуска, если,
конечно, не удалить правила вруч-
ную (чего делать не рекомендуется).
Правила для путей могут настра-
иваться очень гибко, так как поз-
воляют использовать системные
и пользовательские переменные
окружения (например, %windir%)
и знаки подстановок (например,
Рисунок 3. Окно c настройкой прав Рисунок 4. Основное окно, в котором
«?» и «*»). Кроме того, можно ука- пользователей для редактирования администратор создаёт правила
зать ключ реестра, из которого бу- списка доверенных издателей исключений. Правила создаются
сертификатов и поведения системы нажатием правой кнопки мыши
дет получен путь. при проверке сертификатов и выбором нужного типа исключения

56
безопасность
шено запускать программу, на которую указывает сам яр- ограниченного использования программ, которая позволит
лык, еще должно быть разрешающее правило и для са- контролировать, что пользователи могут запускать только
мой программы. То есть пользователь не сможет просто те файлы, которые разрешены политикой компании.
изменить путь, на который указывает ярлык для програм-
мы в меню «Пуск». Полезные приёмы
Для этих двух правил необходимо выставить уровень Как правило, при реализованных политиках SRP использу-
Unrestricted, в результате чего пользователи смогут спокой- ется общий уровень безопасности Disallowed, который поз-
но запускать ярлыки из меню Start и из вложенных папок воляет достаточно комфортно и безопасно работать в сис-
первого уровня (например, «Accessories → Paint.lnk»). Од- теме, но вносит ограничение на некоторые операции, та-
нако для систем Windows XP/Windows Server 2003 и систем кие как установка новых приложений. На время процесса
с локализацией на других языках эти пути могут изменять- инсталляции приложений или других админинстративных
ся в зависимости от языка системы. операций требуется кратковременно отключать действие
Для унификации работы с папками профилей пользова- политики по умолчанию. Делать это в редакторе политик
телей политика SRP предлагает возможность чтения зна- не очень удобно. Но есть и другое решение – временная
чений из реестра. Ветка реестра: HKEY_CURRENT_USER\ деактивизация через реестр. Для этого можно воспользо-
Software\Microsoft\Windows\CurrentVersion\Explorer\Shell ваться тремя .REG-файлами, которые кратковременно из-
Folders\ содержит пути для большинства пользователь- меняют уровень безопасности (только для Windows Vista/
ских папок профиля. Для указания пути к Start Menu реко- Windows Server 2008):
мендуется использовать значения реестра для каждой ло- n SRP_Enable – включает уровень политики в Disallowed:
кальной машины. Чтобы использовать значения реестра,
его ключ нужно заключить в знаки процента «%», как это Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ ↵
показано на примерах: Windows\safer\codeidentifiers]
"DefaultLevel"=dword:00000000
%HKEY_CURRENT_USER\Software\Microsoft\Windows\ ↵
CurrentVersion\Explorer\Shell Folders\Programs%*.lnk
%HKEY_CURRENT_USER\Software\Microsoft\Windows\ n SRP_Disable – включает уровень политики в Unrestricted:
CurrentVersion\Explorer\Shell Folders\ ↵
Start Menu%*\*.lnk
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ ↵
Для того чтобы разрешить запуск ярлыков из меню Windows\safer\codeidentifiers]
быстрого запуска (Quick Launch), нужно добавить прави- "DefaultLevel"=dword:00040000
ло для пути:

%userprofile%\AppData\Roaming\Microsoft\ ↵
Internet Explorer\Quick Launch\*.lnk

Таким образом, пользователям уже разрешается запус-


кать ярлыки из меню Start и Programs, при этом абсолют-
ное местоположение меню Start будет определяться каж-
дой машиной индивидуально. Если необходимо разрешить
запуск ярлыков или программ из других локаций, то это до-
стигается добавлением правил пути или хэша, как это по-
казано ниже.
Если у вас на диске D: установлено приложение, кото-
рое в силу своих особенностей требует разрешения записи
в папку с программой для пользователей (увы, но такие при-
ложения до сих пор встречаются, и с ними приходится счи-
таться), то правило пути типа: D:\Programs\SpecProgram\*.exe.
Или указание имени программы не будет эффективным
решением, поскольку пользователю не составит труда
переименовать программу и замаскировать под это имя
свою любимую игру или заражённый файл. В таких слу-
чаях разумнее использовать правила хэша. Если по тако-
му правилу разрешить только необходимые исполняемые
(или скриптовые) файлы программы, то при подмене фай-
лов пользователю не удастся запустить ложное приложе-
ние, так как хэш нового файла не будет совпадать и файл
не подпадёт ни под одно исключение, в следствие чего за-
пуск будет предотвращён уровнем безопасности по умол-
Реклама

чанию, то есть Disallowed.


Вот таким комбинированием типов правил в итоге мож-
но получить достаточно гибкую и эффективную политику

№9, сентябрь 2008 57


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

Рисунок 5. Окно UAC, которое требует подтвердить использование Рисунок 6. Результат выполнения команды «ipconfig /release»
повышенных привилегий или отменить эту операцию в консоли CMD.EXE с использованием повышенных привилегий

n SRP_Basic – включает уровень политики в Basic User: вень безопасности Basic User, который является расшире-
нием UAC (User Account Control). В начале статьи ему было
Windows Registry Editor Version 5.00 дано только определение, а теперь рассмотрим его на прак-
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ ↵
Windows\Safer\CodeIdentifiers] тических примерах.
"DefaultLevel"=dword:00020000 Для начала стоит внести ясность в модель User Account
Control. Данный механизм позволяет пользователям с ад-
И .REG-файлы для Windows XP /Windows Server 2003: министративными учётными записями работать в системе
n SRP_Enable – включает уровень политики в Disallowed: в режиме простого пользователя без использования адми-
нистративных привилегий. То есть локальный админист-
Windows Registry Editor Version 5.00 ратор в обычном режиме по сути не отличается от обычно-
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ ↵
Windows\safer\codeidentifiers] го пользователя, что обеспечивает защиту от случайных
"authenticodeenabled"=dword:00000000 действий администратора.
Когда требуется выполнить административное действие,
n SRP_Disable – включает уровень политики в Unrestricted: UAC запрашивает подтверждение на использвание адми-
нистративных привилегий, и после подтверждения права
Windows Registry Editor Version 5.00 администратора значительно повышаются, позволяя изме-
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ ↵
Windows\safer\codeidentifiers] нять настройки системы.
"authenticodeenabled"=dword:00040000 Также UAC позволяет и рядовым пользователям при не-
обходимости повышать свои полномочия до администра-
Для администраторов рекомендуется использовать ло- тивных путём ввода пароля администратора в окно UAC.
гон-скрипт, который будет копировать эти файлы в систем- Подробнее про UAC можно почитать тут – http://technet.
ную папку и заодно будет копировать ярлыки на рабочий microsoft.com/ru-ru/magazine/cc138019.aspx.
стол администратора при входе на любую рабочую станцию Уровень политики SRP – Basic User позволяет пользо-
домена. И при необходимости администратор этими ярлы- вателям и/или администраторам запускать приложения
ками может временно изменить состояние политики на ло- в обычном режиме (без использования административных
кальной машине. После перезагрузки системы или очеред- привилегий), но запрещает запуск того же приложения с ис-
ного обновления групповых политик восстановятся исход- пользованием повышенных привилегий.
ные настройки политик. Для понимания Basic User приведу два наглядных при-
мера.
Что нового в Windows Vista/Server 2008?
Пользователей и администраторов, использующих Windows Пример 1. Запуск консоли CMD для сброса
Vista и/или Windows Server 2008, может заинтересовать уро- настроек IP всех сетевых интерфейсов
Данное действие из консоли командной строки требует
использование повышенных привилегий. Как это выгля-
дит в действительности? Для этого нужно войти в систему
под административной учётной записью, кликнуть правой
кнопкой мыши на ярлык Command Prompt и выбрать Run As
Administrator. После чего UAC попросит подтвердить приме-
нение административных привилегий (см. рис. 5).
Подтвеждаем эту операцию (нажимаем Continue) и вы-
полняем команду IPCONFIG /RELEASE, которая сбрасыва-
ет настройки IP для всех сетевых интерфейсов (см. рис. 6).
Команда успешно выполнилась, и настройки обнулились.
Для реализации уровня Basic User в Additional Rules
Рисунок 7. Результат выполнения команды «ipconfig /release» создадим хэш-правило для файла CMD.EXE и в качестве
в консоли CMD.EXE с отфильтрованными привилегиями уровнем Security Level укажем Basic User (см. рис. 8).
Basic User

58
безопасность
Теперь повторяем операцию, под-
тверждаем использование повышен-
ных привилегий и повторяем коман-
ду (см. рис. 7). Как видно из картинки,
данная операция не удалась. Хоть мы
и запросили повышенные привилегии,
уровень Basic User не позволил их по-
лучить и и запустил консоль в обычном
пользовательском режиме.

Пример 2. Запуск System


Configuration
Запуск инструментов для диагности-
рования проблем с запуском системы
и автозапуском программ требует ис-
пользования повышенных привилегий,
и без них запустить приложение не- Рисунок 8. Свойства созданного хэш-правила для программы CMD.EXE
возможно. Чтобы продемонстрировать
действие Basic User на приложение, ко-
торое требует повышенных привиле-
гий, создадим в Additional Rules хэш-
правило для этой утилиты, которая
находится по адресу: %SystemRoot%\
system32\msconfig.exe.
И в Security Level укажем Basic User
(см. рис. 9).
Теперь запускаем утилиту из пап-
ки Administrative Tools, и снова появ-
ляется окно UAC, которое требует под-
твердить повышенные привилегии.
При подтверждении политика SRP сно-
ва по хэш-правилу отменяет эти приви-
легии и пытается запустить приложе-
ние в обычном пользовательском ре-
жиме (см. рис. 10). Рисунок 9. Настроенный уровень Basic User хэш-правила для утилиты MSCONFIG.EXE
Однако данное приложение не под-
держивает такую работу, в результа- твенным средством обеспечения бе- 2. Using Software Restriction Policies to
те чего запуск приложения блокиру- зопасности, а являться частью общего Protect Against Unauthorized Software
ется полностью действием по умолча- комплекса мер безопасности, и только (Windows XP/Windows Server 2003) –
нию, как это продемонстрировано на тогда политики SRP будут по-настоя- http://technet.microsoft.com/en-us/library/
скриншоте. щему эффективны. Фундаментальной bb457006.aspx.
Таким образом, уровень Basic User частью системы безопасности являет- 3. Using Software Restriction Policies to
позволяет создавать менее жёсткие ся работа в системе с минимальными Protect Against Unauthorized Software
правила запуска приложений. Напри- необходимыми привилегиями. Если (Windows Vista/Windows Server 2008) –
мер, можно разрешить запуск прило- все пользователи в системе работают ht tp://technet.microsof t.com /en-us/
жений из любых мест, не опасаясь, под учётной записью с административ- appcompat/aa940985.aspx.
что они нанесут ущерб системе, пос- ными привилегиями, то польза от при- 4. Explore the features: User Account
кольку для деструктивных действий менения политик SRP будет минималь- Control – http://www.microsoft.com/
требуются повышенные привилегии. на. Также советую более ответствен- windows/windows-vista/features/user-
но отнестись к планированию реали- account-control.aspx.
Заключение зации политик SRP. Чем больше вни-
Из вышеизложенного материала сле- мания вы уделите стадии планирова-
дует, что политики ограниченного ис- ния, тем меньше времени потребуется
пользования программ – Software для конечной реализации. Кроме того,
Restriction Policies являются гибким план поможет избежать ошибок.
и эффективным инструментом в уп-
равлении решением контроля запуска 1. Software restriction policies overview – Рисунок 10. Такое сообщение будет
приложений пользователями. Однако http://technet.microsoft.com/en-us/library/ получено при попытке запустить
системную утилиту без использования
политики SRP должны быть не единс- cc759106.aspx. повышенных привилегий

№9, сентябрь 2008 59


интервью

Точная геонавигация в городе


с помощью технологии Wi2Geo

Антон Борисов
При посещении крупных городов как часто вам приходит в голову мысль: как же легко здесь,
наверное, заблудиться? Если частенько, то стоит вас разочаровать. Заблудиться в каменных
джунглях становится всё труднее и труднее. Несмотря на отсутствие качественного приема
сигналов GPS в местах городской застройки, появляются новые методы определения точного
местоположения человека.

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

60
интервью
и шоссе в нем будет почти в актуаль-
ном состоянии. Чего нельзя будет ска-
зать о расположении гостиниц, кафе,
магазинов. Понятно, что кто-то посто-
янно производит мониторинг подобно-
го рода информации и поддерживает
карты в должном состоянии. Но карты
надо еще найти, а затем, уже будучи
на месте, попытаться сориентировать-
ся с помощью того же GPS. Человек –
существо своеобразное. Ему хочется
если уж не «всего и сразу», то уж точ-
но в виде «здесь и сейчас». То есть хо-
чет знать свое расположение без вся-
кого поиска карт, их закачивания в КПК
и уж точно без долгого ожидания, по-
ка приемник GPS выдаст точные коор-
динаты. Благо быстро и точно опреде-
лить свои координаты в городских ус- Схема работы Wi2Geo
ловиях уже можно.
Как это реализуется на практи- дет идти через любые интернет-ка- ды и продолжает увеличиваться. Со-
ке, в повседневной жизни? Предла- налы? Предполагается ли клиент- гласно исследованиям ABI Research,
гаю с автором идеи Денисом Алае- скую часть распространять вмес- к 2012 году количество продаж Wi‑Fi-
вым рассмотреть организацию услуги те с базой данных точек присутс- чипсетов достигнет миллиарда в год.
Wi2Geo, которой и посвящено сегод- твия Wi‑Fi? ABI также прогнозирует, что к 2011 го-
няшнее интервью. Да, отправка запросов на серверную ду будет продаваться больше 250 мил-
часть будет идти через любые интер- лионов электронных устройств и более
Денис, в чем заключается идея про- нет-каналы. Это может быть GPRS, 360 миллионов карманных устройств,
екта? CDMA, тот же Wi‑Fi, главное, чтобы оснащенных Wi-Fi. На данный момент
Основой проекта является технология клиентское приложение могло соеди- почти 100% выпускаемых ноутбуков
позиционирования в городе при помо- ниться с нашим сервером. На данный содержат Wi‑Fi-чипсет в базовой ком-
щи Wi-Fi-сетей. Принципиальное отли- момент уже существует приложение плектации. Все владельцы таких ус-
чие от существующих систем навига- для ноутбуков, которое хранит базу тройств являются потенциальными
ции (GPS) заключается в интерактив- данных о Wi‑Fi-точках локально, но пользователями нашего сервиса.
ности, т.е. создаваемый сервис будет используется оно только для внутрен-
не только средством для определения него тестирования. Думаю, что в бли- Какова бизнес-модель? За счет че-
местоположения, но и инструментом жайшее время мы начнем распростра- го предполагается зарабатывать
общения, обмена информацией (теку- нять базу данных точек вместе с кли- деньги?
щее местоположение, история переме- ентскими приложениями для ноутбу- Конечному пользователю основные
щений). Среди прочих отличий и пре- ков, это намного увеличит скорость сервисы будут предоставляться бес-
имуществ важно отметить: позиционирования и уберет необходи- платно. Зарабатывать мы предполага-
n возможность навигации в любой мость подключаться к интернет-кана- ем на дополнительных сервисах, воз-
точке города, в том числе на узких лам. Но тем не менее стоимость GPRS- можно, на рекламе, а также на прода-
улицах и внутри зданий; трафика не такая уж и большая, а на же доступа к API для сторонних раз-
n существенно меньшее, чем у GPS, каждый запрос приходится не боль- работчиков, которым интересно доба-
время, требуемое для приведения ше 200 байт в обе стороны, так что вить возможность Wi‑Fi-позициониро-
устройства в рабочий режим; мы не видим каких-либо серьезных вания в уже существующие или какие-
n более высокая точность по сравне- причин добавлять возможность оф- то новые проекты. То, что такая заинте-
нию с GPS и системами GSM-пози- флайн-позиционирования в мобиль- ресованность есть, мы уже уверены –
ционирования (до 1 метра); ные клиенты. на данный момент у нас есть несколь-
n cущественно большая аудитория ко договоренностей с уже существу-
и нулевая стоимость входа (чтоб Кого вы рассматриваете в качестве ющими проектами, которые хотят до-
начать пользоваться, не нужно ни- потенциальной аудитории? бавить возможность позиционирова-
чего покупать, достаточно поста- Благодаря широкому распростране- ния через Wi‑Fi.
вить клиентское приложение). нию технологии Wi-Fi и значительно-
му снижению цен на Wi-Fi-совмести- Можете назвать эти проекты или хо-
Исходя из вышеперечисленного мые мобильные устройства количест- тя бы их сферу деятельности?
означает ли, что отправка запро- во таких устройств и точек доступа су- Их огласить пока нельзя, а сфера их
сов на серверную часть проекта бу- щественно выросло в последние го- деятельности – в основном информа-

№9, сентябрь 2008 61


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

И «как дошли до жизни такой»?


Мы все из Иркутска, переехали в Мос-
кву в разное время, но знаем друг дру-
га давно, еще оттуда. Двое из нас окон-
чили матфак ИГУ, еще один – МФТИ,
я сам окончил МАИ, сейчас являюсь
аспирантом. Когда-то давно вместе ра-
ботали в одном интернет-сервис-про-
вайдере, потом еще делали несколько
интернет-проектов, в частности, свое-
го хостинг-провайдера.

Корни алгоритма и реализации, ка-


ковы они?
Денис Алаев - автор проекта (справа) и Александр Доржиев - один из участников
проекта В рамках моей кандидатской диссерта-
ции был изобретен и реализован алго-
ционные порталы и социальные се- ге. Но мы не считаем его своим кон- ритм, позволяющий определять место-
ти, есть также пара сервисов, предо- курентом. Во-первых, сделать карту положение с точностью от 2 до 15 мет-
ставляющих услуги корпоративным покрытия и выйти на рынок – это аб- ров. Отлажен механизм сбора инфор-
клиентам. солютно разные вещи. Карту покры- мации о точках Wi-Fi-доступа, необхо-
тия для Navizon делают пользовате- димой для работы сервиса. Было про-
А как вы предполагаете вставлять ли, видимо, так случайно получилось. ведено исследование уже зарегист-
рекламу – что-то наподобие IFRAME Мы не думаем, что на данный момент рированных патентов смежной тема-
или иначе? Navizon серьезно смотрит на россий- тики, и мы посчитали, что формулы
Можно и IFRAME, на самом деле ский рынок. Во-вторых, карта покры- расчета местоположения – собствен-
это технические детали, посмотрим, тия в Москве и Санкт-Петербурге уже но, know‑how – позволяют получить
вполне возможно, что это будет и сейчас у нас больше примерно в пол- нам патент. Поэтому мы подали заяв-
JavaScript. тора раза, чем у Navizon. В‑третьих, ку на его получение.
у нас разные бизнес-модели, Navizon Дело в том, что сам алгоритм, кото-
Знакомились ли с зарубежным опы- продает свои приложения, что очень рым мы пользуемся, – это не триангу-
том? Есть ли аналогичные сервисы сложно, учитывая «российскую» мен- ляция. Мы составляем карту мощнос-
на рынке? тальность, мы же будем предостав- тей распределения сигналов, при этом
Да, аналоги есть. Например, на аме- лять Wi‑Fi-позиционирование вместе нам совсем не нужно знать, где по-на-
риканском рынке действуют две с ПО бесплатно. стоящему находится Wi‑Fi-точка, до-
компании близкой направленности: статочно знать, в каком месте (широта,
http://www.skyhookwireless.com и http:// Как именно происходит добавление долгота) и с какой мощностью мы при-
www.navizon.com. Первая (по нашим новых сетей? За счет энтузиастов, нимали сигнал от данной конкретной
оценкам) достаточно успешна и реа- целенаправленного обхода или как- точки доступа. На основе этой инфор-
лизует похожие бизнес-модели в США то по-другому? мации строятся карты распределения
и Канаде. К описываемому направ- Одновременно и так, и так. Во-первых, мощностей сигналов, и уже по этим
лению проявляет серьезный интерес мы постоянно объезжаем новые мес- картам определяется местоположе-
компания Intel – они инвестировали та, увеличивая покрытие. Во-вторых, ние мобильного устройства.
в SkyHookWireless и ведут свои науч- есть подпроект – http://labs.wi2geo.ru,
ные разработки. На российском рын- там энтузиасты могут посмотреть ста- Наверняка вы столкнулись со слож-
ке в данный момент ничего похоже- тистику по Wi‑Fi-точкам, а также за- ностями в реализации, сколько вы
го нет. лить свои собранные Wi‑Fi-точки. По- открыли для себя технических изю-
лучается очень эффективно, например, минок?
Navizon на своей карте покрытия в Санкт-Петербурге, Анталии и Ир- Технических изюминок оказалось мно-
показывает и Москву. Они со сво- кутске мы никогда не собирали точек, го. Например, мы параллельно дела-
ей технологией уже вышли на ры- но тем не менее они там есть. ем навигацию через GSM, выясни-
нок РФ или это своеобразная про- лось, что там достаточно сложно сде-
мо-акция получилась? Кроме вас, как идеолога проекта, лать триангуляцию. По умолчанию те-
Да, у Navizon есть карта покрытия кто еще занят в проекте? лефон видит только одну соту, но там
в Москве и даже Санкт-Петербур- На данный момент в проекте работа- есть так называемое инженерное ме-

62
интервью
ню, включив которое, можно увидеть переговоры с несколькими венчурны- ний день оставляют желать лучшего.
больше одной соты. Но доступ к это- ми фондами и компаниями о возмож- Мы пытаемся это изменить.
му меню был только в старых моделях. ном финансировании проекта. На ран-
В современных же телефонах до него ней стадии проект финансировался А выбранный вами инструмента-
практически невозможно достучаться, из средств основателей. Текущие ис- рий – операционная система, SQL-
а значит, и видеть больше одной соты, точники финансирования мы не хоте- движок, механизмы масштабирова-
отсюда не может быть и триангуляции. ли бы называть. ния, на чем остановили выбор?
Приходится определять навигацион- Серверы стоят на операционной систе-
ные координаты только по одной точ- Когда вы знакомились с зарубеж- ме FreeBSD, мы используем PHP в ка-
ке, а это, как ни крути, в лучшем слу- ным материалом, то каковы теку- честве FrontEnd, в качестве BackEnd
чае метров 300-500 (в центре Москвы, щие применения (или возможные выступает движок WiGONE (Wi2Geo
там где базовые станции стоят доста- применения) увидели для промыш- Orientation and Navigation Engine), ко-
точно часто). ленного сектора, среднего или ма- торый, собственно, занимается рас-
Также выяснилось, что несмот- лого бизнеса? Понятно, что сфера четом координат через Wi‑Fi и GSM,
ря на то что у Google Maps есть API, развлечений, по всей видимости, сам движок написан на Java, в качест-
для Google Maps Mobile такого API будет лидировать. ве базы данных мы используем MySQL
нет. Обычное API использовать нель- Безусловно, есть много применений и OLAP4J (the Open Java API for OLAP),
зя, так как урезанный Javascript в те- для бизнеса. Наш сервис можно при- в силу специфики алгоритма он нам
лефонах не умеет работать с настоя- менять для служб такси, тогда диспет- очень помогает. Технология просто
щим API. Пришлось фактически повто- черы будут точно знать, где находятся масштабируется, нужно только поста-
рять путь Google и писать собственного их автомобили, также мы видим боль- вить второй Java-сервер и начать рас-
клиента для мобильных карт. На дан- шую зону применения для курьерских пределять запросы между ними. По на-
ный момент мы используем Google служб и вообще для всех логистичес- шим расчетам, один такой сервер смо-
Maps Static, правда, с некоторыми до- ких компаний. жет выдерживать до 100 тысяч пользо-
работками, чтобы добавить возмож- вателей ежедневно.
ность плавной прокрутки, правильный То есть привязать можно разные
зум и так далее. сферы, например, Аэрофлот и ту- Почему выбрали FreeBSD? Было ли
Со сбором информации об окру- ристические агентства? В том пла- это сделано исходя из каких-то по-
жающих Wi‑FI-сетях проблем осо- не, что предоставлять местополо- литических соображений или ис-
бых не было, ни на Windows Mobile, жение разных структур рядом с аэ- ходя из прагматических соображе-
ни на Windows XP/Vista (на момент на- ропортами, местами отдыха. ний и опыта?
писания этих строк у нас есть ПО толь- Конечно, привязать можно абсолют- Во-первых, конечно, благодаря опы-
ко под эти две платформы). За исклю- но разные сферы. Навигация так- ту. Мы в принципе достаточно давно
чением того, что в ОС Windows Vista же плотно связана с нашей жизнью уже используем FreeBSD (начинали
лучше пользоваться утилитой netsh, и всем, что мы делаем, как и телефон- еще с 3.х). Во-вторых, основной дви-
нежели запросами через NDIS, к со- ная связь. Вот только используемые жок написан на Java, а, как известно,
жалению, вариант через NDIS работает для навигации средства на сегодняш- языку Java – почти все равно, на ка-
только в очень ограниченном количест-
ве Wi‑Fi-чипсетов, например, с Atheros
работает, а с Broadcom – нет.

В апреле вы посещали несколько


мероприятий, в том числе и в МАИ.
Хотелось бы выяснить ряд момен-
тов: удалось ли найти инвесто-
ров и насколько финансирование
из внешних источников актуально
для такого стартапа, как ваш?
Да, верно, посещали. В первую оче-
редь из-за того, что я являюсь аспиран-
том МАИ. А финансирование из внеш-
них источников всегда актуально, при-
чем больше не для того, чтобы сделать
технологию, а для продвижения техно-
логии на рынке, особенно это касается
нашего стартапа, так как сама по се-
бе идея достаточно нова, и нужно объ-
яснить пользователям, что это удобно
и нужно. В данный момент мы ведем Мобильный клиент для ноутбука

№9, сентябрь 2008 63


интервью
утбуки, то написать унифицированный Сканирование происходит в пассив-
клиент на Java не представляется воз- ном режиме – мы ведь всего лишь на-
можным, так как даже внутри одного страиваемся на определенную час-
семейства ОС (Windows) приходится тоту и принимаем сигналы, как ра-
прибегать к разным методам опраши- дио. Никаких подключений со сторо-
вания точек, нечего и говорить, что бу- ны Wi‑Fi-точек не существует. Теоре-
дет, когда мы попробуем перенес- тически, конечно, можно сделать та-
ти приложение на *nix. В любом слу- кую возможность со стороны Wi2Geo,
чае придется пользоваться JNI, а это т.е. если владелец Wi‑Fi-спота дока-
не сильно проще, чем написать отдель- жет, что он владелец, можно говорить
ные приложения для каждой из плат- ему сколько пользователей (естествен-
форм. Возможно, в будущем мы по- но, обезличенных) находится в радиу-
меняем политику и сделаем едино- се действия его сети. Но мне кажется,
го Java-клиента, который будет обра- что в этом нет смысла. Сделать такую
щаться уже к специализированным де- статистику не очень просто, а вот тол-
монам на *nix-платформах или систем- ку от нее практически никакого.
ным сервисам на Windows.
С мобильными платформами дело Насколько я знаю, у вас запланиро-
Заблудиться можно, но сложно обстоит еще хуже. Из J2ME нет дос- вана осенняя презентация проекта.
тупа к состоянию Wi‑Fi-окружения. Где она будет проходить?
кой платформе в итоге работает ПО. Из J2ME даже нельзя получить инфор- Проходить это будет 18-25 сентября
И к тому же Windows Server нужно по- мацию о GSM-сотах. Есть, конечно, по- 2008 года в Алуште. Полное точное на-
купать, а FreeBSD не просто так име- лумифическая спецификация JSR179, звание: «XVII Международный научно-
ет приставку Free. по которой можно получить информа- технический семинар «Современные
цию о GSM, но она присутствует бук- технологии в задачах управления, ав-
Расскажите, пожалуйста, о клиент- вально на единицах моделей телефо- томатики и обработки информации».
ской части. Насколько вам удается нов. Поэтому на мобильных платфор-
делать единое ядро программы? мах тоже приходится писать native-при- Какие вы видите перспек тивы
На данный момент, как я уже гово- ложения. до конца года? Что может быть ре-
рил, клиентское ПО написано для ализовано в рамках города (какие-
двух платформ Windows Mobile 5/6 Проводили ли вы аналитические либо приложения для муниципали-
и Windows XP/ Vista (stand-alone расчеты – какие места больше все- тетов, геоинформатики и т. п.)?
и IE plugin). Для Windows XP/Vista ядро го запрашивают и в какое время су- До конца года мы планируем значи-
цельное, различаются только участки ток? тельно расширить покрытие, доба-
кода, которые отвечают за сканирова- По географии у нас пока нет анали- вить еще несколько городов-милли-
ние Wi‑Fi-сетей. В Windows XP мы ска- тики. Пока можем сказать, что в тече- онников, написать ПО под максималь-
нируем при помощи NDIS, а в Windows ние суток делается больше ста тысяч но возможное количество платформ
Vista сканирование происходит при по- запросов на определение местополо- (под Windows Mobile 5/6 и Windwos XP/
мощи встроенной в OS консольной ути- жения. 60% запросов делается, как это Vista уже есть, будет для Symbian,
литы netsh. Эта утилита появилась еще ни странно, с ноутбуков, остальные iPhone, Linux, MAC OS), также мы пла-
во втором сервис‑паке Windows XP, 40% делаются с устройств Windows нируем открыть API для возможности
но вот только в XP, она не умеет ска- Mobile. Думаю, что эта ситуация резко писать свои сервисы сторонним раз-
нировать Wi‑Fi-сети,  в Vista уже уме- изменится, когда мы выйдем из фазы работчикам на основе нашей плат-
ет, что очень хорошо, так как другие, бета-тестирования сервиса. Основная формы.
«классические», методы работают часть запросов делается днем и ближе
в Vista не всегда. Платформы Windows к вечеру. Кстати, уже есть пользовате- И в качестве послесловия стоит вы-
Mobile 5 и 6, как выяснилось, не очень ли, которые пользуются флэш-видже- сказать пару своих мыслей. По мере
сильно отличаются друг от друга, по- тами для LiveJournal, чтобы опреде- роста городов и более плотной концен-
этому удалось написать код, кото- лять и показывать свое местоположе- трации жителей, такого рода сервисы
рый одинаково работает и на пятерке, ние друзьям. будут весьма востребованы. Не важно,
и на шестерке. Также ведется работа что конечный пользователь, по всей
по созданию клиентских приложений Могут ли владельцы Wi-Fi-спотов видимости, не будет обращаться на-
для iPhone, Symbian, Linux. отслеживать клиентов Wi2Geo, ко- прямую к серверам Wi2Geo. За не-
торые находятся в данный момент го это будут делать социальные се-
Рассматривали ли вы возможность в зоне видимости их сети? Напри- ти. А уж в какой форме и что имен-
сделать унифицированный клиент мер, для своей внутренней статис- но они, сети, будут предлагать, пока-
на Java? Если да, то почему отка- тики. жет будущее. В любом случае, заблу-
зались? По умолчанию владельцы Wi-Fi-точек диться скоро будет очень и очень про-
Рассматривали. Если говорить про но- доступа не могут ничего отслеживать. блематично.

64
bugtraq

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


в VMware Server в VMware ACE
Программа: VMware Server версии до 1.0.7 build 108231. Программа: VMware ACE версии до 1.0.7 build 108880
Опасность: Высокая. и 2.0.5 build 109488.
Описание: 1. Уязвимости существуют из-за неизвестных Опасность: Высокая.
ошибок в определенных ActiveX-компонентах. Удаленный Описание: 1. Уязвимости существуют из-за неизвестных
пользователь может с помощью специально сформиро- ошибок в определенных ActiveX-компонентах. Удаленный
ванного веб-сайта выполнить произвольный код на целе- пользователь может с помощью специально сформиро-
вой системе. ванного веб-сайта выполнить произвольный код на целе-
2. Уязвимость существует из-за неизвестной ошибки вой системе.
при обработке запросов в расширении ISAPI. Удаленный 2. Уязвимость существует из-за неизвестной ошибки,
пользователь может с помощью специально сформирован- относящейся к OpenProcess. Локальный пользователь хос-
ного запроса вызвать отказ в обслуживании. товой системы может выполнить произвольный код с повы-
3. Уязвимость существует из-за неизвестной ошибки, шенными привилегиями на хостовой системе. Уязвимости
относящейся к OpenProcess. Локальный пользователь хос- подвержены только VMware ACE 1.x for Windows.
товой системы может выполнить произвольный код с повы- URL производителя: www.vmware.com/products/ace.
шенными привилегиями на хостовой системе. Решение: Установите последнюю версию с сайта произ-
4. Уязвимость существует из-за использования уязви- водителя.
мого кода библиотеки freetype. Удаленный пользователь
может скомпрометировать целевую систему. Множественные уязвимости
URL производителя: www.vmware.com/products/server. в VMware Workstation
Решение: Установите последнюю версию 1.0.7 build 108231 Программа: VMware Workstation версии до 5.5.8 build 108000
с сайта производителя. и 6.0.5 build 109488.
Опасность: Высокая.
Множественные уязвимости в xine-lib Описание: 1. Уязвимости существуют из-за неизвестных
Программа: xine-lib 1.1.14 и 1.1.15, возможно, более ран- ошибок в определенных ActiveX-компонентах. Удаленный
ние версии. пользователь может с помощью специально сформиро-
Опасность: Высокая. ванного веб-сайта выполнить произвольный код на целе-
Описание: 1. Уязвимость существует из-за целочислен- вой системе.
ного переполнения в функции open_ra_file() в файле src/ 2. Уязвимость существует из-за неизвестной ошибки,
demuxers/demux_realaudio.c. Удаленный пользователь мо- относящейся к OpenProcess. Локальный пользователь хос-
жет с помощью специально сформированного RealAudio- товой системы может выполнить произвольный код с повы-
файла вызвать переполнение динамической памяти и вы- шенными привилегиями на хостовой системе.
полнить произвольный код на целевой системе. 3. Уязвимость существует из-за использования уязви-
2. Уязвимость существует из-за ошибки проверки гра- мого кода библиотеки freetype. Удаленный пользователь
ниц данных в функции parse_block_group() в файле src/ может скомпрометировать целевую систему.
demuxers/demux_matroska.c. Удаленный пользователь мо- 4. Уязвимость существует из-за использования уязви-
жет с помощью специально сформированного Matroska- мой версии библиотеки cairo. Удаленный пользователь мо-
файла вызвать переполнение динамической памяти и вы- жет скомпрометировать целевую систему. Уязвимости под-
полнить произвольный код на целевой системе. вержена только VMware Workstation 6.x for Linux.
URL производителя: xinehq.de. URL производителя: www.vmware.com/download/ws.
Решение: В настоящее время способов устранения уязви- Решение: Установите последнюю версию с сайта произ-
мости не существует. водителя.

Множественные уязвимости Уязвимость в WebSphere Application


в VMware Fusion Server
Программа: VMware Fusion 1.x. Программа: IBM WebSphere Application Server версии
Опасность: Высокая. до 6.1.0.19.
Описание: 1. Уязвимость существует из-за использования Опасность: Средняя.
уязвимого кода библиотеки freetype. Удаленный пользова- Описание: Уязвимость существует из-за неизвестной
тель может скомпрометировать целевую систему. ошибки в Servlet Engine/Web Container при включенном фун-
2. Уязвимость существует из-за использования уязви- кционале FileServing. Подробности не раскрываются.
мой версии библиотеки cairo. Удаленный пользователь мо- URL производителя: www-306.ibm.com/software/webservers/
жет скомпрометировать целевую систему. Уязвимости под- appserv/was.
вержены только VMware Player 2.x for Linux. Решение: Установите исправление Fix Pack 19 (6.1.0.19)
URL производителя: www.vmware.com/products/fusion. с сайта производителя.
Решение: В настоящее время способов устранения уязви-
мости не существует. Составил Алекесандр Антипов

№9, сентябрь 2008 65


человек номера

Ричард Столлман:
свобода без ограничений
Ричард Столлман – выдающийся мыслитель и деятель,
одним из первых поднявший вопрос о соотношении
морали и современного законодательства об авторском
праве и предложивший эффективное решение в виде
лицензий и самого проекта GNU.

Алексей Новодворский,
заместитель генирального директора
компании ALT Linux

Пожалуй, нет в мире человека, знакомого со свободным программным обеспечением


и не знающего Ричарда Столлмана – этого добродушного и весёлого человека, подарившего
миру идею бесплатного ПО с открытым исходным кодом, ярого противника авторского права.
В этом году Столлману исполнилось 55 лет, и он полон энергии для борьбы за свободу
человека в ставшем уже таким родным электронном мире.

Р
ичард Мэтью Столлман (Richard «Ричард Столлман – это моё мирское Йорке, на кафедре биологии Универ-
Matthew Stallman) – именно такая имя; можете называть меня RMS». Та- ситета Рокфеллера, а также в недрах
запись была сделана в свиде- ким образом эти три буквы и вош- лаборатории по исследованию искус-
тельстве о рождении, полученном Дэ- ли в обиход, став его визитной кар- ственного интеллекта (далее AI Lab)
ниелем Столлманом (Daniel Stallman) точкой. Массачусетского технологического
и Эллис Липпман (Alice Lippman) в день Ещё в студенческие годы, ког- университета (MIT).
появления их сына на свет. Произошло да увлёкшийся программированием Позже, окончив Гарвардский уни-
это радостное событие 16 марта далё- Столлман изучал предметы в Гарвард- верситет и получив степень бакалав-
кого 1953 года. ском университете, он открыл для се- ра по физике, Столлман перебрался
Однако герой сегодняшнего рас- бя чарующий мир хакерства в изна- в MIT, где продолжил постигать данную
сказа предпочитает своему имени чальной его концепции. Во время сво- дисциплину. Однако в стенах этого за-
и фамилии сокращённый вариант. ей учёбы в высшем учебном заведении ведения с учёбой у RMS не сложилось,
В первом издании книги «Словарь ха- RMS также успел поработать в стенах и спустя короткий промежуток време-
кера» (Hacker's Dictionary) он написал: исследовательского центра IBM в Нью- ни он оставил планы по получению

66
человек номера
учёной степени кандидата физичес- ли работать на компьютерах различ- нимом GNU's Not UNIX, что в переводе
ких наук, продолжив работать в AI Lab. ных типов и архитектур, продемонс- означает «GNU – это не UNIX».
Стоит, однако, отметить, что впослед- трировало, что способность пользо- Почему именно UNIX? Компания
ствии Ричард был четырежды удосто- вателя к модификации и распростра- AT&T, владевшая правами на эту опе-
ен почётной докторской степени. нению программного обеспечения мо- рационную систему, до начала 80-х
Во время своей работы в лабо- жет стать серьёзной помехой в разви- распространяла её совершенно бес-
ратории искусственного интеллекта тии бизнес-стратегий производителей платно. Однако в новом десятилетии
Столлман прослыл ярым противни- компьютерных систем. Дабы искоре- компания, осознав ценность UNIX, ре-
ком различного рода запретов и огра- нить возможность запуска собственно- шила зарабатывать на ней деньги,
ничений. Когда в 1977 году лаборато- го ПО на ЭВМ конкурентов, компании в результате чего с 1982 года данная
рия компьютерных наук Массачусет- перестали поставлять исходные коды ОС перешла в разряд платных систем.
ского университета ввела в обиход программ, а также начали ограничи- Своим акронимом Столлман выражал
систему контроля доступа на основе вать права на их копирование и рас- протест против решения AT&T ограни-
паролей, RMS нашёл способ их рас- пространение путём регистрации ав- чить свободу пользователей UNIX.
шифровки и разослал каждому поль- торских прав на свою продукцию. Суть GNU заключалась в создании
зователю сообщение, в тексте которо- Именно тогда Столлман осознал свободной операционной системы с от-
го содержался пароль, а также пред- необходимость в свободном програм- крытым исходным кодом, которую лю-
ложение изменить его на пустую стро- мном обеспечении с открытым исход- бой человек мог бы изменять по свое-
ку, дабы организовать открытый дос- ным кодом, который мог бы изменять му усмотрению. Тем самым пользова-
туп к компьютерным системам лабо- для своих нужд любой желающий. тель был сам волен решать, каким об-
ратории. Приблизительно 20% всех RMS понимал, что подобными шагами разом ОС будет работать на его ком-
пользователей последовали его со- компании сильно ограничивают свобо- пьютере. «Если люди не будут иметь
вету, хотя в конечном итоге «система» ду и права пользователей, и смирить- доступа к исходным текстам программ,
восторжествовала. Тем не менее пос- ся с этим не мог. с которыми работают, они станут уз-
тупок Столлмана не был забыт, и в бу- На протяжении двух лет, с 1982 никами собственного программно-
дущем послужил примером для других по 1983 год, Ричард в одиночку борол- го обеспечения», – говорит Столлман.
борцов за свободу. ся с программистами Symblics (компа- «Свобода без ограничений» – вот глав-
За время своей работы в MIT Ри- ния-производитель Лисп-машин, «вы- ный лозунг, с которым шагает по жиз-
чард успел поработать над текстовым шедшая из недр» AI Lab), дабы предо- ни наш герой.
редактором TECO, а также операцион- твратить получение ими абсолютного Параллельно с операционной сис-
ной системой для Лисп-компьютеров контроля над компьютерными систе- темой RMS начал писать манифест,
(Lisp Machine) – ЭВМ общего назначе- мами в лаборатории. К тому времени, который был призван объяснить цели
ния, также разработанных в недрах AI однако, Столлман остался последним проекта, а также популяризировать
Lab. Кроме того, именно в этой лабо- из своего поколения хакеров в AI Lab, идеи свободного программного обес-
ратории RMS создал свой знаменитый и сопротивляться ему было всё слож- печения. Ради работы над собствен-
текстовый редактор Emacs. нее и сложнее. Во время кульмина- ным проектом Ричард в 1984 году при-
Изначально Emacs представлял со- ции противостояния ему было пред- нял решение уйти из AI Lab.
бой набор функциональных улучше- ложено подписать соглашение о не- Столлман утверждает, что писал
ний и макросов для TECO, написанный разглашении конфиденциальной ин- текст манифеста GNU, основываясь
Столлманом и Гаем Стили-младшим формации, а также выполнить ряд дру- на принципах, по которым он живёт.
(Guy L. Steele, Jr.) в 1976 году. Спустя гих действий, которые он считал пре- Его взгляды на жизнь, мир и сооб-
несколько лет, в 1984 году, RMS пере- дательством по отношению к своим щество – всё это зашифровано между
писал Emacs на языке программирова- принципам. строк документа. «Мой главный прин-
ния С, намереваясь сделать его базо- «Мне пришлось столкнуться с ди- цип заключается в том, чтобы мы помо-
вым текстовым редактором для свое- леммой. Я мог либо принять предло- гали друг другу жить вместе лучше», –
го нового проекта – GNU. В результа- жение, тем самым признав, что мир говорит RMS. «Совершенствование
те на свет появился GNU Emacs, о ко- меняется, и настала пора изменить- человеческих знаний является час-
тором речь пойдёт дальше. ся и мне, либо же я мог найти другой, тью моего замысла; каждый человек
более этический путь решения про- должен иметь к этому свободный дос-
Свобода – как много блемы», – сказал Столлман. «Если бы туп и благодаря всеобщему сотрудни-
в этом слове… я согласился, то впоследствии гово- честву чувствовать себя частью сооб-
В начале 1980-х годов хакерское сооб- рил бы: «Я потратил всю свою жизнь щества. Эти идеи могут быть примени-
щество, являвшееся для Столлмана на возведение стен, призванных раз- мы к различным аспектам нашей жиз-
второй семьёй, начало распадаться. делять людей». Поэтому Столлман от- ни, но что касается области програм-
Причиной тому стали постоянно ус- казался, решив продолжать бороться много обеспечения, они ведут прями-
ложняющиеся отношения между про- с «системой». ком к свободному ПО».
граммистами и крупными компаниями. В сентябре 1983 года RMS начал В своём манифесте Столлман опи-
Появление переносимого ПО – про- работать над проектом GNU, название сывал GNU как «полноценную опера-
грамм, которые после доработки мог- которого является рекурсивным акро- ционную систему, совместимую с UNIX,

№9, сентябрь 2008 67


человек номера
Сразу же после основания FSF Ри- ся Linux, ставший после перехода год
чард нанёс ещё один «удар»: он по- спустя на лицензию GPL «последним
пуляризировал концепцию «копиле- кирпичиком» для обеспечения целост-
фт» (Copyleft), являющуюся полной ности и самостоятельности проекта.
противоположностью традиционного С тех пор тандем GNU/Linux известен
подхода к авторскому праву. В отли- как наиболее широко используемое
чие от него copyleft обеспечивает не- свободное ПО в мире.
возможность запрещать любому че- С тех пор прошли годы упорного
ловеку право на использование, из- труда, принёсшие, однако, немалый
менение и распространение произ- «урожай». На сегодняшний день сто-
ведения. Другим словом: если раз- ронниками FSF разработаны тысячи
работчик выпускает программу в со- различных приложений и утилит с от-
ответствии с данным принципом, ни- крытым исходным кодом, а счётчик за-
Логотип GNU кто не в праве ограничивать свобо- регистрированных пользователей сай-
ду её дальнейшего распространения та Sourceforge.net, являющегося вирту-
которую я мог бы раздавать безвоз- либо модификации другими пользо- альным «домом» для разработчиков
мездно всем, кто захочет и сможет её вателями. свободного ПО, давно перевалил сто-
использовать... Как только GNU будет Концепция copyleft легла в осно- тысячную отметку.
создана, любой желающий сможет за- ву написанной Столлманом лицен-
получить хорошее программное обес- зии на свободное программное обес- Публичная жизнь
печение совершенно бесплатно, прямо печение, получившей название «Уни- Стоит отметить, что GNU и FSF не яв-
как воздух». версальная общественная лицензия ляются для Столлмана «дойными ко-
Официальная публикация мани- GNU» (GNU General Public License, ли- ровами», поскольку он не получает за-
феста GNU состоялась лишь полто- бо просто GPL). Целью GPL является рплаты как таковой. Нет у нашего ге-
ра года спустя после начала работы предоставление пользователю права роя и своего дома с машиной. Ведущий
над ним – в мартовском номере жур- копировать, модифицировать и рас- скромный образ жизни Ричард считает,
нала Dr. Dobb's Journal за 1985 г. пространять программы, а также га- что свободный человек не должен за-
В тексте была описана концепция, рантирование того, что пользователи висеть от источника дохода. Он живёт
согласно которой любая программа всех производных программ также по- за счёт выступлений на конференци-
может считаться действительно сво- лучат вышеперечисленные права. ях, a также получения различных пре-
бодной, если она удовлетворяет че- Первоначально Столлман для ре- мий и наград, таких как премия от бла-
тырём базовым «свободам»: ализации GNU занялся текстовым готворительного фонда МакАртуров
n свобода запускать программу редактором, решив приспособить в 1990 году и награда фонда Такеды
для любых целей; для этих целей Emacs. В результате в 2001 году.
n свобода изучать принцип рабо- на свет появился GNU Emacs, первая Перед публикой Столлман начал
ты программы и приспосабливать версия которого увидела свет в мар- выступать ещё в начале 90-х гг. про-
её для собственных нужд; те 1985 года. шлого века, пропагандируя свободное
n свобода распространять копии про- За GNU Emacs последовали ком- ПО. Среди его лекций наиболее час-
граммы, дабы оказать помощь дру- пилятор GNU C Compiler, который поз- то читаемыми являются «Проект GNU
гим; днее стали называть GNU Compiler и движение бесплатного программно-
n свобода совершенствовать про- Collection, или GCC, а также отладчик го обеспечения» (The GNU project and
грамму и публиковать улучшения, GNU Debugger (GDB). Как текстовый the Free Software movement), «Опаснос-
дабы они были полезны всему об- редактор, так и средства разработки ти патентов на программное обеспече-
ществу. Это предполагает свобод- были выпущены под лицензией GPL. ние» (The Dangers of Software Patents)
ный доступ к исходному коду про- К 1990 году у команды GNU на ру- и «Авторское право и сообщество
граммы. ках была собрана почти вся операци- в эру компьютерных сетей» (Copyright
онная система. Не хватало лишь само- and Community in the age of computer
Вслед за манифестом Столлман го важного компонента – ядра. В том networks).
в 1985 году основал Free Software же году стартовала разработка микро- На протяжении 2006 года, во вре-
Foundation – некоммерческую органи- ядра Hurd, однако было ясно, что этот мя проведения консультаций по поводу
зацию, призванную поддержать раз- процесс может затянуться на очень выхода в свет третьей версии лицен-
работчиков свободного ПО и предо- долгое время… зии General Public License, Столлман
ставить им легальную инфраструкту- И тут на сцене появился финс- добавил в свой список ещё одну речь,
ру для написания собственных про- кий парень Линус Торвальдс (Linus в которой он рассказывает о предло-
ектов. «Обмен информацией – это Torvalds), решивший интереса и заба- женных в GPL изменениях.
фундаментальная основа человечес- вы ради написать при помощи средств Среди множества мероприятий,
кой дружбы», – говорит Столлман. разработки GNU собственное яд- на которых можно было услышать
Он по сей день является президентом ро для операционной системы. В ре- RMS, стоит отметить международную
Free Software Foundation. зультате в 1991 году на свет появил- конференцию фонда Викимедиа под

68
человек номера
названием Wikimania, а также конфе- лософии, что в конечном
ренции разработчиков свободного ПО итоге ослабит нас и наши
FOSDEM и LinuxTag. принципы, за которые мы
Выступления Столлмана слушали боремся».
во всех уголках земного шара. Не ста- Отношения меж ду
ла исключением и Россия, первый раз Столлманом и Торваль-
которую он посетил в 1993 году с целью дсом накалились до пре-
договора о переводе и издании доку- дела, когда Линус объ-
ментации проекта GNU. Второй при- явил, что существовав-
езд RMS в страну состоялся в марте шая на тот момент вто-
этого года, во время которого Ричард рая версия лицензии
прочёл две лекции на тему «Свобод- GPL удовлетворяла всем
ное программное обеспечение: этика потребностям разработ-
и практика» на факультете ВМК МГУ чиков и пользователей,
и МФТИ. и что не было смысла
разрабатывать новую
Борьба за терминологию версию: «В мире сущест-
Столлман очень дотошен, когда речь вует около полусотни
касается терминологии. «В английс- различных лицензий для
ком языке у слова «free» два разных ПО с открытым исход-
значения – «бесплатность» и «свобо- ным кодом, и GPLv3 ста- GNU Emacs
да», – отмечает он. «В результате люди нет лишь одной из них». или же совершенство?» RMS считает:
часто путают свободное ПО с бесплат- На этот счёт у RMS существует своё если новая функциональность каким-
ным. Однако бесплатность програм- мнение: «Тот факт, что Линус гово- либо образом влияет на свободу поль-
мы ещё не гарантирует её «свободно- рит «ПО с открытым исходным кодом» зователя, её нет необходимости реа-
го» статуса. Лишь в случае, когда про- вместо «свободное программное обес- лизовывать.
граммное обеспечение удовлетворя- печение» говорит о его принципах. Я Однако даже несмотря на подоб-
ет четырём «свободам», заложенным написал GNU GPL для защиты свобо- ные разногласия, и критики, и тем бо-
в манифест GNU, оно может считать- ды всех пользователей любых вер- лее сторонники Столлмана сходятся во
ся «свободным, как воздух». Сегодня сий той или иной программы. Третья мнении, что без влияния, оказанного
распространение получил другой тер- версия лицензии призвана лишь ещё этим человеком, а также его проекта-
мин – ПО с «открытым исходным ко- лучше выполнять свои обязанности». ми GNU и GPL на мировую обществен-
дом» (Open Source), однако Столлман Столлман считает, что Торвальдс отри- ность, компьютерная индустрия была
не считает его удовлетворяющим кон- цает этот факт, вот почему, возможно, бы сегодня совсем другой.
цепции «свободного» программно- он так не любит GPLv3. «Я уважаю его На сегодняшний день Ричард
го обеспечения, мотивируя своё мне- право выражать свои взгляды, однако Столлман продолжает отстаивать пра-
ние тем, что данное название скры- считаю их дурацкими. Так что если вы ва и свободы людей. Он протестует
вает от пользователя саму суть таких не хотите потерять свою свободу, луч- против производителей аппаратно-
программ – свободу: «Бесплатное ПО – ше не идите у него на поводу». го обеспечения, пищи и напитков, ре-
политическое движение, программное Столлман настолько яростно от- кординговых компаний, авторов книг,
обеспечение с открытым исходным ко- стаивает чистоту своей терминологии, аэропортов Англии, идентификацион-
дом – модель разработки». что готов общаться с представителями ных карточек для удостоверения лич-
Не согласен RMS и с тем, что об- прессы и участниками конференций ности... Список акций на его странице
щественность в подавляющем боль- лишь при условии, что они принимают stallman.org, которые он организовал
шинстве называет операционную сис- условия его игры и готовы называть ве- либо в которых принимает активное
тему GNU/Linux просто Linux. Столлман щи своими истинными именами. участие, состоит из нескольких десят-
считает, что данный термин необходи- Естественно, среди множества при- ков пунктов. «Свобода без ограниче-
мо понимать как «ОС, созданная на ос- верженцев и сторонников идей RMS ний», и никаких оговорок!
нове системы GNU и ядра Linux». «Со- находятся и те, кто в той или иной сте-
обществу известно, что Линус Тор- пени не согласен с ним. Критика в ад- Дмитрий Мороз
вальдс написал Linux для развлече- рес Столлмана звучит за излишне ра-
ния. И они знают, что Линус ничего не дикальную политику по отношению 1. http://www.wikipedia.org.
говорил о том, что неправильно запре- к любому коммерческому программно- 2. http://www.gnu.org.
щать людям распространять и изме- му обеспечению. Свободолюбивый Ри- 3. http://www.stallman.org.
нять программы, которые они исполь- чард непреклонен: «Если вы не може- 4. http://kerneltrap.org.
зуют. Поэтому если общественность те писать свободное ПО, не создавайте 5. http://cs-exhibitions.uni-klu.ac.at.
считает, что именно с Торвальдса всё в таком случае вообще ничего». 6. http://superuser.com.au.
началось и что ему надлежит отдавать Нельзя не упомянуть и о спорной 7. http://www.linuxdevcenter.com.
почести, оно будет следовать его фи- дилемме «Что предпочесть – свободу

№9, сентябрь 2008 69


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

Распределенная
система
контроля
версий Bazaar

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

От централизованных ное движение в эту сторону. Например, n S ubve rsion (ht tp: //subversion.
систем к распределенным из централизованных систем боль- tigris.org) – на данный момент на-
Рассмотрим, что сейчас происходит шинство могут назвать следующие: иболее популярная централизо-
в области систем контроля версий с от- n CVS (http://www.nongnu.org/cvs) – ванная система контроля вер-
крытым исходным кодом. Пока это мо- постепенно исчезающая, но все сий, изначально разработанная
жет быть не так очевидно, но просмат- еще популярная система, разрабо- как «лучший CVS» и в итоге испра-
ривается постепенный рост количест- танная поверх формата RCS фай- вившая многие ошибки в дизайне
ва распределенных систем и идет яв- лов; CVS;

70
программмирование
А что же распределенные системы? трального хранилища версий – репози- каждого изменения, чтобы избежать
Вот наиболее популярные и активно тория. В случае распределенных сис- конфликтов и ошибок. Для распреде-
развивающиеся системы: тем набор версий может быть полно- ленных систем контроля версий вет-
n Git (http://git-scm.com) – распре- стью или частично распределен между ки разработки являются одной из ос-
деленная система контроля вер- различными хранилищами, в том чис- новополагающих концепций – в боль-
сий, разработанная Линусом Тор- ле и удаленными. шинстве случаев каждая копия хра-
вальдсом. Изначально Git пред- Такая модель отлично вписывает- нилища версий является веткой раз-
назначалась для использования ся в работу распределенных команд, работки.
в процессе разработки ядра Linux, например, распределенной по все- Таким образом, механизм объеди-
но позже стала использоваться му миру команды разработчиков, ра- нения изменений с одной ветки на дру-
и во многих других проектах – та- ботающих над одним проектом с от- гую в случае распределенных систем
ких, как, например, X.org и Ruby on крытым исходным кодом. Разработ- является одним из основных, что поз-
Rails. На данный момент Git явля- чик такой команды может скачать се- воляет пользователям прикладывать
ется самой быстрой распределен- бе всю информацию по версиям и пос- меньше усилий при пользовании сис-
ной системой, использующей са- ле этого работать только на локаль- темой.
мое компактное хранилище реви- ной машине.
зий. Но в то же время для пользо- Как только будет достигнут резуль- Основные концепции
вателей, переходящих, например, тат одного из этапов работы, измене- Bazaar
с Subversion интерфейс Git может ния могут быть залиты в один из цен- Итак, начнем ближе рассматривать
показаться сложным; тральных репозиториев или опублико- Bazaar. На момент написания этой ста-
n Mercurial (http://www.selenic.com/ ваны для просмотра на сайте разра- тьи последняя версия Bazaar 1.6.
mercurial) – распределенная сис- ботчика или в почтовой рассылке. Но прежде чем рассматривать ра-
тема, написанная на языке Python Другие участники проекта, в свою боту с этой системой контроля версий,
с несколькими расширениями очередь, смогут обновить свою копию сначала обратим внимание на основ-
на C. Из использующих Mercurial хранилища версий новыми изменени- ные концепции, лежащие в ее основе.
проектов можно назвать такие, ями или попробовать опубликованные Если эти термины уже знакомы вам
как Mozilla и MoinMoin. изменения на отдельной, тестовой вет- по централизованным системам, они
n Bazaar (http://bazaar-vcs.org) – сис- ке разработки. могут иметь немного другое значение
тема, разработка которой поддер- К сожалению, без хорошей орга- в приложении к распределенной сис-
живается компанией Canonical – низации проекта отсутствие одного теме Bazaar, и их понимание важно
известной своими дистрибутивом центрального хранилища может быть для дальнейшего рассмотрения.
Ubuntu и сайтом https://launchpad.net. минусом распределенных систем. Ес- n Ревизия – это сохраненное состоя-
Система в основном написана ли в случае централизованных сис- ние файлов и директорий, включая
на языке Python и используется тем всегда есть один общий репози- их содержимое и иерархию в задан-
такими проектами, как, например, торий, откуда можно получить послед- ный момент времени. С ревизией
MySQL и Drupal. нюю версию проекта, то в случае рас- также связана мета-информация,
пределенных систем нужно организа- например:
Рассмотрим одну из наиболее гиб- ционно решить, какая из веток проек-  автор изменения;
ких, на мой взгляд, распределенных та будет основной.  дата изменения;
систем контроля версий – Bazaar. Почему распределенная система  комментарий, связанный с из-
Одним из примеров гибкости Bazaar контроля версий может быть интерес- менением;
может служить возможность использо- на кому-то, кто уже использует цен-  родительские ревизии, от кото-
вания как централизованной модели, трализованную систему – такую как рых произведена данная реви-
так и распределенной и даже смешива- Subversion? зия.
ние этих моделей контроля версий. Любая работа подразумевает при-
Даже если вы не согласны со мной нятие решений, и в большинстве слу- После создания, ревизии не ме-
по вопросу выбора конкретной сис- чаев необходимо пробовать различ- няются и могут быть идентифици-
темы, эта статья поможет вам понять ные варианты: при работе с система- рованы глобально уникальным но-
общие принципы работы распреде- ми контроля версий для рассмотрения мером ревизии (revision-id), напри-
ленных систем и затем остановить различных вариантов и работы над мер таким: «pqm@pqm.ubuntu.com-
свой выбор на одной из перечислен- большими изменениями служат вет- 20071129184101-u9506rihe4zbzyyz».
ных выше. ки разработки. Идентификаторы ревизий созда-
И хотя это естественная концепция, ются в момент фиксации (commit) из-
Зачем нужны пользоваться ею в Subversion непрос- менений или в момент импорта реви-
распределенные то. Тем более все усложняется в слу- зий из других систем. Идентификато-
системы? чае множественных последовательных ры ревизий необходимы для функцио-
Как следует из названия, одна из ос- объединений с одной ветки на другую – нирования системы, но вряд ли кто-
новных идей распределенных систем – в этом случае нужно безошибочно ука- то сможет использовать идентифика-
это отсутствие четко выделенного цен- зывать начальные и конечные версии тор такого типа в разговоре. Специ-

№9, сентябрь 2008 71


программирование
ально для упрощения идентификации Такое разделение концепций позво- bzr version
ревизий разработаны специфичные ляет более гибко использовать Bazaar,
для ветки номера ревизий. в том числе и как централизованную В ответ будет выведена текущая
Номера ревизий генерируются систему. версия Bazaar, пути используемых сис-
«на лету» в момент исполнения команд Рассмотрим набор сценариев, в ос- темой файлов и директорий, а также
и представляют собой последователь- нове которых лежат описанные выше лицензионная информация (Bazaar ис-
но увеличивающийся номер. Таким об- концепции: пользует GPL2). Для получения спис-
разом первая ревизия имеет номер 1, n Ра з д е л я е м ы е р е п о з и т о р и и ка основных команд можно использо-
следующая за ней, более поздняя, ре- (Shared repositories) – в этом слу- вать команду help:
визия – номер 2 и так далее. При объ- чае рабочее дерево и ветка нахо-
единении изменений с других веток дятся в одной директории, но ре- bzr help
номер ревизии представляется тремя позиторий находится на одну ди-
числами, разделенными точками (на- ректорию выше, что позволяет После команды help можно указы-
пример: 3112.1.5): хранить информацию о ревизиях вать любую другую команду, по кото-
1. Номер ревизии для данной ветки, только в одном месте. Такой сце- рой нужно получить подробную инфор-
от которой были произведены объ- нарий позволяет не тратить мес- мацию, например:
единенные изменения. то на полные копии ревизий, если
2. Порядковый номер (счетчик) объ- ветки, находящиеся под репози- bzr help version
единенной ветки. Так как объеди- торием, отличаются незначитель-
нение может затрагивать сразу не- но, например, относятся к одному Или можно вывести все коман-
сколько веток, этот номер служит проекту. ды Bazaar, в том числе и определен-
их счетчиком. n Легковесные рабочие копии ные подключаемыми модулями, ко-
3. Порядковый номер ревизии с мо- (Lightweight checkouts) – ветка мандой:
мента создания объединяемой и рабочее дерево находятся в раз-
ветки. ных местах. Этот сценарий похож bzr help commands
на использование централизован-
n Рабочее дерево – это директо- ной системы контроля версий, ког- Первое, что нужно сделать перед
рия под контролем версий, содер- да удаленный репозиторий хра- началом работы  Bazaar, это указать
жащая файлы, которые может ре- нит всю информацию о ревизиях, свое имя и e-mail, которыми будут под-
дактировать пользователь. Рабо- а рабочая копия представляет со- писываться все ревизии. Это делается
чее дерево ассоциировано с веткой. бой только рабочие файлы и ди- командой whoami, например:
Многие из команд Bazaar использу- ректории.
ют рабочее дерево для своей рабо- bzr whoami "John Doe <john@nowhere>"
ты. Например, команда commit (за- Мы рассмотрели все основные кон-
фиксировать изменения) создает цепции, лежащие в основе Bazaar, и те- Эта же команда без параметров
новую ревизию на основе текуще- перь можно приступать к изучению ин- выводит текущее установленное имя:
го состояния рабочего дерева. терфейса командной строки.
n Ветка – в простейшем случае это bzr whoami
упорядоченная серия ревизий, Начинаем работать John Doe <john@nowhere>
где последняя ревизия называ- с Bazaar
ется верхушкой. Ветки могут раз- Во многих UNIX-совместимых опера- Если вы хотите использовать раз-
деляться на несколько веток и за- ционных системах Bazaar может быть ные имена для разных веток, то мож-
тем, позже, объединяться обратно, установлен штатными средствами сис- но воспользоваться опцией --branch
формируя граф ревизий. При этом темы. Для Windows и других ОС, в ко- для установки имени только для теку-
в рамках ветки может быть основ- торых Bazaar недоступен для установ- щей ветки:
ная линия разработки, ревизии ки штатными средствами, его можно
в которой помечаются обычны- скачать с официального сайта: http:// bzr whoami --branch ↵
"John Doe <john@nowhere>"
ми номерами ревизий. Также вет- bazaar-vcs.org/Download.
ка может иметь другие линии раз- Хотя для Bazaar есть графичес- Конфигурационные файлы Bazaar
работки, помечаемые номерами кие интерфейсы, которые также мо- хранятся в директории $HOME/.bazaar
ревизий через точку, как описано гут быть установлены, и вместе с ос- для UNIX-подобных операционных сис-
выше. новной программой мы будем рассмат- тем и в директории C:\Documents and
n Репозиторий – это хранилище ре- ривать только интерфейс командной Settings\<username>\Application Data\
визий. Обычно ветка имеет свой строки, являющийся основным интер- Bazaar\2.0 для Windows. В этой дирек-
собственный репозиторий, но так- фейсом работы с Bazaar. тории хранятся три основных файла
же несколько веток могут раз- Интерфейс командной строки конфигурации:
делять один репозиторий, чтобы представлен командой bzr, и первое, n bazaar.conf – описывает конфигу-
уменьшить используемое ветками что можно сделать, это проверить ус- рационные параметры по умолча-
место на диске. тановку следующей командой: нию;

72
программмирование
n locations.conf – описывает конфигурационные пара- ки. Если требуется зафиксировать только отдельную ди-
метры для отдельных веток; ректорию или набор файлов, их можно указать вслед за ко-
n authentication.conf – описывает идентификационную мандой, как здесь:
информацию для доступа к удаленным серверам.
bzr commit -m "Изменения" README.txt src
Каждая ветка также может содержать файл конфигу-
рации, в этом случае он находится в каталоге .bzr/branch/ Если при создании нового проекта планируется созда-
branch.conf внутри ветки. вать несколько локальных веток, то можно воспользовать-
После того, как мы настроили свое имя и e‑mail командой ся описанным выше разделяемым репозиторием для эко-
whoami, эта информация записывается в файл bazaar.conf, номии места:
и в простейшем случае он будет выглядеть так:
$ bzr init-repo repo
$ cd repo
[DEFAULT] $ bzr init trunk
emai = John Doe <john@nowhere> $ cd trunk
Создание файлов
Работаем самостоятельно $ bzr add
Даже если вы работаете в команде, в какой-то момент $ bzr commit -m "Испортирование проекта"
времени все равно приходится работать одному, и с точки
зрения многих команд Bazaar в этом случае мало что ме- Первая команда init-repo создает в директории repo раз-
няется. деляемый репозиторий, и под директорией repo могут хра-
Если у вас уже есть готовый проект и его надо поста- нится различные ветки проекта. Основную ветку мы созда-
вить под контроль версий, нужно начать со следующей це- ем следующей командой init, которая уже была описана вы-
почки команд: ше. В случае создания разделяемого репозитория в дирек-
тории repo/.bzr хранится репозиторий и в директории repo/
$ cd project-directory trunk/.bzr ветка.
$ bzr init
$ bzr add Если при добавлении мы хотим игнорировать какие-
$ bzr commit -m "Импортирование проекта" либо объекты, можно воспользоваться командой ignore,
ее синтаксис:
Здесь первая команда init создает в рабочей директо-
рии project-directory служебную директорию .bzr, в которой bzr ignore имена объектов
хранятся репозиторий и ветка проекта.
Следующая команда, add, рекурсивно добавляет все Эта команда создаст в корневой директории ветки файл
файлы и директории в рабочем каталоге под контроль вер- .bzrignore, в котором будут записаны имена или шаблоны
сий. Если нет необходимости в рекурсивном добавлении, для игнорирования. Если удобно, то данный файл также
то можно использовать опцию --no-recurse или перечис- можно редактировать в текстовом редакторе.
лить необходимые для добавления объекты сразу вслед Глобальные правила игнорирования можно задать в кон-
за командной. фигурационном файле ignore в каталоге с конфигурацией,
Bazaar может контролировать и, соответственно, добав- ~/.bazaar/ignore для UNIX-подобных систем.
лять командой add, файлы, директории и символические Кроме задания полных имен и шаблонов, используемых
ссылки (для ссылок хранится значение ссылки, а не объ- командной оболочкой, таких как *.py[co], *.o, можно исполь-
ект, на который она ссылается). зовать регулярные выражения:
Если в процессе работы над проектом создаются новые
файлы и директории, которые нужно хранить под контро- bzr ignore "RE:lib/.*\.o"
лем версий, они также должны быть добавлены командой
add или внесены в список игнорируемых файлов, описан-
ной ниже, командой ignore. Если этого не сделать, файлы Просмотр изменений
будут показываться Bazaar как неизвестные. Когда закончен очередной этап изменений, хорошей прак-
И последняя команда, commit, фиксирует изменения тикой, прежде чем фиксировать эти изменения в системе
на ветке и в репозитории, создавая новую ревизию. Опция контроля версий, может быть их просмотр.
-m позволяет указать комментарий к ревизии прямо из ко- Команда status показывает изменения в рабочем дере-
мандной строки. Без этой опции для создания коммента- ве с момента последней ревизии:
рия будет вызван текстовый редактор.
На данный момент в Bazaar нет жесткого ограниче- $ bzr status
ния на размер комментария (единственное ограничение – modified:
это достаточно большой, максимальный размер строки README.txt
unknown:
в Python), но рекомендуется делать их разумной длины, до- db.tmp
статочной для описания сделанных изменений.
По умолчанию команда commit фиксирует все измене- Команда diff показывает изменения в текстовых фай-
ния на ветке, даже если запущена из-под директории вет- лах в стандартной унифицированной форме:

№9, сентябрь 2008 73


программирование
$ bzr diff Выпуск проекта
После некоторого количества ревизий наступает долго-
=== added file 'README.txt'
--- README.txt 1970-01-01 00:00:00 +0000 жданный момент выпустить очередную версию проекта.
+++ README.txt 2008-01-20 14:23:29 +0000 Для упаковки новой версии можно воспользоваться ко-
@@ -0,0 +1,1 @@ мандой export, которая упаковывает проект в зависимос-
+Файл README
ти от заданного расширения файла. Например, следующая
команда создаст ZIP-архив проекта:
Просматривать изменения между заданными ревизия-
ми можно с использованием опции -r: bzr export ../releases/project-1.0.zip

bzr diff -r 100.. При выпуске каждой версии имеет смысл помечать ее,
bzr diff -r 100..120
чтобы в будущем можно было использовать более простые
Первая команда показывает все изменения, начиная символические имена для работы с этой ревизией. Это мож-
с ревизии 100, а вторая – между ревизией 100 и 120. но сделать командой tag:
Для просмотра истории ревизий используется коман-
да log. Bazaar использует иерархическую историю, где объ- bzr tag version-1.0
единенные с данной веткой ревизии показываются с от-
ступами в виде дерева. В этом случае визуально проще После этого созданную метку можно использовать в дру-
отделить объединенные изменения от изменений на ос- гих командах следующим образом:
новной ветке:
bzr diff -r tag:version-1.0
$ bzr log

------------------------------------------------------------
revno: 100 Исправление ошибок
committer: John Doe <john@nowhere>
branch nick: trunk
К сожалению, ошибок невозможно избежать, они случают-
timestamp: Tue 2008-08-19 16:25:36 +0100 ся, и это надо принимать и быть к этому готовым. Bazaar
message: разработан таким образом, что большинство ошибок мож-
Объединены изменения с работы
но исправлять, в том числе и с использованием отдель-
------------------------------------------------------------
revno: 100.1.1 ных команд. Рассмотрим различные ситуации и их раз-
committer: John Doe <john@nowhere> решение.
branch nick: work
timestamp: Tue 2008-08-19 09:54:08 -0500 Если вы случайно поставили под контроль версий
message: не то рабочее дерево, то можно удалить служебный ката-
Добавлен файл README.txt лог .bzr, хотя стоит быть внимательным, чтобы не удалить
что-то нужное.
С командой log так же, как и с командой diff, можно ис- Если случайно под контроль версий был поставлен
пользовать опцию -r для указания необходимых ревизий файл, который нет необходимости хранить под контролем
для просмотра. версий, то его можно удалить командной remove, но без ис-
Для просмотра краткой истории изменений, не включа- пользования опций команда не будет удалять изменен-
ющей описание ревизий с объединенных веток, можно вос- ный файл:
пользоваться опцией --short:
bzr add file.txt
bzr remove file.txt
$ bzr log --short
bzr: ERROR: Can't safely remove modified or unknown files:
100 John Doe 2008-08-19 [merge]
Объединены изменения с работы
added:
file.txt
Use --keep to not delete them, or --force to delete them
Кроме того, историю ревизий можно просматривать regardless.
для отдельного файла или директории, добавив его имя
после команды: Соответственно, можно использовать опцию --keep, что-
бы оставить файл на диске, но удалить его регистрацию
bzr log README.txt или опцию --force, чтобы удалить и регистрацию, и файл.
Надо заметить, что если вы удалите файл, не используя
Команда cat выводит содержимое файла для ревизии Bazaar, то Bazaar будет считать, что необходимо удалить
заданной опцией -r: и регистрацию файла.
Команда revert возвращает все файлы и директории
$ bzr cat -r 100 README.txt в состояние на момент последней фиксации, но при этом
Файл README сохраняет измененные файлы под другими именами. Она
действует рекурсивно, и если нужно вернуть только не-
После просмотра изменений их можно зафиксировать сколько файлов, то надо быть внимательным и указывать
командой commit, которая была описана выше. в командной строке только их:

74
программмирование
bzr revert ветку в каталоге remote, и в итоге создаем еще одну копию,
копируя локальную ветку в каталог local:
Если вы случайно сделали фиксацию, то можно исполь-
зовать команду uncommit, чтобы убрать последнюю ревизию $ cd projects
$ bzr init-repo project
и вернуть рабочее дерево в состояние до момента фикса- $ cd project
ции. Эта команда позволяет также исправлять и коммен- $ bzr branch bzr+ssh://some.host/some/project remote
тарии к ревизии: Branched 10 revision(s).

bzr commit -m "Исправлен файл README" $ bzr branch remote local


bzr uncommit
bzr commit -m "Исправлен файл README.txt" Branched 10 revision(s).

Кроме того, команда uncommit позволяет отменить не- Если теперь в каталоге remote мы посмотрим инфор-
сколько последних ревизий, например, три последние: мацию о ветке командной info, то увидим ассоциирован-
ную родительскую ветку:
bzr uncommit -r -3
$ cd remote
$ bzr info
Если нет необходимости удалять ревизии, а нужно толь-
Standalone tree (format: pack-0.92)
ко вернуть рабочее дерево в прежнее состояние, то можно
Location:
использовать команду revert с опцией -r: branch root: .

bzr revert -r -3 Related branches:


parent branch: bzr+ssh://some.host/some/project

Исправить неправильно поставленные метки можно Хотя возможно большое количество сценариев работы,
с помощью команды tag, например, перенести метку на дру- в нашем примере все локальные изменения будут делать-
гую ревизию можно с помощью опции --force, а удалить с по- ся на ветке в каталоге local, а ветка в каталоге remote будет
мощью опции --delete: отслеживать все изменения, сделанные на удаленной вет-
ке. Но в простейшем случае можно использовать и только
bzr tag --delete version-1.0 одну локальную ветку.
bzr tag --force version-2.0
Итак, представим, что мы проделали некоторую рабо-
ту и создали несколько ревизий на ветке local. Теперь мы
Работаем в команде обновим копию удаленной ветки изменениями, сделанны-
После того как мы рассмотрели работу с Bazaar в одино- ми другими разработчиками, и потом объединим наши из-
честве, рассмотрим распределенные возможности при ра- менения. Для обновления ветки нужно выполнить коман-
боте в команде (или по такому же сценарию вы можете ра- ду pull в каталоге remote, при этом будут скачаны и добав-
ботать из нескольких мест, например, c работы и из дома). лены все ревизии, которые были сделаны на родительской
В простейшем случае, если вы работаете в команде, кто- ветке после момента последнего обновления:
то из разработчиков уже мог создать центральную ветку
Bazaar, или при работе в паре это может быть одна из ло- bzr pull
кальных веток другого разработчика, которую вам необхо-
димо скопировать к себе. Кроме работы с файловой сис- Так как изменения на ветке local происходили парал-
темой, Bazaar может работать со следующими протокола- лельно с изменениями на удаленной ветке, то мы не мо-
ми: FTP, HTTP, HTTPS, SFTP и собственным оптимизиро- жем просто сделать pull, а должны объединить изменения
ванным протоколом bzr. Одним из простейших способов с помощью команды merge в каталоге remote:
открыть к ветке доступ для чтения может быть использо-
вание HTTP/HTTPS. В этом случае достаточно в конфигу- bzr merge ../local
рации веб-сервера открыть, с учетом необходимых огра-
ничений, директорию с веткой на доступ, как и любую дру- Если путь не указан, то merge как и pull будет использо-
гую директорию. Для доступа на запись рекомендуется ис- вать путь к родительской ветке. При объединении изменя-
пользовать соединение через SSH, которое можно устано- ется только рабочее дерево, чтобы сохранить объединен-
вить, используя схему bzr+ssh://. В этом случае автомати- ные изменения, нужно сделать фиксацию командой commit.
чески будет использоваться собственный протокол Bazaar Bazaar использует качественный алгоритм объединения,
через SSH туннель. К сожалению, на данный момент собст- учитывающий возможные прошлые объединения, и во мно-
венный протокол сам по себе не имеет никаких ограниче- гих случаях не надо заботиться о таких тонкостях, как на-
ний на доступ. чальная и конечная ревизии для объединения.
Для копирования ветки используется команда branch, В случае если в параллельных ветках было изменено
которая по умолчанию копирует все ревизии из указанно- одно и то же место в файле, автоматическое объединение
го места в локальный каталог, создавая новую ветку. В при- может не сработать, и требуется устранить конфликты вруч-
мере ниже мы создаем разделяемый репозиторий для эко- ную. При объединении бинарных файлов по умолчанию лю-
номии места и затем копируем удаленную ветку, создавая бые параллельные изменения всегда будут конфликтовать,

№9, сентябрь 2008 75


программирование
но есть возможность подключения модулей, поддержива- $ bzr init sftp://central.host/bzr/repo/trunk
$ bzr checkout sftp://central.host/bzr/repo/trunk
ющих объединение конкретных бинарных форматов. Фай- $ cd trunk
лы, в которых не удалось сделать автоматическое объеди- $ cp -ar ../some-files/ .
$ bzr add
нение, можно посмотреть по команде status, или conflicts. $ bzr commit -m "Импорт проекта"
При обнаружении конфликта Bazaar создаст дополнитель-
но 3 файла для каждого файла с конфилктами: Здесь мы использовали команду checkout, чтобы ско-
n имя.BASE – файл с содержимым из предыдущей пировать и связать удаленную ветку с локальной. Кроме
или последней ревизии текущей ветки; использования этой команды можно связать любые ветки
n имя.THIS – файл с содержимым из последней ревизии с помощью команды bind. В этом случае в момент фикса-
или рабочая копия из текущей ветки; ции все изменения сразу пойдут и на связанную ветку. Ес-
n имя.OTHER – файл с содержимым из другой ветки. ли до момента фиксации на связанной ветке произошли
изменения, то команда commit скажет о них и нужно будет
После того, как конфликт был исправлен вручную, нуж- прежде выполнить описанную ниже команду update:
но использовать команду resolve, чтобы сказать Bazaar
об этом, при этом ей можно указать только имена исправ- bzr bind sftp://central.host/bzr/repo/trunk
ленных файлов:
Также в любой момент можно отвязать локальную вет-
bzr resolve ку командой unbind, чтобы вернуться к режиму «локальные
фиксации и публикация»:
Также часто бывает полезно определить, кто поменял
конкретные строчки в файле, для этого в Bazaar можно ис- bzr unbind
пользовать команду annotate:
Надо заметить, что команда checkout копирует всю ис-
bzr annotate торию локально. Если в этом нет необходимости, то мож-
но использовать ее с ключом --lightweight:
После того как все изменения сделаны на ветке remote,
нужно их перенести на удаленную ветку, для этого исполь- bzr checkout --lightweight sftp://central.host/bzr/repo/trunk
зуется команда push, которая переносит все недостающие
ревизии на родительскую ветку. Если родительская ветка После того как мы сделали checkout обновления из цент-
также была изменена, то Bazaar скажет о расхождении ве- ральной ветки, можно получать командой update как и в цен-
ток и нужно будет сначала сделать их объединение и толь- трализованных системах:
ко затем push:
bzr update
bzr push
Если при использовании центральной ветки вам в какой-
Иногда нужно просто передать изменения для про- то момент необходимо сделать фиксацию локальной ветки,
смотра, не обновляя родительскую ветку. В каком-то слу- можно использовать опцию --local команды commit:
чае можно опубликовать свою ветку с изменениями через
один из протоколов, поддерживаемых Bazaar, или можно bzr commit --local
послать изменения по e-mail. Для этого в Bazaar есть ко-
манды send и bundle. Команда bundle может быть исполь-
зована для создания пакета с изменениями, который мож- Что дальше?
но приложить к e‑mail-сообщению. Команда send позволя- К сожалению, не удалось включить в эту статью другие
ет послать сообщение с изменениями прямо из команд- возможности или принципы работы Bazaar, о которых хо-
ной строки. телось бы рассказать. За кадром остались, например, та-
кие темы:
Работа в централизованном стиле n подключаемые модули, позволяющие расширять воз-
Кроме всего прочего Bazaar позволяет работать в центра- можности Bazaar;
лизованном стиле, когда все изменения в момент фикса- n как создавать псевдонимы для команд;
ции сразу идут и на одну центральную ветку. Рекоменду- n примеры использования Bazaar в различных ситуациях;
ется все центральные ветки располагать в разделяемом n импорт и экспорт ревизий из других систем контроля
репозитории, что может соответствовать корню репозито- версий;
рия в Subversion. Так как в центральном репозитории есть n организация веток в виде стека.
смысл хранить только историю изменений, его можно соз-
дать без рабочего дерева. Рассмотрим процесс создания Таким образом, эти темы остаются для самостоятель-
основной центральной ветки, копирование ее на локаль- ного изучения или могут быть темой одной из будущих ста-
ную ветку и добавление файлов: тей. В любом случае я уверен, что изучение одной из рас-
пределенных систем контроля версий поможет вам увели-
$ bzr init-repo --no-trees sftp://central.host/bzr/repo чить продуктивность вашей работы.

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

Готовимся к переходу
на PHP 5.3

Александр Майоров
Обзор основных нововведений, доступных в PHP 5.3.

P
HP 5.2 существует уже почти ступны на http://snaps.php.net. PHP 5.3, n поддержка драйвера MySQLnd;
2 года. В нем найдено несколь- как ожидается, будет отличаться боль- n синтаксические изменения;
ко серьезных ошибок, которые шей стабильностью и производитель- n улучшена производительность;
не могут быть исправлены без поте- ностью, а также содержать новые фун- n расширение системы конфигури-
ри бинарной совместимости. В раз- кциональные расширения и синтакси- рования;
рабатываемом PHP 6 из-за перехода ческие конструкции. n новые возможности SPL.
на Unicode перестанет работать боль- Цель альфа-версии состоит в том,
шое количество наработанного кода, чтобы стимулировать php-програм- Пространства имен
также для него было разработано мно- мистов не только активно участвовать Если вы являетесь постоянным чита-
го интересных дополнений и улучше- в выявлении ошибок, но и в обеспече- телем нашего журнала, то вы долж-
ний, которые не могут быть совмести- нии того, чтобы все новые возможнос- ны иметь представление о пространс-
мы со старыми наработками. Для плав- ти были протестированы на практике. твах времён из статьи в № 12 за 2007
ного перехода с PHP 5.2 на PHP 6 было Также разработчикам важно ваше мне- год. Так что вы можете использовать
решено разработать промежуточную ние о новых возможностях языка, кото- ту статью как подробную инструкцию
версию PHP 5.3, которая будет содер- рыми вы будете в дальнейшем пользо- по данной теме. Для тех, кто не имел
жать большинство улучшений, разра- ваться. Вы можете все это сделать че- возможности прочесть этот материал,
ботанных для PHP 6, но также способ- рез список рассылки либо в багтреке- я проведу краткий обзор и опишу до-
на выполнять существующие скрипты ре на php.net. полнительные возможности, которые
без каких-либо изменений. В этой статье описаны основные были добавлены в этой версии.
Команда разработчиков PHP 1 ав- нововведения, которые нас ожидают Пространство имен (namespace) –
густа 2008 года с гордостью объяви- в PHP 5.3. Вот краткий обзор наибо- это область определения перемен-
ла первый альфа-релиз новой вер- лее важных из них: ных, констант и т. п., ограничивающая
сии PHP 5.3, содержащей значитель- n пространства имен; их область видимости. Оно предназна-
ные изменения по сравнению с преды- n позднее статическое связывание; чено для локализации имен идентифи-
дущими релизами. Бинарные пакеты n перегрузка статических методов; каторов и предотвращения конфлик-
для операционной системы Windows n лямбда-функции и замыкания; тов между ними. Namespace устраняют
будут доступны начиная со 2-й аль- n новое расширение PHAR; конфликты имен. Разные namespace
фа-версии. Промежуточные снапшо- n поддержка SQLite3; могут использовать одно и то же имя
ты для всех платформ уже сейчас до- n циклическая сборка мусора; для разных целей. Имя внутри про-

№9, сентябрь 2008 77


программирование
странства имеет единственный смысл. Также они делают n namesapce;
имена короче. Имена, определенные в namespace имеют ко- n классы;
роткое (локальное) имя и уникальное длинное (квалифици- n интерфейсы.
рованное) для использования за пределами namespace.
Один namespace может определяться в нескольких фай- Он не может импортировать:
лах. В namespace могут определяться: n функции;
n классы; n константы;
n интерфейсы; n переменные.
n функции;
n константы; В момент импорта можно сделать переименование про-
n PHP-код. странства имен для более удобного использования. Опера-
тор «use» действует только на текущий файл. Данный опе-
В namespace не могут определяться: ратор сам не подгружает никаких файлов. Очень удобно
n глобальные переменные. организовывать подключение библиотек через функцию
автозагрузки классов.
PHP не поддерживает вложенных namespace. PHP под-
держивает составные имена namespace. Приведу простой <?php
пример работы. Создадим 3 файла: myspace_part1.php, function __autoload($libName)
myspace_part2.php, index.php. {
requir_once ( str_replace('::', '/', $libName) . ↵
В файле myspace_part1.php напишем следующий тес- '.php' );
товый код: }

//require_once 'My/Test/Space/testClass.php';
--- myspace_part2.php --- use My::Test::Space::TestClass;
<?php
namespace My::Test::Space; $Obj = new TestClass;

const TEST_ITEM = __NAMESPACE__; ?>

class TestClass
{
public static function getTestItem() Позднее статическое связывание


{
return TEST_ITEM;
(Late Static Binding)
} Начиная с версии 5.3.0 PHP реализует возможность, на-
} зываемую позднее статическое связывание, которая мо-
?> жет быть использована для управления статическими ме-
тодами при наследовании. Для начала приведу небольшой
--- myspace_part1.php ---
<?php пример кода, на основе которого и разъясню суть пробле-
namespace My::Test::Space; мы. Есть 2 класса:
require 'myspace_part2.php';
<?php
function var_dump()
{ class TestClass_A
$args = func_get_args(); {
return call_user_func_array('::var_dump', $args); public static function foo()
} {
printf("\n %s \n“, __CLASS__);
?> }

--- index.php --- public static function bar()


<?php {
self::foo();
require 'myspace_part1.php'; }
}
$Std = new stdClass();
$Std->field_1 = 123; class TestClass_B extends TestClass_A
$Std->field_2 = array(1,2,3); {
public static function foo()
My::Test::Space::var_dump($Std); {
printf("\n %s \n", __CLASS__);
use My::Test::Space::TestClass; }
use My::Test::Space as MTS; }

$Obj = new TestClass; TestClass_B::bar();


MTS::var_dump( $Obj, MTS::TestClass::getTestItem() );
?>
?>
В результате выполнения данного кода будет вызван ме-
Пример самодостаточен, чтобы на практике показать тод TestClass_A::foo(), хотя мы ожидали бы, что будет вызван
всю мощь namespace. Еще скажу пару слов про оператор метод класса TestClass_B. Таким образом, не существовало
«use», с помощью которого осуществляется импорт. Опе- инструмента для точного определения, какой статический
ратор «use» может импортировать: метод должен быть вызван при наследовании. Для решения

78
программирование
данной проблемы был введен класс static, с помощью кото- var_dump(__METHOD__, $name, $argv);
}
рого можно осуществить позднее статическое связывание. }
Тогда, переписав наш код следующим образом:
TestClass_A:: foo('arguments');
<?php ?>
class TestClass_A
{ Данный «магический» метод по сути эквивалентен ме-
public static function foo()
{ тоду _call(), с той лишь разницей, что он обязательно дол-
printf("\n %s \n", __CLASS__); жен быть объявлен как статический. Уверен, что примене-
}
ние данной функции найдется во многих областях и шабло-
public static function bar() нах проектирования. Здесь происходит вызов несуществу-
{
// self::foo(); ющего статического метода TestClass_A:: foo(), обращение
static::foo(); к которому мы перехватили с помощью магического метода
}
} TestClass_A:: __callStatic(). В этом методе мы можем сделать
нужные нам обработки и вызвать нужные нам функции.
class TestClass_B extends TestClass_A
{
public static function foo()
{
Лямбда-функции и замыкания
printf("\n %s \n", __CLASS__); Чем действительно порадовали нас разработчики PHP 5.3,
} так это поддержкой лямбда-функций, за что им особое боль-
}
шое спасибо! Лямбда-функция – это анонимная функция,
TestClass_B::bar(); создающаяся каждый раз при вызове в определенном кон-
?> тексте приложения. Данный тип функций создан в первую
очередь для реализации таких алгоритмов, как «замыка-
мы получим то, что хотели, а именно вызов метода ния» и создания функций высшего порядка.
TestClass_B::foo(). Благодаря этому нововведению мы полу- Функцией высшего порядка называется функция, при-
чили возможность написать абстрактный класс Singleton. нимающая другие функции в качестве параметров или воз-
вращающая функциональные значения. В PHP была уже
<?php возможность создавать динамически анонимные функции
abstract class Singleton с помощью функции create_function(). Но данная функция
{ возвращает имя созданной функции в виде строки. При-
protected function __construct() {}
protected function __clone() {} мер такой приведен ниже:
public function getInstance() <?php
{
if ( is_null(static::$Instance) ) $lambda = create_function(", 'print __FUNCTION__ ."\n";');
static::$Instance = new static;
return static::$Instance; $lambda();
}
} call_user_func($lambda);

?>
class TestSingleton_A extends Singleton
{
protected static $Instance = NULL; В примере мы создаем динамическую функцию без име-
public $field = 123;
} ни. Точнее, мы не задаем ей имя, но PHP присвоит ей имя
в стиле «lambdaN», где N – порядковый номер анонимной
class TestSingleton_B extends Singleton
{ функции. К такой функции мы всегда можем обращаться
protected static $Instance = NULL; только через переменную, которой мы присвоили резуль-
public $field = 456;
} тат выполнения create_function(). Данная функция будет за-
нимать ресурсы точно так же, как и обычная пользователь-
var_dump( TestSingleton_B::getInstance()->field );
var_dump( TestSingleton_A::getInstance()->field ); ская функция. Эта запись не является настоящей реали-
зацией лямбда-функции. В PHP 5.3 добавили более менее
?>
нормальную поддержку лямбда-выражений, которая вы-
глядит следующим образом:
Перегрузка статических методов
В PHP 5.3 появился «магический» метод __callStatic(), поз- <?php
воляющий перехватывать обращение к статическим ме- $lambda = function () ↵
тодам класса. { echo 'Test function: ' . __FUNCTION__ . "\n"; };

var_dump($lambda);
<?php
$lambda();
class TestClass_A
{ call_user_func($lambda);
public static function __callStatic($name, $argv)
{ ?>

№9, сентябрь 2008 79


программирование
Во-первых, обратите внимание на обязательную точку чуть более подробно, но после того как закончим с лямб-
с запятой, без которой будет сгенерирована синтаксичес- да-выражениями.
кая ошибка. Запись функции теперь является выражени- Мы уже достаточно успели поговорить о лямбда-функ-
ем, которое обязательно должно закрываться знаком за- циях и разобрать несколько примеров, но я до сих пор не-
вершения выражения. Лямбда-выражение является объек- показал полный синтаксис записи. Шаблон записи лямб-
том класса Closure. Также константа __FUNCTION__ внут- да-выражения выглядит так:
ри контекста лямбда-функций не доступна. Поэтому в на-
шем примере вызов функции выведет всего лишь над- function & (parameters) use (lexical vars) { body };
пись «'Test function: '». При использовании лямбда-выра-
жений в классах есть небольшие особенности. Например Вы обратили внимание на оператор use? Да, точно такой
есть класс: же оператор используется для импорта пространств имен.
В данном контексте он используется для импорта внешних
<?php переменных, относительно лямбда-функции внутрь выра-
class TestClass_A жения. Лучше всего показать на примере:
{
public $lambda_foo; <?php
function __construct() class TestClass_A
{ {
$this->lambda_foo = function() { return __CLASS__; }; function foo_method($x, $y)
} {
} $i = 8;
$n = 32;
$Obj = new TestClass_A();
echo $Obj->lambda_foo(); $closure =
static function ($x, $y) use ($i, $n)
?> {
return ($x+$i) * ($y+$n);
};
Данный код приведет к ошибке, так как метода
TestClass_A::lambda_foo() не существует. Что же делать? return $closure($x, $y);
}
Для таких случаев у объекта типа Closure есть метод }
__invoke(), который вызывает функцию. Поэтому вызов при-
$Obj = new TestClass_A();
детеся осуществлять таким образом: echo $Obj->foo_method(3, 2);

?>
<?php

echo $Obj->lambda_foo->__invoke(); В данном случае $x и $y передаются как аргументы


функции, а вот $i и $n импортируются в нее. Импортирован-
?>
ные переменные становятся доступными внутри выраже-
Может, не особо красиво, но что мешает нам сделать ния, как если бы они были частью лямбда-функции. Кста-
вызов лямбда-функций через перехват обращений с по- ти, вышеприведенный пример реализует такой алгоритм
мощью метода __call()? Да, собственно, ничто. высшего порядка, как замыкание, о которых мы поговорим
далее. Также надо сказать про префикс static. Вы можете
<?php создавать статические лямбда-выражения, точно так же,
class TestClass_A как статические переменные внутри функций.
{
public $lambda_foo;
Замыкания
function __construct() Суть замыканий в том, что многие функции можно пара-
{
$this->lambda_foo = function() { return __CLASS__; }; метризовать целыми алгоритмами. И очень часто такие
} алгоритмы можно оформить в виде функций, которые пе-
function __call($name, $argv) редаются в качестве аргумента. Они, как правило, имеют
{ небольшой размер и необходимы только для маленького
if ( isset($this->$name) ↵
&& $this->$name instanceof Closure ) участка кода, где они применяются. Отсюда возникает не-
return $this->$name->__invoke($argv); обходимость в синтаксисе, позволяющем описывать такие
}
} функции прямо по месту использования, не засоряя про-
странство имен. Следствием такой необходимости были
$Obj = new TestClass_A();
придуманы лямбда-выражения, о которых мы уже погово-
echo $Obj->lambda_foo(); рили, и такой паттерн функционального программирова-
?> ния, как «замыкания».
Замыкание (англ. closure) – процедура, которая ссылает-
Но вообще такое должно встречаться редко. Не сто- ся на свободные переменные в своём лексическом контек-
ит увлекаться и использовать лямбда-выражения вез- сте. Замыкание, так же как и экземпляр объекта, есть спо-
де, где попало. Раз мы заговорили о магическом методе соб представления функциональности и данных, связан-
__invoke(), который был добавлен, то стоит его разобрать ных и упакованных вместе. Также можно сказать, что за-

80
программирование
мыкание – это особый вид функции. Она определена в те- ной библиотеки libmysql, оптимизированной специаль-
ле другой функции и создаётся каждый раз во время её вы- но для PHP. MySQLnd использует менеджер памяти Zend
полнения. В записи это выглядит как функция, находяща- Engine, таким образом не требуется копирование данных
яся целиком в теле другой функции. При этом вложенная из библиотеки libmysql в PHP. Оно использует значение ди-
внутренняя функция содержит ссылки на локальные пере- рективы memory_limit, что позволяет контролировать выде-
менные внешней функции. Каждый раз при выполнении ляемую память. MySQLnd использует потоки PHP, что дела-
внешней функции происходит создание нового экземпля- ет более быстрыми постоянные соединения. Также данное
ра внутренней функции с новыми ссылками на перемен- расширение содержит серию оптимизаций для более быст-
ные внешней функции. Замыкание связывает код функ- рого получения результатов. Кроме того, MySQLnd позволя-
ции с её лексическим окружением (местом, в котором она ет собирать статистику, что может пригодиться в дальней-
определена в коде). Лексические переменные замыкания шем для оптимизации ваших запросов. MySQLnd использу-
отличаются от глобальных переменных тем, что они не за- ется как для работы mysql, так и для mysqli-библиотек.
нимают глобальное пространство имён. От переменных Вопрос о том, какая библиотека будет использоваться
в объектах они отличаются тем, что привязаны к функци- libmysql или mysqlnd, решается на стадии компиляции PHP.
ям, а не объектам. Многими любимый PDO на данный момент не поддержи-
вает работу через MySQLnd. Как заявил Дмитрий Стогов
<?php на седьмой международной конференции PHPCONF 2008,
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9); поддержку PDO реализовывать не будут, но не исключают,
что могут найтись энтузиасты, которые смогут осуществить
$array = array_map( function($element) ↵
{ return $element < 5 ? $element /10 : ↵ это и написать расширение. Может быть, этим человеком
$element *10; } , $array ); станете вы, уважаемый читатель.
var_dump($array);

?>
Новое расширение Phar
В PHP 5.3 появилось новое расширение, по принципу ана-
Согласитесь, что такая запись намного удобней, чем на- логичное концепции JAR-технологии Java. Phar-архив преж-
писание отдельной функции, особенно если учесть, что дан- де всего придуман для приложений-инсталляторов, а так-
ный участок кода должен выполниться всего один раз же для удобного распространения целого PHP-приложе-
на протяжении работы всей программы. Ради такого слу- ния или библиотеки в одном файле. В отличие от JAR-ар-
чая засорять программу реализацией отдельной функции хивов, Phar-архивы не нуждаются ни в специальной среде
нет смысла. К тому же после отработки данного кода ре- исполнения, ни во внешних средствах для запуска процес-
сурсы не будут засорены, так как никакой функции не бу- са или PHP. Phar-архив используется так же, как и обычные
дет висеть в памяти. PHP‑файлы. Например, чтобы вывести в браузер изобра-
жение из архива, достаточно написать:
Магический метод __invoke()
Данный метод позволяет работать с объектом как с функ- <?php
цией. Сразу приведу пример: header(‚Content-type: image/jpeg‘);
echo file_get_contents('phar:///path/to/my/test.phar/ ↵
resources/image.jpg');
<?php ?>
class TestClass_A
{ Как видите, для подключения используется специ-
function __invoke($i)
{ альный стрим-враппер 'phar:'. Давайте теперь попробуем
return $i * 16; на практике создать Phar-архив. Вообще надо сказать, что
}
} специальных архиваторов нет. Но это не проблема. Соз-
дать такой архив несложно самостоятельно, но есть одно но.
$Obj = new TestClass_A();
echo $Obj(8); По умолчанию работа с Phar-архивами разрешена только
на чтение. А чтобы создать архив, нужно разрешить запись.
?>
Для этого надо в php.ini добавить всего одну строчку:
Теперь в арсенале программистов ООП-щиков появил-
ся еще один новый инструмент для реализации новых ин- [phar]
phar.readonly=0
тересных алгоритмов. Появилась реальная возможность
создавать функции-объекты, а это расширяет объектно- Если этого не сделать, ваш скрипт будет все время ге-
ориентированные возможности языка. нерить исключения. Теперь напишем небольшой код:

Поддержка драйвера MySQLnd <?php


В PHP5.3 добавлен ряд расширений, одним из которых $DIR = __DIR__;
является MySQLnd. Хотя данное новшество не является
try {
PHP‑расширением в полном смсысле этого слова, так как $Phar = new Phar('test.phar', 0);
не предоставляет каких-то новых функций, доступных
$Phar["/test.php"] =
для PHP-программиста. Оно является всего лишь заме- <<<'NOWDOC'

№9, сентябрь 2008 81


программирование
<?php сический сахар», но, тем не менее, они приятны. Ведь все
echo 'This is test phar archive.'; мы любим сладкое. Итак, что нам на десерт приготовили
разработчики PHP? Давайте посмотрим. Первое – это но-
NOWDOC;
вый синтаксис старого оператора HEREDOC, который на-
$fp = fopen('img.jpg', 'rb'); зывается NOWDOC.
$Phar["/img.jpg"] = fread($fp,filesize('img.jpg'));
fclose($fp);
NOWDOC
} catch (Exception $e) {
echo $e->getMessage(); В PHP существует синтаксис HEREDOC, который называ-
} ется «встроенный документ». Обычная форма записи та-
?> кого оператора выглядит так:

Данный код демонстрирует, как в архив добавляется <?php


PHP-код из строки и один графический файл. После того $var_1 = 123;
как отработает скрипт, будет создан файл test.phar. Прове- $var_2 = 456;
рим, что внутри, делаем простой тест: echo <<<HEREDOC

Example:
<?php $var_1+$var_2
$DIR = __DIR__; HEREDOC;
include "phar://$DIR/test.phar/test.php"; // Example:
// prints 123+456
?>
?>
и
Новый синтаксис NOWDOC показан в следующем при-
<?php мере:
$DIR = __DIR__;
<?php
header('Content-type: image/jpeg');
echo file_get_contents("phar://$DIR/test.phar/img.jpg"); echo <<<'NOWDOC'

?> Example:
$var_1+$var_2
Как видите, ничего сложного. Мы создали исполняемый
NOWDOC;
php-архив. Данный архив изначально сжат по алгоритму tar.
Вы всегда можете сжать данные архивы с помощью ZIP. До- // Example:
// $var_1+$var_2
бавьте в код следующую запись:
echo <<<"NOWDOC"
<?php
Example:
$Phar = $Phar->convertToExecutable(Phar::TAR, Phar::GZ); $var_1+$var_2
?> NOWDOC;
Если создать в архиве файл с именем index.php, то он // Example:
будет запускаться автоматически. Достаточно, например, // printd 123+456
в консоли написать
?>
php test.phar
Суть нового синтаксиса в том, что теперь можно контро-
либо сделать подключение файла через include: лировать поведение многострочных вставок. Если раньше
они интерпретировались так же, как двойные кавычки, то те-
<?php перь можно переключить поведение, чтобы данный блок
$DIR = __DIR__; интерпретировался как одинарные. Делается это добавле-
нием одинарных кавычек к открывающему маркеру блока:
include "phar://$DIR/test.phar";
<<<'NOWDOC'. Без указания кавычек данный блок будет
?> вести себя так же, как и раньше. Для совместимости была
добавлена возможность указывать поведение синтаксиса
Более подробную информацию вы можете получить с помощью двойных кавычек, хотя это не обязательно.
по адресу: http://ru2.php.net/manual/ru/book.phar.php.
Оператор безусловного перехода GOTO
Синтаксические изменения Данный оператор реализован для поддержки программно-
В самом синтаксисе языка также есть некоторые измене- генерируемого кода. Но так уж повелось, что присутствие
ния. Все эти изменения можно отнести к термину «синтак- или отсутствие оператора GOTO в языке программирова-

82
программирование
ния всегда вызывает жаркие дебаты среди сторонников по тексту и смотреть, зачем была нужна эта переменная.
«правильного стиля» программирования. Всегда считалось Красивое быстрое решение для данного примера состо-
признаком «хорошего тона» неиспользование данного опе- ит в использовании горячо критикуемого GOTO, который
ратора. Я не являюсь сторонником одной из этих «коали- обвиняют в неструктурности и в «идеологической непра-
ций», хотя считаю оператор GOTO неприемлемым в серь- вильности». Наш пример с использованием данного опе-
езном программировании. Тем не менее хочу сказать, что ратора будет выглядеть следующим образом:
действительно есть места, где использование оператора
goto выглядит вполне логично. <?php
Начинающие программисты, пришедшие в PHP из дру-
гих языков, постоянно задаются одними и теми же вопроса- for ($i=0; $i<100; $i++)
{
ми. Например, такими: как выйти из многовложенного цик- // ...
ла? Средствами структурного программирования такой вы-
for ($n=0; $n<100; $n++)
ход можно достигнуть, используя оператор breack(n), но он {
не всегда подходит для поставленных целей. Чаще такие // ...
алгоритмы реализуются, добавляя флаги в циклы, кото- for ($x=0; $x<100; $x++)
рые проверяются при каждой итерации, что очень громоз- {
// ...
дко и непроизводительно. Процессоры не любят ветвле-
ний, и каждая лишняя проверка съедает очень много так- if ( $x == 8 && 4 == $n && ↵
$i == 2 ) goto L_exit;
тов, особенно на нерегулярных переходах, которые невоз-
можно предсказать. // ...
}
Пример такого цикла может быть следующим:
// ...
}
<?php
// ...
}
$exit = false;
L_exit:
for ($i=0; $i<100; $i++) echo "Exit from loop: $i, $n, $x";
{
// ...
?>
for ($n=0; $n<100; $n++)
{
// ... Как видите, данный код намного лучше предыдуще-
го. Оператор GOTO имеет полное право на существова-
for ($x=0; $x<100; $x++)
{ ние, потому что существуют ситуации, в которых он может
// ... значительно улучшить программный код. Но надо пом-
if ( $x == 8 && 4 == $n && $i == 2 ) нить, что таких случаев должно быть немного и програм-
{ ма должна проектироваться так, чтобы не возникало необ-
$exit = true;
break; ходимости в данном операторе. Хотя оператор goto и мо-
} жет облегчить задачу, при злоупотреблении им програм-
// ... ма превращается в спагетти, и ее становится совершен-
} но невозможно нормально отлаживать, так как непонят-
if ( $exit ) break; но, как мы попали в этот блок кода и откуда был совер-
шен переход сюда.
// ...
} Данный оператор предназначен в первую очередь
для реализации таких алгоритмов, как «конечные авто-
if ( $exit ) break;
маты». В PHP у него есть также ограничение, в отличие
// ... от других языков.
}
Переход с помощью GOTO запрещен внутрь цикла или
echo "Exit from loop: $i, $n, $x"; оператора switch.

?> Сокращенный тернарный оператор


Еще одним синтаксическим сахаром нас «порадовали» раз-
То есть, вместо того чтобы использовать GOTO и выйти работчики. Это сокращенная запись тернарного операто-
из циклов сразу, пришлось завести еще одну переменную ра «?:;». Честно говоря, не совсем вижу очевидные преиму-
$exit и добавить проверки условий. Оператор GOTO в та- щества данной записи, хотя данной фиче можно будет при-
кой ситуации выглядит намного лучше. Это простой при- думать применение. Например, такое:
мер, но в реальности он может содержать очень много ко-
да, и циклов может быть не три, а много больше. Кроме то- <?php
го, введение еще одной переменной дает возможность где- define('IF_DEBUG', false);
нибудь допустить ошибку, например, в ее инициализации
// ...
или при проверке. Опять же, программисту придется лазить

№9, сентябрь 2008 83


программирование
function print_debug_info() printf("%s \n", __DIR__);
{
print "Deug ..."; ?>
}

// ... Теперь в этом нет необходимости, так как разра-


ботчиками PHP была добавлена константа __DIR__.
IF_DEBUG ?: print_debug_info();
По сути дела данная константа эквивалентна записи
?> «__DIR__ == dirname(__FILE__)», однако она имеет ряд пре-
имуществ. Одно из таких преимуществ даной константы за-
Правда, здесь теряется очевидность логики, так как, ключается в том, что она вычисляется движком Zend Engine
чтобы отработала функция print_debug_info(), константа на стадии компиляции скрипта и соответственно потребля-
IF_DEBUG должна принимать значение FALSE. Сокращен- ет меньше ресурсов, чем вышеописанный вариант. Во‑вто-
ная запись по сути эквивалентна следующему выражению: рых, она вычисляется для кажого скрипта, в котором была
«$a ?: $b === $a ? $a : $b». Надо сказать сразу про неболь- запрошена, в отличие от нашего варинта.
шое отличие от полной записи оператора. Следующий код
показывает различия в поведении: Сборщик мусора и производительность
В PHP 5.3 появился сборщик мусора, который распознает
<?php и уничтожает циклические структуры. Хотя сборщик му-
$condition = 0; сора был в PHP практически с самого начала, эффектив-
ность его работы оставляла желать лучшего. Он был пос-
$result_1 =
$result_2 = 'True'; троен на счетчике ссылок и не распознавал циклических
структур. Типичным примером такой структуры являет-
$result_1 = $condition ?: 'False';
$result_2 = $condition ? $result_2 : 'False'; ся массив, один из элементов которого является ссылкой
на самого себя:
var_dump($result_1, $result_2);

?> <?php

$a = array();
Результат данного кода вроде бы очевиден. Обе пе- $a[0] = &$a;
unset ($a);
ременные будут содержать строку False. Далее мы пере-
ключаем наш флаг в 1 и смотрим снова результат кода. ?>
На этот раз переменная $result_1 будет равна 1, $result_2
будет равна True. Как видите, в качестве положительного Даже когда мы делали уничтожение переменной, значе-
результата сокращенный оператор возвращает результат ние счетчика ссылок не уменьшалось и не доходило до ну-
условия. Кстати, также не вижу особой полезности данно- ля. Это соответственно приводило к тому, что переменная
го оператора, так как сокращенный вариант условий мож- оставалась висеть в памяти до окончания работы скрип-
но было писать, используя логические операторы. Мы мо- та, занимая системные ресурсы. Сборщик мусора может
жем написать так: запускаться как автоматически, так и явно через вызов
функции gc_collect_cycles(). Данная функция возвращает
<?php количество уничтоженных циклических структур. Автома-
$a = 1; тический запуск сборщика мусора можно отключать функ-
$r2 = ‚True‘; цией gc_disable() и включать функцией gc_enable() соот-
$a || $r2 = ‚False‘; ветственно.
var_dump($r1, $r2); <?php
?> gc_disable();

$a = array();
Правда, эта запись уже подходит под определение не- $a[0] = &$a;
тривиального синтаксиса (о котором было подробно напи- unset($a);
сано в №10 за 2007 год). Тем не менее, сокращенная за- printf("%d \n", gc_collect_cycles());
пись тернарного оператора может быть востребована в не-
gc_enable();
которых случаях.
?>
Константа __DIR__
Частенько приходится определять константу с именем те- Также выросла производительность интерпретатора
кущей директории. Как правило, это делается следующим по сравнению с предыдущими версиями.
образом:
Расширение системы конфигурирования
<?php В новой версии был изменен механизм обработки файла
define('__DIR__', dirname(__FILE__)); настроек. Теперь есть возможность задавать разные уста-
новки для разных директорий.

84
программирование
Например, у нас на 1-м сервере располагаются сра- <?php
зу девелоп-хост для разработки программного обеспече- $Stack = new SplStack();
ния и продакшн-хост, где выкладывается конечная вер-
$Stack->push('a');
сия продукта для пользователей. На девелоп-версии мы $Stack->push('b');
включаем вывод всех сообщений об ошибках, а на про- $Stack->push('c');
дакшн версии, естественно, отключаем вывод сообще- printf("%s \n", $Stack->pop() );
ний о каких-либо ошибках. Обычно это делается добавле- printf("%s \n", $Stack->pop() );
printf("%s \n", $Stack->pop() );
нием установки директивы error_reporting в скриптах или
через вызов одноименной функции. К примеру, часто де- ?>
лают так: в php.ini директиву error_reporting выставляют
в ноль, а в девелоп-версии скриптов в самом начале пишут На выходе получим: c,b,a. Более сложные структуры
«error_reporting( E_ALL | E_STRICT )». Не так уж это и слож- данных, такие как SplPriorityQueue, позволяют формиро-
но, но ведь это простой пример, а на практике может быть вать структуры, отсортированные по приоритету.
намного больше различных настроек, и не все они могут
быть выставлены в пользовательских скриптах. Теперь по- <?php
явилась возможность указывать настройки для каждой ди- $PQueue = new SplPriorityQueue();
ректории в отдельности. Просто в php.ini пишем: $PQueue->setExtractFlags( SplPriorityQueue::EXTR_DATA );

$PQueue->insert('последний элеменет',1);
[PATH=/home/ develop_host/www] $PQueue->insert('первый элемент', 3);
error_repoting = E_ALL | E_STRICT $PQueue->insert('средний элемент', 2);
[PATH=/home/production_host/www] printf("Верхний элемент: %s \n", $PQueue->top() );
error_reporting = 0 printf("%s \n", $PQueue->extract() );
printf("%s \n", $PQueue->extract() );
Все. При обращении к скриптам в той или иной дирек- printf("%s \n", $PQueue->extract() );
тории PHP будет применять соответствующие настрой- ?>
ки. Также есть возможность задавать разные установки
для разных виртуальных хостов. Мы можем предыдущий На выходе получим:
пример записать как: Приоритетный элеменет: первый элемент
первый элемент
[PATH=develop.my-super-startup.ru] средний элемент
error_repoting = E_ALL | E_STRICT последний элемент

[PATH= my-super-startup.ru] Более подробно о данных расширениях вы можете про-


error_reporting = 0
читать на http://ru2.php.net/manual/ru/book.spl.php.
В итоге мы привязали настройки к виртуальным хостам,
а не к директориям, что позволит нам переносить проек- The end...
ты из директории в директорию, но при этом не менять на- Рассказывать о всех нововведениях можно очень долго.
стройки в php.ini. Но главное то, что, по заверениям разработчиков, PHP 5.3
Более подробно о данном нововведении можно прочи- от PHP 6 будет отличаться только поддержкой юникода.
тать на http://ru.php.net/ini.sections. А значит, если вы научитесь работать с PHP 5.3, у вас не бу-
дет проблем с переходом на шестую версию. Да, это, конеч-
Новые возможности SPL но, произойдет не сейчас, но это произойдет. Жизнь не стоит
SPL – стандартная библиотека PHP (Standard PHP Library). на месте, как и прогресс. Надо всегда быть на гребне волны
Представляет собой набор интерфейсов и классов, которые и смотреть в будущее. Всем известна простая истина: кто
предназначены для решения стандартных задач и реализу- осведомлен – тот вооружен! Вооружайтесь знаниями сей-
ют функционал для эффективного доступа к данным, интер- час, чтобы быть среди лидеров веб-разработки. Язык PHP
фейсам и классам. Эта библиотека позволяет не отвлекать- «растет» и развивается, и мы, девелоперы, также развива-
ся на рутину по изобретению «велосипедов», так как мно- емся вместе с ним. Добавление таких инструментов в язык,
гие алгоритмы в программировании, можно сказать, стан- как пространства имен и элементы функционального про-
дартизированы. SPL предоставляет программисту доступ граммирования, не говоря уже об объектно-ориентирован-
к эффективной реализации наиболее распространенных ных инструментах, позволяет наконец-то относиться к PHP
алгоритмов и структур данных. В SPL у PHP 5.3 появился как к серьезному языку программирования. Конечно, это
новый функционал и новые структуры данных, такие как еще пока только альфа-версия языка, но релиз не за гора-
heap, stack, queue и linked list. Много рассказывать про дан- ми. Стабильная версия PHP 5.3 ожидается уже к концу ок-
ные структуры не буду, так как даже начинающим програм- тября 2008 года. Так что в ваших интересах начать освое-
мистам они должны быть известны, хотя бы из других язы- ние новых возможностей «старого» инструмента.
ков программирования. Тем не менее я покажу пару приме-
ров работы. Самый простой, с чего начнем, – это стек. Ду- 1. http://ru.php.net/manual/ru/book.spl.php.
маю, нет смысла рассказывать, что стек – это такая струк- 2. http://wiki.php.net/doc/scratchpad/upgrade/53.
тура, в которой элемент, пришедший первым, будет извле- 3. http://ru2.php.net/manual/ru/book.spl.php.
чен из нее последним: 4. http://ru.php.net/ini.sections.

№9, сентябрь 2008 85


администрирование «1С»

Открываем базу данных


одним щелчком мыши

Андрей Луконькин
Файловое расширение *.MD по умолчанию не обрабатывается операционной системой,
но это досадное недоразумение можно исправить, добавив себе дополнительный функционал
для комфортной работы.

С
о временем на компьютере про- 1CV7.MD: «Конфигуратор», «Монитор», реестра, который при запуске будет
граммиста баз «1С:Предприя- «Предприятие» и «Предприятие моно- обрабатываться редактором реестра.
тие 7.7» становится слишком польно». К тому же сделаем так, чтобы После запуска этого файла двойным
много, и они далеко не все зарегис- команда «Конфигуратор» была коман- щелчком у вас должны появиться упо-
трированы в списке баз для запус- дой по умолчанию, т.е. использовалась мянутые команды в контекстном меню
ка (диалог «Запуск 1С:Предприятия»). при двойном щелчке по файлу. (см. рисунок).
Попробуем упростить себе работу, за- В «Блокноте» (notepad.exe) или Важно! Если у вас «1С:Предпри-
пуская «1С:Предприятие» в нужном ре- любом другом текстовом редакторе ятие» установлено в папке, отличной
жиме, щелкнув по файлу конфигура- можно набрать нижеприведенный код от «C:\Program Files\1Cv77\», или испол-
ции 1CV7.MD. (см. листинг) и сохранить его в фор- няемый файл называется не 1cv7s.exe,
Для этого нужно зарегистриро- мате TXT. Затем переименовать соз- исправьте код соответствующим об-
вать четыре команды контекстного ме- данный файл, изменив расширение разом, изменив путь к исполняемому
ню проводника Windows для файлов на REG. Таким образом, получим файл файлу и имя файла.

Windows Registry Editor Version 5.00


[HKEY_CLASSES_ROOT\.MD]
@="mdfile"
[HKEY_CLASSES_ROOT\mdfile]
[HKEY_CLASSES_ROOT\mdfile\shell]
[HKEY_CLASSES_ROOT\mdfile\shell\open]
@="Конфигуратор"
[HKEY_CLASSES_ROOT\mdfile\shell\open\command]
@="\"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe\" config /D\"%1\\..\""
[HKEY_CLASSES_ROOT\mdfile\shell\open2]
@="Монитор"
[HKEY_CLASSES_ROOT\mdfile\shell\open2\command]
@="\"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe\" monitor /D\"%1\\..\""
[HKEY_CLASSES_ROOT\mdfile\shell\open3]
@="Предприятие"
[HKEY_CLASSES_ROOT\mdfile\shell\open3\command]
@="\"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe\" enterprise /D\"%1\\..\""
[HKEY_CLASSES_ROOT\mdfile\shell\open4]
@="Предприятие монопольно"
Так выглядит контекстное меню после [HKEY_CLASSES_ROOT\mdfile\shell\open4\command]
описанных манипуляций с реестром @="\"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe\" enterprise /m /D\"%1\\..\""

86
администрирование «1С»

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

Зачем это нужно?


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

№9, сентябрь 2008 87


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

Сквозь тернии к звездам:


история компании Hewlett-Packard

Илья Александров
Их было двое. Одного звали Билл, другого – Дэвид. Они окончили университет в начале
тридцатых годов прошлого века и были инженерами. Эти парни хотели заниматься
технологиями. Теперь фамилии Хьюлетт (Hewlett) и Паккард (Packard) знает весь мир.

Тридцатые. рачен на покупку простенького свер- господствует во многих американских


Первые разработки лильного станка. Тогда же HP создает фирмах. В HP отказываются от отдель-
в офисе-гараже свой первый продукт. 200A audio – ау- ных кабинетов, все сотрудники работа-
Билл и Дэвид окончили Стэнфорд дио-осциллятор (см. рис. 1), устройс- ют в одном большом помещении. Сей-
в 1934 году, получив специальность тво, которое используется для тести- час это называют «мульти-румом».
инженера-электрика. После окончания рования работоспособности звуково- «Каждый сотрудник компании хо-
университета они отправились на две го оборудования. Партию из 8 моде- чет сделать хорошее дело», – гово-
недели на природу в Колорадо, где жи- лей купил Уолт Дисней для своих зву- рил Дэвид. Руководство отказывает-
ли в палатках и ловили рыбу. Нефор- козаписывающих студий. ся от строгого авторитаризма, пред-
мальная обстановка способствовала Доход за первый год работы соста- лагая сотрудникам некоторую свобо-
тому, что Хьюлетт и Паккард подружи- вил пять тысяч долларов. ду действий в работе. Все сотрудники
лись. Билл после этого продолжил со- компании получали беспрецедентную
вершенствовать свои знания и навыки Сороковые. для того времени медицинскую стра-
в Массачусетском технологическом ин- Годы Второй мировой ховку с большими финансовыми обя-
ституте (MTI), а Дэвид начал работать Сороковые годы были непростыми для зательствами. Кстати, первые пожерт-
в компании General Electric. Они про- HP и для всей экономики в целом – вования на благотворительность были
должили общаться и решили, что по- Вторая мировая война вносила свои сделаны HP еще в 1940 году, когда до-
ра бы уже начать делать что-то для се- коррективы в идеи американских пред- ходы компании были очень скромны.
бя. В 1939 году они основали собст- принимателей. Приборы, которые производит в то
венную компанию, скромно названную Как бы там ни было, компания на- время «Hewlett-Packard», нужны в ос-
ими Hewlett-Packard. чинает строить собственное здание новном людям научной среды и специ-
Первый офис, про который так лю- для офиса и продолжает разработ- алистам. Например, одним из главных
бят рассказывать в компании, являл- ки. В компании отмечают, что именно продуктов 1942 года стал вольтметр
ся обычным гаражом. Начальный капи- в эти годы началась формироваться HP 400A. В 1943 году компания начина-
тал в размере 538 долларов был пот- корпоративная этика, которая сегодня ет изготовление приборов микровол-

88
ретроспектива
нового излучения, тогда эти разработ- правлений в деятельности HP. Здесь
ки проводились для нужд военно-мор- нужно сказать, что, купив чей-то биз-
ского флота. HP стала признанным ли- нес, Билл и Дэвид не начинали наво-
дером в этой области. В 1947 году HP дить свои порядки. Приобретенная
выпустила каталог со своей продук- компания работала словно автономия,
цией, где присутствовало 39 наиме- просто доход приносила уже новым хо-
нований, и Дэвид представлял проек- зяевам. Принцип «не мешать» четко
ты на нью-йоркской выставке. Несмот- соблюдался на протяжении всей ис-
ря на то что военные заказы от аме- тории корпорации.
риканского правительства прекрати- Спустя год HP покупает завод
лись после войны, HP сумела остать- в Германии и начинает массовые пос-
ся на плаву. тавки оборудования на европейский
К началу пятидесятых у компаний рынок. К началу шестидесятых годо- Рисунок 1. Осциллятор 200A
годовой оборот в 2 миллиона долларов вой доход составляет 48 миллионов
и штат со 166 сотрудниками. долларов, в компании работают более лиал в Японии и новый завод в США.
двух тысяч человек. Годовой доход в 1969 году составил
Пятидесятые. 326 миллионов долларов, в компании
Выход на биржу Шестидесятые. работали 16 тысяч человек.
и европейский рынок Новые разработки
В 1951 году компания выпускает про- В шестидесятые годы – развитие ком- Семидесятые.
дукцию для радиостанций. Радиопе- пании, можно выделить три особые ве- Электронные часы
редатчики, измерители частоты, кото- хи. В 1964 году HP выпускает атомные и завоевание Востока
рые модернизировали всю радийную часы – HP5060A. Они способны пока- В 1972 году HP выпускает первый в ми-
отрасль, сделав звук и аудиооборудо- зывать точное время на протяжении ре карманный научный калькулятор.
вание более совершенным. трех тысячелетий с погрешностью мак- Любой инженер теперь может таскать
В 1956 году HP снова подтвержда- симум в 1 секунду. Там, где необходи- его в кармане рубашки. HP‑35 отправ-
ет свой статус лидера на рынке науч- мо всегда знать точное время до мил- ляет на пенсию громоздкие вычисли-
ных приборов. Новая партия осциллог- лисекунды, атомные часы становятся тельные приборы и логарифмическую
рафов – модели 130A/150A становят- стандартом. В центрах космонавтики, линейку. В этом же году на рынке по-
ся крайне популярными во многих ин- у диспетчеров авиалиний и прочих. является HP-3000 – первый компьютер,
ститутах. Осциллограф – это устройс- В 1966 году HP наконец-то выпус- ориентированный не только на работу
тво, предназначенное для визуально- кает свой первый компьютер. Огром- высококвалифицированных научных
го отображения графика электричес- ная махина HP 2116A изначально яв- работников, но и на нужды простых
кого сигнала. лялась контроллером, тестировавшим офисных служащих.
В 1957 году компания размеща- на работоспособность разные элект- Компания продолжает поощрять
ет свои акции на бирже, они прода- рические приборы, изготавливаемые своих сотрудников, вводит систему
ются по 16 долларов за штуку. Выход компанией. В нем впервые инженеры гибкого графика. Фактически каждый
на фондовый рынок – важный этап компании использовали интеграль- работник может сам выбрать, когда
в развитии любой компании, показы- ные схемы. Первую модель с 4 Кб па- ему приходить на работу, главное, со-
вающий ее состоятельность. Много из- мяти купил океанографический инсти- гласовать это с начальством и отра-
менений происходит и в самой HP. тут и установил на одном исследова- ботать за день 8 часов. Забота о слу-
У компании открывается огром- тельском судне. жащих остается приоритетом для HP.
ный полноценный офис в Стэнфордс- Наконец, в 1968 году компания вы- В 1977 году компания выпускает HP‑01
ком индустриальном парке, на терри- пускает настольный научный калькуля- (см. рис. 2). Наручные часы, имевшие
тории располагались даже волейболь- тор HP 9100A. Программируемый каль-
ные площадки для отдыха сотрудни- кулятор используется в научной среде,
ков. Дэвид и Билл продолжают рабо- он умел сохранять результаты вычис-
тать над корпоративной философией лений на магнитных карточках, а сами
и этикой, Дэвид потом назовет семь вычисления, проводимые на нем, рань-
главных ценностей компании: прибыль, ше были возможны только при исполь-
клиенты, области, представляющие зовании больших компьютеров.
научный интерес, экономический рост, В этом устройстве впервые бы-
сотрудники, менеджмент и народ. ли использованы новые дисплеи, ос-
В 1958 году состоялась первая нованные на LED-индикаторах, улуч-
большая сделка для HP. Хьюлетт и Пак- шенные аналоги которых потом станут
кард покупают компанию F.L. Moseley, стандартом при производстве монито-
выпускавшую плоттеры. С этого мо- ров и дисплеев мобильных устройств.
мента принтеры и оргтехника стано- H P начинает с отруд нич е с тво
вятся одним из профилирующих на- со странами Азии, открывает свой фи- Рисунок 2. Часы HP-01

№9, сентябрь 2008 89


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

Рисунок 3. Принтер ThinkJet1984 Рисунок 4. HP Omnibook 300 Рисунок 5. Компьютер HP pavilion

в своем функционале калькулятор n 1984-й – принтеры HP Thinkjet n 1997-й – количество сотрудников


и календарь. Просто милая, казалось (см. рис. 3) делают струйную пе- в компании достигает 122 тысяч че-
бы, безделушка пользовалась беше- чать более качественной и выгод- ловек.
ным успехом и казалась чем-то из ми- ной по сравнению с матричными n 1998-й – начало производства кар-
ра будущего. принтерами. манных компьютеров, первая мо-
В это же время Билл Хьюлетт ухо- n 1985-й – открытие завода в Китае. дель – Jornada PDA.
дит в отставку с поста президента – n 1986-й – HP начинает использовать n 1999-й – президентом компании
возраст уже не позволял ему рабо- в своих компьютерах архитектуру становится Карла Фиорина (Carly
тать в полной мере. Новым президен- RISC. Fiorina).
том стал Джон Янг (John Young), начи- n 1987-й – начало массового произ-
навший в компании простым разра- водства 3,5-дюймовых дискет. Наши дни
ботчиком. n 1988-й – HP DeskJet становится n 2000-й – в списке успешных компа-
Дэвид Паккард совершает не- одним из самых популярных при- ний Fortune-500 HP перемещается
сколько поездок в Китай, весьма вы- нтеров в мире. Акции HP начинают на 13-е место.
соко оценивая перспективы развития продавать за пределами Америки, n 2001-й – умирает Билл Хьюлетт. HP
там бизнеса. А к началу восьмидеся- на Токийской бирже. поглощает компанию Compaq, ко-
тых годовая выручка компании бли- n 1989-й – пятидесятилетие компа- торая становится частью корпора-
зится к двум с половиной миллиар- нии. ции.
дам долларов. n 2002-й – выпуск первого планшет-
Девяностые. ного ПК Compaq Tablet PC TC1000.
Восьмидесятые. Портативные компьютеры Научные разработки в области мо-
Струйные принтеры n 1990-й – открытие филиала в Япо- лекулярной электроники и нанотех-
и производство нии. нологий.
компьютеров n 1991-й – выпуск HP 95LX palmtop n 2004-й – HP получает премию инс-
События и выпуск новой продукции PC. Персональный компьютер, уме- титута электротехнических  элект-
становятся такими насыщенными, щавшийся на ладони, обладал воз- ронных инженеров (IEEE).
что проще начать вести хронологию: можностью полноценного настоль- n 2005-й – Персональные компьюте-
n 1980-й – выпуск первого персо- ного компьютера. ры Hewlett-Packcard занимают пер-
нального компьютера компании, n 1992-й – HP представляет систему вое место по продажам в Европе.
HP‑85. Выпуск первого лазерного серверов HP 3000 для бизнеса.
принтера. n 1993-й – портативный компьютер Итоги
n 1981-й – продукция HP официаль- OmniBook 300 (см. рис. 4) от HP об- HP сегодня – крупная технологичес-
но доступна для покупки в Китае. ладает рекордным временем ра- кая корпорация с годовым доходом
n 1982-й – выпуск первого портатив- боты от батареи. «Вы можете со- в 107 миллиардов долларов и миро-
ного компьютера HP-75C. У него вершить перелет из одного конца вой лидер в области продаж компьюте-
16 Кб оперативной памяти и 48 Кб страны в другой, а ноутбук еще бу- ров. Компания продолжает развивать-
постоянной. дет работать». ся и заниматься научной деятельнос-
n 1983-й – HP начинает использо- n 1994-й – дисплеи HP, основанные тью, а ее первый офис-гараж навсег-
вать сенсорные экраны. Билл Хью- на технологии LED, являются са- да останется памятником успешной
летт награжден президентом Рей- мыми яркими и качественными истории, которую сделали два друга –
ганом медалью за его достижения в мире. Билл и Дэвид.
в области науки и технологий. На- n 1995-й – торговая марка HP Pavilion
чало работы над операционной PC (см. рис. 5) становится одной 1. http://www.hp.com.
системой HP-UX, базирующейся из самых успешных на рынке. 2. http://en.wikipedia.org.
на UNIX. n 1996-й – умирает Дэвид Паккард.

90
bugtraq

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


Программа: Fedora 8, 9. в VMware Player
Опасность: Средняя. Программа: VMware Player версии до 1.0.8 build 108000
Описание: 1. Уязвимость существует из-за ошибки про- и 2.0.5 build 109488.
верки границ данных в различных Red Hat Directory Server Опасность: Высокая.
CGI-приложениях при обработке HTTP-заголовка Accept- Описание: 1. Уязвимости существуют из-за неизвестных
Language. Удаленный пользователь может с помощью спе- ошибок в определенных ActiveX-компонентах. Удаленный
циально сформированного HTTP-запроса вызвать перепол- пользователь может с помощью специально сформиро-
нение буфера и выполнить произвольный код на целевой ванного веб-сайта выполнить произвольный код на целе-
системе с привилегиями учетной записи root. вой системе.
2. Уязвимость существует из-за недостаточной обра- 2. Уязвимость существует из-за неизвестной ошибки,
ботки данных, содержащих символ «%» в Directory Server относящейся к OpenProcess. Локальный пользователь хос-
Administration Express и Directory Server Gateway (DSGW). товой системы может выполнить произвольный код с повы-
Удаленный пользователь может с помощью специально шенными привилегиями на хостовой системе. Уязвимости
сформированного запроса выполнить произвольный код подвержены только VMware Player 1.x for Linux.
сценария в браузере жертвы в контексте безопасности 3. Уязвимость существует из-за использования уязви-
уязвимого сайта. мого кода библиотеки freetype. Удаленный пользователь
3. Уязвимость существует из-за недостаточной обра- может скомпрометировать целевую систему.
ботки входных кодированных данных, содержащих символ 4. Уязвимость существует из-за использования уязви-
«%». Удаленный пользователь может с помощью специаль- мой версии библиотеки cairo. Удаленный пользователь мо-
но сформированного запроса к определенным CGI-прило- жет скомпрометировать целевую систему. Уязвимости под-
жениям вызвать переполнение динамической памяти и вы- вержены только VMware Player 2.x for Linux.
полнить произвольный код на целевой системе. URL производителя: www.vmware.com/products/player.
URL производителя: fedoraproject.org. Решение: Установите последнюю версию с сайта произ-
Решение: Установите исправление с сайта производителя. водителя.

Отказ в обслуживании в Wireshark Выполнение произвольного кода


Программа: Wireshark, возможно, более ранние версии. в Dns2tcp
Опасность: Средняя. Программа: Dns2tcp версии до 0.4.1.
Описание: 1. Различные ошибки обнаружены в epan/ Опасность: Высокая.
dissectors/packet-ncp2222.inc. Удаленный пользователь мо- Описание: Уязвимость существует из-за знаковой
жет с помощью специально сформированных NCP-пакетов ошибки при обработке запросов или ответов в функции
вызвать зацикливание или аварийно завершить работу при- dns_simple_decode() в файле common/dns.c и в функции
ложения. Уязвимости подвержены версии с 0.9.7 по 1.0.2. dns_decode() в файле server/dns_decode.c. Удаленный поль-
2. Уязвимость существует из-за ошибки при декомп- зователь может с помощью специально сформированно-
рессии zlib-сжатых данных. Удаленный пользователь мо- го запроса или ответа вызвать повреждение памяти и вы-
жет с помощью специально сформированных пакетов вы- звать отказ в обслуживании или выполнить произвольный
звать отказ в обслуживании приложения. Уязвимости под- код на целевой системе.
вержены версии с 0.10.14 по 1.0.2. URL производителя: www.hsc.fr/ressources/outils/dns2tcp/
URL производителя: www.wireshark.org. index.html.en.
Решение: Установите последнюю версию 1.0.3 с сайта про- Решение: Установите последнюю версию 0.4.1 с сайта про-
изводителя. изводителя.

Уязвимость форматной строки Отравление DNS-кэша в Ingate Firewall


в HP TCP/IP Services for OpenVMS и SIParator
Программа: HP TCP/IP Services for OpenVMS 5.x. Программа: Ingate Firewall версии до 4.6.4; Ingate SIParator
Опасность: Средняя. версии до 4.6.4.
Описание: Уязвимость существует из-за ошибки фор- Опасность: Средняя.
матной строки в finger-клиенте. Удаленный пользователь Описание: Уязвимость существует из-за того, что Ingate
может с помощью специально сформированных .plan- Firewall и SIParator используют предсказуемый номер порта
или .project‑файлов, расположенных в домашней директо- при включенном NAT. Удаленный пользователь может от-
рии пользователя, выполнить произвольный код на целе- править кэш DNS-сервера и произвести спуфинг-атаку.
вой системе. Для успешной эксплуатации уязвимости зло- URL производителя: www.ingate.com.
умышленник должен обманом заставить пользователя под- Решение: Установите последнюю версию 4.6.4 с сайта про-
ключиться к злонамеренному finger-серверу. изводителя.
URL производителя: h71000.www7.hp.com/network/tcpip.html.
Решение: В настоящее время способов устранения уязви- Составил Александр Антипов
мости не существует.

№9, сентябрь 2008 91


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

Linux. Администрирование сетей


TCP/IP
Скотт Манн, Митчел Крелл
туру на основе Linux. Действительно, токол OSPF и его реализация при по-
не каждому системному администра- мощи демона gated, протокол BGP, от-
тору потребуются рассматриваемые дельная глава посвящена ipchains,
в книге реализации RIP, OSPF, и уж что в общем-то странно для столь све-
тем более BGP. жей книги, рассмотрен сетевой фильтр
Помимо обширного теоретическо- Netfilter, а также iproute2 и другие воп-
го материала в книге приведено мно- росы маршрутизации.
жество практических примеров, кото- Несмотря на то что в книге ряд ма-
рые помогают лучше понять рассмат- териалов устарел и не рассмотрены
риваемые темы. современные реализации некоторых
Авторы последовательно рассмат- протоколов, например Quagga, она
ривают физический и канальный уров- все равно остается отличным пособи-
ни, протоколы ARP и RARP, работа- ем для сетевых администраторов, ра-
ющие между канальным и сетевыми ботающих с операционной системой
Книга является обновленным переиз- уровнями,IP версии 4 и версии 6, мар- GNU/Linux.
данием оригинала, вышедшего пять шрутизацию на сетевом уровне, транс-
лет назад. Авторы, начиная с основ, портный уровень, прикладной уровень, n Издательство: «Бином-Пресс»
доходчиво рассказывают о реализа- утилиты отладки и мониторинга (напо- n Год издания: 2008
ции сетевого взаимодействия сис- добие ping, traceroute, Ethereal), крат- n Количество страниц: 672
тем GNU/Linux и работе стека TCP/IP. ко рассмотрены сетевые приложения n ISBN: 978-5-9518-0230-9
В первую очередь издание будет ин- (DNS, NFS, NIS, LDAP, электронная поч- n Цена: ≈ 492 руб.
тересно сетевым администраторам, та), дано введение в динамическое уп- К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м
строящим свою сетевую инфраструк- равление таблицами маршрутов, про- «Бином-Пресс».

Основы разработки веб-приложений


с помощью PHP и MySQL
Марк Вандшнайдер
прежде чем начал работать над про- вателя, управление учетными запися-
граммным обеспечением с открытым ми, защита веб-приложений. Четвер-
кодом. Процесс разработки веб-прило- тая часть называется «Реализация веб-
жений в книге рассматривается с сис- приложений». В ней рассмотрены воп-
темной точки зрения. Помимо написа- росы отладки кода, Cookies и сеансы,
ния кода затрагиваются такие темы, аутентификация пользователей, про-
как интерфейс пользователя, проек- верка данных при помощи регуляр-
тирование базы данных, безопасность, ных выражений, XML и XHTML, рабо-
тестирование и многое другое. та с файлами и каталогами, загрузка
Книга состоит из шести частей. файлов на удаленный сервер, рабо-
Первая часть посвящена основам PHP. та с датами и временем, веб-службы
В ней рассматриваются такие темы, на основе XML и SOAP, использование
как основные конструкции языка, ор- PEAR. В пятой части приведены приме-
ганизация и повторное использова- ры проектов и обсуждаются дальней-
Неудивительно, что из номера в но- ние кода, понятие об объектно-ориен- шие идеи развития приложений.
мер в обзорах появляются книги, пос- тированном программировании, рабо-
вященные PHP и MySQL. LAMP являет- та с массивами, взаимодействие с сер- n
Издательство: «Эком»
ся одной из популярнейших связок для вером и интернационализация. Вторая n
Год издания: 2008
разработки веб-приложений, что не мо- часть знакомит читателя с основами n
Количество страниц: 828
жет не отразиться на рынке техничес- работы с базами данных, включая ра- n
ISBN: 978-5-9790-0054-1
кой литературы. Автор книги – профес- боту с языком SQL. Третья часть пос- n
Цена: ≈ 644 руб.
сиональный разработчик, проведший вящена планированию веб-приложе- Книга предоставлена интернет-магазином
в компании Microsoft более пяти лет, ний: реализация интерфейса пользо- Books.Ru.

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

Microsoft Windows Server 2008.


Полное руководство
Рэнд Моримото и другие
ностности издание объемом почти пол- 2008, групповые политики, практика
торы тысячи страниц было бы совер- управления и обслуживания, автома-
шенно неправильно. Издание состоит тизация задач при помощи скриптов
из одиннадцать частей. В первой при- PowerShell. Отдельная глава посвяще-
веден обзор Windows Server 2008, где на удаленным и мобильным техноло-
рассказано об отличиях различных гиям. Несмотря на то что в книге речь
редакций друг от друга и об установ- идет именно о сервере, авторы сочли
ке продукта. Вторая часть повеству- необходимым вынести в отдельную
ет об Active Directory в Windows Server часть вопросы взаимодействия с кли-
2008: от проектирования до внедрения. ентскими операционными системами.
В третьей части идет речь об сетевых В оставшихся частях рассказано про
службах: DNS, DHCP, WINS и IIS. Так- технологии обеспечения отказоустой-
же затрагиваются вопросы поддержки чивости, оптимизацию, отладку и ре-
IPv6. Четвертая часть посвящена воп- шение проблем и про интегрирован-
На книжных полках отечественных росам безопасности: безопасность ные службы приложений Windows.
книжных магазинов появилось первое на серверном уровне, на транспор-
подробное руководство по Microsoft тном уровне, политики безопаснос- n Издательство: «Вильямс»
Windows 2008 Server. Первое, потому ти, сервер сетевых политик и защита n Год издания: 2008
что до этого выходившие книги име- сетевого доступа. В пятой части идет n Количество страниц: 1392
ли характер обзорного повествования речь о таком вопросе, как миграция n ISBN: 978-5-8459-1445-3
или рассказывали лишь о новинках, с Windows Server 2000/2003. Шестая n Цена: ≈ 1129 руб.
появившихся во флагманском продук- часть затрагивает такие вопросы, как К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м
те Microsoft. А упрекнуть же в поверх- администрирование Windows Server «Вильямс».

Nmap in the Enterprise:


Your Guide to Network Scanning
Angela Orebaugh, Becky Pinkard
с точки зрения злоумышленника и про- ющих работу с продуктом. Также уде-
анализировать защищенность хостов. лено достаточно внимания и различ-
Автор книги – признанный специалист ным утилитам, расширяющим функ-
в области безопасности, из-под его пе- ционал Nmap, облегчающим работу
ра ранее вышли книги о таких популяр- с ним, в том числе NDiff, RNmap, Bilbo,
ных инструментах, как Wireshark (ра- Nmap-Parser.
нее Ethereal) и система предотвраще- Отдельная глава посвящена мето-
ния вторжений Snort. дике удаленного определения опера-
Книга начинается с введения в се- ционной системы исследуемого хоста
тевое сканирование в целом и про- и ее версии.
грамму Nmap в частности. Хотя книга не очень велика по объ-
Из первых глав вы научитесь ус- ему, но если вы хотите разобрать-
Вряд ли хотя бы один из системных танавливать Nmap в самых распос- ся с таким полезным инструментом,
администраторов, заботящихся о бе- траненных операционных системах: как Nmap, то, безусловно, она заслу-
зопасности вверенных ему систем, Windows, GNU/Linux, Mac OS X. живает вашего внимания.
не слышал о таком многофункциональ- Далее подробно разбирается рабо-
ном инструменте, как Nmap. Это про- та с Nmap из командной строки и GUI n
Издательство: Syngress
граммное обеспечение с открытым ко- Zenmap, рассматриваются различные n
Год издания: 2008
дом, с успехом используемое «плохи- алгоритмы сканирования. В книге при- n
Количество страниц: 384
ми парнями», будет нелишним в арсе- ведено множество примеров сканиро- n
ISBN: 978-1-5974-9241-6
нале любого системного, сетевого ад- вания из реального мира, иллюстриру- n
Цена: ≈ $43,16
министратора или администратора бе-
зопасности, позволяя взглянуть на сеть Обзор книжных новинок подготовил Андрей Маркелов

№9, сентябрь 2008 93


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

Их поменяли местами У меня нет Интернета


Юзеры поменялись местами, самостоятельно переподключив Честно, надоели юзвери, которые не могут работать с Интерне-
системные блоки. Через 5 минут одна прибегает: «Пока пере- том!!!
ставляли, с рабочего стола исчезло большинство значков!!» Еще Звонит пользователь (блондинка): «У меня нет Интернета!!!»
через 10 минут второй: «В Outlook Express пропала папка с пись- Объясняю, как запустить IE. Говорю: «В адресной строке нуж-
мами!!!» но набрать нужный вам адрес и нажать <Enter>».
Я: «А под столом смотрели?» Сижу, работаю дальше. Через 3 часа снова звонок от нее:
Лихолет – У меня все равно не работает Интернет!!! (Некоторые сайты
закрыты, и проставлена своя страничка, что данный сайт этому
пользователю не разрешен.)
Как пользоваться интернет-магазином – Вы стерли старый адрес и вбили туда нужный адрес?
На прошлой неделе ко мне подошла сотрудница лет сорока и при- – Там написано, что Интернет не работает!!! (На мои слова
несла служебную записку, подписанную генеральным, о том, нуль.)
что он просит предоставить ей доступ к одному ресурсу для по- – Вы Интернетом вообще пользовались?
купки кастрюль начиная с этого момента и по момент доставки – У меня никогда не было Интернета.
кастрюль в офис. – Сотрите старый адрес, в эксплорере находится пример-
Через минуту я открыл доступ и в поминальник добавил на- но на 3 строчке сверху, и вбейте туда, например, mail.ru, и наж-
поминание о том, что надо поинтересоваться, пришли кастрюли мите Enter.
или нет, чтобы доступ снова закрыть. – Все равно не работает!!!
Сегодня заходит генеральный и очень деликатно интересует- Мне это надоело, лезу на ее машину и вижу картину – адрес
ся, почему его указание не выполнено. Я проверяю конфиг и го- она стерла и все, ничего не вбивала. Вбиваю туда google.ru и на-
ворю, что доступ открыт с прошлого четверга. Предлагаю залезть жимаю Enter. Та орет в трубку:
c помощью radmin на компьютер жалобщицы и убедиться в этом. – Ура заработал!!!
Генеральный предлагает сходить к ней и разобраться на месте. Что делать? Сразу в топку?
Пришли... Я спрашиваю: den_neo
– В чем проблема?
– Я дважды заказала набор кастрюль, а мне не звонят.
– Покажите, как вы это делали. Какие сообщения в почте Сон админа
от этого магазина? Я сейчас подбираю новый сервер для компании, ну и смотрю, ана-
Милая дама открывает в браузере витрину магазина и та- лизирую, сопоставляю кучу характеристик (цена, производитель-
щит мышью набор кастрюль в корзину Windows, сказав в кон- ность и пр.), обсмотрел кучу сайтов, читаю всякие статьи и т. д.
це: «Вот и все!» Ну и в связи с событиями в Ю.Осетии на каждом сайте много ссы-
Мы с генеральным смеялись минут пять... лок на политические события (Медведев – Саркози и все в таком ду-
Потом я заказал кастрюли, позвонил в магазин, на завтра хе). В общем, в голове собралась каша из серверов + политика...
обещали доставку. Ночью сон. Мол, я звоню дилерам продажи серверов НР и до-
Лука М. говариваюсь о конфигурации своего сервера. Спрашиваю о спец-
ценах на сайте, меня это не устраивает, и я требую скидок, причем
я делаю это лежа на кровати. Тут в разгар этих жарких споров о
Как включить сеть? ценах на жесткие диски с откуда ни возьмись стоящей рядом рас-
Взяли новую сотрудницу. Показали рабочее место. Спрашиваю, кладушки... чтобы вы думали... поднимает голову сам Саркози (!)
мол, чего умеете-с. Она начала: «Я умею...» В общем, длинню- и говорит на ломаном русском с французским акцентом: «Да до-
щий список программ выдала (я аж пару раз отлучался во время говорюсь я о 5%-ной скидке на диски с заводом, только СПИ!» –
ее изложения). Короче, села за комп, а я напротив как раз дру- и кладет обратно голову, и засыпает...
гой комп починял... Я просыпаюсь в холодном поту. Таких явных снов мне еще
Через минут 30 она говорит мне: «Как сеть включается?» не снилось!
Я ей: «Все подключения там уже есть, просто кликайте на «Сете- Миша Любчук
вое окружение» и все». Еще через полчаса слышу ее мысли яко-
бы вслух: «Может на кнопку VIDEO щелкнуть?» Думаю, че это она
тока пришла и уже страдает переизбытком свободного времени – Флэшка
видео надумала смотреть. Непорядок... Спустя некоторое время: Получил флешки. Раздал сотрудникам. Потом полдня объяснял
«Не могли бы вы подойти?» Подхожу и вижу такую картину – си- одному дяде-полиглоту, что установить флешку на фотоаппарат
дит она за выключенным компом и тычет в кнопку VIDEO на кор- я не могу, мол, флешка для компа. В результате жалоба: «Он мне
пусе моника! Зверее юзверя я не видывал пока. вспышку на фотоаппарат отказался поставить».
P.S.: под словом сеть, оказывается, понималось питание ком- hot_tabych
пьютера.
Дмитрий
По материалам сайта «Сисадмин тоже человек» –
http://sysadmin.mail.ru

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

Подписные
индексы:
20780 *
+ диск с архивом
статей 2008 года

81655 **
без диска

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

88099 *
+ диск с архивом
статей 2008 года

87836
без диска
**

по каталогу агентства
«Пресса России»
*
Годовой
**
Полугодовой
***
Диск вкладывается
в февральский
номер журнала,
распространяется
только на территории
России

№9, сентябрь 2008 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№9(70), Сентябрь, 2008 год

УЧРЕДИТЕЛИ
Частные лица
Вышел DVD-диск с архивом
РЕДАКЦИЯ
Генеральный директор
номеров журнала за 2007 год
Владимир Положевец
Главный редактор Что на диске?  NeTAMS 3.4.1rc1;
Алексей Коршунов n Архив 12-ти номеров журнала «Системный ад-  IPStat 0.9.7.2;
chief@samag.ru министратор» за 2007 год.  Linux kernel 2.6.24.1;
Ответственный секретарь n Архив всех выпусков электронного приложе-  BIND 9.4.2 (+ win32);
Наталья Хвостова
sekretar@samag.ru
ния «Open Source» за 2007 год.  OpenSSL 0.9.8g;
Технический редактор n Программные продукты от партнеров журна-  OpenSSH 4.7p1;
Владимир Лукин ла (триальные версии):  Samba 3.0.28;
 Kerio MailServer 6.5;  Squid Web Proxy Cache 2.6.STABLE18;
Главный редактор  Kaspersky® Internet Security 7.0;  CUPS 1.3.6;
электронного приложения  Антивирус Касперского ® 7.0;  Clam AntiVirus 0.92.1 (+ Clamwin 0.92);
«Open Source»  Система контроля доступа Zlock 2.0;  Webmin 1.400;
Дмитрий Шурупов
 Прокси-сервер UserGate 4.2;  Bacula 2.2.8;
Внештатные редакторы  Handy Backup 5.8;  Amanda 2.5.2p1;
Алексей Барабанов  Paragon Drive Backup 8.51 Enterprise Server n Пользовательское ПО:
Кирилл Сухов Edition;  OpenOffice.org 2.3.1 (LinuxIntel, Win32Intel);
Сергей Супрунов  Network Inventory 1.6.0;  Mozilla Firefox 2.0.0.12 (Linux, win32);
Олег Щербаков  FastReport Server 1.0.10 demo;  Mozilla Thunderbird 2.0.0.12 (Linux, win32);
Василий Гусев  ABBYY Lingvo 12;  Mozilla Seamonkey (Linux, win32);
РЕКЛАМНАЯ СЛУЖБА  WinRar 3.71;  Mozilla Sunbird 0.7 (Linux, win32);
тел./факс: (495) 628-8253  Linux-дистрибутив Mandriva One 2008;  Pidgin 2.4.0 (+ win32);
Евгения Тарабрина (доб. 119)  Linbox Rescue Server 20070703.  SIM IM 0.9.4.3 (+ win32);
reсlama@samag.ru n Серверы/сети/администрирование:  X-Chat 2.8.4 (+ 2.8.5e win32);
 FreeBSD 7.0-RELEASE;  aMule 2.1.3 (+ win32);
Верстка и оформление  Apache HTTP Server 2.2.8 (+ win32);  GIMP 2.4.5 (+ 2.4.4 win32);
maker_up@samag.ru  nginx 0.6.26, 0.5.35;  MPlayer 1.0rc2 (+ win32);
Дизайн обложки  lighttpd 1.4.18;  VLC media player 0.8.6e (+ win32);
Дмитрий Репин  ProFTPD 1.3.1;  WINE 0.9.56;
 PureFTPd 1.0.21;  DOSBox 0.72 (+ win32);
По вопросам распространения  vsftpd 2.0.6;  DOSEMU 1.4.0;
обращайтесь по телефону:  Sendmail 8.14.2;  Midnight Commander 4.6.1;
Светлана Зобова  Postfix 2.5.1, 2.6-20080221 (experimental);  Vim 7.1 (+ gvim71);
(495) 628-8253 (доб. 121)  Courier Mail Server 0.58.0;  7-Zip 457 (+ win32);
107045, г. Москва,  Exim 4.69;  GnuPG 2.0.8 (+ w32cli 1.4.8).
Ананьевский переулок, дом 4/2, стр. 1  SpamAssassin 3.2.4;
тел./факс: (495) 628-8253  DSPAM 3.8.0; Как получить диск в подарок?
Сайт журнала: www.samag.ru  Policy Daemon 1.82; n Клиенты компании SecurIT, заказавшие Zserver
 SquirrelMail 1.4.13; в любой комплектации или более 50 лицензий
ИЗДАТЕЛЬ  RoundCube 0.1-rc2; Zlock, получат диск в подарок.
ООО «С 13»  MySQL 5.0.51a (+ win32);
Отпечатано типографией
ООО «Периодика»  PostgreSQL 8.3.0 (+ win32); Где можно приобрести диск?
Тираж 17000 экз.  Firebird 2.0.3.12981 (+ win32); n В редакции ж урна ла «Сис темный а дми-
 SQLite 3.5.6 (+ win32); нистратор» по адресу: г. Москва, Ананьев-
Журнал зарегистрирован в Министерстве РФ  Perl 5.10.0; ский переулок 4/2, стр. 1, в офисе 13 (мет-
по делам печати, телерадиовещания и средств  PHP: 5.2.5 (+ win32); ро «Сухаревская»).
массовых коммуникаций (свидетельство ПИ  Python 2.5.2 (+ win32); n В online-магазине Linuxcenter.ru.
№ 77-12542 от 24 апреля 2002 г.).
 Ruby 1.8.6-p111, 1.9.0-1; n В интернет-супермаркете Softkey.ru.
За содержание статьи ответственность несет
 Nmap 4.53 (+ win32); n Для обитателей и посетителей Савеловско-
автор. Мнение редакции может не совпадать  Ettercap 0.7.3.tar.gz (+ win32); го рынка, диск можно купить в точке торговли
с мнением автора. За содержание рекламных  Ethereal 0.99.0 (+ win32); печатными изданиями у главного входа.
материалов ответственность несет рекламо-  Snort 2.8.0.2;
датель. Все права на опубликованные мате-  MRTG 2.16.1; Сколько стоит?
риалы защищены.  NuFW 2.2.9; Цена в редакции – 150 рублей.
 tcpdump 3.9.8;

96

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