059 Системный Администратор 10 2007

98
№10(59) октябрь 2007 №10(59) октябрь 2007 подписной индекс 20780 www.samag.ru Создаём отказоустойчивый сервис с помощью Cisco Content Switch Реализуем нестандартные правила управления доступом в Windows Server 2003 Нужен сервер коллективной работы? Используем Zimbra Расширяем возможности Windows Messenger Open Source-решение: сетевой шлюз Untangle Защищаем систему с Outpost Security Suite Выбираем фрэймворк-среду для веб-разработки FAQ: как проходит обучение и сертификация на MCSA и MCSE Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60 ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, который забыл оформить подписку: Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ

Upload: vladimir-gromadin

Post on 29-Mar-2016

299 views

Category:

Documents


10 download

DESCRIPTION

Реализуем нестандартные правила управления доступом в Windows Server 2003 FAQ: как проходит обучение и сертификация на MCSA и MCSE Выбираем фрэймворк-среду для веб-разработки Так видит журнал читатель, оформивший подписку: Так видит журнал читатель, который забыл оформить подписку: НА

TRANSCRIPT

Page 1: 059 Системный Администратор 10 2007

№10

(59)

окт

ябрь

200

7

№10(59) октябрь 2007подписной индекс 20780www.samag.ru

Создаём отказоустойчивый сервис с помощьюCisco Content Switch

Реализуем нестандартные правила управления доступомв Windows Server 2003

Нужен сервер коллективной работы? Используем Zimbra

Расширяем возможностиWindows Messenger

Open Source-решение:сетевой шлюз Untangle

Защищаем системус Outpost Security Suite

Выбираем фрэймворк-среду для веб-разработки

FAQ: как проходит обучение и сертификация на MCSA и MCSE

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

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

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

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

НОВОГОДНИЕ

КАНИКУЛЫ ЗА

ТЯНУЛ

ИСЬ

БЫСТРО РА

СКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

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

ЕНЬГИ

УЕХАЛ В О

ТПУС

К

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

Page 2: 059 Системный Администратор 10 2007
Page 3: 059 Системный Администратор 10 2007

�№10, октябрь 2007

в номере

BUGTRAQ

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

��, �7, 39, 79

ТЕНДЕНЦИИ3

РЕПОРТАЖ

На выставке Softool состоялась конференция журнала «Системный администратор»

4

Что интересного происходило на мероприятии, посвя-щенном пятилетию журнала.

Дмитрий Шурупов

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

Создание и балансировка отказоустойчивых служб с помощью Cisco Content Switch

6

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

Виталий Банковский

eBox – новая серверная платформа�2Прочитав заголовок, вы сразу же подумали о POWER 6? Холодно! О Red Hat Enterprise Linux и Windows Server 2008? Теплее. Платформа, о которой пойдет речь, – програм-мная, но это не очередная версия популярной ОС.

Валентин Синицын

Особенности сервера коллективной работы Zimbra

�8

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

Сергей Яремчук

Используем дополнительные возможности Windows Messenger

24

Расширив возможности Windows Messenger, вы може-те превратить его в телефонный справочник, службу HelpDesk или почтового клиента.

Иван Коробко

Настраиваем и тестируем HPC MPI‑кластер

32

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

Иван Максимов

АДМИНИСТРИРОВАНИЕ «�С»

Пакетный режим запуска «�С:Предприятие 7.7»

40

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

Андрей Луконькин

Вся правда о «Сисадмине»,или Диктофон в кармане

44

Интервью с Владимиром Положевцем, исполнительным директором журнала «Системный администратор».

Оксана Родионова

ЧЕЛОВЕК НОМЕРА

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

Реализуем нестандартные правила управления доступом на основе архитектуры организации в Windows Server 2003

48

В Windows Server 2003 создан лишь каркас системы безопасности на основе архитектуры организации. Его дополняют средства расширения функциональ-ности, с помощью которых можно реализовать нестан-дартные средства защиты.

Вадим Андросов

Защищаем систему с помощью Outpost Security Suite

60

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

Андрей Бирюков

Open Source‑решение:сетевой шлюз Untangle

64

Платформа Untangle создана на основе более 30 реше-ний с открытыми исходными текстами, среди которых Knoppix, Snort, ClamAV, Squid и другие. Основная идея – дать администратору простой в управлении инструмент, позволяющий укрепить безопасность сети.

Сергей Яремчук

ОБРАЗОВАНИЕ

FAQ: как проходит обучение и сертификация на MCSA и MCSE

68

Какие экзамены необходимо сдать, чтобы получить сертификат MCSA? Можно ли сдавать экзамены на русском языке? Реально ли подготовиться к экзаме-нам самостоятельно? Мы подготовили для вас ответы на эти и другие вопросы.

Дмитрий Павлов

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

Нетривиальный синтаксис в PHP,или Головоломки для кодера

72

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

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

Выбираем фрэймворк‑среду для веб‑разработки

80

Вам не надоело в сотый раз клепать интерфейс к БД или организовывать вывод таблицы с результатами некого запроса? Вы хотите сосредоточиться на интересных за-дачах? Использование фрэймворк-среды в веб-разра-ботке – способ повысить собственную эффективность.

Кирилл Сухов

Микропроцессорные войны: хроника борьбы компаний Intel и AMDЧасть 2

88

Pentium, Pentium II, III, K6, Athlon… Новые поколения про-цессоров – новый этап противостояния Intel и AMD.

Илья Александров

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

Page 4: 059 Системный Администратор 10 2007

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

Призы и подарки участникамПобедителя ждет главный приз – бес-платное обучение* на двух авторизо-ванных курсах по администрирова-нию и безопасности ОС Linux в мос-ковском учебном центре «Академия Корпоративных Систем»; подписка на 2008 год на журнал «Системный ад-министратор».

Участник, занявший 2 место в вик-торине, получает возможность прой-ти бесплатное обучение* на одном из авторизованных курсов по ОС Linux в московском учебном центре «Акаде-мия Корпоративных Систем»; подпис-ку на 2008 год на журнал «Системный администратор».

Участник, занявший 3 место, полу-чает 50% скидку на обучение* на лю-бом из авторизованных курсов в мос-ковском учебном центре «Академии Корпоративных Систем» по ОС Linux или FreeBSD; подписку на 2008 год на журнал «Системный администратор».

Всем участникам викторины мос-ковский учебный центр «Академия Корпоративных Систем» дарит 25% скидку на любой курс или программу обучения* по Linux и FreeBSD до кон-ца 2007 года.

После подведения итогов результа-ты и правильные ответы будут опубли-кованы в следующем выпуске журнала и на сайте издания www.samag.ru.

* Внимание иногородним участникам и победителям

викторины – оплата проезда и проживания не вхо-

дит в стоимость приза.

Журнал «Системный администратор» и учебный центр «Академия Корпоративных Систем» проводят викторину!

Вопросы викторины:1. Какие вы знаете способы выключить и перезагрузить

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

2. Как при помощи программ cat, head и tr сгенерировать 12-символьный пароль?

3. Какими свойствами обладает каталог с правами 0510?

4. У вас мало места на партиции /var. Для исправления си-туации вы выполнили следующую команду:

однако это привело к странному результату: команда df сообщает, что свободного места по-прежнему нет, а ко-манда du сообщает, что место незанято.а) В чём дело?б) Как быть?

5. Пользователь looser имеет привычку подключаться к ба-зе данных MySQL при помощи клиентской программы mysql и при этом из всех возможных способов переда-чи пароля базе, выбрал самый неудачный – передачу пароля в аргументе командной строки:

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

6. Как будет называться в Linux файл устройства, соот-ветствующий второму логическому диску на Secondary Slave в случае использования EIDE-интерфейса?

7. Как сделать так, чтобы при нажатии в текстовой консо-ли на клавиши <Alt+Ctrl+Del> система начинала пере-загружаться не сразу, а только через минуту? Как в те-чение этой минуты отменить перезагрузку?

8. В сети 192.168.8.64/27 находится веб-сервер, которо-му присвоен адрес 92.168.8.95. Будет ли он работать? Что в этой сети будет работать неправильно? Как ис-править ситуацию, не меняя адрес веб-сервера и не ме-няя сети?

9. Вы пытаетесь вынуть диск из CD-привода, но сделать это не получается – при попытке размонтировать диск вам сообщают «device busy». Какая-то программа от-крыла файл, расположенный на диске. Как узнать, ка-кая это программа?

10. Какие вы знаете способы узнать какие устройства в ка-кие каталоги смонтированы? Какие у этих способов не-достатки?

11. Два компьютера соединены кросс-кабелем. На одном поднят сервер DHCP, на другом – клиент. При загруз-ке клиент получает аренду от сервера, следовательно «байты по кабелю ходят». Однако на ping со стороны кли-ента сервер не отвечает. Для расследования инцидента администратор включает на сервере программу tcpdump с тем, чтобы узнать доходят ли ICMP-пакеты до сервера. И в этот момент чудесным образом сервер начинает от-кликаться на ping. При этом команда «arp -an» на клиен-те и на сервере показывает, что arp-кэш сконфигуриро-ван правильно. Каков может быть диагноз? Рецепт?

12. Сколько ног у осьминога?

Академия Корпоративных СистемЦентр обучения и сертификации ИТ-специалистов

rm /var/log/*

mysql -u looser -p readthisifyounotlazy

Решения присылайте по адресу [email protected] или заполните форму на сайте www.samag.ru.

Page 5: 059 Системный Администратор 10 2007

�№10, октябрь 2007

тенденции

В IBM всерьез заинтересовались OpenOffice.org?В первой половине сентября проект OpenOffice.org объ-явил о том, что корпорация IBM присоединяется к сооб-ществу свободного офисного пакета. Сообщалось, что пер-вым вкладом IBM в OpenOffice.org станут наработки из ее продукта Lotus Notes, призванные улучшить доступность офиса, а также о намерении IBM активнее использовать OpenOffice.org в своих продуктах.

Как результат, в середине того же месяца IBM предста-вила общественности Lotus Symphony – свой новый про-граммный продукт, в основе которого лежит офисный пакет OpenOffice.org. Lotus Symphony ориентирован на использо-вание на настольных ПК, доступен для бесплатного скачи-вания на веб-сайте корпорации. Аналитики высказали уве-ренность в том, что этот шаг позволит OpenOffice.org зна-чительно преуспеть в давней конкуренции с Microsoft Office в корпоративном секторе.

В США подан первый иск по вопросу нарушения лицензии GPLКонец сентября ознаменовался чередой новостей по пер-вому в США иску по вопросу нарушения лицензии на сво-бодное по GNU GPL. История началась с сообщения о том, что юридический центр свободы программного обеспече-ния (Software Freedom Law Center, SFLC) объявил о подаче иска по поводу нарушения GPL против компании Monsoon Multimedia Inc. Иск был подан от лица разработчиков про-екта BusyBox. Причина иска такова: на веб-сайте Monsoon Multimedia заявлялось, что в продуктах и прошивках ком-пании используется BusyBox, однако доступа к исходному коду ПО этих продуктов не предоставляется.

Вскоре представители Monsoon Multimedia сообщи-ли, что вступили в переговоры с разработчиками проек-та BusyBox для решения проблемы без привлечения суда, а также пообещали сделать доступным модифицирован-ный исходный код BusyBox на своем веб-сайте в течение ближайших недель. Однако такой ход развития дела не ус-троил истца. Представитель SFLC был категоричен, отве-чая на желание обвиняемого уйти от ответственности: «Те-перь для решения проблемы недостаточно одной лишь по-пытки соблюдения условий лицензии, потому что это будет означать, что любой может нарушать лицензию, пока его не поймали, так как единственным грозящим ему наказа-нием станет дальнейшее приведение продукта в соответс-твие с лицензией (т.е. публикация кода продукта после то-го, как будет замечено, что нарушается GPL)».

Громовую птицу Mozilla начало штормитьПроект Thunderbird меньше чем за месяц принес четыре се-рьезные новости для СМИ. И все как положено: две хоро-шие и две плохие. Началось все позитивно...

Во-первых, в середине сентября было объявлено о по-явлении первого бета-релиза Open Source-версии Eudora (8.0.0b1). До недавнего времени email-клиент Eudora рас-пространялся как проприетарное ПО. Компания Qualcomm, занимавшаяся разработкой Eudora, в 2006 году сделала из продукта Open Source-проект при поддержке органи-

зации Mozilla. Open Source-реинкарнация Eudora базиру-ется на коде Thunderbird, и теперь ей заняты 6 програм-мистов компании Qualcomm, работавших над оригиналь-ной версией Eudora.

Во-вторых, приблизительно через неделю стало извес-тно, что Mozilla запускает новую инициативу по выделению Thunderbird в самостоятельный проект. Новую компанию, ко-торая полностью сосредоточится на разработке и продви-жении почтового клиента, возглавил Дэвид Эшер (David Ascher), технический директор и вице-президент по разра-ботке ActiveState, активный участник сообщества Mozilla с 2000 года. В стартап (под временным названием MailCo) пообещали инвестировать 3 млн. долларов США.

Однако в начале октября с разницей в два дня в Сети появились два небольших сообщения, которые вызвали массу вопросов. Два лидера проекта Thunderbird объявили о своем намерении покинуть Mozilla. Скотт Макгрегор (Scott McGregor) и Дэвид Бьенвену (David Bienvenu) анонсирова-ли уход из Mozilla в своих блогах, пообещав продолжать заниматься поддержкой собственных модулей Thunderbird на добровольных условиях и пожелав успехов анонсирован-ному стартапу. Насколько близко к сердцу можно принимать высказываемые опасения касательно будущего Thunderbird, можно будет понять лишь через некоторое время. А пока ли-дер MailCo опубликовал открытое письмо, обращенное к со-обществу Thunderbird, в котором призвал не беспокоиться о кадровых потерях и верить в грядущие успехи.

Подготовил Дмитрий Шуруповпо материалам www.nixp.ru

Page 6: 059 Системный Администратор 10 2007

репортаж

Вступление и первые докладыЧуть позже 12.00 при крайне малочис-ленной аудитории Владимир Положе-вец, исполнительный директор жур-нала «Системный администратор», начал свою речь об издании и его ис-тории. Затем докладчик активно при-зывал подходящую публику задавать ему вопросы и передал слово мне, ав-тору этого отчета, Дмитрию Шуру-пову как главному редактору элект-ронного приложения «Open Source» (http://osa.samag.ru). Мой доклад был посвящен двум проектам журнала: непосредственно приложению (с ук-лоном в сторону того, что ему очень нужны авторы) и игре для читателей, которая стартует в следующем году (о ней мы, конечно же, еще подробно расскажем вам).

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

Продолжил конференцию Игорь Сысоев из компании «Рамблер», хо-рошо известный российскому миру IT-специалистов как автор легковесно-го веб-сервера nginx. Данное выступ-ление состояло из описания предпо-сылок к появлению проекта (проблемы Apache, существующие аналоги), обзо-ра возможностей nginx и его предна-значения. Первое время после завер-шения доклада Сысоева коммента-риев со стороны публики последова-

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

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

После этого Данила Корнев и Анд-рей Бешков из Microsoft устроили кра-сочную презентацию новых возмож-ностей Windows Server 2008. Для это-го они специально привезли свое обо-рудование и демонстрировали некото-рые базовые моменты работы с особо интересным функционалом в действии. Всем осмелившимся задать вопросы были щедро «разбросаны» подарки от Microsoft.

Предпоследним докладчиком кон-ференции стал Николай Самохвалов из «Постгресмен», который непос-редственно участвует в процессе раз-работки открытой СУБД PostgreSQL (реализацией XML-типа). Он высту-пил с подробным и лаконичным опи-

санием новшеств, ожидаемых в ре-лизе PostgreSQL 8.3, число и значи-мость которых действительно впечат-ляет. (К слову, 8 октября как раз вы-шла первая бета-версия этого обнов-ления к СУБД.)

Завершил конференцию Филипп Торчинский, приехавший для выступ-ления из Петербурга, где базирует-ся российский офис компании Sun Microsystems. Его живое изложе-ние доклада «Передовые технологии OpenSolaris для системных админис-траторов» с обзором ключевых осо-бенностей этой операционной систе-мы не оставило равнодушным нико-го из оставшихся слушателей. Всем желающим были роздан дистрибутив с OpenSolaris и средствами для раз-работчиков.

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

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

Для поклонников операционной системы GNU/Linux и свободного ПО вообще вновь была организована сек-ция LinuxLand, где наиболее замет-ным событием стало появление впе-чатляющего стенда Mandriva. Но вмес-те с этим стоит отметить и отсутствие

На выставке SofTool состоялась конференция журнала «Системный администратор»

2 октября в рамках популярной IT-выставки SofTool 2007 в малом конференц-зале 69-го павильона ВВЦ в Москве прошла конференция «Праздничные чтения», посвященная пятилетию журнала «Системный администратор».

Page 7: 059 Системный Администратор 10 2007

�№10, октябрь 2007

репортаж

влекательный повод продемонстри-ровать это.

И последнее, презентации пред-ставленных на конференции журна-ла докладов доступны для свободно-го скачивания на нашем сайте (http://www.samag.ru/event).

Текст: Дмитрий Шурупов,фото: Владимир Лукин

на SofTool таких компаний, как IBM и Novell.

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

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

Игорь Сысоев, автор легковесного веб-сервера nginx

Виктор Федосеев, глава российского

представительства Mandriva

Андрей Бешков, компания Microsoft

Вячеслав Медведев,компания «Доктор Веб»

Филипп Торчинский, компания Sun MicrosystemsНиколай Самохвалов, компания «Постгресмен»

Дмитрий Шурупов, главный редактор электронного приложения «Open Source»Владимир Положе

вец,

исполнительный директор журнал

а

«Системный администратор»

Page 8: 059 Системный Администратор 10 2007

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

Создание и балансировка отказоустойчивых служб с помощью Cisco Content Switch

Как построить отказоустойчивый сервис? Можно вбух... вложить крупную сумму в супер-сервер с функцией «горячей» замены процессоров, памяти, блоков питания и т. д., а затем молиться на этот сервер. Убедившись, что молитва все-таки не помогла, перейти к кластерному решению из недорогих компонентов. Предлагаем вам начать сразу со второго варианта и построить недорогой отказоустойчивый сервис с использованием Cisco Content Switch (CCS).

Виталий Банковский

Page 9: 059 Системный Администратор 10 2007

�№10, октябрь 2007

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

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

В нашей компании используются два выделенных DNS-сервера, на каж-дом из которых установлено два типа DNS-демонов – MyDNS (порядка 10 000 доменов и 2 000 000 записей) для об-служивания запросов, приходящих из Интернета, и DNS cache для обслу-живания запросов серверов, располо-женных внутри корпоративной сети.

И хотя такое решение являлось до-статочно стабильным, но существовал ряд проблем:n Отсутствие балансировки. Несмот-

ря на то что в корневых серверах DNS зарегистрированы оба DNS-сервера, соотношение запросов к первому и ко второму DNS со-ставляло около 90/10.

n Так как первичный сервер DNS cache был указан первым на всех серверах в файле resolv.conf, то он же и обслуживал все 100% запро-сов, приходящих из локальной се-ти (для клиентов, не поддержи-вающих ротацию серверов DNS в resolv.conf).

n Замедление обслуживания в слу-чае отказа одного из серверов. Из-за того, что вся система DNS пост-роена на протоколе UDP, клиенты вынуждены ожидать стандартное время перед обращением к сле-дующему серверу, что вызывает сильное замедление ответов сер-висов.

n В случае отказа первого сервера с DNS cache многие службы (ос-нованные на проколах POP, FTP, SMTP), использующие обратное преобразование адреса IP в домен-ное имя, отвечают клиентам с боль-шой задержкой. И это также вызы-вает шквал сообщений от систем мониторинга из-за превышения времени ожидания (timeout).

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

Одно время я попытался обра-титься к проекту Linux-HA (The High Availability Linux Project), но такие огра-ничения, как отсутствие балансиров-

Cisco работают годами даже в «тяже-лых условиях».

Второй причиной, которая подвиг-нула меня на использование б/у уст-ройств, является поддержка техноло-гии «Виртуальный маршрутизатор». Цена на б/у устройства Cisco состав-ляет около 10-40% от оригинальной стоимости, что дало мне возможность установить большее количество CCS при сохранении конечной стоимости решения при одновременном увеличе-нии количества «запасных» CCS.

Избыточность и VRRPПротокол VRRP – проприетарный про-токол компании Cisco Systems, Inc., позволяющий образовывать так на-зываемый «виртуальный» маршру-тизатор из устройств, поддерживаю-щих этот протокол. В каждом таком устройстве создается виртуальный ин-терфейс виртуального маршрутизато-ра с адресом VIP (виртуальный IP-ад-рес – VIP address) , и все виртуальные интерфейсы физических устройств объединяются в виртуальный маршру-тизатор. Адрес VIP является одинако-вым для всех интерфейсов, входящих в виртуальный маршрутизатор, и кли-енты, обращающиеся к этой системе, запрашивают этот адрес.

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

Структура сетиДля примера я приведу структуру свой сети, состоящей из двух серве-

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

После некоторого исследования был обнаружен замечательный про-дукт Cisco Content Switch (CCS), кото-рый позволил реализовать следующие очень важные функции:n Балансировку нагрузки.n Обнаружение отказа одного из сер-

веров и исключение его из списка используемых.

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

n Возможность использования более трех серверов DNS.

Аппаратное обеспечениеСемейство Cisco Content Switch вклю-чает в себя различные модели, начи-ная от простейших моделей типа Cisco CCS 11000 до высокопроизводитель-ных Cisco CSS 11506 с полным дуб-лированием всех подсистем (см. таб-лицу). В моем случае скорость пото-ка к серверам DNS составляла поряд-ка 10 Мбит/c, поэтому я остановился на CCS 11000.

Здесь стоило бы указать причины, почему я привел цены для б/у обору-дования Cisco.

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

CCS 11000 WS-X6066-SLB-APC CSS11501 CSS11503 CSS11506

Производительность (Гбит/с) 4 4 6 20 40

Количество портов 10/100 Ethernet

8 Встраивается в шасси Cisco 6500

8* 32* 80*

Количество портов 1000 Ethernet

2 – 2* 6* 12*

Дублирование подсистем

Нет Требуется два модуля Нет Нет Да

Стоимость на вторичном рынке ($, US)

300 13 000 4 000 6 000 14 000

* Модульная структура. Каждый модуль включает в себя 8 10/100 Ethernet или 2 1000 Ethernet-портов.

Сравнительные характеристики различных моделей CCS

Page 10: 059 Системный Администратор 10 2007

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

Конфигурация Cisco Content SwitchВ этом разделе приведен пример конфигурации обоих CCS для создания виртуальных маршрутизаторов, служб и опи-сание серверов dns1 и dns2:

ров DNS – dns1 и dns2, и двух Cisco CCS 11000 (см. ри-сунок).

Были созданы два виртуальных маршрутизатора, с дву-мя адресами VIP в каждом из них. Первый адрес VIP ис-пользуется для запросов, приходящих из Интернета, вто-рой – для обслуживания запросов, приходящих от серве-ров, расположенных в локальной сети.

Здесь нужно обратить внимание, что CCS произво-дит трансляцию адресов (NAT), и необходимо, чтобы ответ от серверов DNS приходил обратно на CCS (а не на ини-циатора запроса).

По этой причине адрес VIP 66.66.66.195 (на который при-ходят запросы из Интернета) является маршрутом по умол-чанию для серверов dns1 и dns2. И аналогично, адрес VIP 10.40.12.195 (на который приходят запросы из локальной се-ти) является маршрутом для серверов dns1 и dns2 для от-ветов на запросы из локальной сети.

Примечание. Virtual router 1 обрабатывает запросы, при-ходящие из Интернета. Virtual router 2 обрабатывает запро-сы, приходящие из локальной сети.

Теперь разберем, как работает такая схема на примере виртуального маршрутизатора №2:n При запуске системы маршрутизатор CCS2 становится

мастером как имеющий старший адрес.n Каждые несколько секунд оба CCS проверяют работо-

способность демонов MyDNS и DNS cache на каждом из серверов, на основании чего составляется список активных сервисов.

n Наш сервер DNS зарегистрирован в корневых серве-рах DNS по IP-адресу 66.66.66.195. При получении за-проса извне на адрес 66.66.66.195 CSS переадресовы-вает этот запрос на один из серверов DNS (из списка активных).

n Этот сервер отсылает ответ на адрес 66.66.66.195, CCS заменяет IP-адрес в ответе на адрес 66.66.66.195 и пе-ресылает ответ запрашивающей стороне, находящей-ся в Интернете.

Схема подключения серверов и CCS к локальной сети

# Маршрут по умолчаниюip route 0.0.0.0 0.0.0.0 66.66.66.193 1

# Физический интерфейс CCS, который подключен к коммутатору# локальной сети и привязан к виртуальному интерфейсу# circuit VLAN3interface ethernet-13 bridge vlan 3

# Виртуальный интерфейс, на котором определены наши# виртуальные маршрутизаторыcircuit VLAN3 # Локальный адрес виртуального маршрутизатора # «Virtual router 1». Служит для обращения # к серверам DNS и работы протокола VRRP ip address 10.40.12.203 255.255.255.240

# Идентификатор виртуального маршрутизатора ip virtual-router 1

# Адрес VIP. К этому адресу обращаются сервера # в локальной сети ip redundant-interface 1 10.40.12.195

# ************************************************* # Аналогично, локальный адрес виртуального # маршрутизатора «Virtual router 2». ip address 66.66.66.203 255.255.255.240

# Идентификатор виртуального маршрутизатора IP VIRTUAL-ROUTER 2

# Адрес VIP. К этому адресу обращаются клиенты # из Интернета IP REDUNDANT-INTERFACE 2 66.66.66.195

# *************************************************

# Определение правила, по которому будет определяться # работоспособность серверов DNS. Здесь определены IP-адреса# обоих демонов (DNS cache и MyDNS) на обоих серверах

# Сервер dns1, демон DNS cachekeepalive dns1-cache ip address 10.40.12.196 active

# Сервер dns1, демон MyDNSkeepalive dns1 ip address 10.40.12.200 active

# Сервер dns2, демон dns cachekeepalive dns2-cache ip address 10.40.12.197 active

# Сервер dns2, демон MyDNSkeepalive dns2 ip address 10.40.12.201 active

# ***************************************************

# Далее описаны службы MyDNS и DNS cache, к которым# обращается CCS

service dns1 protocol udp port 53 ip address 10.40.12.200 keepalive type named dns1 active

SERVICE DNS1-CACHE keepalive type named dns1-cache protocol udp port 53 ip address 10.40.12.196 active

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

�№10, октябрь 2007

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

Конфигурация второго CCS аналогична, только локаль-ные адреса на виртуальных интерфейсах отличны от пер-вого CCS:

ТестированиеТестирование включает в себя три этапа:n Проверка работы виртуальных маршрутизаторов.

n Проверка работоспособности сервисов DNS со сторо-ны CCS.

n Проверка работы CCS со стороны внешнего клиента.n Проверка балансировки сервисов.

Проверка работы виртуальных маршрутизаторовКак уже упоминалось, в нашей системе сконфигурирова-ны два виртуальных маршрутизатора, состояние которых можно проверить с помощью команды «show virtual-routers», выполненной на каждом CCS. Приблизительные результа-ты работы этой команды приведены ниже:

Состояние виртуальных маршрутизаторов на CCS1:

Состояние виртуальных маршрутизаторов на CCS2:

Также необходимо проверить механизм переключения с основного CCS на запасной в случае аварии. Для этого отключаем CCS1 от сети и, выждав 2-3 секунды, проверя-ем опять состояние маршрутизатора на CCS2:

Как можно убедиться, состояние виртуальных марш-рутизаторов поменялось с «Backup» на «Master» и адре-са ведущих маршрутизаторов поменялись с 10.40.12.203 на 10.40.12.204 и с 66.66.66.203 на 66.66.66.204.

Проверка работоспособности сервисов DNS со стороны CCSДля проверки работоспособности демонов DNS на сер-верах dns1 и dns2 нужно воспользоваться командой «show service». Если не указано имя конкретного сервиса, то будут показаны все сервисы. Для простоты приведу при-мер результатов проверки одного из сервисов:

service dns2 protocol udp port 53 ip address 10.40.12.201 keepalive type named dns2 active

SERVICE DNS2-CACHE protocol udp port 53 ip address 10.40.12.197 keepalive type named dns2-cache active

#******************************************************

# Следующая секция – определение правил, которые # используются для обработки запросов, приходящих на CCS.# Имя владельца сервисаOWNER EXAMPLE

# Разрешить прием и отправку DNS-запросов dns both

# Определение сервиса. В данном случае – сервис DNS # для обработки запросов извне CONTENT DNS # Адрес VIP, на который приходят запросы vip address 66.66.66.195 PROTOCOL UDP port 53 # Добавить сервисы dns1 и dns2 как один из # доступных сервисов add service dns2 add service dns1 active

# Определение сервиса для обработки # запросов, приходящих из локальной сети CONTENT DNS-CACHE

# Адрес VIP, на который приходят запросы vip address 10.40.12.195 PROTOCOL UDP PORT 53

# Добавление сервисов mdns1-cache # и mdns2-cache add service dns1-cache ADD SERVICE DNS2-CACHE active

# Включение трансляции адресов для прокотола UDPGROUP DNS vip address 66.66.66.195 add service dns1 add service dns2 active

GROUP DNS-CACHE vip address 10.40.12.195 add service dns1-cache add service dns2-cache active

circuit VLAN3 ip address 10.40.12.204 255.255.255.240 ip virtual-router 1 ip redundant-interface 1 10.40.12.195

ip address 66.66.66.204 255.255.255.240 ip virtual-router 2 ip redundant-interface 2 66.66.66.195

Interface Address: 10.40.12.203 VRID: 1 STATE: MASTER MASTER IP: 10.40.12.203 STATE CHANGES: 3

INTERFACE ADDRESS: 66.66.66.203 VRID: 2 STATE: MASTER MASTER IP: 66.66.66.203 STATE CHANGES: 3 LAST CHANGE: 09/06/2007

Interface Address: 10.40.12.204 VRID: 1 STATE: BACKUP MASTER IP: 10.40.12.203 STATE CHANGES: 2 LAST CHANGE: 09/09/2007 Interface Address: 66.66.66.204 VRID: 2 STATE: BACKUP MASTER IP: 66.66.66.203 STATE CHANGES: 2 LAST CHANGE: 09/06/2007

Interface Address: 10.40.12.204 VRID: 2 Priority: 100 Config. Priority: 100 State: Master Master IP: 10.40.12.204 State Changes: 3 Last Change:

Interface Address: 66.66.66.204 VRID: 1 Priority: 100 Config. Priority: 100 State: Master Master IP: 66.66.66.204 State Changes: 3 Last Change:

sh virtual-routers

Name: dns1 Index: 10 Type: Local State: AliveRULE ( 10.40.12.200 UDP 53 )REDIRECT DOMAIN: REDIRECT STRING:

show service dns1

Page 12: 059 Системный Администратор 10 2007

10

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

Для проверки, как CCS определяет отказ одного из сер-веров, просто отключим первый сервер от сети и заново проверим состояние сервисов MyDNS и DNS cache на пер-вом сервере:

Таким образом, мы видим, что CCS исключила серви-сы MyDNS и DNS cache, расположенные на сервере dns1, из списка активных, соответственно, дальнейшие запросы будут переадресованы только сервисам на сервере dns2. Однако оба CCS будут продолжать проверять доступность сервисов на сервере dns1, и в случае восстановления ра-ботоспособности оба сервиса будут включены в список активных.

Проверка работы CCS со стороны внешнего клиентаИ, наконец, пора проверить, как работает вся система. Для этого воспользуемся программой dig, с помощью ко-торой сформируем DNS-запросы к адресам VIP:

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

Эта команда будет формировать запрос к нашей систе-ме один раз в секунду. После этого можно выждать некото-рое время и проверить, как работает балансировка на ак-тивном CCS с помощью команды «show summary»:

У меня после 4 часов работы такой системы в качестве DNS, обслуживающего локальную сеть, соотношение об-служенных запросов к сервисам dns1-cache и dns2-cache составило 22315/22316, т.е. разбалансировка была менее 0.0001%.

Балансировка других службБалансировка таких сервисов, как POP3, MySQL, FTP и HTTPD, выполняются аналогично, только с той разницей, что используются другие номера портов и соответствую-щие протоколы (TCP или UDP).

В случае необходимости привязать клиента к конкрет-ному серверу в кластере (например, используются сес-сии при работе с приложениями под управлением сервера HTTPD или для доступа к серверам MySQL/FTP/POP3), мож-но воспользоваться опцией «advanced-balance sticky-srcip», которая применяется в секции «content».

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

Cisco Content Switch содержит специальную табли-цу, где находятся пары «Source IP» и «Destination IP». Эта таблица управляется по принципу FIFO (First In, First Out). Максимальное количество элементов в таблице – от 32 до 128 тысяч. Таким образом «устаревшие» привязки клиен-тов к серверам будут удалены по мере появления новых за-писей. Я советую использовать опцию «sticky-inact-timeout», которая указывает, что по истечении интервала, указанного в этой опции (в минутах), необходимо удалять записи, воз-раст которых превышает этот параметр. И, соответствен-но, время сессий на серверах (httpd, mysqld, ftpd) должны быть короче этого интервала.

1. http://cr.yp.to/djbdns.html.2. http://cisco.com.3. http://mydns.bboy.net.

CONTENT HTTPD.EXAMPLE.COM # Адрес VIP, на который приходят запросыvip address 66.66.66.195 PROTOCOL TCP PORT 80 advanced-balance sticky-srcipadd service www1 add service www2 active

# Проверка работы DNS cache для внешних доменовDIG +SHORT @10.40.12.195 GOOGLE.COM

64.233.167.9972.14.207.9964.233.187.99

# Проверка работы DNS cache для доменов # обслуживаемых MyDNSDIG +SHORT @66.66.66.195 HOST.EXAMPLE.COM

66.66.66.5

WATCH -N 1 'DIG +SHORT @10.40.12.195 GOOGLE.COM'

sh summary

CONTENT RULES STATE SERVICES SERVICE HITS

DNS ACTIVE DNS1 0 DNS2 0 dns-cache Active dns1-cache 100 dns2-cache 101

KEEPALIVE: DNS1MTU: 1500 STATE TRANSITIONS: 0CONNECTIONS: 0 MAX CONNECTIONS: 0TOTAL CONNECTIONS: 0 TOTAL REUSED CONNS: 0WEIGHT: 1 LOAD: 2

NAME: DNS1 INDEX: 10 TYPE: LOCAL STATE: DOWNRULE ( 10.40.12.200 UDP 53 )REDIRECT DOMAIN: REDIRECT STRING: KEEPALIVE: DNS1MTU: 1500 STATE TRANSITIONS: 0CONNECTIONS: 0 MAX CONNECTIONS: 0TOTAL CONNECTIONS: 0 TOTAL REUSED CONNS: 0WEIGHT: 1 LOAD: 2

show service dns1

show service dns1-cache

NAME: DNS1-CACHE INDEX: 11 TYPE: LOCAL STATE: DOWNRULE ( 10.40.12.196 UDP 53 )REDIRECT DOMAIN: REDIRECT STRING: KEEPALIVE: DNS1-CACHEMTU: 1500 STATE TRANSITIONS: 0CONNECTIONS: 0 MAX CONNECTIONS: 0TOTAL CONNECTIONS: 0 TOTAL REUSED CONNS: 0WEIGHT: 1 LOAD: 2

Page 13: 059 Системный Администратор 10 2007

11№10, октябрь 2007

bugtraq

Множественные уязвимости в KerberosПрограмма: Kerberos версии до 1.5.5 и 1.6.3.Опасность: Высокая.Описание: 1. Уязвимость существует из-за ошибки провер-ки границ данных в RPCSEC_GSS аутентификации в функ-ции «svcauth_gss_validate()» файла src/lib/rpc/svc_auth_gss.c. Удаленный пользователь может послать уязвимому серве-ру специально сформированное RPC-сообщение, вызвать переполнение стека и выполнить произвольный код на це-левой системе.

2. Уязвимость существует в функции kadm5_modify_policy_internal() файла src/lib/kadm5/srv/svr_policy.c из-за не-достаточной проверки возвращаемых значений функции krb5_db_get_policy(). Удаленный авторизованный пользо-ватель может вызвать повреждение памяти и выполнить произвольный код на целевой системе.URL производителя: web.mit.edu/kerberos/www.Решение: Установите последнюю версию 1.5.5 или 1.6.3 с сайта производителя.

Переполнение буфера в lighttpd mod_fastcgiПрограмма: lighttpd версии до 1.4.18.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки в расши-рении mod_fastcgi при обработке PHP-заголовков в HTTP-запросе. Удаленный пользователь может с помощью спе-циально сформированного HTTP-запроса, содержащего слишком длинный заголовок, добавить или изменить PHP-заголовки (например, SCRIPT_FILENAME) и выполнить про-извольный PHP-код на целевой системе.URL производителя: lighttpd.net.Решение: Установите последнюю версию 1.4.18 с сайта производителя.

Уязвимость при обработке URL в Microsoft AgentПрограмма: Microsoft Windows 2000.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки в Microsoft Agent ActiveX-компоненте (agentdpv.dll) при обработке URL. Удаленный пользователь может с помощью специально сформированного URL вызвать переполнение стека и вы-полнить произвольный код на целевой системе.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производите-ля.

Целочисленное переполнение в OpenOfficeПрограмма: OpenOffice версии до 2.3.Опасность: Высокая.Описание: Целочисленное переполнение обнаружено при обработке некоторых тегов в TIFF-изображениях. Уда-ленный пользователь может с помощью специально сфор-мированного документа вызвать переполнение динами-ческой памяти и выполнить произвольный код на целе-вой системе.URL производителя: www.openoffice.org.Решение: Установите последнюю версию 2.3 с сайта про-изводителя.

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

Множественные уязвимости в ImageMagickПрограмма: ImageMagick 6.3.4, возможно более ранние версии.Опасность: Высокая.Описание: 1. Целочисленное переполнение обнаружено в функции ReadDIBImage(). Удаленный пользователь мо-жет с помощью специально сформированного изображе-ния вызвать переполнение динамической памяти и выпол-нить произвольный код на целевой системе.

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

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

4. Ошибка завышения на единицу обнаружена в функ-ции ReadBlobString() в файле magick/blob.c. Удаленный пользователь может с помощью специально сформирован-ного изображения вызвать переполнение буфера и выпол-нить произвольный код на целевой системе.

5. Целочисленное переполнение обнаружено при обра-ботке DCM, DIB, XBM, XCF и XWD-файлов. Удаленный поль-зователь может с помощью специально сформированного изображения вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе.URL производителя: www.imagemagick.org.Решение: Установите последнюю версию 6.3.5-9 с сайта производителя.

Уязвимость при обработке .AVI-файлов в Media Player ClassicПрограмма: Media Player Classic 6.4.9.0, возможно более ранние версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при обра-ботке .AVI-файлов. Удаленный пользователь может с помо-щью файла .AVI, содержащего специально сформирован-ную цепочку «indx», вызвать переполнение буфера и вы-полнить произвольный код на целевой системе.URL производителя: sourceforge.net/project/showfiles.php? group_id=82303&package_id=84358.Решение: В настоящее время способов устранения уязви-мости не существует.

Page 14: 059 Системный Администратор 10 2007

12

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

eBox – новая серверная платформа

Валентин Синицын

Прочитав заголовок, сразу же подумали о POWER 6? Холодно! О Red Hat Enterprise Linux и Windows Server 2008? Теплее. Платформа, о которой пойдет речь, – программная, но это не очередная версия популярной ОС.

Page 15: 059 Системный Администратор 10 2007

13№10, октябрь 2007

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

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

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

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

К л ас с ич е с к и м п р ед с тав и те -лем последних является Webmin (www.webmin.com) – по меткому опи-санию разработчика Ubuntu Server Со-рена Хансена (Soren Hansen) «двус-торонний транслятор «конфигураци-онный файл – HTML-форма», кото-рый не столько упрощает настройку ОС и ее сервисов, сколько позволя-ет делать это, не прибегая к команд-ной строке.

Дальнейшим логическим развити-ем данной идеи являются проекты вро-де ClarkConnect (www.clarkconnect.com) и специализированные дистрибути-вы-брандмауэры: SmoothWall, IPCop, m0n0wall [5] и другие. Их установ-ка максимально автоматизирована, а пользователю предлагается менять лишь некоторые настраиваемые пара-метры вроде порта, на котором должна работать та или иная служба.

Давайте познакомимся с новым, не совсем обычным игроком на этом поле – eBox Platform [1].

Подобно ClarkConnect «сотова-рищи», eBox – это среда для управ-ления сервисами и сетью через веб-интерфейс. Однако в отличие от них, он доступен не только в виде готово-го CD, но и в форме deb-пакетов, ко-торые можно интегрировать с подхо-дящим дистрибутивом. Иными слова-ми, если у вас уже есть сервер на ба-зе Debian и вы хотите просто снабдить его веб-интерфейсом, ничего переста-навливать не придется (хотя с перено-

сом существующих настроек придет-ся повозиться – eBox затирает кон-фигурационные файлы своими собс-твенными).

То же самое верно, конечно, и в от-ношении Webmin, но в отличие от не-го eBox старается всячески упростить администрирование и сделать проце-дуру настройки доступной даже на-чинающему UNIX-администратору. Это особо ценное качество для не-больших компаний, располагающих специалистами по Windows, то есть людьми, знающими, как в принципе решать ту или иную задачу, но пло-хо представляющими себе специфи-ку UNIX-систем.

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

В начале сентября его основной разработчик испанская фирма Warp Networks (www.warp.es) завершила формирование Совета директоров eBox Platform (в который, кстати, вош-ли представители компаний Nokia, Тех-нологического университета г. Хель-синки и даже бывший вице-президент Microsoft!) и сейчас готовится к запус-ку коммерческих сервисов, построен-ных вокруг eBox.

Сама же платформа является полностью свободным ПО, постав-ляющимся на условиях GNU GPLv2. По всей видимости, eBox будет основ-

ным инструментом настройки во всех версиях Ubuntu Server, начиная с Gusty Gibbon (7.10).

Где взять?В разделе Downloads на сайте проек-та [1] можно найти те самые пакеты Debian, о которых говорилось, ссыл-ку на репозиторий Subversion, а также eBox Installer и eBox Live CD!.

Первый из них – установочный CD на базе Debian Sarge с предна-строенным eBox «на борту», второй, как нетрудно догадаться по названию, LiveCD с eBox (на базе Morphix). На мо-мент подготовки статьи Live-версия не-сколько отставала от установочной.

При этом eBox Installer не сле-дует считать аналогом/конкурен-том ClarkConnect и других решений «под ключ»: это действительно Installer, то есть средство для установки eBox – не более. Здесь нет дружественного пользователю мастера первого запус-ка, как, скажем, в IPCop – только ори-гинальный установщик Debian и необ-ходимые пакеты.

К настоящему моменту слово «Debian» прозвучало в тексте столько раз, что уже, наверное, стоит объяс-нить склонность автора именно к это-му семейству дистрибутивов. Секрет прост: другие разновидности Linux, равно как и другие ОС, отличные от Linux 2.6, eBox попросту не поддер-живает – в коде продукта присутствует некоторое количество «дебианизмов»

eBox – новая серверная платформа

Рисунок 1. Добро пожаловать в eBox Platform!

Page 16: 059 Системный Администратор 10 2007

14

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

(debianisms), причем каких именно, разработчики, к сожалению, не сооб-щают. Утверждается, впрочем, что пе-ренос eBox на другой дистрибутив бу-дет несложным делом, но, как говорит-ся, «не знаем – не пробовали».

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

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

Процесс установки eBox на сущес-твующую систему Debian описан в со-ответствующем руководстве; мы же будем подразумевать, что инсталля-ция производилась посредством eBox Installer. В этом случае сразу после установки и перезапуска компьюте-ра eBox будет доступен по адресу: https://имя-хоста:443, пароль по умол-чанию – ebox.

Что внутри?Сразу после входа в систему вашему вниманию предстанет следующее ок-но (см. рис. 1).

Интерфейс eBox построен с ис-пользованием новомодных AJAX-тех-нологий, поэтому не забывайте нажи-

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

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

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

В свое время автор этих строк пот-ратил не один день, пытаясь найти ос-нованный на Linux маршрутизатор в духе IPCop (www.ipcop.org), способ-ный работать сразу с несколькими ин-тернет-провайдерами, причем не в ре-жиме балансировки или обеспечения отказоустойчивости, а по принципу «Вся почта через соединение А, веб-трафик с хостов 192.168.1.0/24 – через соединение Б».

В конечном итоге было реше-но остановиться на обычном универ-сальном дистрибутиве и скриптах Shorewall (www.shorewall.net). eBox Platform – единственная известная мне

система, способная решить эту зада-чу «из коробки». Давайте посмотрим, как именно.

Базовым элементом сетевой под-системы eBox является интерфейс. Он может быть статическим (Static), получающим адрес по DHCP, а так-же включенным в VLAN (тип Trunk 802.1q).

Помимо этого, все интерфей-сы подразделяются на внутренние (internal) и внешние (external) – послед-ние считаются соединенными Интерне-том, и для проходящих через них паке-тов автоматически выполняется NAT-преобразование. На них также не будут доступны сервисы, сконфигурирован-ные для внутреннего использования. К каждому физическому интерфейсу, сконфигурированному статически, мо-жет быть подключено несколько вир-туальных (ethX:Y).

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

Однако предварительно имеет смысл создать так называемые «се-тевые объекты» (Network objects). Се-тевой объект – это не более чем име-нованный набор узлов сети, каждый из которых определяется IP-адре-сом в CIDR-нотации и (опционально) MAC-адресом.

Согласитесь, запрещать доступ к bash.org.ru для «бездельников из сап-порта» куда веселее, чем для безликих 192.168.0.1-3, да и вам самим будет ку-да проще разобраться с настройка-ми спустя один-два месяца или пос-ле очередного корпоратива. При этом каждый IP-адрес может принадле-жать не более чем к одному сетево-му объекту.

Несколько огорчает то, что при со-ставлении списка адресов, входящих в объект, нельзя использовать исклю-чения, то есть ситуация «192.168.0.0/24 кроме 192.168.0.10» реализуется толь-

Рисунок 2. Теперь все IP-адреса, включенные в «Guest notebooks», будут отправляться прямиком через ISP2

Page 17: 059 Системный Администратор 10 2007

15№10, октябрь 2007

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

ко прямым перечислением оставших-ся 253 адресов.

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

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

Вернемся к нашим провайдерам. Модуль Balance traffic решает задачу, сформулированную несколькими па-раграфами ранее: определяет про-вайдера (т.е. шлюз) для пакета, при-шедшего от данного сетевого объек-та или IP-адреса по указанному про-токолу (TCP/UDP) и имеющего соот-ветствующие порты отправителя и по-лучателя.

Хотите, чтобы все гости с ноутбу-ками (которые получают IP из диапа-зона 10.1.0.220-10.1.0.230) пользова-лись дешевым, но не слишком быст-рым спутниковым каналом? Нет проб-лем: создайте соответствующий объ-ект и укажите его в качестве отправи-теля (см. рис. 2). А установив переклю-чатель Traffic balancing в положение Enabled, вы просто распределите на-грузку между каналами: здесь все оп-ределяется весом, который вы указа-ли при создании шлюза.

Несмотря на наличие столь бога-тых возможностей по управлению тра-фиком, я все же не спешу установить eBox на свой маршрутизатор. Почему? Дело в том, что платформа не поддер-живает ни PPTP, ни PPoE, а именно их-то и используют мои провайдеры. Судя по спискам рассылки и инфор-мации в trac [2], вряд ли можно ожи-дать, что ситуация изменится в бли-жайшем будущем, если только кто-то из заинтересованных лиц не выпус-тит соответствующий неофициаль-ный модуль.

Наконец, никакая уважающая себя локальная сеть не должна обходить-ся без брандмауэра. Для этих целей в eBox включены модули Packet Filter и Redirects (см. рис. 3). Настройки меж-сетевого экрана разбиты на три кате-гории: правила фильтрации для сете-вых объектов, доступ к сервисам и об-мен данными между внутренними се-тями. Часть настроек выполняется ав-

томатически: активировав некоторый сервис, вы автоматически откроете до-ступ к нему из соответствующих сетей. Модуль Redirects служит для пробро-са портов (port forwarding) к серверам, работающим за NAT.

В том, что касается управления службами, ситуация более простая. Здесь обычно срабатывает правило «один модуль – один сервис». Наибо-лее интересные (на мой взгляд) моду-ли, входящие в состав eBox, таковы:n Jabber. Сервер популярной се-

ти обмена мгновенными сообще-ниями для компьютеров корпо-ративной сети, а при желании – и для внешних хостов. В послед-нем случае необходимо убедиться, что в поле «Domain name» указа-но реально существующее домен-ное имя, а флажок «Global Jabber Network Connection» установлен. Через этот же модуль осуществля-ется и управление учетными запи-сями пользователей Jabber.

n OpenVPN. Легковесное решение для организации виртуальной час-тной сети (VPN). Возможна работа как в режиме сервера, так и в ре-жиме клиента. Процедура настрой-ки для типовых ситуаций (Road Warrior и безопасное соединение двух офисов) описаны в руководс-тве пользователя eBox [3]. Серти-фикаты, необходимые для рабо-ты OpenVPN, можно получить че-рез модуль Certificate Authority Management (см. ниже).

n Файл-сервер и служба печати. Осуществляет разделяемый до-ступ к файлам по протоколу SMB/CIFS (клиенты Microsoft Windows). eBox также может выступать в ро-ли основного контроллера домена (PDC) Windows NT. Для настройки службы в любом из режимов доста-точно указать имя домена/Netbios и пользовательскую квоту. Управ-ление пользователями осущест-вляется через модуль Users.

n Шейпинг трафика. Здесь можно ограничить ширину канала для не-которых IP- и MAC-адресов, а также заранее созданных сетевых объек-тов и служб (HTTP, FTP и так далее). Для правильной работы данного модуля очень важно ввести кор-ректные значения в поля «Upload» и «Download» в настройках шлюза.

n Менеджер сертификатов. Ваш личный центр сертификации (CA), позволяющий выдавать, обновлять и отзывать сертификаты, использу-емые модулями eBox (например, рас-смотренным выше OpenVPN) и сто-ронними приложениями (см. рис. 4).

Помимо этого присутствуют тради-ционные серверы DHCP и NTP (с воз-можностью синхронизации часов клиентских компьютеров по локаль-ной сети), DNS-кэш (кстати, не на ба-зе dnsmasq, как это обычно бывает, а на основе полноценного BIND), почто-вый сервер с защитой от вирусов и спа-ма (Postfix + SpamAssassin + ClamAV,

Рисунок 3. Настройки пакетного фильтра. Красный фон кнопки «Save changes» сигнализирует о наличии несохраненных изменений

Page 18: 059 Системный Администратор 10 2007

16

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

доступ к постовым ящикам пользова-телей осуществляется по протоколам POP3/IMAP4 – эту функциональность обеспечивает Courier) и прозрачный веб-прокси с фильтрацией контента (Squid + DansGuardian).

А как оно устроено?Стройная объектно-ориентированная структура eBox наводит на мысли о Java и C++, но коль скоро мы имеем дело со сложным административным инстру-ментом для UNIX, выбор языка про-граммирования практически однозна-чен – это Perl. Помимо собственно ин-терпретатора (www.perl.org) потребуют-ся Apache (httpd.apache.org) и mod_perl (perl.apache.org) [4]. Следующий компо-нент платформы eBox – это Mason (www.masonhq.com), язык шаблонов на базе Perl. Традиционно он применяется для отделения логики CGI-скрипта от ее HTML-представления, но eBox идет еще дальше и использует Mason не только для веб-интерфейса, но и для генера-ции конфигурационных файлов. Каж-дый раз, когда вы сохраняете настрой-ки, платформа заново создает их, ис-пользуя заранее приготовленные шаб-лоны (кстати, это означает, что все из-менения, внесенные в конфигурацию вручную, будут потеряны), а затем пере-запускает соответствующие сервисы.

Наконец, последний неотъемлемый компонент работающей eBox-платфор-мы – это демон GСonf (gnome.org/projects/gconf). Традиционно ассоции-рующийся с рабочим столом GNOME

(а у отдельных личностей – даже с ре-естром Microsoft Windows), GConf пред-ставляет среду для хранения настро-ек (т.е. пар «ключ-значение»), орга-низованных в некоторую иерархию. Он действительно уходит корнями в GNOME, но при этом является впол-не самодостаточным (как, например, GLib) и не привязан к данному графи-ческому окружению. Модули eBox ис-пользуют его для хранения своих на-строек, а поскольку это происходит централизованно, платформа легко может резервировать и восстанавли-вать свою собственную конфигурацию (модуль Backup), а также имитировать транзакционность, откатывая большую часть сделанных изменений по нажа-тию на кнопку Discard Changes.

Где узнать больше?Как и подобает приличному открыто-му продукту, производимому коммер-ческой компанией, eBox Platform пос-тавляется с полным комплектом до-кументации, причем весьма неплохо-го качества. Вашему вниманию пред-лагаются три руководства (на англий-ском и испанском языках): User's Guide (для пользователей), Developer's Guide (для разработчиков) и Installation Guide (инструкция по установке), не считая контекстной справки, которая появля-ется по щелчку на ссылке «Show Help» в веб-интерфейсе.

Руководство пользователя опи-сывает основные функции eBox. Оно не является заменой учебника по той

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

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

Инструкция по установке – самый тонкий документ из трех: всего одна веб-страница. Памятуя о Debian-ори-ентированности eBox, можно было бы ожидать увидеть здесь советы по пе-реносу платформы на другие дистри-бутивы, но увы – все сводится к eBox Installer и apt-get.

И наконец...По законам жанра, здесь должна сто-ять фраза вроде: «Конечно, мы рас-смотрели далеко не все возможнос-ти eBox. За бортом остались...», но я предпочту этого не делать. Моей целью было дать вам общее представление о платформе eBox Platform накануне ее официального запуска, и если после прочтения у вас сформировалось мне-ние «Да, на это стоит посмотреть» или, наоборот, «Нет, мне это не нужно» – значит, я не зря потратил время на ее написание. Со своей стороны, думаю, что eBox будет интересен небольшим предприятиям, которым нужен надеж-ный и простой в управлении сервер по типу «все в одном», а также консалтин-говым фирмам, внедряющим Linux-ре-шения в таких организациях.

1. Сайт eBox Platform – http://www.ebox-platform.com.

2. eBox Trac – http://trac.ebox-platform.com.3. eBox User's Guide – http://www.ebox-

platform.com/users-guide.4. Мичурин А. Оцениваем возможности

mod_python и mod_perl. //Системный администратор, №8, 2007 г. – С. 62-66.

5. Яремчук С. m0n0wall – дистрибу-тив для создания межсетевого экра-на. //Системный администратор, №5, 2007 г. – C. 74-77.

Рисунок 4.Модуль CA Management искусно прячет тонкую механику OpenSSL за приятным веб-интерфейсом

Page 19: 059 Системный Администратор 10 2007

17№10, октябрь 2007

bugtraq

Выполнение произвольного кода в Microsoft Visual Studio ActiveX‑компонентахПрограмма: Microsoft Visual Studio 6 Enterprise, Microsoft Visual Studio 6 Professional.Опасность: Высокая.Описание: 1. Уязвимость существует из-за того, что мето-ды StartProcess() и SyncShell() в PDWizard.ocx ActiveX-компо-ненте могут быть использованы для выполнения произволь-ных команд на системе. Также сообщается о наличии сле-дующих небезопасных методов: SaveAs(), CABDefaultURL(), CABFileName() и CABRunFile().

2. Уязвимость существует из-за наличия методов Load() и SaveAs() в VBTOVSI.DLL ActiveX-компоненте. Удаленный пользователь может загрузить локальный файл и сохра-нить его в произвольной директории на системе.URL производителя: www.microsoft.com.Решение: В настоящее время способов устранения уязви-мости не существует.

Множественные уязвимости в CA ARCserve BackupПрограмма: CA ARCserve Backup for Laptops and Desktops r11.5, CA ARCserve Backup for Laptops and Desktops r11.1 SP2, CA ARCserve Backup for Laptops and Desktops r11.1 SP1, CA ARCserve Backup for Laptops and Desktops r11.1, CA ARCserve Backup for Laptops and Desktops r11.0, CA ARCserve Backup for Laptops and Desktops r4.0, CA Desktop Management Suite 11.2, CA Desktop Management Suite 11.1, CA Desktop Management Suite 11.0, CA Protection Suites r2Опасность: Высокая.Описание: 1. Уязвимость существует из-за того, что обра-ботчики команд, отвечающие за сетевые запросы, не про-веряют, является ли их сосед аутентифицированным. Уда-ленный пользователь может выполнить произвольный код на целевой системе с привилегиями учетной записи SYSTEM.

2. Уязвимость существует из-за ошибки проверки гра-ниц данных в команде rxrLogin при обработке имени поль-зователя в библиотеке rxRPC.dll. Удаленный пользователь может послать на порт приложения TCP/1900 специально сформированный RPC-пакет, содержащий слишком длин-ное имя пользователя, вызвать переполнение стека и вы-полнить произвольный код на целевой системе.

3. Уязвимость существует из-за ошибки проверки гра-ниц данных при обработке пароля пользователя в коман-де rxrLogin в библиотеке rxRPC.dll. Удаленный пользова-тель может послать на порт приложения TCP/1900 специ-ально сформированный RPC-пакет, содержащий слишком длинный пароль пользователя, вызвать переполнение сте-ка и выполнить произвольный код на целевой системе.

4. Целочисленное переполнение обнаружено при об-работке пароля пользователя в команде rxrLogin в библи-отеке rxRPC.dll. Удаленный пользователь может послать на порт приложения TCP/1900 специально сформирован-ный RPC-пакет, вызвать переполнение буфера и выпол-нить произвольный код на целевой системе.

5. Уязвимость существует из-за ошибки при обработке имен файлов в команде rxrReceiveFileFromServer в библио-теке rxRPC.dll. Удаленный пользователь может подключить-ся к порту TCP/1900 приложения, отправить запрос уязвимо-му приложению на загрузку файла и с помощью специаль-но сформированного имени файла, содержащего символы обхода каталога («..\»), перезаписать произвольные файлы на системе с привилегиями учетной записи SYSTEM.

6. Переполнение буфера обнаружено при обработ-ке аргументов в командах rxsAddNewUser, rxsSetUserInfo, rxsRenameUser, rxsSetMessageLogSettings, rxsExportData, rxsSetServerOptions, rxsRenameFile, rxsACIManageSend, rxsExportUser, rxsImportUser, rxsMoveUserData, rxsUse LicenseIni, rxsLicGetSiteId, rxsGetLogFileNames, rxsGetBackup Log, rxsBackupComplete, rxsSetDataProtectionSecurity Data, rxsSetDefaultConfigName, rxsGetMessageLog Settings, rxsHWDiskGetTotal, rxsHWDiskGetFree, rxsGetSub Dirs, rxsGetServerDBPathName, rxsSetServerOptions, rxsDeleteFile, rxsACIManageSend, rxcReadBackupSetList, rxcWriteConfigInfo, rxcSetAssetManagement, rxcWriteFile

ListForRestore, rxcReadSaveSetProfile, rxcInitSaveSetProfile, rxcAddSaveSetNextAppList, rxcAddSaveSetNextFilesPathList, rxcAddNextBackupSetIncWildCard, rxcGetRevisions, rxrAddMovedUser, rxrSetClientVersion, rxsSetDataGrowthScheduleAndFilter и rxrSetMessageLogSettings. Удаленный пользователь может выполнить произвольный код на це-левой системе.

7. Уязвимость существует из-за ошибки проверки гра-ниц данных в функции GetUserInfo(). Удаленный пользова-тель может с помощью специально сформированного за-проса вызвать переполнение стека и выполнить произволь-ный код на целевой системе.URL производителя: www.ca.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в Altnet Download Manager ActiveX‑комопнентеПрограмма: Altnet Download Manager 4.0.0.6, возможно, бо-лее ранние версии; Kazaa 3.2.7, возможно, более ранние версии; Grokster 1.3.3, и более ранние версии; Grokster 2.6.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки проверки границ данных в методе Install() в ADM4 ActiveX-компонен-те (adm4.dll). Удаленный пользователь может с помощью специально сформированного веб-сайта передать слиш-ком длинный аргумент уязвимому методу, вызвать пере-полнение стека и выполнить произвольный код на целе-вой системе.Примечание: Приложение входит в состав Kazaa и Grokster.URL производителя: www.altnet.com/help/downloader.asp.Решение: В настоящее время способов устранения уязви-мости не существует.

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

Page 20: 059 Системный Администратор 10 2007

18

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

Особенности сервера коллективной работы Zimbra

Сергей Яремчук

Организация совместной работы нескольких сотрудников – дело весьма непростое, сегодня существует множество решений, альтернативных таким известным продуктам, как Microsoft Exchange, IBM Lotus Notes и SUSE Linux Openexchange Server.

Page 21: 059 Системный Администратор 10 2007

19№10, октябрь 2007

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

В журнале уже шел разговор об одной из систем для группо-вой работы – eGroupware [1], бы-

ло дано ее краткое сравнение с име-ющимися решениями. Проект Zimbra Collaboration Suite (ZCS) [2] хотя по своим функциональным возможнос-тям и уступает названным выше ре-шениям, но зато имеет ряд интерес-ных свойств, позволяющих в некото-рых случаях составить им весьма се-рьезную конкуренцию.

Что представляет собой Zimbra?В состав Zimbra входит в стандартный набор для систем коллективной рабо-ты. Это почтовый сервер, позволяю-щий работать с почтой как через веб-интерфейс, так и с помощью клиент-ских программ по протоколам POP/POPS и IMAP/IMAPS.

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

Кроме этого, в состав Zimbra входят система управления контактами, ка-лендарь с возможностью планирова-ния событий и он-лайн-редактор доку-ментов Zimbra Document (см. рис. 1).

Если ка лендарь стандартен, то о Document нужно сказать пару слов. В его состав входит текстовый редактор, позволяющий создавать до-кументы в WYSIWYG-режиме в форма-те Rich Text или HTML.

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

Есть возможность вставки таблиц и изображений. Интересен пункт Insert Spreadsheet, который позволяет вста-вить в документ электронную таблицу (для ее работы нужно включить в бра-узере JavaScript).

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

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

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

В качестве браузера можно исполь-зовать любое популярное сегодня ре-шение – Internet Explorer, Mozilla Firefox или Safari. Поэтому при использова-нии Zimbra нет необходимости соблю-дать единообразие программной сре-ды в организации.

Но это еще не все сюрпризы. Раз-работчики предоставили специальное API, позволяющее создавать дополни-тельные плагины, расширяющие воз-можности Zimbra, называемые zimlets. Зимлеты предназначены для интегра-ции ZCS-продуктов и сервисов, разра-ботанных третьими лицами.

Все, что сказано выше, как раз и ре-ализуется с помощью zimlets, но на этом список возможностей не заканчи-вается. Например, если навести мышку на адрес в сообщении, зимлет, подклю-чившись к Yahoo Maps, покажет карту с местонахождением этой точки.

Или щелчок на телефонном но-мере запустит Skype, Cisco VoIP или GnomeMeeting, позволяя сразу пого-ворить с этим человеком.

Посетив демо-страницу проек-та [3] или скачав ролик, можно позна-комиться с основными возможностя-ми zimlets.

ку на него можно публиковать в ви-де RSS/Atom.

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

А чтобы не потерять сообщения, содержащие определенную темати-ку, но полученные от разных пользо-вателей, можно задействовать сис-тему тегов (Tags). При получении та-кого письма просто выбираем в меню пункт «Tag Conversation» и указыва-ем, к какому тегу относится это сооб-щение. Если тега по данной теме еще нет, то выбираем «New Tag» и созда-ем новый тег. Все просто и одновре-менно удобно.

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

Так, например, при наведении мыш-ки на имя контакта, почтовый адрес в заголовке письма или в тексте до-кумента, появится всплывающая под-сказка с полной информацией о дан-ном человеке или сервисе (см. рис. 2). Если это дата, то появится окно кален-даря, показывающее запланирован-ные события на этот день, причем по-нимаются некоторые английские сло-ва вроде tomorrow, today.

Рисунок 1. Работа с Zimbra Document

Page 22: 059 Системный Администратор 10 2007

20

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

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

Интерфейс Zimbra локализован, хотя и не полностью, но на вполне достаточном уровне, чтобы пользователи мог-ли работать без проблем. Некоторую информацию о про-цессе локализации можно получить на странице [4].

Серверная часть написана на Java, при этом использова-ны сторонние открытые разработки, среди которых Apache, MySQL, Sleepycat, OpenLDAP, Postfix, POP3/IMAP4 прокси Perdition, Cyrus-SASL и некоторые другие.

В настоящий момент бинарные версии доступны для раз-личных дистрибутивов Linux (RedHat/Fedora 4 и 5, SUSE 9/10, Debian 3.1, Ubuntu 6.*, Mandriva 2006) и Mac OS X.

В принципе если бы была версия почтового сервера Postfix для Windows, возможно был бы и вариант и под эту систему, так как все остальные компоненты кроссплатфор-менные. Можно скачать и CVS-версию.

Есть два варианта распространения Zimbra. Плат-ные версии Network Standard Edition, Network Professional Edition и свободная Open Source Edition, предоставляемая бесплатно.

Если посмотреть документ «Zimbra Collaboration Suite Feature List», то можно заметить, что особых функцио-нальных ограничений, которые бы мешали использо-вать Open Source Edition, в организациях среднего раз-мера нет.

Несколько сокращены инструменты администратора (например, нет инструмента миграции с Microsoft Exchange), отсутствует возможность синхронизации с Apple iSync и Outlook, нет системы резервного копирования и вос-становления документов, возможности поиска в почто-вых вложениях, создания писем в формате HTML и рабо-ты в кластере.

Также следует обратить внимание, что некоторые функции не доступ-ны в Mac OS X и SUSE Linux. Zimbra Desktop свободен для пользователей обеих лицензий.

Установка Zimbra в UbuntuИспользование Java наложило свой отпечаток на системные требования. Так, разработчиками для тестирова-ния рекомендуется компьютер с 32 или 64-битным процессором с частотой 1,5 Гц, 1 Гб оперативной памяти и 5 Гб свободного места на жестком диске, без учета места, требуемого при об-новлении продукта, и почтовых ящи-ков пользователей.

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

В списке поддерживаемых дистрибутивов Ubuntu есть, но пытаться установить Zimbra на «Feisty Fawn» 7.04 даже не стоит пробовать, следует использовать версии 6.06 LTS «Dapper Drake» или Ubuntu 6.10 «Edgy Eft». Причем в вари-анте Server. Если целью установки является знакомство, то можно попробовать установить Zimbra и на десктопный (K)Ubuntu, но в этом случае следует обязательно удалить все, связанное с Apache, почтовыми серверами, LDAP и про-чее, что может вызвать конфликт портов.

Также следует в файл /etc/hosts записать FQHN-имя своего сервера, а запись для localhost должна выглядеть так:

Любое недоразумение сразу же приведет к ошибке при установке.

Дальше все просто. Скачиваем архив под свой дистри-бутив (чуть больше 200 Мб), распаковываем его и запуска-ем установочный скрипт:

Вначале скрипт проверит наличие всех необходимых пакетов:

127.0.0.1 localhost.localdomain localhost

$ tar xzvf zcs-4.5.6_GA_1044.UBUNTU6.tgz$ cd zcs$ sudo ./install.sh

Checking for prerequisites... NPTL...FOUND sudo...FOUND sudo-1.6.8p12-1ubuntu6 libidn11...FOUND libidn11-0.5.18-1 curl...FOUND curl-7.15.1-1ubuntu2 fetchmail...MISSING libpcre3...FOUND libpcre3-6.4-1.1ubuntu4 libgmp3c2...FOUND libgmp3c2-4.1.4-11ubuntu2 libexpat1...FOUND libexpat1-1.95.8-3 libxml2...FOUND libxml2-2.6.24.dfsg-1ubuntu1 libstdc++6...FOUND libstdc++6-4.0.3-1ubuntu5 libstdc++5...FOUND libstdc++5-1:3.3.6-10 openssl...FOUND openssl-0.9.8a-7ubuntu0.3

Рисунок 2. Управление учетными записями

Page 23: 059 Системный Администратор 10 2007

21№10, октябрь 2007

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

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

Последнее несколько непонятно, так как в состав Zimbra входит 8 пакетов, и только один zimbra-snmp отмечен в до-кументации как опциональный, без остальных вся систе-ма работать просто не будет. Вероятно, это наследие вер-сии Network.

Далее выдается запрос на разрешение модификации системы:

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

Далее проверка конфликта портов, и выводится ме-ню установки:

Любое значение, указанное выше, сейчас можно откор-ректировать. Особое внимание следует обратить на пунк-ты, отмеченные звездочками, означающие ненастроен-ный параметр.

В нашем случае это «Admin Password», показывающий на отсутствие пароля администратора. Для вызова нуж-ного пункта нажимаем соответствующую ему цифру, в на-шем случае это 6, появляется еще одно меню, в котором «Admin Password» стоит четвертым по списку. Нажимаем <4> и вводим пароль:

Чтобы перейти в старшее меню, нажимаем <R>, клави-шей <S> сохраняем настройки и для выхода из меню ис-пользуем <Q>.

Некоторое время еще понадобится для создания всех настроек, по окончании скрипт предложит информировать компанию-разработчика о новом сервере:

Можно отказаться от этого шага. Вот собственно и весь процесс установки.

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

Перед повторной установкой следует деинсталлиро-вать все пакеты:

Или введя «sudo dpkg -r имя_пакета», и обязательно уда-лить каталог /opt/zimbra:

После этого повторяем процесс установки.

Локализация ZimbraРусская локализация в отличие от некоторых других языков в поставку по умолчанию не входит. Вероятно, это связано с тем, что работа еще далека от завершения, так, из 8 фай-лов на сегодняшний день частично переведены только 4. Нужные файлы можно найти на странице [5]. Копируем их в каталог сервера:

Следующего файла для русского языка пока нет, но, воз-можно, он скоро появится:

После этого перезапускаем Zimbra:

Или воспользуемся утилитой zmcontrol:

Параметр status должен показать список сервисов:

The system will be modified. Continue? [N]

Change domain name? [Yes]Create Domain: [server.com]

Checking for port conflictsMain menu

1) Hostname: server.com 2) Ldap master host: server.com 3) Ldap port: 389 4) Ldap password: set 5) zimbra-ldap: Enabled 6) zimbra-store: Enabled +Create Admin User: yes +Admin user to create: [email protected]******* +Admin Password UNSET +Enable automated spam training: yes +Spam training user: [email protected] +Non-spam(Ham) training user: [email protected] +Global Documents Account: [email protected] +SMTP host: server.com +Web server HTTP port: 80 +Web server HTTPS port: 443 +Web server mode: http +Enable POP/IMAP proxy: no +IMAP server port: 143 +IMAP server SSL port: 993 +POP server port: 110 +POP server SSL port: 995 +Use spell check server: yes +Spell server URL: http://server.com:7780/aspell.php

7) zimbra-mta: Enabled 8) zimbra-snmp: Enabled 9) zimbra-logger: Enabled 10) zimbra-spell: Enabled r) Start servers after configuration yes s) Save config to file x) Expand menu q) Quit

Address unconfigured (**) items (? - help)

Password for [email protected] (min 6 characters): [4HkOvKOtNw] p@ssw()rd

Notify Zimbra of your installation? [Yes]

$ ./install.sh -u

$ sudo rm –Rf /opt/zimbra

$ sudo cp *.properties /opt/zimbra/tomcat/webapps/ ↵ zimbra/WEB-INF/classes/msgs/ $ sudo cp *.properties /opt/zimbra/tomcat/webapps/ ↵ zimbraAdmin/WEB-INF/classes/msgs/

$ sudo cp ZsMsg*.properties /opt/zimbra/conf/msgs/

$ sudo /etc/init.d/zimbra restart

$ su - zimbra$ zmcontrol restart

$ sudo /etc/init.d/zimbra restart

Host server.com antispam Running antivirus Running ldap Running logger Running mailbox Running mta Running snmp Running spell Running

Page 24: 059 Системный Администратор 10 2007

22

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

Выставляем в браузере язык, пред-почитаемый для отображения стра-ниц (в Firefox: «Настройки → Допол-нительно → Общие»), и можно регис-трироваться.

Использование веб‑интерфейсаДля регистрации в системе использу-ем логин вида [email protected] и па-роль, введенный во время установки.

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

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

В базовом варианте отсутствует все, что связано с AJAX, то есть рабо-та с документами, всплывающие под-сказки и прочее. Доступны только ка-лендарь и работа с почтой, интерфейс в базовом варианте в настоящее вре-мя не переведен. Разобраться, как работать с почтой, в любом варианте очень просто.

Чтобы получить доступ к админис-тративной консоли, следует набрать ссылку https://server.com:7071/. Прини-маем сертификат сервера и регистри-руемся. Администратору доступны че-тыре вкладки:

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

Затем уже во вкладке сервера эти настройки можно будет переопреде-лить персонально для каждого. Таким образом, параметры будут применен-ные в таком порядке: «Глобальные на-стройки → Класс сервера и персональ-ные настройки».

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

По умолчанию устанавливается только 5 zimlets. Все остальные нахо-дятся в каталогах /opt/zimbra/zimlets и zimlets-extra.

Чтобы добавить любой из них, сле-дует выбрать ссылку Zimlets, нажать кнопку «Deploy New» и указать на вы-бранный архив. При следующей ре-гистрации пользователя новый zimlets (не все, работа некоторых скрыта) по-явится в поле «Зимлеты». В дальней-шем пользователь самостоятельно на-страивает параметры зимлета, вызвав контекстное меню.

Кроме веб-интерфейса настройка-ми Zimbra можно управлять и с помо-щью большого количества команд, за-пускать которые необходимо от имени пользователя zimbra. Подробно коман-ды расписаны в приложении A «Zimbra OS Admin Guide».

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

1. Яремчук С. Устанавливаем eGroupware. //«Системный администратор», № 3, 2007 г. – С. 36-41.

2. Сайт проекта Zimbra – http://www.zimbra.com.

3. Демо-версия Zimbra – http://zimbra.com/demo.

4. Локализация Zimbra – http://wiki.zimbra.com/index.php?title= Translations.

5. Пакеты для локализации Zimbra – http://zimbra-xtras.svn.sourceforge.net/viewvc/zimbra-xtras/trunk/ZimbraTranslations/data/Russian_ru/messages.

n Адреса – управление аккаунтами пользователей, листами распро-странения и ресурсами, создание алиасов, просмотр почты пользова-телей и смена пароля (см. рис. 2);

n Конфигурация – глобальные на-стройки доступных возможностей сервера, тем, параметров по умол-чанию (квоты, длина и время жизни пароля), серверного пула, включе-ние и установка zemlets, настройки домена, виртуальных узлов и про-чее (см. рис. 3);

n Мониторинг – вывод статуса и ста-тистики сервера;

n Tools – управление почтовыми оче-редями.

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

Так, чтобы завести новую учетную запись, достаточно нажать «Учетные записи → Новый → Учетная запись» и заполнить поля. Аналогично созда-ются и любые другие объекты.

Следует отметить удобство при ад-министрировании большого количест-ва серверов и доменов. Так, изначаль-но для всех серверов действуют уста-новки, указанные в «Конфигурация → Глобальные настройки» (см. рис. 3).

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

Рисунок 3. Настройки сервера

Page 25: 059 Системный Администратор 10 2007
Page 26: 059 Системный Администратор 10 2007

24

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

Используем дополнительные возможности Windows Messenger

Иван Коробко

Расширив возможности Windows Messenger, вы можете превратить его в телефонный справочник, службу HelpDesk или почтового клиента.

Page 27: 059 Системный Администратор 10 2007

25№10, октябрь 2007

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

Расширенные возможности Windows MessengerМногие устанавливают пакет Windows Messenger Plus! Live [1] для расшире-ния возможностей Windows Messenger. Однако при использовании Windows Messenger в качестве клиента Office Live Communications Server 2003 (LCS) применение WM Plus! Live – не луч-шее решение по нескольким сообра-жениям:n Windows Messenger Plus! Live в пер-

вую очередь предназначен для ра-боты с Windows Messenger Live. Он работает с Windows Messenger, но приложение функционирует нестабильно.

n Отсутствует MUI, включающий под-держку русского языка.

n Требуется установка на каждой ра-бочей станции.

Функции Windows Messenger мож-но значительно расширить, превратив его в клиента службы HelpDesk, клиен-та MS Outlook или в телефонный спра-вочник, изменив несколько параметров в реестре Windows. Изучая эту тему, было выявлено четыре дополнения:n баннер в окно диалога пользовате-

лей;n закладка в разделе «Справка»;n ссылки на программы в разделе

«Действия»;n закладки (tabs) в основном поле

Messenger.

Структура реестра Windows MessengerИнформация о конфигурации Windows Messenger находится в ветвях ре-естра HKEY CURRENT USER (HCKU) и HKEY LOCAL MACHINE (HKLM).

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

В ветви HKLM – параметры над-строек Windows Messenger. В HKLM\SOFTWARE\Microsoft\MessengerService\ServiceProviders\{83D4679F-B6D7-11D2-BF36-00C04FB90A03}\branding\SIP_DOMAIN_NAME содержится ин-формация о дополнительных заклад-ках, баннере и т. д.

Баннер в Windows MessengerБаннер расположен внизу окна пере-писки с каким-либо пользователем

(см. рис. 1). По своей сути это картин-ка, при нажатии на которую открыва-ется указанный в реестре URL.

Для описания баннера используют-ся два ключа (см. таблицу 1 и рис. 2): BannerURL и BannerLinkURL. Ширина баннера может изменяться, поэтому его фон рекомендуется делать белым (JPEG) или прозрачным (GIF). Высота баннера – 275 пикселей.

Новый пункт меню в разделе «Справка»В Windows Messenger можно добавить пункт меню с произвольным назва-нием в раздел «Справка» (см. рис. 3). По нажатию на него будет осущест-вляться переход по заданной в реес-тре URL-ссылке. Как и в предыдущем варианте, для описания используются два параметра (см. таблицу 2).

Создание ссылок на программы в разделе «Действия»Для создания ссылки на приложение в разделе «Действия» (см. рис. 5) необ-

ходимо в HKLM\SOFTWARE\Microsoft\MessengerService\SessionManager\Apps создать папку, имя которой сов-падает с GUID запускаемого прило-жения. В ней должен присутствовать ключ, содержащий имя приложения, которое будет отображено в спис-ке. По умолчанию в указанном раз-деле существует несколько программ (см. таблицу 3 и рис. 5, 6).

Свойство Описание Пример

BannerURL URL-путь к картинке. Поддерживается JPEG, GIF http://wmconfig/logotip.jpg

BannerLinkURL URL-ссылка, по которой будет выполнен переход после нажатия на баннер

http://homesite

Таблица 1. Активный баннер

Свойство Описание Пример

ProviderName Содержит название создаваемого пункта меню Помощь

HelpURL URL-ссылка, по которой будет выполнен переход после нажатия на созданный пункт меню

http://help/msn

Таблица 2. Подменю в разделе «Справка»

Таблица 3. Подменю в разделе «Действия»

Запускаемое приложение

GUID Name (реестр) Path (реестр) URL (реестр)

Общий доступ к приложению

F1B1920C-6A3C-4ce7-B18C-AFAB305FD03D

Application Sharing C:\WINDOWS\System32\ rcImLby.exe

http://www.microsoft.com

Удаленный помощник

56b994a7-380f-410b-9985-c809d78c1bdc

Remote Assistance C:\WINDOWS\System32\ rcImLby.exe

http://www.microsoft.com

Доска 1DF57D09-637A-4ca5-91B9-2C3EDAAF62FE

Whiteboard C:\WINDOWS\System32\rtcshare.exe

http://www.microsoft.com

Свойство Описание Пример

TabURL Ссылка на конфигурационный файл закладок в формате XML http://wmtabs/tabs.xml

Таблица 4. Создание закладок в реестре

Рисунок 1. Внешний вид баннера

Рисунок 2. Характеристики баннера в реестре

Page 28: 059 Системный Администратор 10 2007

26

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

Как показывает практика, мало кто добавляет ссылки на другие приложе-ния в Windows Messenger.

Создание закладок в Windows MessengerПо умолчанию в Windows Messenger отображается всего лишь одна заклад-ка (tab), в которой перечислены контак-ты пользователей.

С помощью реестра и конфигура-ционного файла в формате XML мож-но увеличить их количество до 32 (см. рис. 6). Описание ключей реест-ра смотрите в таблице 4.

Конфигурационный файл закладокКонфигурационный файл имеет фор-мат XML-файла. Как любой XML-файл он имеет заголовок, указывающий интерпретатору на формат файла: <?xml version=”1.0” ?>. Для того чтобы русские символы были корректно счи-таны из файла, необходимо добавить в заголовок описание русского языка: <?xml version=”1.0” charset=1251 ?>.

XML-файл имеет следующую струк-туру:

Обычно для удобства эти имена дела-ют идентичными.

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

в формате PNG;n конфигурационный XML-файл;n баннер.

Настройка DNSПервым делом необходимо придумать имя сайта, например, http://wmtabs. Для создания такого имени необхо-димо сделать DNS-ссылку (AName alias). Для этого на контроллере доме-на запустите службу DNS и в Forward Lookup Zone вызовите контекстное меню текущего домена (см. рис. 9). В нем – выберите пункт «New Alias (CNAME)…».

В появившемся меню необходи-мо в поле «Alias Name» указать но-вое имя сайта, в поле «FQDN for target host» – полное имя компьютера в доме-

Рассмотрим назначение каждого из тегов. Тег <msntabdata> идентифи-цирует для Windows Messenger конфи-гурационный файл. Внутри этого тега может быть до 32 тегов <tab>. Описа-ние тегов внутри тега <tab> см. в таб-лице 5.

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

Конфигурационный файл, пик-тограммы закладок и баннер должны быть расположены на сайте. Так было задумано программистами Microsoft. Создадим новый сайт и для просто-ты назовем его WMTabs. Для этого необходимо на сервере c IIS в папке C:\InetPub создать каталог WMTabs. Имя создаваемой папки произволь-но и никак не связано с именем сайта.

Рисунок 3. Внешний вид подменю «Помощь» в разделе «Справка» Рисунок 4. Описание нового пункта меню раздела «Справка» в реестре

<?xml version="1.0" charset=1251 ?><msntabdata><tab><image></image><name></name><tooltip></tooltip><contenturl></contenturl><tabid></tabid><hidden></hidden></tab><tab>… </tab>…</msntabdata>

Рисунок 6. Стандартный набор ссылок на приложения раздела «Действия» в реестре

Рисунок 5. Внешний вид меню запуска приложений в разделе «Действия»

Название тега Описание Пример

<image> URL-путь к иконке в формате PNG, отображаемой в MSN

<image>http://wmtabs/tab01.png</image>

<name> Имя закладки. Участвует в управлении отображения закладок. Если используется русский язык, необходимо в заголовок файла добавить charset=1251

<name>Телефонный справочник</name>

<tooltip> Текст всплывающей подсказки. Если используется русский язык, необходимо в заголовок файла добавить charset=1251

<tooltip>После нажатия на этот значок в окне Windows Messenger будет отображен телефонный справочник</tooltip>

<contenturl> Ссылка, отображаемая при нажатии на выбранную закладку

<contenturl>http://ServerName/Exchange/LoginName/Контакты</contenturl>

<tabid> Порядковый номер расположения закладок. Может изменяться от 1 до 32

<tabid>1<tabid>

<hidden> Задает видимость закладки в поле закладок по умолчанию. Принимает значение true или false

<hidden>false</hidden>

Таблица 5. Описание характеристик закладки в XML-файле

Page 29: 059 Системный Администратор 10 2007

27№10, октябрь 2007

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

не, на котором будет находиться сайт (см. рис. 9).

После того как ссылка на сер-вер создана, ее необходимо прове-рить. Для этого обновите DNS-кэш на этом сервере с помощью коман-ды «ipconfig / flushdns» и выполни-те команду «ping wmtabs». Если все сделано правильно, то по создан-ной ссылке должен быть получен от-клик: имя wmtabs должно разрешить-ся в server.domain.ru.

Настройка IISДля создания сайта http://wmtabs необ-ходимо после запуска конфигуратора IIS-консоли на сервере инициализи-ровать работу соответствующего мас-тера. Для этого необходимо выбрать в контекстном меню сайтов «New → Web Site» (см. рис. 10).

Работа мастера включает несколь-ко этапов.

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

Именно на втором шаге необхо-димо задать имя сайта в поле «Host header for this Web-site», которое поль-зователь будет запускать в браузере. В данном случае по этому имени бу-дет обращаться Windows Messenger в поисках конфигурационных файлов (см. рис. 11, 12).

На третьем этапе указываются физическое местоположение папки на сервере и уровень доступа к сайту. По умолчанию пункт «Allow anonymous access to this Web site» (разрешить ано-нимный доступ к этому веб-сайту) от-мечен галкой. В данном случае уста-новлена галка или нет, не имеет зна-чения, поскольку не требуется иденти-фикация пользователя.

На последнем шаге устанавлива-ются разрешения на доступ к сайту. По умолчанию установлена галка толь-ко напротив «Read» (чтение). Рекомен-дуется оставить установленные значе-ния без изменений.

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

Окно закладки Windows Messenger представляет собой урезанную версию веб-браузера. Все механизмы кэширо-вания работают так же, как и в обыч-ном браузере. Поэтому в случае из-менения какой-либо закладки необхо-димо войти в браузер и очистить кэш (см. рис. 13).

Интеграция изменений реестра во всем доменеИзменения, вносимые в реестр, каса-ются ветви HKLM. Для того чтобы вне-

Рисунок 7. Закладки Windows Messenger

В окне браузера необходимо на-бирать полный путь к файлу, т.е. http://wmtabs/tabs.xml. В результате в ок-не браузера должен отобразиться XML-файл.

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

Рисунок 8. Настройка закладок в реестре

Рисунок 9. Настройка DNS

Page 30: 059 Системный Администратор 10 2007

28

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

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

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

Для решения проблемы существует, как минимум, два варианта.

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

Второй – скомпилировать MSI-файл, который бы раз-ворачивался всякий раз при регистрации пользователя в сети.

Продолжаем расширять возможности Windows Messenger. Превратим его в почтового клиента.

Использование Windows Messenger в качестве почтового клиентаВ качестве наглядного примера использования закладок рассмотрим преобразование Windows Messenger в качестве

почтового клиента. Для реализации данного решения необ-ходимо, чтобы в домене была использована OWA (Outlook Web Access). Установка и настройка OWA выходит за рам-ки этой статьи, поэтому буду считать, что у вас она уже ус-тановлена и настроена.

Определим наполнение закладок. Безусловно, должны быть закладки «Inbox» (входящие), «Outbox» (отправлен-ные). Остальные вкладки могут быть созданы по желанию по образу и подобию.

OWAOWA (Outlook Web Access) – это веб-сервис для Microsoft Exchange Server, который позволяет получить доступ к поч-те (см. рис. 14) с помощью веб-интерфейса. Сейчас OWA – один из компонентов Microsoft Exchange 2007.

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

Параметры строки OWAПосмотрев на внешний вид OWA (см. рис. 14), сразу же встает вопрос о том, как отдельно отобразить папки «Вхо-дящие», «Исходящие» и т. д. Вид интерфейса определяется с помощью аргументов URL-строки. Общий вид URL-стро-ки вызова OWA следующий: «http://ServerName/Exchange/LogonName/FolderName?Parametres», где:n ServerName – имя Exchange Server. Далее будем пола-

гать, что имя сервера – MAIL.n Exchange – постоянный неизменяемый параметр.n LogonName – имя сотрудника, под которым он регист-

рируется в сети.n FolderName – этот параметр необязательный. Он исполь-

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

Рисунок 10. Запуск мастера создания сайтов в IIS

Рисунок 11. Настройка IIS. Шаг 1 и 2 Рисунок 12. Настройка IIS. Шаг 3 и 4

Page 31: 059 Системный Администратор 10 2007

29№10, октябрь 2007

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

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

Таким образом, структура ASP-файла будет следующей:

n Parameters – параметры, опреде-ляющие внешний вид вызываемо-го окна (см. таблицу 6).

Полное описание параметров ко-мандной строки OWA можно найти на сайте Microsoft [1].

В таблице 6 приведены часто ис-пользуемые выражения командной строки, такие как – показать пап-ку «Входящие», создать новое пись-мо, вывести окно настройки Outlook для OWA и т. д.

Настройка файла конфигурацииПри использовании OWA в URL-строке запроса необходимо указывать сете-вое имя пользователя (login). Посколь-ку файл находится на веб-сайте, то с помощью ASP можно идентифициро-вать пользователя, который осущест-вляет чтение файла при соответству-ющих настройках IIS.

Настройка IIS заключается в от-ключении анонимного доступа к сай-ту и запуска механизма Windows Authentication. Для этого необходимо войти в свойства созданного веб-сайта и во вкладке «Directory Security» нажать на кнопку «Edit» (см. рис. 16).

В появившемся диалоговом ок-не необходимо убрать галку напро-тив «Enable anonymous access», от-ключив анонимный доступ к сайту, и включить галку «Integrated Windows authentication», запустив встроенный механизм аутентификации пользова-телей.

Второй этап – преобразование XML-файла в ASP-файл, который бы после вызова определял имя пользователя и подставлял его в возвращаемый им XML-файл.

Любой ASP-файл имеет следую-щую структуру:

Однако Windows Messenger дол-жен воспринять его как XML-файл, поэтому заголовок ASP-файла необ-ходимо изменить на заголовок XML-файла, при этом расширение фай-ла должно быть ASP, для IIS это ASP-файл, а не XML.

Командная строка Описание параметра Наглядный пример

?cmd=new Создание нового письма http://Server/Exchange/User/?cmd=new

Subject?=action Отображает последнее письмо с указанной темой

http://Server/Exchange/User/Subject?cmd=action

?cmd=option Вывод окна пользовательских настроек (см. рис. 14)

http://Server/Exchange/User/?cmd=options

Folder/?cmd=contents Отобразить только содержимое указанной папки (см. рис. 14). На рис. 14 не отображается панель 1

http://Server/Exchange/User/Входящие/?cmd=contents

Folder/?cmd=contents&view=value Отобразить элементы из указанной папки за указанный срок

http://Server/Exchange/User/Входящие/?cmd=contents&view=Two%20Line

Folder/?cmd=contents&part=1 Отображает только указанную папку (см. рис. 14). На рис. 14 не отображаются панели 1 и 3

http://Server/Exchange/User/Входящие/?cmd=contents&part=1

/subject.EML?cmd=open Отобразить текст конкретного письма. В качестве subject указывается тема письма

http://Server/Exchange/User/Входящие/subject.EML?cmd=open

Таблица 6. Параметры URL-строки OWA

Название папки URL-строка

Входящие http://mail/exchange/<%Response.Write(userName)%>/Входящие/?Cmd=contents&part=1

Отправленные http://mail/exchange/<%Response.Write(userName)%>/Отправленные/?Cmd=contents&part=1

Новое письмо http://mail/exchange/<%Response.Write(userName)%>/исходящие/?cmd=new

Параметры почты http://mail/exchange/<%Response.Write(userName)%>/?Cmd=options

Задачи http://mail/exchange/<%Response.Write(userName)%>/Задачи/?Cmd=contents&part=1

Календарь http://mail/exchange/<%Response.Write(userName)%>/Календарь/?Cmd=contents&part=1&View=Three%20Line

Таблица 7. Характеристики закладок Windows Messenger

<%@ Language=VBScript CODEPAGE=1251%><HTML> …<BODY> …<%VBSCRIPT CODE%></BODY></HTML>

<?xml version="1.0" ↵ encoding="windows-1251" ?><%VBSCRIPT CODE%><msntabdata>

Рисунок 13. Очистка кэша браузера

<tab> <image>http://***/*.png</image> <name>***</name> <tooltip>***</tooltip> <contenturl>http://**<%VBSCRIPT ↵ CODE%>*</contenturl> <tabid>1</tabid> <hidden>false</hidden> </tab><tab> … <tabid>2</tabid> <hidden>false</hidden> </tab>…</msntabdata>

Page 32: 059 Системный Администратор 10 2007

30

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

Определение пользователя, который вызвал стра-ницу, осуществляется с помощью функции HttpContext.Current.User.Identity.Name или Request.ServerVariables («AUTH_USER»).

В обоих случаях функция возвращает имя в пользовате-ля согласно шаблону DOMAIN\USERNAME. Поэтому необхо-димо вычленить USERNAME для подстановки в XML-файл c помощью процедуры:

Закладки Windows MessengerОпределим перечень закладок, создаваемых в Windows Messenger. Количество закладок может варьироваться в за-висимости от потребностей сотрудников, однако среди них есть обязательные. К ним относятся закладки, по нажатию на которые будет отображаться содержимое следующих папок: «Исходящие», «Отправленные» и «Новое письмо».

Рисунок 14. Внешний вид OWA

<%Dim UserName = HttpContext.Current.User.Identity.Name

Рисунок 15. Пользовательские настройки OWA

userName = userName.SubString(userName.LastIndexOf("\")+1)%>

Page 33: 059 Системный Администратор 10 2007

31№10, октябрь 2007

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

По желанию можно добавить ссылки на папки: «Календарь», «Задачи», «Настройка параметров почты» и др. Перечень создаваемых закладок и ссылок на них смотрите в таб-лице 7. Выражением <%Response.Write(userName)%> под-ставляется сетевое имя пользователя (login) в URL-ссылку для успешной работы.

Привожу листинг файла Config.ASP:

Получившийся результат см. на рис. 17.

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

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

1 Инструкция по настройке веб-частей в веб-клиенте Outlook – http://technet.microsoft.com/ru-ru/library/bb232199.aspx.

2. Windows Messenger Plus! Live – http://www.msgpluslive.net.3. Корбко И. Использование Windows Messenger в корпоративной

среде. //Системный Администратор, №9, 2007 г. – С. 28-31.

Рисунок 16. Управление аутентификацией IIS

Рисунок 17. Внешний вид Windows Messenger с почтовым клиентом

<?xml version="1.0" encoding="windows-1251" ?><%Dim UserName = HttpContext.Current.User.Identity.NameUserName = userName.SubString(userName.LastIndexOf("\")+1)%><msntabdata> <tab> <image>http://wmtabs/p1.png</image> <name>Входящие письма</name> <tooltip>Входящие письма</tooltip> <contenturl>http://mail/exchange/ ↵ <%Response.Write(userName)%>/Входящие/ ↵ ?Cmd=contents&part=1&View=Three%20Line</contenturl> <tabid>1</tabid> <hidden>false</hidden> </tab> <tab> <image>http://wmtabs/p2.png</image> <name>Новое письмо</name> <tooltip>Создание нового письма</tooltip> <contenturl>http://mail/exchange/<%Response.Write ↵ (userName)%>/Исходящие/?cmd=new</contenturl> <tabid>2</tabid> <hidden>false</hidden> </tab><tab> <image>http://wmtabs/p3.png</image> <name>Отпраленные письма</name> <tooltip>Отпраленные письма</tooltip> <contenturl>http://mail/exchange/ ↵ <%Response.Write(userName)%>/Отправленные/ ↵ ?Cmd=contents&part=1&View=Three%20Line</contenturl> <tabid>3</tabid> <hidden>false</hidden> </tab><tab> <image>http://wmtabs/p4.png</image> <name>Календарь</name> <tooltip>Календарь</tooltip> <contenturl>http://mail/exchange/ ↵ <%Response.Write(userName)%>/Календарь/ ↵ ?Cmd=contents&part=1&View=Three%20Line</contenturl> <tabid>4</tabid> <hidden>false</hidden> </tab> <tab> <image>http://wmtabs/p5.png</image> <name>Задачи</name> <tooltip>Задачи</tooltip> <contenturl>http://mail/exchange/ ↵ <%Response.Write(userName)%>/Задачи/ ↵ ?Cmd=contents&part=1&View=Three%20Line</contenturl> <tabid>5</tabid> <hidden>false</hidden> </tab><tab> <image>http://wmtabs/p6.png</image> <name>Настройка параметров почты в Windows Messenger ↵ </name> <tooltip>Настройка параметров почты в Windows ↵ Messenger</tooltip> <contenturl>http://mail/exchange/ ↵ <%Response.Write(userName)%>/?Cmd=options ↵ </contenturl> <tabid>6</tabid> <hidden>false</hidden> </tab></msntabdata>

Page 34: 059 Системный Администратор 10 2007

32

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

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

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

КластерПожалуй, одним из лучших определе-ний понятия кластера является выска-зывание Грегори Пфистера (Gregory F. Pfister). «Кластер – это разновидность параллельной или распределенной системы, которая:1. Состоит из нескольких связанных

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

цированный компьютерный ре-сурс».

Говоря же проще, кластер, это сис-тема, состоящая из нескольких вычис-лительных единиц (нод), связанных

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

availability clusters, HA).2. Кластеры с балансировкой нагруз-

ки (Load balancing clusters).3. Вычислительные кластеры (High-

performance clusters, HPC).

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

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

Иногда первые два вида кластеров объединяются для создания высокона-

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

Для последнего вида кластерных систем существуют различные модели, реализующие распараллеливание. Се-годня мы рассмотрим одну из них – MPI (The Message Passing Interface).

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

Данная технология берет свое на-чало в 1993 году, когда обобщение раз-личных библиотек привело к появле-

Настраиваем и тестируем HPC MPI‑кластер

Иван Максимов

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

Page 35: 059 Системный Администратор 10 2007

33№10, октябрь 2007

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

нию первой версии стандарта. Изна-чально в его разработке участвовали 60 человек из 40 крупных организаций (производители параллельных ЭВМ, университеты, государственные лабо-ратории и научные центры). На данный момент дальнейшей разработкой стан-дарта занимается MPI-Forum [1], обще-ственная организация, призванная мо-дернизировать и расширять стандарт. Текущая последняя законченная вер-сия стандарта является 2.0, обсужда-емая версия 2.1, в разработке послед-ней с легкостью может принять участие каждый желающий или просто поучас-твовать в дискуссии (при соответству-ющей квалификации, конечно же).

Сама по себе модель передачи дан-ных (не только для MPI) достаточно сложна, поэтому для простоты работы MPI представляет собой набор библио-течных функций для последовательно-го языка программирования, например для С, С++, Фортран 77/90, с которыми мы в конечном счете и работаем.

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

Описание кластераИтак, оставив историю и теорию поза-ди, приступим к рассмотрению и кон-фигурированию нашего HPC MPI-клас-тера. Вся настройка будет выполняться на базе ОС Scientific Linux, основанно-го на семействе операционных систем компании RedHat. Выбор данного дис-трибутива обусловлен тем, что в нем присутствует компилятор Intel Fortran Compiler в стандартной комплектации, необходимый для работы, и некоторые другие специализированные пакеты. Аппаратную конфигурацию кластера см. в таблице.

Некоторые дополнительные пояс-нения к таблице. Только на управля-ющем ЭВМ есть жесткие диски (о них позже), остальные станции бездис-ковые. Вторая и третья группа стан-ций поддерживает технологию Hyper Threading в процессорах, а четвертая 64-битную архитектуру. Кроме разли-чий в процессорах, группы различают-ся количеством оперативной памяти и ее скоростными характеристиками.

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

Стоит отметить, что отличительной чертой процессоров Xeon серии 5130 является высокая производительность при более низких частотах.

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

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

Вся система функционирует следу-ющим образом (см. рис. 1): управляю-щей является машина с единственным дисковым массивом, все остальные модули являются вычислительными (далее вычислительные модули – ВМ)

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

Дисковый массив управляющей машиныДисковое пространство всегда лучше планировать заранее и, если есть воз-можность, всегда резервировать не-которое количество гигабайт «про за-пас». Итак, первый дисковый состоит из двух жестких дисков объемом 70 Гб, объединенных в RAID 1. Второй массив (под пользовательские данные), четы-ре винчестера по 160 Гб, объединенных в RAID 10 (1+0). Таблица разделов бу-дет выглядеть так:

Системный RAID-1 разбит следую-щим образом:n /boot – 100 Мб, данные загрузчика

и ядро ОС.

Создана группа логических томов SysVolGroup, занимающая всё остав-шееся пространство на системном RAID, включающая следующие логи-ческие тома:

Архитектуры параллельных ЭВМMPI всего лишь модель программирования, базирующаяся на двух возможных архи-тектурах – классическая кластерная и мас-сивно-параллельная система (MPP). Ос-новное отличие этих архитектур от других в том, что система состоит из блоков (ЭВМ) с одним или несколькими процессорами, локальной памятью и отсутствием досту-па к памяти другого блока ЭВМ. Пожалуй, именно эти архитектуры наиболее распро-странены в государственных учреждениях из-за своей дешевизны, так как могут быть собраны из стандартных ЭВМ.

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

Двумя другими, менее распространен-ными архитектурами являются: системы с неоднородным доступом к памяти (NUMA), где каждый блок (ЭВМ) имеет свою локаль-ную память, но другие блоки имеют удален-ный доступ к ним (т.е. поддерживается еди-ное адресное пространство) и системы па-раллельно векторные (PVP). Основным от-личием последних систем является рабо-та на специальных векторно-конвейерных процессорах и как правило с единой памя-тью (так же как и SMP).

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

Тип Процессор Ядра ОЗУ (Гб) Количество

Управляющий Intel Pentium 4 Xeon 2.4 Ггц 2 1 1

Вычислительный Intel Pentium 4 Xeon 2.8 Ггц 2 1 2

Вычислительный Intel Pentium 4 Xeon 3.0 Ггц 2 1 2

Вычислительный Intel Xeon 5130 2.0 Ггц 4 2 7

Аппаратное обеспечение вычислительного кластера

Page 36: 059 Системный Администратор 10 2007

34

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

n MainRoot (/) – корневая файловая система 10 Гб.

n SysSwap – файл подкачки, равный 2*ОЗУ, в данном случае 2 Гб.

n DisklessRoot (/diskless/root) – кор-невая файловая система для ВМ, 10 Гб.

n SpecProgs (/usr/ local) – спец-программы, общие для всех узлов системы, ~760 Мб.

n DisklessSnap (/diskless/snapshot) – необходимые индивидуальные файлы для ВМ, 5 Гб

n В запасе (неразмеченная об-ласть) – примерно 40 Гб.

n ssh-сервер – защищённый терми-нальный доступ пользователей на кластер.

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

Настройка сетиНастройка сети может осуществляться на этапе установки ОС, может и после установки системы. Конфигурирова-ние сетевых интерфейсов может про-изводиться как с помощью графичес-ких средств, так и с помощью консоль-ных утилит. Ниже приведен пример на-стройки путём прямого редактирова-ния файлов настроек. Файлы с настрой-ками сетевых интерфейсов находят-ся в каталоге /etc/sysconfig/networking-scripts (пожалуй, стоит напомнить, что вся настройка осуществляется в дис-трибутиве Scientific Linux, основанном на RedHat Linux, в иной ОС *nix, дан-ные файлы могут находиться в другом месте). Название этих файлов ifcfg-eth0 и ifcfg-eth1 для первого и второго сете-вого интерфейса соответственно.

Листинг файла ifcfg-eth0 (внутрен-ний интерфейс):

Листинг файла с внешним интер-фейсом не приводится из-за неакту-альности в данном контексте и незна-чительности различий с предыдущим.

DNS‑серверDNS-сервер, bind-9.2.4-27.0.1.el4 уп-равляющего узла выполняет прямое и обратное преобразование имён уз-лов в IP-адреса. Обратное преобра-зование требуется некоторыми паке-тами программ, например, torque-pbs (система организации очередей за-даний). DNS-сервер настроен как кэ-ширующий сервер и обслуживающий внутреннюю сеть (сеть вычислитель-ных модулей).

Основной файл настройки выгля-дит следующим образом:

RAID-10 (RAID данных) был разбит следующим образом.

Создана группа логических то-мов DataVolGroup, занимающая всё пространство на RAID-10. Включает единственный том UserData (/home) – под данные пользователей ~217 Гб.

В запасе примерно 100 Гб неразме-ченного пространства, которое можно при необходимости добавить.

Сервисы кластераДля работы кластера нам необходимы следующие сетевые сервисы:n DNS-сервер – прямое и обратное

преобразование имен машин необ-ходимо для работы некоторых сер-висов кластера.

n NFS-сервер – экспорт файловых систем сервера вычислительным модулям.

n tftp-сервер – первоначальная за-грузка ВМ по сети.

n NTP-сервер – синхронизация вре-мени на всех ВМ кластера.

n DHCP-сервер – автоматическое установление имени машины, вы-дачи IP-адреса бездисковых ВМ.

Сети для кластеровНесмотря на широкое распространение ethernet-сетей, для связи в кластере дан-ная технология крайне не эффективна. Связано это с тем, что для синхрониза-ции задач на кластере между вычисли-тельными единицами требуется пересы-лать большое количество коротких сооб-щений и время задержки в их пересылке по сети играет огромную роль. Но это ско-рее следствие, дело в том, что Ethernet пос-троен на CSMA/CD – конкурентном досту-пе к среде передачи с возможными кол-лизиями, что при массированном досту-пе создает непредсказуемые задержки, что и является причиной неэффективнос-ти технологии.

Специально для решения этих задач были разработаны различные сетевые тех-нологии, вот наиболее распространенные из них и их характеристики:n Myrinet (www.myri.com) – данный стан-

дарт наиболее широко распростра-нен, так как является «золотой сере-диной» по соотношению цена/качест-во, обеспечивает пропускную способ-ность до 250 Мб/сек, при времени за-держки 10 мс.

n SCI (www.dolphinics.com) – другой рас-пространенный стандарт, используе-

мый для построения кластеров, поз-воляет пересылать данные на уровне MPI 325 Мб/сек и при времени задерж-ки 4 мс.

n QsNet (www.quadrics.com) – самый до-рогой из описываемых стандартов, но и в то же время самый высокопроизво-дительный. Пропускная способность на уровне MPI до 900 Мб/сек, при вре-мени задержки 3 мс.

n InfiniBand – относительно молодой и хорошо развивающийся стандарт, поддерживаемый различными фир-мами (в отличие от первых трех). Про-пускная способность и время задерж-ки на уровне MPI 800 Мб/сек и 7 мс со-ответственно. Вот наиболее распро-страненные производители оборудо-вания, поддерживающего данную тех-нологию: Mellanox (www.mellanox.com), Voltaire (www.voltaire.com) и Topspin (www.topspin.com).

«Ну а как же Gigabit Ethernet?» – воз-можно, спросит кто-то. К сожалению, кро-ме дешевизны, сильных сторон у этой технологии для организации кластеров – нет. Пропускная способность на уровне MPI у данных сетей максимум 120 Мб/сек при времени задержки 10 мс.

Рисунок 1. Схема кластера

cat /etc/sysconfig/ ↵ networking-scripts/ifcfg-eth0DEVICE=eth0 BOOTPROTO=none BROADCAST=192.168.31.255 IPADDR=192.168.31.1 NETMASK=255.255.255.0 NETWORK=192.168.31.0 ONBOOT=yes TYPE=Ethernet

Page 37: 059 Системный Администратор 10 2007

35№10, октябрь 2007

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

Файл с описанием прямой зоны cluster находится в ка-талоге /var/named/chroot/var/. Содержимое файла cluster вы-глядит следующим образом:

Файл с описанием обратных преобразований для зо-ны cluster находится в том же каталоге (/var/named/chroot/var/named), на него также существует мягкая ссылка, кото-рая находится в каталоге /var/named. Имя файла с данны-ми обратной зоны – 192.168.31. Содержимое выглядит сле-дующим образом:

tftp‑серверTrivial File Trasfer Protocol – простой протокол передачи фай-лов. Используется главным образом для первоначальной загрузки бездисковых рабочих станций. Не содержит воз-можностей аутентификации и использует в качестве транс-порта протокол UDP. Пакет, в котором содержится данный сервер, называется: tftp-server. Если он отсутствует в сис-теме, необходимо его установить. tftp-служба работает че-рез суперсервер xinetd; чтобы запустить её, выполните сле-дующие команды:

Эти команды настраивают запуск служб tftp и xinetd на уров-нях выполнения 3, 4 и 5. Запуск выполняется командой:

DHCP‑серверПротокол динамической конфигурации узлов (Dynamic Host Configuration Protocol, DHCP) – сетевой протокол для авто-матической выдачи IP-адресов и других сетевых парамет-ров клиентским компьютерам. Каждый клиент DHCP соеди-няется с выделенным DHCP-сервером, который возвраща-ет ему параметры сети, включая IP-адрес, адреса шлюза и DNS-серверов. Конфигурационный файл для кластера /etc/dhcpd.conf содержит следующие данные:

options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; // query-source address * port 53; };

controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; };

zone "." IN { type hint; file "named.ca"; };

zone "localdomain" IN { type master; file "localdomain.zone"; allow-update { none; }; };

zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; };

zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; // Указание, в каком файле находится описание прямой зоны // cluster и то, что сервер является главным для этой зоныzone "cluster" IN { type master; file "cluster"; allow-update { none; }; };

// Указание, где находится описание обратного преобразования// для зоны clusterzone "31.168.192.in-addr.arpa" { notify no; type master; file "192.168.31"; allow-update { none; }; };

include "/etc/rndc.key";

$TTL 86400 @ IN SOA cluster. root.parallel.cluster ( 2007042700 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS parallel.cluster. parallel IN A 192.168.31.1 master IN A 192.168.31.1 m01 IN A 192.168.31.11 m02 IN A 192.168.31.12 m03 IN A 192.168.31.13 ...m11 IN A 192.168.31.21

/sbin/chkconfig --level 345 xinetd on/sbin/chkconfig --level 345 tftp on

/sbin/service tftp start/sbin/service xinetd start

default-lease-time 600; max-lease-time 7200; authoritative; ddns-update-style none;

option domain-name "cluster"; option routers 192.168.31.1; option domain-name-servers 192.168.31.1; option swap-path code 128 = string; option swap-size code 129 = integer 32;

subnet 192.168.31.0 netmask 255.255.255.0 { range 192.168.31.11 192.168.31.21

option subnet-mask 255.255.255.0; option broadcast-address 192.168.31.255; group { filename "linux-install/pxelinux.0"; option root-path "/diskless/root"; next-server 192.168.31.1;

host m01 { option host-name "m01.cluster"; hardware ethernet 00:0E:0C:4D:16:95; fixed-address 192.168.31.11; }

# Полный конфигурационный файл не приводится # ввиду неактуальности и однотипности настройки … … … … … host m12 {

$TTL 86400 @ IN SOA cluster. root.parallel.cluster. ( 2007042600 ; Serial 28800 ; Refresh 14400 ; Retry

3600000 ; Expire 86400 ) ; Minimum IN NS parallel.cluster.

1 IN PTR parallel.cluster.

11 IN PTR m01.cluster. 12 IN PTR m02.cluster. 13 IN PTR m03.cluster. ...21 IN PTR m11.cluster.

Page 38: 059 Системный Администратор 10 2007

36

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

Дополнительно в файл /etc/sysconfig/dhcpd добавле-на строчка:

указывающая на то, что сервер должен будет «слушать» только интерфейс eth0 (интерфейс внутренней сети – 192.168.31.0/24).

NFS‑серверНеобходим для экспорта файловых систем или отдельных каталогов для бездисковых клиентов. Файл настроек /etc/exports выглядит следующим образом:

NTP‑серверИспользуется для синхронизации машинного времени на всех вычислительных модулях кластера. Конфигураци-онный файл сервера выглядит следующим образом:

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

Библиотеки MPI. LAM MPIНа управляющей машине и ВМ установлен пакет lam-7.0.6-5, который входит в дистрибутив Scientific Linux. В данном слу-чае использовался именно он. Более новую версию (ис-ходные коды, а также rpm-пакеты для RedHat) можно най-ти по адресу [2]. Его конфигурационный файл: /etc/lam/lam-bhost.def. Содержимое конфигурационного файла:

MPICHMPICH версии 1.2.7p1 [3] cобирался из исходных кодов со следующими опциями:

В каталоге /usr/local создана мягкая ссылка mpich на ката-лог gmpich-1.2.7p1. Конфигурационный файл machines.LINUX находится в каталоге /usr/local/mpich-1.2.7p1/share. Содержи-мое файла настроек:

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

«Заводим» клиентовИтак, наша управляющая машина почти настроена, оста-лось только «завести» бездисковых клиентов. Полную инс-трукцию на русском языке, как это делается, можно найти здесь [4], поэтому коротко пройдемся по пунктам и рассмот-рим некоторые изменения. Мы уже создали на сервере ка-талог, который будет корнем файловых систем бездисковых станций /diskless/root, и каталог /diskless/snapshot, где будут находиться все изменяемые файлы бездисковых станций. Скопируем корневую файловую систему командой:

Далее, следуя указаниям по ссылке выше, добавьте но-вые узлы. После чего в каталоге /diskless/snapshot появят-ся следующие файлы:

где m01, ..., m11 – каталоги вычислительных станций, они содержат сгенерированные скриптами при добавлении

option host-name "m12.cluster"; hardware ethernet 01:0E:0C:4D:19:95; fixed-address 192.168.31.21; } } } allow booting; allow bootp;

DHCPDARGS=eth0

# export filesystems for dumb nodes # Экспорт корневой файловой системы доступной только # для чтения/diskless/root 192.168.31.0/24(ro,sync,no_root_squash) # Экспорт файловой системы с программами для всех модулей/usr/local 192.168.31.0/24(ro,sync,no_root_squash) # Файловая система с файлами бездисковых клиентов,# к которым необходим доступ на запись/diskless/snapshot 192.168.31.0/24(rw,sync,no_root_squash) # Файловая система для хранения swap-файлов # бездисковых машин/diskless/swap 192.168.31.0/24(rw,sync,no_root_squash) # Домашний каталог пользователей с доступом на запись/home 192.168.31.0/24(rw,sync,no_root_squash)

restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap restrict 127.0.0.1 restrict 127.127.1.0 restrict 127.127.27.0 nomodify

server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift broadcastdelay 0.008

keys /etc/ntp/keys

m11 cpu=4 m10 cpu=4 m09 cpu=4 m08 cpu=4 m07 cpu=4 m06 cpu=4 m05 cpu=4 m04 cpu=2 m03 cpu=2 m02 cpu=2 m01 cpu=2 master cpu=2

-rsh=ssh -with-device=ch_p4 --with-comm=shared ↵ --prefix=/usr/local/gmpich-1.2.7p1 -f90=gfortran

m11:4 m10:4 m09:4 m08:4 m07:4 m06:4 m05:4 m04:2 m03:2 m02:2 m01:2 parallel:2

rsync -a -e / /diskless/root/

ls -l /diskless/snapshot

-rw-r--r-- 1 root root 944 Май 30 2006 files-rw------- 1 root root 54 Авг 19 15:22 files.customdrwx------ 2 root root 16384 Янв 16 2007 lost+founddrwxr-xr-x 8 root root 4096 Янв 18 2007 m01...drwxr-xr-x 8 root root 4096 Янв 18 2007 m11

Page 39: 059 Системный Администратор 10 2007

37№10, октябрь 2007

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

новых узлов стандартные каталоги (boot, dev, etc, lib, root и var). Файл «files» мы изменять не будем, в нем содержит-ся список файлов, которые копирует каждый клиент, а вот в файл «files.custom» при желании можно изменять, так как он создан специально для добавления необходимых файлов (см. дополнительную информацию). В директориях /diskless/snapshot/MХX/etc/ (где ХХ – номера ВМ) наших вычисли-тельных станций внесем некоторые изменения.

Файл fstab:

Файл hosts (пример на ВМ m01):

И файл ntp.conf:

Также необходимо скопировать файлы passwd, group, shadow и gshadow из директории /etc/ в папки на вычислитель-ные станции. Далее выполним chroot в /diskless/root и с помо-щью утилиты chkconfig выключим необязательные на ВМ сер-висы. Наверное, более «красивым» решением было бы ис-пользовать NIS и LDAP в данном случае, эта задача, возмож-но, будет реализована в будущем на кластере. Еще одним, ка-залось бы, явным решением было использовать символичес-кие ссылки, но в данном случае, если сделать ссылки на не эк-спортируемой файловой системе – «не заработает».

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

Тестирование кластераПлан: тестирование «новых» модулей на параллельной вер-сии linpack (HPLinpack [5] и библиотека ATLAS [6]), отдельное тестирование модулей с предыдущим поколением процес-соров, далее этап измерения производительности системы из «новых» и «старых» модулей. Изменение в производи-тельности будут отражать графики.

Тестирование модулей с процессорами Xeon 5130. Раз-мерность матрицы для тестовых запусков варьируется от 1000 до 15000 и верхняя грани-ца определяется объёмом доступ-ной оперативной памяти. Несмотря на то что на 28 процессорах есть воз-можность использовать тестовый на-бор с квадратной матрицей размер-ностью 20000, на одном процессоре запуск задачи с матрицей 16000 был невозможен – недостаточно памяти на вычислительном модуле. График тестов выглядит следующим образом (см. рис. 2), где слева показана произ-

водительность в Gflop/s, снизу количество задействован-ных ядер, справа – размерность матрицы.

В следующем тесте (см. рис. 3) количество ядер увели-чивалось за счёт машин с процессорами Xeon 5130. Пос-ледние восемь ядер – более ранние модели (P4 Xeon c 3,0 и 2,8 Ггц соответственно). На графике хорошо видно, как падает производительность системы на матрицах больших

none /dev/pts devpts gid=5,mode=620 0 0none /dev/shm tmpfs defaults 0 0none /tmp tmpfs defaults 0 0parallel:/usr/local /usr/local nfs defaults,ro 0 0parallel:/home /home nfs defaults,rw 0 0

127.0.0.1 m01.cluster m01 localhost.localdomain localhost

restrict 127.0.0.1server parallel.clusterserver 127.127.1.0 # local clockdriftfile /var/lib/ntp/driftkeys /etc/ntp/keys

Что за чудо‑юдо зверь – HPLinpack?HPLinpack представляет собой пакет для тестирования вычислительных клас-теров с распределенной памятью. В осно-ву тестов пакета заложено: решение сис-тем линейных алгебраических уравнений (СЛАУ) методом LU-факторизации (разло-жения) c выбором ведущего элемента стол-бца матрицы, при этом матрица системы заполняется случайными вещественными числами с двойной точностью. Говоря же

проще, HPLinpack – это набор тестов (про-грамм), которые решают задачи линейной алгебры (если еще проще – решают зада-чи с большими матрицами). Алгоритм ра-боты пакета (математику) и другие инте-ресные темы, связанные с тестированием кластерных систем, можно почитать либо на сайте программы, либо в статье Андрея Сапронова «Обзор некоторых пакетов из-мерения производительности кластерных систем» [7].

Рисунок 2. Производительность Xeon 5130

Рисунок 3. Производительность Xeon 5130 плюс P4 (без Hyper Threading)

Page 40: 059 Системный Администратор 10 2007

38

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

размерностей, на матрицах малого размера, изменение производительности незначительно на 24 ядрах, по срав-нению с запуском теста на 8, 16 и 20 ядрах.

Следующий тест (см. рис. 4) проводился на 20 ядрах Xeon 5130 и 4 процессорах Xeon 3.0 Ггц с использованием технологии Hyper Threading (HT). По графику видно, как силь-но падает суммарная производительность системы. То есть несмотря на то, что в некоторых задачах технология Hyper Threading может дать существенный прирост производитель-ности, на данном тесте ситуация только ухудшилась.

Следующий график (см. рис. 5) – результаты отдельно-го тестирования производительности модулей на базе Intel Xeon P4. Очень хорошо видно, что модули на базе Intel Xeon P4 почти доходят всего лишь до отметки в 11 GFlop/s, в этом, вероятно, играет некоторую роль разброс в такто-вых частотах процессоров вычислительных модулей и раз-ная скорость памяти.

Последний график (см. рис. 6) представит измене-ние производительности при добавлении в вычислитель-ном процесе к 28 новым ядрам Xeon 5130 четырех ядер Xeon 3.0 Ггц.

ВыводыИтак, тестирование завершено, теперь можно делать вы-воды. Различные группы (см. таблицу) кластера не имеет смысла объединять для решения одной задачи, так как сум-марная производительность системы существенно снизит-ся. Лучшим вариантом будет распределение задач по мо-дулям в зависимости от приоритетов: низкоприоритетные задачи запускать на модулях с процессорами предыдуще-го поколения, а задачи с высоким приоритетом запускать на модулях, оснащённых процессорами Xeon 5130 с высо-коскоростной памятью DDR2. Сделать это можно редакти-рованием на ВМ конфигурационных файлов mpich, что и де-лалось на первых этапах. Но более верным решением будет использование систем управления заданиями: OpenPBS [8] либо TorquePBS [9]. Для повышения производительнос-ти кластера следует как минимум использовать иную сете-вую технологию, а как максимум заменить старые вычисли-тельные модули на аналогичные новым Xeon 5130.

P.S. Хочу выразить благодарность за помощь в составле-нии материала моему доброму другу Селянину Олегу.

1. Официальный сайт MPI-форума – http://www.mpi-forum.org.2. Официальная страница пакета lam-mpi – http://www.lam-mpi.org.3. Официальная страница пакета mpich1 – http://www-unix.mcs.

anl.gov/mpi/mpich1.4. Руководство по системному администрированию Red Hat

Enterprise Linux 4 – http://www.rhd.ru/docs/manuals/enterprise/RHEL-4-Manual/sysadmin-guide/ch-diskless.html.

5. Пакет тестирования производительности кластеров – http://www.netlib.org/benchmark/hpl.

6. Automatically Tuned Linear Algebra Software (ATLAS) – http://math-atlas.sourceforge.net.

7. Андрей Сапронов. «Обзор некоторых пакетов измерения про-изводительности кластерных систем» – http://www.ixbt.com/cpu/cluster-benchtheory.shtml.

8. Open Portable Batch System – http://www.openpbs.org.9. TORQUE Resource Manager – http://www.clusterresources.com.

Рисунок 4. Производительность Xeon 5130 плюс P4 (с Hyper Threading)

Рисунок 5. Производительность Xeon P4

Рисунок 6. Производительность Xeon 5130 и Xeon 3.0 Ггц

Page 41: 059 Системный Администратор 10 2007

39№10, октябрь 2007

bugtraq

Множественные уязвимости в Sun Java JREПрограмма: JDK and JRE 6 Update 2 и более ранние версии, JDK and JRE 5.0 Update 12 и более ранние версии, SDK and JRE 1.4.2_15 и более ранние версии, SDK and JRE 1.3.1_20 и более ранние версии.Опасность: Высокая.Описание: 1. Уязвимости существуют из-за ошибок в Java Runtime Environment. Удаленный пользователь может с по-мощью специально сформированного апплета или Java API успешно создать сетевое соединение к определенным службам удаленных хостов.

2. Уязвимость существует из-за ошибок в Java Web Start, которые позволяют специально сформированному апплету просмотреть и записать данные в локальные файлы и оп-ределить месторасположение кеша Java Web Start.

3. Уязвимость существует из-за ошибки в Java Runtime Environment, которая позволяет злоумышленнику скопиро-вать или переместить файлы на локальной системе. Для ус-пешной эксплуатации уязвимости злоумышленник должен обманом заставить пользователя перетащить файл из ап-плета на приложение, которое имеет необходимые приви-легии.URL производителя: www.sun.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в EDraw Office Viewer Component ActiveX-компонентеПрограмма: EDraw Office Viewer Component 5.3.220.1, воз-можно более ранние версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки проверки границ данных в EDraw.OfficeViewer (officeviewer.ocx) ActiveX-компоненте при обработке аргументов, передаваемых мето-ду FtpDownloadFile(). Удаленный пользователь может с по-мощью специально сформированного веб-сайта передать уязвимому методу слишком длинный аргумент (более 1024 символов), вызвать переполнение стека и выполнить про-извольный код на целевой системе.URL производителя: www.ocxt.com/officeviewer.php.Решение: В настоящее время способов устранения уязви-мости не существует.

Несколько уязвимостей в Cisco CallManagerПрограмма: Cisco Unified CallManager 3.x, Cisco Unified CallManager 4.x, Cisco Unified Communications Manager 4.x.Опасность: Средняя.Описание: 1. Уязвимость межсайтового скриптинга обна-ружена в поле ввода имени пользователя в странице вхо-да в систему.

2. SQL-инъекция обнаружена в параметре «lang» в CCMUser/logon.asp.URL производителя: www.cisco.com.Решение: Обновите до версий 3.3(5)sr2b, 4.1(3)sr5, 4.2(3)sr2, or 4.3(1)sr1.

Уязвимость в IBM WebSphere Application ServerПрограмма: IBM WebSphere Application Server 6.1.xОпасность: Средняя.Описание: Уязвимость позволяет удаленному пользова-телю обойти некоторые ограничения безопасности. Уяз-вимость существует из-за ошибки в Edge Component. Под-робности уязвимости не сообщаются.URL производителя: www.ibm.com.Решение: Установите исправление Fix Pack 11 (6.1.0.11) с сайта производителя.

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

Переполнение буфера в Mercury Mail Transport SystemПрограмма: Mercury Mail Transport System 4.52, возможно более ранние версии.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки провер-ки границ данных в IMAPD-модуле при обработке команды IMAP SEARCH. Удаленный пользователь может с помощью слишком длинного аргумента (более 60 байт), переданного уязвимой команде, вызвать переполнение стека и выпол-нить произвольный код на целевой системе.URL производителя: w w w.pmai l .com/over v iews /ovw_mercury.htm.Решение: В настоящее время способов устранения уязви-мости не существует.

Переполнение буфера в Nagios PluginsПрограмма: Nagios Plugins версии до 1.4.10.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки провер-ки границ данных при обработке данных в HTTP-заголов-ке «Location:» в функции redir() в файле check_http.c. Уда-ленный пользователь может с помощью слишком длинной строки в заголовке «Location:» вызвать переполнение буфе-ра и выполнить произвольный код на целевой системе.URL производителя: sourceforge.net/projects/nagiosplug.Решение: Установите последнюю версию 1.4.10 с сайта производителя.

Раскрытие данных в Cisco Adaptive Security ApplianceПрограмма: Cisco Adaptive Security Appliance (ASA) 7.x.Опасность: Низкая.Описание: Уязвимость существует из-за того, что Cisco ASA некорректно фильтрует сообщения команды «test aaa-server» перед отправкой их в syslog. Злоумышленник может получить доступ к потенциально важным данным, таким как имена пользователей и пароли. Ошибка проис-ходит, когда пользователь с уровнем доступа 15 или выше запускает команду «test aaa-server» и уровень журналиро-вания установлен в значение «6» (notification).URL производителя: www.cisco.com.Решение: Установите последнюю версию с сайта произ-водителя.

Page 42: 059 Системный Администратор 10 2007

40

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

Пакетный режим запуска 1С – это режим выполнения про-граммой заданной последова-

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

зировать процесс обслуживания ин-формационных баз. Оформление за-пуска конфигуратора в пакетном ре-жиме в виде файла *.bat или *.cmd с помощью любого планировщика позволяет организовать полностью

автоматическое выполнение некото-рых рутинных операций в заданное время, таких как:n создание архивных копий;n тестирование и исправление ин-

формационной базы;

Пакетный режим запуска «1С:Предприятие 7.7»

Андрей Луконькин

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

Page 43: 059 Системный Администратор 10 2007

41№10, октябрь 2007

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

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

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

ется только при запуске в режиме «1С:Предприятие» и только для се-тевой версии системы.

n /@<ИмяФайла> – запуск системы «1С:Предприятие» в режиме «Кон-фигуратор» в пакетном режиме, где <ИмяФайла> – имя файла, со-держащего параметры пакетного запуска.

n /T<Путь> – каталог для размеще-ния временных файлов.

n /L<Параметр> – язык интерфейса. ENG – английский, UKR – украинс-кий, RUS – русский

Файл параметров пакетного запускаФайл пакетного режима имеет по умол-чанию расширение .prm, если исполь-

n автоматический обмен (в слу-чае использования компоненты УРИБ);

n переиндексация таблиц баз дан-ных.

Параметры запуска «1С:Предприятие 7.7» в пакетном режимеФормат командной строки:

где MODE – режим запуска 1С.При запуске файла 1cv7.exe

(1cv7L.exe, 1cv7S.exe) в командной строке могут быть указаны следую-щие значения режима:n C O N F I G – з а п ус к с и с т е м ы

«1С:Предприятие» в режиме «Кон-фигуратор».

n ENTERPRISE – запуск системы «1С:Предприятие».

n DEBUG – запуск системы «1С:Пред-приятие» в режиме «Отладчик».

n MONITOR – запуск системы «1С:Предприятие» в режиме «Мо-нитор».

Параметры CONFIG, ENTERPRISE, DEBUG, MONITOR нельзя смешивать между собой – в командной строке дол-жен быть указан только один из этих параметров.

Идем дальше:n/D<Путь> – каталог информацион-

ной базы.n/U<Путь> – рабочий каталог поль-

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

n/N<Имя> – имя пользователя. Долж-но быть указано так же, как в спис-ке пользователей, создаваемом в конфигураторе.

n/P<Пароль> – пароль пользователя, имя которого указано в параметре /N. Если у пользователя нет пароля, этот параметр можно опустить. На-личие в командной строке парамет-ров /N и /P (если пароль у пользова-теля существует) подавляет выдачу диалога «Авторизация доступа».

n /M – запуск системы в монополь-ном режиме. Параметр использу-

1cv7.exe MODE [ /M | /D<Путь> | ↵ /U<Путь> | /N<Имя> | ↵ /P<Пароль> | /@<ИмяФайла> | ↵ /T<Путь> | /L<Параметр>]

c:\1cv7\bin\1cv7.exe CONFIG ↵ /Dc:\1cv7\db /NAdmin /P111 ↵ /@C:\lCV7\Backup

Серия «вопросы-ответы»Какие порты используются в работе сер-вера «1С:Предприятие» 8.0 и 8.1?Для обращения клиентов к серверу «1С:Предприятие» используются порты 135 и те, которые заданы в диапазонах исполь-зуемых портов: «Start → Settings → Control panel → Administrative tools → Component services → Console Root → Component Services → Computers → My Computer → Properties → Default Protocols → Connection-or iented TCP/ IP → Proper t ies → Por t Ranges».

Альтернативным вариантом являет-ся использование протокола Tunneling TCP Protocol. В этом случае доступ к сер-веру «1С:Предприятие» может выпол-няться по HTTP через веб-сервер. Под-робнее об этом смотрите: http://msdn2.microsoft.com/en-us/library/ms809327.aspx и http://msdn2.microsoft.com/en-us/library/ms809302.aspx.

Обращение к менеджеру лицензий по TCP по умолчанию происходит через порт 475, если в файле nethasp.ini не уста-новлено другого. Рекомендуется для уда-ленных рабочих мест использовать или ло-кальные ключи, или сетевой ключ, распо-ложенный в той же локальной сети, которой принадлежат уда-ленные рабочие места.

Где физически на ходит-с я ж у р н а л р е г и с т р а ц и и «1С:Предприятие 8»?В файловом варианте инфор-мационной базы «1С:Предпри-ятие 8.0» журнал регистрации

располагается в каталоге информацион-ной базы, там же, где и файл самой инфор-мационной базы. Например, если информа-ционная база хранится в файле C:/1C_base/1Cv8.1CD, то журнал регистрации будет на-ходиться в файле C:/1C_base/1Cv8.log.

В версии «1С:Предприятие 8.1» сущес-твенно переработан журнал регистрации, изменена структура хранения. Журнал хра-нится в нескольких файлах, а не в одном, как это было ранее. При настройке жур-нала регистрации существует возмож-ность задать периодичность разделения его на отдельные файлы: это называет-ся ротацией. Файлы *.log хранятся в ката-логе информационной базы в подкатало-ге 1Cv8Log. Например C:\1c_base\1Cv8Log\ 20070927070000.log.

В клиент-серверном варианте инфор-мационной базы журнал регистрации рас-полагается в каталоге данных приложения, не зависящем от пользователя, а именно: <Общие данные приложений>/1C/1Cv8/<Идентификатор информационной базы>/1Cv8.log, например, C:/Documents and Settings/All Users/Application Data/1C/1Cv8/4129dbdb-b495-41cb-99ea-ef315060a03e/1Cv8.log.

Журнал регистрации

Page 44: 059 Системный Администратор 10 2007

42

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

имени параметра и значением, отде-ленным знаком «=».

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

выполнения конкретных функций. Таб-лица взята из книги «Конфигурирова-ние и администрирование». Часть 2, глава 27.

ЗаключениеТаким образом, используя этот не-хитрый механизм, программист или

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

Параметр Пояснение

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

Output=Имя_файла Файл, в который будет дополнительно направляться вывод записей о выполняемых действиях в пакетном режиме. Может указываться как полный путь к файлу, так и относительный. Формат файла дополнительного вывода совпадает с форматом вывода в журнал регистрации. Если параметр не указан, то дополнительный вывод производиться не будет. В любом случае вывод производится в журнал регистрации

Quit=Значение Указывает, нужно ли завершать выполнение Конфигуратора после выполнения действий, указанных параметрами пакетного режима. Если задано Y или 1, после выполнения этих действий, программа будет завершена, а если 0 или N, то нет. Параметр по умолчанию Y

CheckAndRepair=Значение Определяет, нужно ли выполнять тестирование и исправление информационной базы. Если задано Y или 1, тестирование и исправление будет выполняться, а если 0 или N, то нет. Если параметр не задан, то тестирование и исправление выполняться не будут

UnloadData=3начение Указывает, выполнять ли выгрузку информационной базы. Если задано Y или 1, выгрузка будет выполняться, а если 0 или N, то нет. Если параметр не задан, то выгрузка выполняться не будет

SaveData=Значение Признак, нужно ли выполнять сохранение информационной базы. Если задано Y или 1, сохранение будет выполняться, а если 0 или N, то нет. Если параметр не задан, то сохранение выполняться не будет

AutoExchange=Значение Параметр, определяющий выполнение автообмена в распределенной информационной базе. Если задано Y или 1, автообмен будет выполняться, а если 0 или N, то нет. Если параметр не задан, то автообмен выполняться не будет. Подробное описание работы с распределенными информационными базами приведено в книге «Управление распределенными информационными базами»

Секция CheckAndRepair. Предназначена для описания выполнения тестирования и исправления информационной базы

Repair=Значение Выполнение исправления информационной базы. Если задано значение Y или 1, то будет выполняться тестирование и исправление обнаруженных ошибок в информационной базе. Если задано значение N или 0, то будет производиться только тестирование. Если параметр не задан, то будет производиться тестирование и исправление

PhysicalIntegrity=Значение Проверка физической целостности таблиц информационной базы. Если задано Y или 1, проверка будет производиться, если N или 0, то нет. Если параметр не задан, проверка будет производиться

Reindex=Значение Реиндексация таблиц информационной базы. Если задано Y или 1, реиндексация будет производиться, если N или 0, то нет. Если параметр не задан, реиндексация будет производиться. Если установлен режим исправления, то рекомендуется установить и режим реиндексации

LogicalIntegrity=Значение Проверка логической целостности таблиц информационной базы. Если задано Y или 1, проверка будет производиться, если N или 0, то нет. Если параметр не задан, проверка будет производиться

RecalcSecondaries=Значение Обновление (пересчет) вторичных данных информационной базы, то есть служебных данных, которые могут быть рассчитаны на основании другой информации, хранящейся в информационной базе. Если задано Y или 1, обновление будет производиться, если N или 0 – то нет. Если параметр не задан, обновление будет производиться

RecalcTotals=Значение Пересчет итогов бухгалтерского и оперативного учета. Если задано Y или 1, пересчет будет производиться, если N или 0 – то нет. Если параметр не задан, пересчет будет производиться

Pack=3начение Упаковка таблиц информационной базы, то есть освобождать место занятое удаленными записями. Если задано Y или 1, упаковка будет производиться, если N или 0, то нет. Если параметр не задан, упаковка не будет производиться. Данный параметр имеет смысл, только если данные хранятся в формате DBF/CDX

SkipUnresolved=Значение Указывает, следует ли пропускать неразрешенные ссылки, или их следует исправлять. Если задано Y или 1, неразрешенные ссылки будут только диагностироваться, если N или 0, то ссылки будут разрешаться способом, задаваемым параметром CreateForUnresolved (см. ниже). Если параметр не задан, ссылки будут исправляться. Параметр имеет смысл только, если проводится тестирование и исправление информационной базы

CreateForUnresolved=Значение Способ разрешения неразрешенных ссылок. Если задано Y или 1, для неразрешенной ссылки будет создан объект соответствующего типа, если N или 0, то ссылка будет очищена. Если параметр не задан, будет создан объект. Параметр имеет смысл, только если проводится тестирование и исправление информационной базы

Reconstruct=Значение Способ исправления информационной базы в случае, когда данные объекта частично потеряны. Если задано Y или 1, будет создан объект, заполненный имеющимися данными, если N или 0, то данные объекта будут удалены. Если параметр не задан, будет создан объект. Параметр имеет смысл, только если проводится тестирование и исправление информационной базы

Секция CheckAndRepair. Предназначена для описания выполнения тестирования и исправления информационной базы

UnloadToFile=Имя_Файла Параметр указывает путь и имя файла переноса данных, в который будет производиться выгрузка. Параметр должен быть задан обязательно

IncludeUserDef=Значение Параметр определяет, должен ли в файл переноса данных включаться список пользователей. Если задано Y или 1, то список пользователей будет включен в файл переноса, если 0 или N, то нет. Если параметр не задан, то список будет включен в файл переноса

Password=Пароль Пароль, которым будет закрыт файл переноса данных. Если параметр не задан, то файл переноса не будет закрыт паролем

Секция SaveData. Предназначена для описания выполнения сохранения данных информационной базы

SaveToFile=Имя_Файла Путь и имя файла, в который будет производиться сохранение данных. Может задаваться как абсолютно, так и относительно того каталога, в котором размещается файл параметров. Параметр должен быть задан обязательно

FileList=Список сохраняемых файлов

Задается как перечисление имен файлов, разделенных пробелами или запятыми. Длинные имена файлов, содержащие пробелы, должны заключаться в кавычки «». В именах файлов могут использоваться символы «*» для обозначения групп файлов. Если параметр не задан, то список сохраняемых файлов будет взят из файла 1cv7file.lst, так же как и в случае выполнения сохранения из пункта меню «Администрирование»

Таблица параметров файла пакетного режима

Page 45: 059 Системный Администратор 10 2007
Page 46: 059 Системный Администратор 10 2007

44

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

Как я уже сказала, я у исто-ков журнала не стояла, исто-рии не знаю. А тут такой слу-

чай. Но Владимир Петрович улыбнул-ся и сказал, что он человек скромный, а не «Человек номера». Я огорчилась.

А потом узнала, что у директора от-пуск, первый за пять лет намечает-ся. Номер этот доделывают без зор-кого ока начальства. Решила я пойти ва-банк. Диктофон в карман – и в ре-дакцию. Чаю, мол, для автора не най-

дется? Кое-что за чайными беседами удалось выяснить…

Журналист-системотехникСтихийное, доложу я вам, начало бы-ло у журнала. Владимир Положевец,

Вся правда о «Сисадмине», или Диктофон в кармане

Я далеко не самый давний автор журнала «Системный администратор», сотрудничаю год‑полтора… Стоп‑стоп, я не с этого хотела начать. Я собиралась в этот номер сделать интервью с Биллом Гейтсом. Все‑таки пять лет журналу, и такой эксклюзив. А потом подумала – а почему бы с Владимиром Положевцом не поговорить, исполнительным директором этого издания?

Page 47: 059 Системный Администратор 10 2007

45№10, октябрь 2007

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

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

Это у меня дословно записано, на аудиокассете. А еще Владимир вспо-минал, как восприняли эту идею в его техническом отделе. Коллектив был дружный, сплоченный. Ясное де-ло, испугались за своего начальни-ка. Без журналистского образования издательский проект затеять… Поло-жевца долго убеждали: «Журнал – аб-солютно убыточное дело. У тебя семья намечается, дети, ты не сможешь про-жить на те деньги, которые получишь от журнала». «Перебежчику» предла-гали увеличить зарплату. Сулили сини-цу в руках, отговаривали от призрач-ного журавля. Но Володе хотелось на-чать собственное дело.

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

Не верите в мистику – и не на-до. А по-моему, без высших сил тут не обошлось. Журнал вышел 5 ок-тября. Свадьба Владимира и его суп-руги Валентины состоялась 3 октяб-ря. В том же знаковом 2002 году ро-дился старший сын исполнительно-го директора «Системного админист-ратора». А еще 5 октября – День учи-теля. Не догадываетесь, к чему это я? Да ведь журнал входит в издательский дом «Учительская газета»!

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

Наталья Хвостова, ответственный секретарь:

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

С Володей Лукиным мы учились в одной группе. А еще у нас в группе училась Валя, будущая жена Володи Положевца...

Владимир Лукин, технический ре-дактор:

– Когда мы были на 6-м курсе, Во-лодя Положевец спросил, чем я соби-раюсь дальше заниматься. Я сказал, что не знаю. Он предложил начать свое дело. Мы втроем с Александром Миха-левым сидели, обсуждали. Сошлись на том, что надо заняться печатным из-данием. Я никогда не думал, что буду заниматься издательским делом.

– Как сейчас себя чувствуете в жур-нале?

– Нормально. Надо только рабо-тать, работать и работать. Мы свой путь ищем.

– Альтернативные предложения у вас были?

– Да. Интернет-магазин пуговиц.

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

– В самом начале ты представ-лял, что это будет за журнал, кому бу-дет нужен?

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

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

Диктофон выключила – еще за-метит! Кажется, вовремя, потому что дальше пошла грустная история. Пи-лотный номер «Системного админис-тратора» не поспел к выставке Softool 2002 года – уж очень много проблем возникло с типографией, пленками. Пять тысяч экземпляров рассылали по фирмам, раздавали на меропри-ятиях и конференциях для IT-специ-алистов.

Начинающие издатели с боль-шими надеждами открыли подпис-ку на 2003 год. В январе 2003 года «Системный администратор» начал выходить ежемесячно. Это радова-ло и окрыляло. А вот данные о под-списке на январь 2003 года вызвали шок. 324 человека. Это сегодня, ког-да тираж 15 тысяч и весь он уходит подписавшимся читателям, Влади-мир Положевец шутит: в 2003 знали всех подписчиков в лицо, поименно… Но тогда было не до смеха. Редакция находилась в истерике, кто в тихой, кто в громкой…

Вот уважаю я таких людей! Никто не сбежал, не бросил дело. Стиснули зубы и продолжили активнее себя «пи-арить» – раздавать журнал на выстав-ках, рассылать по фирмам. Уже к ле-ту количество подписчиков достигло двух – двух с половиной тысяч и даль-ше только росло. А может быть, на-до было испытать это потрясение, это ощущение падения в бездну, чтобы оценить радость победы? В конце кон-цов все истории про «бизнес-Золушек» именно так и выглядят: неудачи следо-вали одна за другой, но трудолюбивый клерк стал магнатом, потому что тер-пел и работал 25 часов в сутки.

Что к этому добавить? Самоокупае-мость наступила через три года после старта. В прошлом году команда воз-вращала долги. А с 2007 начала рабо-тать на себя.

Кстати, Светлана Зобова, ведаю-щая в «Системном администраторе» бухгалтерией и подпиской, призна-лась, что давно узнала о существова-нии журнала: «Я с Владимиром Поло-жевцем познакомилась, когда проек-

Page 48: 059 Системный Администратор 10 2007

46

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

та еще не было. Однажды он говорит: буду журнал издавать. Подарил пилот-ный номер. Я порадовалась. А спус-тя четыре года мы встречаемся, и он предлагает мне: пошли к нам работать. Я всего два номера видела – первый и 50-й. Согласилась. Мне здесь ком-фортно.

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

– Мужчина лет 30, хорошо образо-ванный, часто с двумя высшими. У не-го неплохая работа. Он все еще, мо-жет быть, системный администратор, но скоро, возможно, станет начальни-ком IT-департамента или старшим сис-темным администратором, или просто начнет собственное дело. У него есть чувство юмора и различные хобби.

А еще я выяснила потрясающую вещь – настоящее количество читате-лей журнала.

Владимир Петрович выдал цифру с улыбкой, но вообще-то я бы на его месте рассердилась…

– Надо отнестись к этому как к дан-ности. У нас есть 15 тысяч человек, которые выписывают журнал, чест-но платя за это деньги, помогая де-лать журнал лучше, толще, красивее. По данным анкетирования, которое мы проводили, журнал читают отделами. Выписывает один человек, но этот эк-земпляр прочитывают от пяти до семи человек. Это нормально – дать другу почитать. Не наказуемо… Получает-ся, что читают материал около 90 ты-сяч системных администраторов. И есть добрые люди, которые сканиру-ют наш журнал и выкладывают в Сеть. Мы с ними пытаемся бороться, но ста-раемся относиться к этому факту как к бесплатной рекламе. Людей, которые читают сканированные версии, по на-шим подсчетам, еще 100-180 тысяч че-ловек. Получается внушительная циф-ра. Если бы из них хотя бы треть подпи-сывалась на журнал, всем бы жилось гораздо легче.

Поставив чашку на стол, Положе-вец уже серьезно добавил:

– Это как?– У нас есть костяк команды – ка-

питан, помощник капитана, боцман, впередсмотрящий, казначей, началь-ники палуб... Авторов можно сравнить с экипажем пиратского корабля. Ко-рабль идет от порта до порта, в про-цессе кто-то потерялся, упал за борт, других зарезали во время абордажа.... Вышел номер, команда сходит в оче-редном порту. Естественно, возвра-щаются не все. У людей меняются ин-тересы, появляются семьи, новая ра-бота, не относящаяся к системному администрированию. Они идут вверх по карьерной лестнице. Это нормаль-ный процесс, но весьма болезненный для редакции. Однако у нас постоян-но появляются и новые люди. Всегда есть человек, который займет мес-то выбывшего. Он пишет совершен-но по-другому, на другие темы. И это хорошо!

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

И партнеры верные у журнала то-же есть! Например, «Линукс-центр», лучший друг. На своем семилетии со-трудники и начальники «Линукс-цен-тра» сказали, что без поддержки ко-манды «Системного администрато-ра», без их опыта, советов они не смог-ли бы сделать хороший журнал «Linux Format», который выходит уже два го-да. Между прочим, главный редактор журнала «Linux Format» – технический редактор и автор «Системного адми-нистратора»!

Кстати, на вопрос о том, как он стал сотрудничать с журналом, Дмит-рий Шурупов, главный редактор элек-тронного приложения «Open Source», ответил так: «Когда-то в журнале был такой автор – Всеволод Стахов. А у ме-ня в то время уже был веб-сайт nixp.ru, у которого в сети существовал IRC-ка-нал. На этом канале мы с ним позна-комились. В 2004 году он сказал мне, что журналу нужен новый сайт, ищут человека. Я встретился с Володей По-ложевцом у станции метро Измайловс-кая, мы обсудили сайт, возможные ва-рианты дальнейшего сотрудничества, и началось...

– Почему здесь работаете, не уш-ли никуда?

– И стоил бы журнал гораздо де-шевле.

Да, я совсем забыла рассказать. Вы, может быть, знаете, а вот для ме-ня это было открытие – оказывается у «Системного администратора» есть офис в Америке, который распростра-няет электронную версию журнала по Штатам. Это еще некоторое коли-чество подписчиков в копилку. Причем подписаться можно на полную версию журнала или на выборку статей. Удоб-но! Кто эти зарубежные читатели? Ко-нечно, в первую очередь русские эмиг-ранты. Но не только. Иностранцы тоже читают, чтобы наконец понять эту за-гадочную русскую душу…

Пираты ITСтать автором журнала несложно. Тре-бования минимальные: наличие опыта, а также желание изложить его на бума-ге. Со мной почему сотрудничают, по-нять не могу – журналист, а не сисад-мин, ничего с меня не возьмешь, кро-ме очерков…

Требования к текстам: информация по делу, как можно меньше «воды». За-метили, что новостей в журнале прак-тически нет? Это потому что новости можно в другом месте прочитать. А вот уникальный индивидуальный опыт до-ступен только здесь.

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

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

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

Page 49: 059 Системный Администратор 10 2007

47№10, октябрь 2007

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

– Дружелюбная атмосфера, широ-кие возможности роста и саморазви-тия – это главное.

Старые друзья, новые идеиНачалась выставка Softool. Конечно, я пришла туда, чтобы еще раз погово-рить с Владимиром Положевцом и доб-рать материал. Хитро начала с вопро-са о выставке.

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

Общение вообще штука полезная. Скажу честно: далеко не всегда про-фессиональные журналисты читают друг друга. А в журнале авторы обя-

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

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

– Каким тебе видится будущее?– Новые проекты появляются. У нас

есть электронное приложение «Open Source». Оно бесплатное, выходит раз в три недели уже полтора года. У не-го десять с половиной тысяч подпис-чиков, которые его регулярно получа-ют. А скачивают еще 20-25 тысяч че-ловек. Дальше оно расходится волна-ми. Мы планируем сделать его бумаж-ным. Возможно, что будем вкладывать его в журнал. Есть еще много разных задумок на следующий год любопыт-ных. Но они пока в секрете!

Владимир наконец замечает дик-тофон. Но возмущаться нет сил и вре-мени – надо убегать на самолет, впе-

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

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

Володя помахал рукой и убежал. А я подумала: как здорово работать в журнале с такой внушительной пер-спективой. Знаете, сколько системных администраторов на территории Рос-сии и стран СНГ? Я узнавала – в сред-нем 400 тысяч. Представляете, если все они подпишутся на журнал?

Текст: Оксана Родионова,фото: Владимир Лукин

Page 50: 059 Системный Администратор 10 2007

48

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

Подготовка к созданию надстройкиОперационная система Windows 2003 Server поддерживает широкий набор настроек безопасности, в том числе и на основе информационно-управ-ленческой архитектуры (ИУА) органи-зации. Так, с помощью оснастки «Active Directory Users and Computers» возмож-но создание структурной модели пред-приятия. Далее с помощью групповых политик безопасности настраиваются необходимые параметры защиты, при-вязанные к структурным единицам ор-ганизации.

Данная тема подробно освещена в литературе, посвященной админис-трированию серверных операцион-ных систем Microsof [1-5], в статье же будут рассмотрены возможности рас-ширения средств управления досту-пом к рабочим станциям для реализа-ции особых правил, не предусмотрен-ных в стандартных утилитах.

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

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

на компьютеры. Рассмотрим следую-щий пример (см. рис. 1).

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

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

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

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

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

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

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

Реализуем нестандартные правила управления доступом на основе архитектуры организации в Windows Server 2003

Вадим Андросов

Как создать надстройку для Windows 2003 Server, управляющую допуском на компьютеры на основе модели архитектуры организации.

Page 51: 059 Системный Администратор 10 2007

49№10, октябрь 2007

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

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

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

Конечно, почти все это – вопросы культуры работы со скрываемой информацией. Но если бы эта культура су-ществовала в реальной жизни, то не было бы систем типа Windows 2003 Server.

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

Постановка задачиДля начала реализуем максимально простое правило – на компьютеры отдела должны иметь возможность входа только пользователи того же отдела. Так, для приведен-ной модели пользоваться компьютером CCLI должны иметь возможность только сотрудники организационной едини-цы «Accounting». При этом решение хотелось бы сделать устойчивым к изменениям в архитектуре. То есть при до-бавлении пользователя в этот отдел он автоматически дол-жен допускаться к соответствующим компьютерам. Также удаление пользователя должно влечь за собой потерю им прав использования рабочими станциями отдела. Это мож-но сделать с использованием простого стартового сцена-рия (на языке VBScript).

Сценарий основан на использовании отличительных имен объектов (distinguished name или DN) пользователей и компьютеров. Эти имена содержат не только название объекта, но и его положение в архитектуре организации.

Например, для пользователя «John Zoidberg», работающе-го в отделе «Aid post» предприятия «Planet Express», ком-пьютеры которого объединены в домен «futurama.mult», пол-ное имя будет выглядеть следующим образом:

Здесь CN обозначает «common name» (общее имя), OU – «Organizational unit» (организационная единица, структур-ное подразделение предприятия), DC – «Domain Component» (доменный компонент). Программа определяет контейне-ры, в которых расположены учетные записи пользовате-ля и компьютера, и, если они не совпадают, завершает се-анс пользователя.

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

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

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

Расширим надстройку, приведя ее к более реалистич-ному виду. Для начала сформулируем правила доступа на компьютеры:n Существует ряд отделов, доступ на компьютеры кото-

рых предоставляется только сотрудникам подразделе-ния.

n В некоторых отделах доступ к рабочим станциям име-ют сотрудники самого подразделения и всех дочерних. То есть компьютеры доступны в рамках поддерева.

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

Рисунок 1. Модель архитектуры организации

Set objSysInfo = CreateObject("ADSystemInfo")userOU = getOU(objSysInfo.UserName)compOU = getOU(objSysInfo.ComputerName)if compOU <> userOU then set shellObj = CreateObject("WScript.Shell") shellObj.exec "shutdown /l"end if

function getOU(dn)getOU = right(dn, len(dn) - instr(1, dn, ",", ↵ vbTextCompare))end function

CN=John Zoidberg,OU=Aid post,OU= Planet Express, ↵ DC=futurama,DC=mult

Page 52: 059 Системный Администратор 10 2007

50

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

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

Расширение схемы Active DirectoryНепосредственных средств поддержки приведенных правил в операционной системе нет. Первым этапом их разра-ботки должно стать расширение схе-мы Active Directory. Для наших правил потребуется добавить в стандартные объекты ряд атрибутов.

Для пользователя ограничимся существующими атрибутами, причи-ну блокировки будем сохранять в по-ле «description».

что появится необходимость в других атрибутах и правилах.

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

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

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

Добавление новых свойств в объ-екты Active Directory осуществляет-ся с помощью специальной оснаст-ки «Active Directory Schema». Об опас-ности ее применения свидетельству-ют средства защиты, беспрецедентные для операционных систем Windows:n Оснастка не устанавливается вмес-

те с операционной системой. Вмес-то этого в папке System32 располо-жен дистрибутив (adminpak.msi), ко-торый нужно отдельно установить.

n После установки оснастка не по-является в меню «Пуск», ее нужно вручную добавлять в консоль MMC.

n По умолчанию можно только про-сматривать элементы схемы – для возможности изменения нужно создать запись в реестре (HKEY_LOCAL_MACHINE\ System\ Current Control Set\ Services \NTDS\ Parameters) типа DWORD с именем «Schema update allowed» и значени-ем 1 (0 отключает режим редакти-рования – рекомендуется устано-вить это значение после заверше-ния изменения схемы).

Для организационных единиц вве-дем несколько новых атрибутов:n Статус. Будет обозначать тип под-

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

n Заблокирован. Признак блокиров-ки отдела. Логическое поле.

Для реализации приведенных пра-вил будет достаточно этих двух атри-бутов.

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

Рисунок 2. Новые атрибуты схемы

Page 53: 059 Системный Администратор 10 2007

51№10, октябрь 2007

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

Это объясняется тем, что ошибки в схеме могут привести к некоррект-ной работе всего домена. Кроме то-го, все изменения схемы необратимы, другими словами, добавив атрибут, его уже невозможно удалить или изменить (но можно отключить). Присутствует и более привычный механизм защиты: чтобы получить право модифициро-вать схему, пользователь должен вхо-дить в группу Schema Admins.

Сначала создаются атрибуты: OULocked (признак блокировки орга-низационной единицы), OUState (со-стояние) (см. рис. 2).

Непосредственное добавление ат-рибутов во встроенные классы опе-рационной системы возможно, но де-лать это настоятельно не рекоменду-ется. Поэтому создадим специаль-ный дополнительный (auxiliary) класс OURulesEx, в который и добавим но-вые атрибуты (см. рис. 3).

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

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

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

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

к объекту мы можем сразу использовать введенные свойс-тва. Случаи, когда значение свойства не определено, мож-но отследить с помощью функции isEmpty. Так, после до-бавления новых свойств для всех организационных единиц значение isEmpty(objOU.OULocked) будет истинно. Функция isOULocked в этом случае сообщает о незаблокированной организационной единице.

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

Приступим к практической реализации.

Разработка необходимых функцийWindows 2003 уже содержит средства, позволяющие зада-вать руководителей подразделений. Это можно сделать с по-мощью окна свойств организационной единицы (см. рис. 4).

Рисунок 3. Класс с дополнительными свойствами

function isOULocked(dn)Set objOU = GetObject("LDAP://" & dn)isOULocked = objOU.OULockedif isEmpty(isOULocked) then isOULocked = falseend function

function setOULocked(dn, lock)Set objOU = GetObject("LDAP://" & dn)objOU.OULocked = lockobjOU.setInfoend function

Page 54: 059 Системный Администратор 10 2007

52

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

Рассмотрим вспомогательную функцию для определе-ния, в каком отделе находится объект (пользователь, ком-пьютер или организационная единица).

Функция getParent отбрасывает общее имя (первый элемент – CN) с помощью функций обработки строк. Та-ким образом, остается подстрока, описывающая положе-ние объекта (пользователя, компьютера или организаци-онной единицы) в архитектуре организации. Если достиг-нут корень иерархии (родительского элемента нет), функ-ция возвращает пустую строку. В нашем случае корневым элементом является первый доменный компонент (DC). На-пример, для имени пользователя «CN=Gomer, OU=Security, OU=aes, DC=simpsons, DC=ua» корневым элементом явля-ется «DC=simpsons, DC=ua».

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

Функция принимает два параметра: полные имена поль-зователя и компьютера, на который осуществляется вход. Как уже говорилось, полное имя компьютера содержит ин-формацию о положении объекта в ИУА предприятия.

Изначально считается, что вход на компьютер разрешен (возврат кон-станты STATE_ALLOWED означает, что пользователь имеет право досту-па на компьютер).

Затем для каждого объекта опре-деляется имя контейнера (организа-ционной единицы), которому они при-надлежат.

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

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

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

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

function getParent(dn)if UCase(Left(dn, 2))="DC" then getParent = ""else getParent = right(dn, len(dn) - instr(1, dn, ",", ↵ vbTextCompare))end ifend function

function isAllowed(userDN, compDN)

isAllowed = STATE_ALLOWED

dim compOU, userOUcompOU = getParent(compDN)userOU = getParent(userDN)

if isOuLocked(compOU) then isAllowed = STATE_LOCKED exit functionend if

if userOU = compOU then exit functionend if

if getOUState(compOU) = STATE_EXPLICIT then isAllowed = STATE_EXPLICIT exit functionend if

dim compTreeRootcompTreeRoot = getTreeRoot(compOU)if compTreeRoot <> getTreeRoot(userOU) then if compTreeRoot <> EMPTY_STR then isAllowed = ↵ STATE_TREE exit functionend ifend function

Рисунок 4. Задание руководителя отдела

Page 55: 059 Системный Администратор 10 2007

53№10, октябрь 2007

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

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

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

Рассмотрим пример (см. рис. 5). Допустим, для архи-тектуры, приведенной на рис. 2, для организационной еди-ницы «Производство» установлено свойство STATE_TREE (т.е. разрешение общего использования компьютеров в рамках всего поддерева). В этом случае пользователь, принадлежащий подразделению «Цех», может пользовать-ся компьютерами, установленными в «Производство». Од-нако если установить такой атрибут еще и для подразделения «Учет», то пользователи могут работать только с компьютерами своего поддерева. Дру-гими словами, пользователь из отдела «Бухгалтерия» сможет воспользовать-ся компьютером в архиве, но не смо-жет в цехе. Правила доступа подде-рева перекрывают правила родитель-ских единиц.

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

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

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

Здесь для привязки к объекту мы используем метод OpenDSObject вместо функции GetObject, поскольку он поз-воляет обращаться к объектам домена от имени заданно-го пользователя.

function getTreeRoot(dn)if (dn=EMPTY_STR) then getTreeRoot = dn exit functionend ifif (getOUState(dn)=STATE_TREE) then getTreeRoot = dn exit functionend ifgetTreeRoot = getTreeRoot(getParent(dn))end function

Рисунок 5. Пример архитектуры предприятия

Function disableUser(userDN, compDN)Set dso = GetObject("LDAP:")Set userObj = dso.OpenDSObject("LDAP://" & userDN, ↵ "[email protected]", "P@ssw0rd", ↵ ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)userObj.accountDisabled = trueuserObj.description = "Unallowed access on " & compDNuserObj.SetInfoend function

Рисунок 6. Разрешения, необходимые и достаточные для отключения пользователей

Page 56: 059 Системный Администратор 10 2007

54

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

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

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

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

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

События будет получать от под-системы ведения логов (объект «Win32_NTLogEvent»). Нас интересу-ют события категории «Account Logon». «Полевые» испытания показали появ-ление нескольких видов таких событий при успешной аутентификации домен-ного пользователя:n 672: Authentication Ticket Grantedn 673: Service Ticket Granted

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

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

То есть на самом деле мы получаем уведомление о со-здании экземпляра объекта типа Win32_NTLogEvent. Это те самые объекты, которые можно просмотреть, ис-пользуя оснастку EventViewer. Далее сценарий переходит в режим ожидания событий.

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

Свойство InsertionStrings – отчет о событии, описанный выше. Он состоит из 10 строк. Нам для дальнейшей рабо-ты требуется первая строка (нумерация начинается с 0), которая содержит имя пользователя и последняя строка

set objwmiservice=getobject("winmgmts://./root/cimv2")

strwql="select * " & ↵ "from __instancecreationevent " & ↵ "where targetinstance isa 'Win32_NTLogEvent' " & ↵ "and targetinstance.EventIdentifier = 672"

set objeventsource=objwmiservice.execnotificationquery(strwql)

While True set objeventobject=objeventsource.nextevent() domain = getDomain user = objEventobject.TargetInstance.InsertionStrings(0) comp = getCompName(objEventobject.TargetInstance. ↵ InsertionStrings(9)) check user, comp, domainWend

Рисунок 7. Сообщение руководителю подразделения о недопустимом входе

Page 57: 059 Системный Администратор 10 2007

55№10, октябрь 2007

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

с IP-адресом компьютера. Функция check выполняет всю полезную деятельность.

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

Рассмотрим параметры:n Name – это искомое имя объекта;n className – имя класса (в нашем случае функция будет

использоваться как для поиска компьютеров, так и поль-зователей);

n nameField – какое поле объекта считать его именем при поиске (для компьютера это «cn», а для пользова-теля – «SamAccountName»);

n domain – домен, в котором будем производить поиск.

При поиске снова воспользуемся провайдером «Active Directory Provider», поскольку он предоставляет удобную возможность использования SQL-подобного языка. До-мен в данном случае играет роль контейнера, с которого начинается поиск.

Следующий вопрос, который необходимо решить, – получение имени компьютера на основе его IP-адреса. Для этого воспользуемся сценарием, использующим WMI. С помощью данного инструментария можно обращать-ся ко многим объектам операционной системы как к таб-лицам базы данных. На компьютере под управлением Windows 2003, исполняющей роль DNS-сервера, есть таб-лица MicrosoftDNS_AType, записи которой и определяют со-ответствие адреса и имени рабочей станции.

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

Имя компьютера представлено в этой таблице в виде «compName.domainName», поэтому в конце функции мы от-брасываем часть строки, чтобы осталось только имя ком-пьютера, по которому его можно будет найти в базе дан-ных LDAP.

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

Ну и, наконец, приведу основную функцию проверки пользователя:

Здесь хотелось бы обратить ваше внимание на услов-ный оператор «if userPath = EMPTY_STR then …». Дело в том, что сообщение с кодом 672, как оказалось, приходит еще в одном случае – когда включается компьютер, входящий в домен. Тогда в первой строке отчета содержится имя не пользователя, а рабочей станции. В этом случае пользова-тель найден не будет, и функция завершит работу.

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

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

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

getUserADsPath = EMPTY_STR Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection objCommand.CommandText = ↵ "Select ADsPath from 'LDAP://" & domain & "' " ↵ & "Where objectClass='" & className & "' and " ↵ & nameField & "='" & name & "'" objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst if not objRecordSet.EOF then getObjectADsPath = ↵ objRecordSet.Fields(0).valueend function

function getCompName(ip)set info = createObject("ADSystemInfo")Set objWMIService = ↵ GetObject("winmgmts:\\.\root\MicrosoftDNS") Set colItems = objWMIService.ExecQuery( ↵ "SELECT * FROM MicrosoftDNS_AType ↵ WHERE IPAddress = '" & ip & "'") For Each objItem in colItems fullName = objItem.OwnerName getCompName = left(fullName, ↵ len(fullName) - len(info.domainDNSName) - 1)nextend function

function getCompName(ip)set info = createObject("ADSystemInfo")Set objWMIService = ↵ GetObject("winmgmts:\\.\root\MicrosoftDNS") Set colItems = objWMIService.ExecQuery( ↵ "SELECT * FROM MicrosoftDNS_AType ↵ WHERE IPAddress = '" & ip & "'") For Each objItem in colItems fullName = objItem.OwnerName getCompName = ↵ left(fullName, ↵ len(fullName) - len(info.domainDNSName) - 1)nextend function

Function disableUser(userPath, compPath)Set userObj = GetObject(userPath)userObj.accountDisabled = trueuserObj.description = " Unallowed access on " & compPathuserObj.SetInfoend function

function check(user, computer, domain)set info = createObject("ADSystemInfo") userPath = getObjectADsPath(user, "user", ↵ "SAMAccountName", domain) if userPath = EMPTY_STR then exit function compPath = getObjectADsPath(computer, "computer", ↵ "cn", domain) if isAllowed(userPath, compPath) <> STATE_ALLOWED ↵ then disableUser userPath, compPathend function

Page 58: 059 Системный Администратор 10 2007

56

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

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

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

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

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

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

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

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

Функция получает три параметра: полные имена руко-

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

Затем настраиваются почтовые параметры (SMTP-сер-вер в данном примере функционировал на компьютере с именем «smtp_server») и формируется текст письма. За-дача данной статьи – показать способы использования ар-хитектуры предприятия для эффективной защиты объек-тов информационной подсистемы, поэтому основное вни-мание мы уделяем способу определения руководителя под-разделения и его информирования. Текст же письма сделан максимально простым (содержит имя пользователя, ком-пьютера, а также дату и время несанкционированной по-пытки входа в компьютер), т.к. задача составления более информативного послания может быть при необходимости легко решена. Теперь руководитель ([email protected]) при попытках несанкционированного доступа будет полу-чать письма следующего вида (см. рис. 7).

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

Сначала определяется характеристики пользователя и компьютера.

Затем вызывается функция проверки доступа. Если до-ступ разрешен – сценарий завершается. В противном слу-чае принимаются карательные меры: отключается профиль, информируется руководитель, а сеанс прекращается. Ес-ли было принято решение перенести функцию отключения пользователя на серверный сценарий, следующую строку необходимо удалить.

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

function findManager(startOU)findManager = ""if startOU = "" then exit function

set ou = getObject("LDAP://" & startOU)manDN = ou.managedBy

if manDN <> "" then findManager = manDN exit functionelse findManager = findManager(getParent(startOU))end ifend function

function getMail(dn)set userObj = getObject("LDAP://" & dn)getMail = userObj.get("mail")end function

function informManager(manDN, userDN, compDN)

Set objEmail = CreateObject("CDO.Message")objEmail.From = getMail(userDN)objEmail.To = getMail(manDN)objEmail.Subject = "Unallowed login" objEmail.Textbody = "User: " & userDN & chr(10) & ↵ "Computer: " & compDN & chr(10) & ↵ "When: " & date & " " & timeobjEmail.Configuration.Fields.Item ↵ ("http://schemas.microsoft.com/cdo/configuration/ ↵ smtpserver") = "smtp_server " objEmail.Configuration.Fields.UpdateobjEmail.Sendend function

Set objSysInfo = CreateObject("ADSystemInfo")userDN = objSysInfo.UserNamecompDN = objSysInfo.ComputerName

if isAllowed(userDN, compDN) = STATE_ALLOWED ↵ then WScript.Quit

disableUser userDN, compDNinformManager findManager(getParent(compDN)), userDN, compDNset shellObj = CreateObject("WScript.Shell") shellObj.exec "shutdown /l"

Page 59: 059 Системный Администратор 10 2007

57№10, октябрь 2007

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

ры предприятия (используя стандар-тную оснастку Active Directory Users and Computers). Например, нужно на-значить руководителя подразделения с помощью процедуры на рис. 4, чтобы этот пользователь начал получать уве-домления по электронной почте о не-санкционированных попытках захода на компьютеры своего отдела. Также, переместив компьютер из одной ор-ганизационной единицы в другую, ад-министратор автоматически сделает его доступным для сотрудников ново-го и запрещает доступ бывшего под-разделения.

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

Создать новый пункт меню для оснастки «Active Directory Users And Computers» можно с помощью следу-ющей функции:

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

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

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

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

Для установки пункта меню нужно сохранить программу вывода информации (в нашем примере – «c:\ou_info.vbs») и один раз выполнить сценарий со следующей командой:

Аналогичным образом добавим сценарии для выполне-ния всех запланированных действий:n ArchitectureEx: Lock Single. Блокировка одного под-

разделения.n ArchitectureEx: Lock Cascade. Блокировка всех под-

разделений поддерева, начиная с текущего.n ArchitectureEx: Unlock Single / Cascade. Разблокиров-

ка одного подразделения или поддерева.n ArchitectureEx: Set Explicit State. Установка для подраз-

деления режима разрешения доступа только для своих сотрудников.

n ArchitectureEx: Set Tree State. Установка для подразде-ления разрешения доступа ко всем компьютерам под-дерева.

n ArchitectureEx: Set Free State. Свободный доступ к ком-пьютерам подразделения для зарегистрированных пользователей.

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

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

function installOUMenu(id, name, scriptPath) Set root= GetObject("LDAP://rootDSE") sConfig = root.Get("configurationNamingContext") sPath = "LDAP://cn=organizationalUnit-Display,cn=409, ↵ cn=DisplaySpecifiers," & sConfig Set obj= GetObject(sPath) sValue = id & "," & name & "," & scriptPath vValue = Array(sValue) obj.PutEx 3, "adminContextMenu", vValue obj.SetInfoend function

Set oArgs = WScript.Argumentsdim lock, stateSet ouObj = getObject(oArgs.item(0))if isOULocked(ouObj) then lock = "yes"else lock = "no"end ifstate = getOUState(ouObj)msgbox "Name: " & ouObj.ou & chr(10) & "Locked: " & ↵ lock & chr(10) & "State: " & state, vbInformation, ↵ "Additional attributes"

installOUMenu 100, "ArchitectureEx: OU Info", ↵ "c:\ou_info.vbs"

Рисунок 8. Информация о дополнительных параметрах

function setSubtreeLock(startFromOU, lock)

Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider"

Page 60: 059 Системный Администратор 10 2007

58

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

Данное действие удобнее выполнить, снова воспользо-вавшись провайдером «Active Directory Provider». С его по-мощью можно выполнять запросы к модели ИУА организа-ции, используя встроенные средства для выборки подде-ревьев (для включения этого режима в программе исполь-зуется константа ADS_SCOPE_SUBTREE).

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

Сценарий для обработки меню будет выглядеть так:

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

полученных сценариев их исходный код приводиться не будет. После за-вершения настроек в оснастке «Active Directory Users And Computers» поя-вятся дополнительные пункты меню со всеми новыми операциями. Прис-тавка «ArchitectureEx» используется для того, чтобы отличить встроенные команды от добавленных в ходе дан-ной работы (см. рис. 9).

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

ционной системе реализован лишь общий каркас системы безопасности на основе архитектуры. Его дополняют раз-витые средства расширения функциональности, с помощью которых можно, приложив относительно небольшие усилия (по сравнению с разработкой подобной системы с нуля), ре-ализовать нестандартные средства защиты объектов ИУА.

Конечно, решения на основе сценариев являются, ско-рее, макетом реальной надстройки. Так, даже поддержка базовых свойств потребовала создания восьми пунктов ме-ню. Для более удобного использования их понадобится еще больше. Более логичным будет конфигурирование надстро-ек с помощью специальных закладок в свойствах объектов Active Directory, которые реализуются в виде библиотек, на-писанных на компилируемых языках (C++, Visual Basic и т. п.). Однако это относится уже к улучшению пользовательско-го интерфейса, основные методы реализации надстройки не изменятся (в случае же использования для создания над-стройки среды Visual Basic все основные функции из этой статьи можно будет использовать без изменений).

1. Рассел Ч., Кроуфорд Ш., Джеренд Д. Windows Server 2003 + SP1 и R2. Справочник администратора. – М.: Издательство «ЭКОМ», 2006. – 1424 с.

2. Дженнингс Р. Admin 911. Групповые политики Windows 2000./Пер. с англ. – М.: издательство «СП ЭКОМ», 2003. – 480 с.

3. Зубаков Ф. Active Directory: подход профессионала. – 2-е изд., испр. – М.: Издательско-торговый дом «Русская Редакция», 2003. – 544 с.: ил.

4. Реймер С., Малкер М. Active Directory для Windows Server 2003. Справочник администратора/Пер. с англ. – М.: «СП ЭКОМ», 2004. – 512 с.

5. Чекмарев А. Windows 2000 Active Directory. – СПб.: БХВ-Петер-бург, 2001. – 400 с.

Set objCOmmand.ActiveConnection = objConnection objCommand.CommandText = _ "Select ADsPath from '" & startFromOU & "' " ↵ & "Where objectClass='organizationalUnit'" objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.ExecuteobjRecordSet.MoveFirst

Do Until objRecordSet.EOF ouPath = objRecordSet.Fields(0).value set ouObj = getObject(ouPath) ouObj.OULocked = lock ouObj.setInfo objRecordSet.MoveNext Loopend function

Set oArgs = WScript.ArgumentssetSubtreeLock oArgs.item(0), true

Рисунок 9. Расширенное контекстное меню управления организационными единицами

Page 61: 059 Системный Администратор 10 2007
Page 62: 059 Системный Администратор 10 2007

60

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

Постановка задачиМежсетевой экран, антивирусная сис-тема, средства предотвращения втор-жения, антиспам – все эти компоненты являются на сегодняшний день неотъ-емлемой частью системы безопаснос-ти для домашних компьютеров и рабо-чих станций, не находящихся под кон-тролем корпоративных средств защи-ты. Сейчас многие компании, специа-лизирующиеся на разработке антиви-русных приложений, а также средств безопасности, предлагают на рынке свои решения. Как правило, все эти решения содержат в себе полный на-бор средств защиты, необходимых для обеспечения неуязвимости персональ-ного компьютера. Сегодня я расскажу о новом продукте компании Agnitum – Outpost Security Suite Pro, о функцио-нале данного приложения, его досто-инствах и недостатках. Получить испы-тательную версию данной программы вы можете по адресу [1].

Требования к системеПрежде чем начать описание возмож-ностей Outpost Security Suite Pro, скажу несколько слов о том, какие аппарат-ные требования предъявляют прило-жения к системе пользователя. По ин-формации с сайта производителя, под-держиваются следующие платформы: Windows 2003 Server (x86 и x64 версии), XP (x86 и x64 версии), 2000 Professional. В качестве тестовой системы я исполь-зовал Windows XP SP2, думаю, боль-шинство потенциальных пользовате-лей данной программы будут развора-

чивать ее на рабочих станциях под уп-равлением именно Windows XP.

Отсутствие Vista в списке поддер-живаемых операционных систем ме-ня особо не удивило, так как не секрет, что многие компании-разработчики сознательно не указывают в списках поддерживаемых продуктов эту опе-рационную систему, так как опасают-ся за надежность функционирования своих продуктов. К тому же сущест-вует мнение, что Microsoft сознатель-но осложняет интеграцию продуктов, связанных с безопасностью, со своей новой операционной системой, для то-го, чтобы пользователи применяли для защиты только продукты от MS. Одна-ко, по словам разработчиков, Agnitum Outpost Security Suite Pro 2008 для Vista сейчас находится в финальной стадии публичного бета-тестирования.

Так как в состав Outpost Security Suite Pro входят компоненты для ра-боты с электронной почтой на сто-роне клиента, в связи с этим приво-дится следующий список: Microsoft Outlook Express, Microsoft Outlook 2000, 2002, 2003 и 2007. Как видите, под-держиваются только почтовые клиен-ты от Microsoft. Это не слишком хоро-шо, так как всё больше пользовате-лей применяют программное обеспе-чение с открытым кодом, и отсутствие поддержки таких приложений в даль-нейшем может сказаться на востребо-ванности программы. При этом список поддерживаемых почтовых протоко-лов стандартен: POP3, SMTP, IMAP.

Аппаратные требования вполне

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

УстановкаРазработчики настоятельно рекомен-дуют удалить с рабочей станции анти-вирусные продукты и межсетевые эк-раны от других производителей. Од-нако мне удалось добиться совмес-тной работы Outpost Security Suite с Symantec Client Security. Правда, межсетевой экран, входящий в состав продукта от Symantec, лучше все-та-ки отключить. Итак, тем, кто уже зна-ком с продуктами семейства Outpost (к примеру, с их межсетевыми экрана-ми), процесс установки Outpost Security Suite Pro покажется знакомым. После запуска у вас появляется окно мастера, в котором вам предлагается выбрать уровень безопасности (см. рис. 1).

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

Защищаем систему с помощью Outpost Security Suite

Андрей Бирюков

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

Page 63: 059 Системный Администратор 10 2007

61№10, октябрь 2007

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

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

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

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

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

В следующем окне необходимо за-вершить настройку конфигурации. На-жав кнопку «Дополнительно», можно произвести специальные настройки, в частности, указать приложения, ко-торым разрешен или запрещен выход в сеть, указать режимы работы Outpost и других компонент. Это меню на-стройки в полном составе сохранилось от прежних версий межсетевого экра-на Agnitum Outpost. Сохраняем конфи-гурацию, нажав «Finish». Как и приня-то для подобных приложений, для ак-тивации настроек Outpost Security тре-бует перезагрузки системы.

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

Мониторинг и статистикаВ разделе «My Internet» вы можете на-блюдать сетевую активность, количес-тво открытых портов, используемые

протоколы, также статистику по разре-шенным и запрещенным соединениям, как открытым, так и закрытым.

Следующим разделом являются «Plug-Ins». Здесь уже можно отметить все преимущества Outpost Security Suite перед предыдущими версиями, являвшимися, по сути, лишь межсе-тевыми экранами с некоторыми до-полнениями.

В разделе «Active Content» мож-но наблюдать статистику по блоки-рованию различных активных компо-нентов, таких как всплывающие окна, ActiveX-сценарии, JavaScript, VBScript и другие.

В разделе «Ads» можно наблюдать статистику по блокировке рекламы.

В разделе «Anti-Malware» находит-ся статистика по обнаруженным вре-доносным приложениям, также и ин-формация о версиях антивирусных баз. Здесь же можно запустить про-верку диска на вирусы.

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

Раздел «Attack Detection» также пе-решел из предыдущих версий межсе-тевого экрана. В нем вы можете ви-деть информацию о том, кто, когда и каким образом пытался атаковать вашу систему.

Рисунок 1. Выбор уровня безопасности Рисунок 2. Настройка создания правил

Page 64: 059 Системный Администратор 10 2007

62

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

Раздел «Content» содержит ста-тистику о блокировании содержимо-го веб-сайтов.

И, наконец, раздел «DNS Cache» содержит информацию о сохраненных DNS-запросах.

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

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

А вот плагин «Реклама» располага-ет более интересным функционалом. Здесь можно задавать слова, по ко-торым признавать тот или иной сайт рекламной страницей и блокировать ее. Также можно блокировать картин-ки по их размерам. Естественно, все эти свойства можно изменять, добав-лять и удалять нужные слова и разме-ры картинок. Также есть возможность экспорта и импорта этих настроек.

Средства защиты от вредоносного кодаОсобого внимания заслуживает пла-гин «Антивирус+Антишпион (Anti-Malware)». Фактически данная ком-понента Outpost Security Suite явля-

ется системой антивирусной защиты и не только.

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

В закладке «Личные данные» мож-но настроить блокирование отправки конфиденциальных данных: паролей и номеров кредитных карт. Формат этих конфиденциальных данных ни-как не ограничивается, так что вполне можно фильтровать и другие важные для бизнеса данные, такие как имена документов, файлов и т. п.

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

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

Наконец, в закладке «Дополни-тельно» можно настроить расписание для проведения полного сканирования, файлы и папки, которые можно исклю-чить. Также в этом разделе можно на-строить защиту критических компо-нентов системы, таких как компонен-ты браузера Internet Explorer, WinLogon и другие. Данная защита представля-ет собой контроль целостности данных компонентов.

Плагин «Антиспам» не содержит в себе каких-либо настроек, так как они осуществляются непосредствен-но в почтовом клиенте.

На этом перечисление компонен-тов Outpost Security Pro можно счи-тать завершенным. Теперь самое вре-мя посмотреть продукт в реальных ус-ловиях.

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

цию в мире файрволов. Поэтому я бу-ду тестировать лишь новые компонен-ты – «Антивирус+Антишпион» и «Ан-тиспам».

Для тестирования антивируса воспользуемся тестовой сигнатурой eicar.com [2]. Это фрагмент кода, кото-рый по договоренности все антивирус-ные компании используют для провер-ки вирусных сканеров (см. рис. 3).

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

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

Но на этом я не стал останавли-ваться, у HTTP есть два метода пе-редачи данных GET и POST. В при-мере с бесплатной почтой был ме-тод POST. В случае с GET мы пере-даем данные в формате: «http://site.ru/index.php?id=12345».

Для примера я взял любой файл на все том же сервере и попробовал передать ему в качестве параметра все тот же номер кредитной карты в виде: «index.php?id=…» (то, что у этого сце-нария нет такой переменной или она имеет другой формат, в данном слу-чае совершенно не важно, так как Outpost должен перехватить эти дан-ные раньше, чем они достигнут серве-ра). Outpost также перехватил попытку отправки этих данных.

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

Рисунок 3. Обнаружение вредоносного кода

Рисунок 4. Обнаружение попытки отправки конфиденциальных данных

Page 65: 059 Системный Администратор 10 2007

63№10, октябрь 2007

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

для перехвата попыток отправки конфиденциальных дан-ных, эта программа почему-то не определяла данные, пе-реданные методом GET.

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

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

Еще один тест я провел с фильтром вложений. Я вклю-чил фильтрацию для файлов с расширением ZIP, но изме-нил расширение ZIP-файла на TXT и в таком виде попытал-ся отправить письмо. Файл был успешно отправлен. Конеч-но, такой тест не совсем корректен, так как в настройках программы ясно указано «расширение», а не «тип» файла, но сейчас многие антивирусные программы умеют разли-чать типы файлов не только по расширениям, но и по со-держимому, так авторам следовало бы проработать такую возможность фильтрации файлов. Например, как это реа-лизовано во многих антивирусных системах, где можно на-строить, как обрабатывать архивы: файлы какого объема сканировать, а какие сразу отправлять в карантин или уда-лять и так далее.

Защита от спамаСледующим тестом будет проверка защиты от нежелатель-ных рассылок – спама. Вообще к системам защиты от спа-ма, установленным на клиенте, я отношусь не слишком хо-рошо. Дело в том, что, как правило, такие решения обла-дают слабыми механизмами определения спама, произ-водят только контекстный анализ и нуждаются в постоян-ном обучении.

Но посмотрим, на что способен Outpost Security Suite. Для настройки фильтра нежелательной почты необходи-мо его сначала обучить. Предложение произвести это обу-чение появляется при каждом запуске почтового клиента. Далее появляется мастер, с помощью которого мы можем указать папки, в которых должны сохраняться письма, от-носящиеся к «хорошей» почте. Затем мастер произведет сканирование данных папок. По результатам сканирования создаются правила распознавания нежелательных почто-вых рассылок. Следует отметить, что эта возможность не-доступна без использования Outpost Security Suite . Также можно создавать эти правила вручную по различным кри-териям: имя отправителя и получателя, тема, содержимое письма и так далее. Есть возможность составления белых и черных списков, что тоже бывает очень полезно при ра-боте (см. рис. 5).

После выполнения необходимых настроек я провел не-сколько тестов. Фильтр нежелательной почты с базовыми настройками показал себя очень неплохо. Хорошо филь-

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

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

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

ЗаключениеПодведем итоги. Outpost Security Suite является достаточно мощной системой защиты рабочих станций и домашних ком-пьютеров от различных угроз. Ключевым элементом Outpost Security Suite является хорошо зарекомендовавший себя межсетевой экран. Антивирусные и антишпионские ком-поненты, средства защиты от утечки информации, а также система фильтрации нежелательной почты также хорошо функционируют, хотя и имеют некоторые недостатки, кото-рые, я надеюсь, будут устранены в дальнейшем.

1. Испытательная версия Outpost Security Suite Pro – http://www.security-suite.ru.

2. Сайт проекта Eicar.com – http://eicar.com.

Рисунок 5. Настройки фильтра нежелательной почты

Page 66: 059 Системный Администратор 10 2007

64

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

Open Source-решение: сетевой шлюз Untangle

Сергей Яремчук

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

Page 67: 059 Системный Администратор 10 2007

65№10, октябрь 2007

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

Платформа Untangle [1], пред-ставленная одноименной ком-панией (раннее Metavize), со-

здана на основе более 30 решений с открытыми исходными текстами, среди которых – дистрибутив Knoppix, Snort, ClamAV, SpamAssasin, Squid и другие.

Целью проекта Untangle явля-ется замена коммерческих реше-ний, таких как ISA Server, SonicWall или WatchGuard в небольших и сред-них организациях.

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

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

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

Модуль Attack Blocker собственной разработки позволяет защитить сеть от DoS-атак и некоторых других атак низкого уровня. Внешнему компью-теру в зависимости от его активнос-ти присваивается определенный ста-тус, хосты, получившие плохую репу-тацию (атака, SYN flooding или ска-нирование портов), ограничиваются в трафике или полностью блокирует-ся доступ к защищаемым ресурсам (расположенным в DMZ).

Система предоставляет админист-ратору разнообразные отчеты по сете-вой активности, протоколам и пользо-вателям, инцидентам, количеству спа-ма и обнаруженных вирусов, которые можно сохранить в файлы форматов PDF, HTML, XLS, CSV и XML.

Поддерживается NAT и при нали-чии третьего сетевого интерфейса возможна организация DMZ.

Разработчики утверждают, что при необходимости в любое время могут

быть добавлены любые другие ком-поненты.

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

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

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

По умолчанию модуль Virus Blocker сканирует только входящий веб, ftp и почтовый трафик, но при необхо-димости можно активировать и про-верку исходящего. Если есть необ-ходимость в проверке при помощи двух антивирусов, следует устано-вить модуль Dual Virus Blocker. Мо-дуль Protocol Control «знает» больше чем о 90 протоколах.

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

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

Поддерживаются только Ethernet-соединения со статически или ди-намически выдаваемым адресом и PPPoE-соединения. Как видите, здесь нет популярных сегодня ADSL, WiFi и других типов, но такой подход вполне соответствует основной зада-че сервера Untangle: не организация доступа, а защита сети.

Для аутентификации пользовате-ля может использоваться встроенный LDAP-сервер или средства интегра-ции с Active Directory.

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

Распространяется Untangle по двум лицензиям. Основная часть сис-темы по лицензии GNU GPL, но есть дополнительные модули, распростра-няемые по коммерческой лицензии.

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

Рисунок 1. Соответствие элементов компьютера требованиям Untangle

Page 68: 059 Системный Администратор 10 2007

66

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

интеграцию с Active Directory, сохране-ние настроек на специализированном сервере для более быстрого восста-новления (24-hour Replacement), а так-же Remote Access Portal, обеспечи-вающий безопасный доступ ко внут-ренним ресурсам сети через обыч-ный веб-браузер без установки VPN-клиента.

Вторым источником доходов фир-мы-разработчика является продажа серверов Untangle XD Server и XD+ Server с предустановленной и на-строенной системой. Для свободной версии доступна только он-лайн-под-держка обществом пользователей.

Системные требованияВ Untangle использован Java. Отсю-да и системные требования. Так, для работы понадобится компьютер с Intel-совместимым процессором с часто-той 1 Гц, оперативной памятью 512 Мб, жестким диском на 20 Гб и двумя се-тевыми картами. Это минимальные требования, которые примерно соот-ветствуют обслуживанию сети с 50 пользователями. Рекомендуемые тре-бования следует умножить на 2, плюс для DMZ понадобится еще одна сете-вая карта. Компьютер с такой конфи-гурацией сможет обслуживать уже сеть с 300 пользователями.

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

вередлив к аппаратной части. Так, мне не удалось запустить Untangle ни на одном компьютере с жестким диском SATA. Причем, судя по разде-лу «Hardware Discussion» [2] на фору-ме проекта, такая проблема возника-ла не только у меня.

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

УстановкаISO-образ размером в 410 Мб скачи-вается по ссылке с SourceForge без предварительной регистрации и дру-гих неудобств, которыми изобилуют некоторые проекты.

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

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

данные, переходим к этапу проверки оборудования.

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

Читаем финальное предупрежде-ние и нажимаем кнопку «Finish», пос-ле чего файлы копируются на жест-кий диск, дальше потребуется пере-загрузка.

Вот, собственно, и вся установка.

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

После перезагрузки вас встретит еще один мастер – Server Setup Wizard, который поможет произвести первич-ную настройку системы. Здесь нужно пройти 9 шагов.

В следующем после приветствия окне заполняем контактную инфор-мацию (организация, адрес, e-mail, имя, фамилия и прочее). Поля, отме-ченные как «required», следует запол-нить обязательно.

Далее вводим пароль для учет-ной записи admin и указываем часо-вой пояс.

На следующем шаге «Interface Test» система пытается найти сете-вые устройства и выдает результиру-ющую таблицу (см. рис. 2).

И переходим к настройке внешне-го интерфейса. Здесь требуется ука-зать имя узла, задать использование DHCP или указать статический IP-ад-рес компьютера, шлюза и DNS-сер-веров, сетевую маску и учетные дан-ные для PPPoE-подключения. Очень неудобно, что никакой наводящей информации по поводу наименова-ния сетевых устройств не предостав-ляется.

Но как раз, чтобы помочь опреде-литься, и предназначен следующий шаг мастера – Connectivity Test. В до-кументации этот процесс описан при-

Рисунок 2. Определение сетевых интерфейсов в «Server Setup Wizard»

Page 69: 059 Системный Администратор 10 2007

67№10, октябрь 2007

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

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

Далее мастер предлагает настро-ить вариант использования сервера Untangle.

Это может быть роутер, в этом случае будет включен NAT и DHCP, при настройках необходимо будет указать IP-адрес внутреннего интер-фейса.

Если сервер подключен к друго-му маршрутизатору или брандма-уэру, следует выбрать «Transparent Bridge».

Сервер Untangle может отсы-лать почтовые сообщения напрямую или через промежуточный SMTP-сервер. Это настраивается на шаге «Email Setting«. Здесь же для сооб-щений сервера указывается почто-вый адрес, который будет стоять в по-ле «От». Нажатием кнопки можно про-верить работу почты.

Вот и все настройки.

Работа в UntangleПо умолчанию сразу же после уста-новки можно управлять сервером только с локальной консоли. Основ-ные настройки производятся при по-мощи клиента, вызываемого нажати-ем «Launch Client». В некоторых слу-чаях можно использовать терминал, но его назначение скорее вспомога-тельное.

Для регистрации в клиенте уп-равления используем учетную запись admin и пароль, указанный при рабо-те Server Setup Wizard.

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

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

В отдельном пункте этой же вклад-ки разрешается мониторинг при помо-щи SNMP или отсылка информации на сервер Syslog.

Перейдя во вкладку «Backup/Restore», можно сохранить или вос-становить настройки в файл, раздел диска или USB.

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

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

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

При установленном соединении с Интернетом во вкладке «My Apps» будут показаны все доступные для ус-тановки компоненты. Просто выбира-ем то, что нужно, и щелкаем мышкой. Через некоторое время компонент по-явится в окне справа.

Нажав кнопку «Show Setting», мож-но уточнить его настройки.

Чуть правее кнопки на каждом компоненте отображаются графики, в которых в реальном времени отоб-

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

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

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

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

1. Сайт проекта – http://www.untangle.com.

2. Hardware Discussion Forum – http://forums.untangle.com/forumdisplay.php?f=3.

3. Де м о в е р с и я к л и е н т а Un tag l e – ht tp: //untangledemo.untangle.com/webstart.

Рисунок 3. Клиент управления сервером Untangle

Page 70: 059 Системный Администратор 10 2007

68

образование

FAQ: как проходит обучение и сертификация на MCSA и MCSE

Дмитрий Павлов

Профессиональные статусы MCSA (Microsoft Certified Systems Administrator) и MCSE (Microsoft Certified Systems Engineer) – одни из самых популярных среди IT-специалистов. Давно прошло время, когда необходимо было объяснять важность и полезность сертификации для карьерного роста и повышения своей ценности на рынке труда. Мой опыт организации обучения и сертификации говорит о том, что есть набор постоянно повторяющихся вопросов, на которые приходится регулярно отвечать, консультируя клиентов перед обучением или сдачей экзаменов. На самые распространенные из них я постараюсь сегодня ответить.

Page 71: 059 Системный Администратор 10 2007

69№10, октябрь 2007

образование

Почти все вопросы и ответы по организации сертификаци-онных экзаменов универсаль-

ны. Аналогичным образом сдаются экзамены на сертификаты почти всех крупнейших вендоров и независимых организаций: Cisco, IBM, Oracle, Linux Professional Institute (LPI) и многих де-сятков других.

Какие экзамены необходимо сдать, чтобы получить сертификат MCSA?Для получения сертификата MCSA не-обходимо сдать 4 экзамена: 3 обяза-тельных и 1 по выбору. В таблице 1 указан список тестов, необходимых для получения MCSA и номера курсов, которые к ним готовят. Обратите вни-мание, что у каждого теста и курса есть номер. Именно номерамив, а не длин-ными названиями привыкли опери-ровать менеджеры учебных центров и тестовые администраторы, и имен-но номер теста или курса удобнее ука-зывать при их заказе. По номеру экза-мена информацию по нему вы сможе-те легко найти на сайте Microsoft: http://www.microsoft.com/learning/mcpexams/prepare/examresults.aspx?orderby=ID.

Последовательность сдачи тестов никак формально не регламентирова-на. Можно сначала сдать тест по вы-бору (например, тест по работе с ISA Server), а потом приступать к сдаче «базовых» тестов.

Какие тесты необходимо сдать, что-бы получить сертификат MCSE, ес-ли у меня уже есть MCSA?Необходимо сдать 3 дополнительных теста: по работе со службой каталогов Active Directory, а также по планирова-нию сетевой инфраструктуры и пла-нированию безопасной работы сети (см. таблицу 2).

Что представляют собой экзаме-ны? Сколько вопросов в каждом экзамене? Сколько длятся экзаме-ны? Каков проходной балл при сда-че тестов?Экзамен – это серия вопросов на ан-глийском языке с вариантами отве-тов. Количество вопросов, как прави-ло, от 45 до 90. Для каждого вопроса дается от 2 до 5 ответов. Чаще всего необходимо выбрать один правильный ответ. Но в некоторых вопросах необ-ходимо выбрать несколько правиль-

ных вариантов. В трех тестах из про-грамм MCSA/MCSE есть небольшое количество заданий-симуляций, в ко-торых следует произвести последо-вательность практических действий, имитирующих работу в реальном про-дукте. Кроме того, в отдельных экзаме-нах присутствуют вопросы, требующие описать решение какой-либо практи-ческой ситуации.

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

Сейчас все тесты из программ MCSA/MCSE неадаптивные. В неадап-тивных тестах программа показывает сразу весь список вопросов, на кото-рые можно отвечать в произвольном порядке. Поэтому есть возможность сначала пробежаться по всем вопро-сам и ответить на очевидные, а затем вернуться к ответам на более сложные. Все вопросы, на которые вы не успели ответить, будут засчитываться как не-верные.

Время сдачи теста всегда фикси-рованно. В зависимости от вида теста на него отводится от 2 до 4 часов.

Для сдачи теста необходимо на-брать не меньше 700 баллов из 1000 возможных.

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

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

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

Иногда приходится слышать заяв-ления: «А вот в другом центре тестиро-вания мне на экзамене разрешили сло-варем пользоваться». Что ж, это зна-чит, что данный тестовый центр гру-

Экзамены Курсы

Три обязательных экзамена

70-270: Installing, Configuring, and Administering Microsoft Windows XP Professional 2285

70-290: Managing and Maintaining a Microsoft Windows Server 2003 Environment 2273

70-291: Implementing, Managing, and Maintaining a Microsoft Windows Server 2003 Network Infrastructure 2276, 2277

Один экзамен по выбору из списка:

70-350: Implementing Microsoft Internet Security and Acceleration (ISA) Server 2004 2824

70-228: Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition 2072

70-284: Implementing and Managing Microsoft Exchange Server 2003 2400, 2011

70-299: Implementing and Administering Security in a Microsoft Windows Server 2003 Network 2823

Таблица 1. Экзамены и курсы, входящие в стандартную программу MCSA

Таблица 2. Экзамены для получения сертификата MCSE, при наличии сертификата MCSA

Экзамены Курсы

70-293: Planning and Maintaining a Microsoft Windows Server 2003 Network Infrastructure 2278

70-294: Planning, Implementing, and Maintaining a Microsoft Windows Server 2003 Active Directory Infrastructure 2279

70-298: Designing Security for a Microsoft Windows Server 2003 Network 2823, 2830

Page 72: 059 Системный Администратор 10 2007

70

образование

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

Какие темы входят в каждый из тес-тов? Можно ли сдать пробные тес-ты для подготовки и оценки уровня готовности?Подробная информация о каждом тес-те, в том числе темы, входящие в эк-замен, содержится на сайте Microsoft. По ссылке http://www.microsoft.com/learning/mcpexams/prepare/examresults.aspx?orderby=ID вы найдете список всех действующих экзаменов Microsoft, упорядоченный по их номерам.

Информацию о пробных тестах можно найти, например, на этих офи-циальных ресурсах:n h t t p : / / w w w . m i c r o s o f t . c o m /

l e a r n i n g / m c p e x a m s / p r e p a r e /practicetests.mspx;

n ht tp://www.measureup.com/Site/display_article.aspx?id=955;

n ht tp://www.self testsoftware.com/dept.aspx?dept_id=1000.

Кроме того, разнообразной инфор-мацией о том, кто как готовился, сда-вал, что наиболее сложное в конкрет-ном тесте и так далее, IT-специалис-ты активно делятся, например, в сете-вом Клубе сертифицированных спе-циалистов: http://certification.ru/cgi-bin/forum.cgi?action=topic&id=3.

Через какой период времени после курсов я должен сдать экзамен?Формальных правил, регламентирую-щих сроки сдачи экзамена в зависи-мости от сроков обучения, нет. Луч-ше придерживаться золотой середи-ны. То есть не торопиться и не сдавать тест на следующий день после окон-чания курса, потратив какое-то время на дополнительную подготовку. И в то же время не затягивать со сдачей эк-заменов. Некоторые вопросы и темы, подробно рассматриваемые на кур-сах, могут не встречаться в вашей пов-седневной практике, и тогда получен-

ные знания со временем начинают за-бываться.

Где можно сдать экзамены?Сейчас в мире существует два тестовых провайдера: Pearson VUE (www.vue.com) и Thomson Prometric (www.prometric.com), которые предоставляют возможность сдавать сертификационные экзамены через сеть авторизованных тестовых центров. В России авторизацию одного или обоих провайдеров имеет несколь-ко десятков тестовых центров. До не-давнего времени экзамены Microsoft можно было сдавать через любого провайдера. Однако минувшим летом Microsoft сообщила о том, что не про-длила договор с VUE и сдавать экза-мены Microsoft с ноября 2007 года мож-но будет только через Prometric. Най-ти списки тестовых центров, которые работают в вашем регионе, можно на сайте тестового провайдера.

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

Как проходят курсы? Что входит в стоимость обучения? Какой до-кумент об окончании курсов я по-лучу?Курсы из программ MCSA/MCSE пост-роены по методике интенсивного тре-нинга. Объяснение тренером теории занимает примерно 60% курса, осталь-ное время уходит на выполнение лабо-раторных работ.

Перед каждым курсом слушатели получают методические пособия (фир-менные учебники Microsoft), в которых есть теоретическая часть, описание лабораторных работ и диски с допол-нительными материалами и Trial-вер-сиями изучаемых на курсах продук-тов. Почти все учебники из программ MCSA/MCSE англоязычные, поэто-му знание технического английско-го очень желательно для максималь-но эффективного прохождения курса. Кроме учебников в стоимость обуче-ния входит, как правило, питание (обе-ды или ужины и кофе-брейки).

Многие учебные центры берут на себя обязательство оказывать сво-

им слушателям консультационную поддержку по тематике пройденных ими курсов. После окончания каждо-го курса слушатели получают так на-зываемый Certificate of Achievement – документ об успешно прослушанном курсе.

Сколько длятся отдельные курсы и программы подготовки к MCSA/MCSE? Какие существуют формы обучения (дневная, вечерняя, по вы-ходным)?Очные курсы Microsoft, входящие в программы MCSA/MCSE, длятся от 2 до 5 дней. День обучения – это восемь академических часов, занятия в боль-шинстве учебных центров ведутся с 10.00 до 17.30. При дневной форме обучения пятидневный курс – это пол-ная рабочая неделя, с отрывом от про-изводства.

Для тех слушателей, для которых дневная форма обучения невозмож-на в связи с занятостью на работе или учебе, несколько московских учебных центров предоставляют возможность пройти курсы вечером. При этом, на-пример, Академия корпоративных систем и «Звезды и С» читают интен-сивные вечерние курсы. Пятиднев-ный 40-часовой курс при этом чита-ется с понедельника по субботу вклю-чительно. В будние вечера занятия идут с 18.00 до 22.30, в субботу с 10.00 до 17.30. УЦ «Специалист» вечерние курсы проводит в другом режиме: за-нятия с 18.00 до 21.00 только по будним дням. В результате пятидневный курс при вечернем обучении растягивается на 2 недели, но при этом нет необходи-мости заниматься по субботам.

В этом же учебном центре предла-гается возможность прослушать кур-сы из программы MCSA, занимаясь только по субботам с 10.00 до 17.30. В этом случае обучение длится око-ло 5 месяцев.

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

Программы MCSE существенно длиннее. В «Академии Корпоративных Систем» самая короткая инженерская программа длится 29 учебных дней.

Page 73: 059 Системный Администратор 10 2007

71№10, октябрь 2007

образование

Можно ли разбить программу MCSA на несколько частей или необхо-димо слушать все курсы без пере-рывов?Естественно, и программу MCSA и тем более программу MCSE можно слу-шать с перерывами между курсами. Курсы во многих московских центрах идут с периодичностью раз в 4-5 не-дель. Поэтому ждать следующего «по-тока», с которым можно будет продол-жить обучение, долго не придется.

Мы рекомендуем нашим слушате-лям пройти единым блоком без пере-рывов первые 4 курса из программы MCSA (курсы 2285, 2276, 2273, 2277), сделать перерыв на месяц или два, в течение которого можно сдать 3 сер-тификационных экзамена, а затем за-канчивать программу курсом 2824, ли-бо продолжать слушать инженерскую программу.

Могу ли я подготовиться к серти-фикации на дистанционных курсах и дистанционно сдать тесты?Дистанционные курсы для подготовки к MCSA сейчас предлагают два мос-ковских учебных центра – «Звезды и С» и «Специалист».

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

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

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

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

ются за 5 дней, порой приходится го-дами пыль глотать».

Сколько стоит программа MCSA/MCSE с учетом стоимости тестов?Стоимость программ подготовки су-щественно отличается в разных учеб-ных центрах. В среднем для физи-ческого лица подготовка к MCSA на 19-дневной программе стоит око-ло 40 000 руб. Для юридического ли-ца та же программа стоит около 50 000 руб. Самая короткая програм-ма MCSE (29 дней обучения) стоит сей-час от 55 000 руб. для физических лиц и от 67 000 руб. для корпоративных за-казчиков.

В данном случае речь идет о стои-мости программ с учетом существен-ных скидок за единовременную предо-плату. Для выбора наиболее привлека-тельного по стоимости варианта име-ет смысл внимательно познакомиться со специальными предложениями, ко-торые регулярно публикуют учебные центры и которые позволяют снизить стоимость обучения еще на 5-10%.

Стоимость теста Microsoft для Рос-сии $50. По такой цене можно заказать и оплатить экзамен, если сделать это самостоятельно через сайт Thomson Prometric. В рублевом исчислении стоимость почти во всех тестовых цен-трах обычно не меньше 1500 рублей. В некоторых учебных центрах один или несколько экзаменов предлагают-ся в виде бонуса при оплате програм-мы обучения.

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

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

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

После сдачи первого теста присва-ивается статус MCP (Microsoft Certified Professional). На сайте Microsoft заво-дится личная страничка сертифициро-ванного специалиста, на которой ве-дется история сдачи тестов и присво-ения статусов.

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

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

Что делать, если очень долго не при-ходит сертификат по почте?По ссылке http://www.microsoft.com/Rus/Learning/cer t i f ication/security/default.mspx размещен телефон и ад-рес, позволяющие связаться с со-трудниками Microsoft в случае проб-лем с доступом к вашей персональ-ной странице или с доставкой серти-фикатов по почте.

В прошлом году компания Microsoft объявила о серьезных изменени-ях в своих программах сертифика-ции. Специалисты по работе с Vista и Windows Server 2008 будут иметь звания Microsoft Certified Technology Specialist (MCTS) и Microsoft Certified IT Professional (MCITP).

Новая система сертификацион-ных статусов Microsoft – тема для от-дельного разговора. Однако уже сей-час можно с уверенностью сказать, что сертификаты MCSA 2003 и MCSE 2003 в ближайшие годы будут по-пре-жнему очень актуальны и востребо-ваны на Российском рынке IT-специ-алистов.

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

Page 74: 059 Системный Администратор 10 2007

72

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

Есть ли в этом примере ошиб-ки? Где? Докажите. Если нет ошибок, то что делает этот скрипт? Что выве-дет функция var_dump()? Почему? Ес-ли вы затрудняетесь ответить, что тут написано, то вам следует прочесть эту статью!

Могу вам дать только одну подсказ-ку. В этом примере нет ни одной син-таксической ошибки, он весь рабочий! А теперь рассмотрим каждую конст-рукцию подробнее.

БлокиБлок – группа связанных между собой операторов, рассматриваемых как еди-ное целое. Операторы, образующие блок, логически связаны между собой. Иногда их называют составным опера-тором. Чаще всего они используются как составная часть других операто-ров, таких как if, switch, function и про-чих. Но блок может являться и самосто-ятельной единицей программы. Иног-да такое их применение целесообразно для улучшения читабельности кода.

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

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

Нетривиальный синтаксис в PHP, или Головоломки для кодера

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

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

<?php

function emp( $data = false ){ return $data || $data; } ↵ ($data == true);{; $arr = array(0,1,2,3,4,-1, ↵ -3, 8,4,3,2,1,0,-1);}

function x( $data ){ $data || $data = '123'; return $data;}

define('def456', !!7);{ $var1 = $var2 = $var3 = ~-1; $x = 'X'; $X[] = (array) 'emp';

{ $var1 = $var2 ? ↵ 'abc123' : def456;

<?php

{ $a = 1; $a += 4;

{ $b *= $a; }}

?>

$var1 += true; } ( $var2 <<= 1 );} ( $var3 += true );

def456 && $var1 <<= 2;

${$x[0]}[0][0]($var1) || $var1 -=1;

for ($i=$var=0, ↵ $sizeof=sizeof($arr); ↵ $i<$count,$arr[$i]<5; ↵ $i++,++$var);{ $ = ~(int) $var1 .= $var;}

$var = ~x(--$ );

var_dump($var);

?>

Page 75: 059 Системный Администратор 10 2007

73№10, октябрь 2007

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

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

Приведенные конструкции:

и

эквивалентны. Для кого-то вторая конструкция покажется неудобной, но так короче.

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

Кстати, не стоит думать, что $str присвоит значение $var. В результа-те интерпретации строка будет проч-тена как:

У тернарного оператора очень низкий приоритет. Поэтому следую-щий код:

то же самое, что и этот:

Он в любом случае вернёт «люб-лю PHP!», а вовсе не «Я люблю PHP!». К вопросу, как же все это так работает. Напомню, что строка в PHP читается в так называемой венгерской нотации, то есть справа налево, соответственно попутно выполняя инструкции.

Операции с одновременным присвоениемОперации с одновременным присво-ением, такие как /=, *=, -=, +=, %=, .=, очень удобно использовать. Опера-ция присвоения всегда возвращает переменную, стоящую в левой час-ти от знака равенства. Также в PHP разрешено множественное присвое-ние, что удобно при инициализации переменных.

Все три переменные будут ини-циализированы, и им будет присвое-на единица.

В данном случае такая запись экви-валентна $var++ (или ++$var, в данном примере не играет роли). Где это может быть удобно?

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

Сравните записи цикла, приведен-ные ниже:

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

Данные операции также можно ис-пользовать внутри блоков и прочих объектов:

Эта запись равносильна записи:

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

Преобразование типовPHP не является жестко типизирован-ным языком. Тип переменной опреде-ляется программистом или контекс-том её использования. Иногда требу-ется изменить тип. Привести к нужно-му типу переменную в PHP можно тре-мя способами.

Первый – использовать стандарт-ные функции для приведения типов: intval(), floatval(), doubleval(), strval(). Также напомню, что doubleval() являет-ся алиасом floatval(), так как, начиная с PHP 4 и выше, используется floatval(), double остался для совместимости. Для приведения к типам существует и универсальная функция settype(). До-полнительную информацию по данным функциям ищите в мануалах.

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

Также существует и обратное при-ведение в строку:

<?php

if ( $var == 'test' ){ $str = "Ok!";}

else{ $str = "No!";}

print $str;

?>

<?php

print $str = $var == 'test' ? ↵ "Ok!" : "No!";

?>

<?php

print $str = ( ($var == 'test') ? ↵ "Ok!" : "No!" );

?>

<?php

$var = "Я ".(1 == 1) ? ↵ "люблю PHP!" : "ненавижу PHP!";

?>

<?php

$var = ("Я ".(1 == 1)) ? ↵ "люблю PHP!" : "ненавижу PHP!";

?>

<?php

$var1 =$var2 =$var3 = 1;

?>

<?php

$var +=1;

?>

<?php

for ($i=0;;$i=$i+4) { … }

for ($i=0;;$i+=4){ … }

?>

<?php

$var = ($i * 4) + ($n = $n + 1);

?>

<?php

$str = "123.4567a89";

$i = (int) $str; // 123$d = (double) $str; // 123.4567$f = (float) $str; // 123.4567

?>

<?php

$i = 123.456;

<?php

$i =$n = 2;

$var = ($i *= 4) + ++$n;

?>

Page 76: 059 Системный Администратор 10 2007

74

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

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

В результате получится массив с од-ним элементом строкового типа. Эту же запись можно переписать и так:

Привести переменную к объекту можно аналогично. В результате бу-дет создано поле scalar, которое и бу-дет содержать значение:

А теперь настал черед нестандарт-ных приемов, которые позволяют кон-вертировать переменные из одного ти-па в другой. Это и есть третий способ. Итак, чтобы привести к числу строку, достаточно с ней произвести матема-тическое действие, тогда PHP автома-тически приведет строку к типу float, ес-ли в строке встретится точка, или к int, если будут найдены только цифры.

Л ю б о е в ы ш е п е р еч и с л е н н о е действие приведет строку к типу float(123.456).

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

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

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

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

Любая вышеперечисленная опера-ция над переменной приведет строку к типу int(123).

Из числа в строку можно привести, используя конкатенацию:

Приведет к string(“123”). С логи-ческими типами дела обстоят анало-гично:

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

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

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

Как обычно перечисляют массивы в циклах, например:

<?php

$sbuf = "123";

$sbuf = (array) $sbuf;

?>

<?php

$sbuf = (array) "123";

echo $sbuf[0];

?>

<?php

$sbuf = (object) "123";

echo $sbuf->scalar;

?>

<?php

$s = "123.456a78";

$s += 0;$s -= 0;$s *= 1;$s /= 1;

?>

<?php

$s = "123a4";

<?php

$s = 123;$s .= '';

?>

<?php

true + 0; // 1false + 0; // 0false + 1; // 1true + true; // 2

!123; // false!!123; // true;!!0; // false;!0; // true;

?>

<?php

for ($i=0; $i < count($arr); $i++){

<?php

for ($i=0, $count = count($arr); ↵ $i < $count; $i++){ print $arr[$i];}

?>

<?php

$arr = array(0,1,2,3);

for ($i= $n = 0, $str = '', ↵ $count = count($arr); ↵ $i < $count; $i++, $n += 2){ $str .= "$n.{$arr[$i]}\n";}

echo $str;

?>

<?php

// Самый простой способ решить // описаную нами задачу$arr = array(0,1,2,3,4,-1,-3,8,4, ↵ 3,2,1,0,-1);$var = 0;

for ($i=0, $count = count($arr); ↵ $i < $count; $i++){ if ( $arr[$i] > 5 ) break; ++$var;}

?>

$s += 0;$s -= 0;$s *= 1;$s /= 1;

?>

print $arr[$i];}

?>

$str = (string) $i;

?>

Page 77: 059 Системный Администратор 10 2007

75№10, октябрь 2007

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

В этом варианте задачи ответ бу-дет равен 7, так как индекс первого встретившегося числа, большего 5, это 7 ($arr[7] = 8). Но это же решение можно записать намного короче и да-же, по-моему, удобнее:

Здесь проверку вынесли в блок проверки условия, тем самым отказав-шись от оператора break, потому что те-перь проверка осуществляется в опе-раторе for. Выражения в блоке провер-ки указываются также через запятую, а трактуются как «ИЛИ». На этом с ус-ловиями можно закончить.

Оператор switch()Этот оператор многие знают, но немно-гие используют его вместо многоуров-невых проверок ifelse(). А ведь switch() очень даже удобнее использовать в та-ких случаях. Приведу пример:

Если честно, мне всегда не нрави-лись такие проверки. Намного прият-нее читать этот же код вот в такой не-тривиальной форме записи:

та, нужно воспользоваться функцией var_export():

Теперь в переменной содержится дамп, который соответствует синтак-сису PHP:

Мы записываем это в базу или ку-да нам нужно.

Теперь настал черед загрузки этой структуры. С помощью функции eval() это делается так:

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

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

Развивать эту тему с условиями и проверками можно долго, со време-нем вы сами найдете все плюсы и ми-нусы той или иной формы записи. Могу сказать только, что через switch() удоб-но эмулировать оператор goto (для тех, кто не знал, в PHP нет оператора пе-рехода по меткам goto), который слож-но повторить, если использовать толь-ко ifelse.

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

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

Для наглядности придумаю задачу, которую легче всего решить функци-ей eval(). Может, это не самый лучший пример, но все же…

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

Чтобы сбросить дамп в виде текс-

<?php

$arr = array(0,1,2,3,4,-1,-3,8,4, ↵ 3,2,1,0,-1);

for ($i=$var=0, ↵ $count=count($arr); ↵ $i<$count,$arr[$i]<5; ↵ $i++,++$var);

?>

<?php

if ( eregi("RegExp0", $str) ){ /* ваш код для обработки */}elseif ( eregi("RegExp1", $str) ){ /* ваш код для обработки */}elseif ( eregi("RegExp2", $str) ){ /* ваш код для обработки */}else{ /* ваш код для обработки */}

?>

<?php

switch (1)

{ case eregi("RegExp0", $str1): /* ваш код для обработки */ break;

case eregi("RegExp1", $str1): /* ваш код для обработки */ break;

case eregi("RegExp2", $str1): /* ваш код для обработки */ break;

default: /* ваш код для обработки */}

?>

<?php

$ini = array('host'=>'localhost','login'=>'root','pass'=>'','db_name'=>'mysql','boolean'=>false,'int'=>123,'float'=>123.456,'array'=>array(0,1,2,3));

?>

<?php

$ini_dump = var_export($ini, true);

?>

<?php

eval("\$ini = $ini_dump;");

?>

array ( 'host' => 'localhost', 'login' => 'root', 'pass' => '', 'db_name' => 'mysql', 'boolean' => false, 'int' => 123, 'float' => 123.456, 'array' => array ( 0 => 0, 1 => 1, 2 => 2, 3 => 3, ),)

<?php

$ini = null;

$loader = create_function('&$ini', ↵ "\$ini = $ini_dump;");$loader($ini);

?>

<?php

call_user_func( create_function ↵

Page 78: 059 Системный Администратор 10 2007

76

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

Мне нравится последний вариант. Таким вот образом эмулируется eval().

Есть еще один способ эмулиро-вать eval(), но он пригоден не для все-го. Например, создать массив из стро-ки или переменные из строки:

Дамп переменной приведен ниже:

Как видите, простой массив мож-но создать.

Ассоциативные массивы создают-ся аналогичным образом.

Будет создан массив следующей структуры:

Но, кроме как для инициализации переменных, такой способ больше ни на что не пригоден.

Использование битовых операторовМногие, даже опытные PHP-програм-мисты слышали о битовых операто-рах в PHP, но не используют их в сво-их программах. А зря.

Побитовые операторы позволя-

ют в десятки раз быстрее умножения и деления.

Логические операторыОчень интересно можно упрощать ус-ловия. Например, есть код:

Эту проверку с условием можно уп-ростить до безобразия:

Аналогичным образом упрощаем:

Записи получаются очень коротки-ми и удобными.

Иногда требуются функции, ко-торые совершают какие-то действия над данными, а затем возвращают просто true или false, в зависимости от того, есть данные или нет. Класси-ческий прототип такой функции:

Здесь, правда, можно удалить else, тогда запись будет короче:

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

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

Немного теории, так сказать, пов-торение курса информатики, а точнее булевой алгебры. Допустим, есть чис-ло 40 (101000). Нам надо разделить число на 2.

В двоичной системе деление про-исходит сдвигом вправо. Деление на 2 – это сдвиг вправо на 1 позицию. Последнее число отсеивается и оста-ется только 10100, это и есть не что иное, как 20 в десятичной.

Умножение происходит с точностью до наоборот. Умножать, как и делить, можно на числа, кратные двойке.

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

Это код в обычном виде выгля-дит так:

Битовые операции, как и матема-тические, можно использовать с не-посредственным присвоением. То есть наш пример можно переписать так:

Используйте сдвиги везде, где это возможно, так как сдвиги работа-

<?php

parse_str("arr[]=1&arr[]= ↵ \ndfsdfsdfdsf\nefrewrer ↵ \nererew&arr[]=fef");

var_dump($arr);

?>

array(3) { [0]=> string(1) "1" [1]=> string(28) "dfsdfsdfdsfefrewrerererew" [2]=> string(3) "fef" }

<?php

parse_str("arr[a]=1&arr[b]= ↵ 2&arr[c]=3");

var_dump($arr);

?>

array(3) { ["a"]=> string(1) "1" ["b"]=> string(1) "2" ["c"]=> string(1) "3"}

<?php

$a = 40;

$b = $a << 2; // $b = 160

?>

<?php

$a = 40;$b *= 4;

?>

<?php

$a = 40;$a <<= 2; //$a = 160

?>

<?php

flag || foo();

?>

<?php

if ( flag ){ foo();}

// Упрощенный вариант предыдущей// записиflag && foo();

?>

<?php

function foo ( $data = false ){ if ( !empty($data) ) return true; else return false;}

?>

<?php

function foo ( $data = false ){

<?php

define('flag', false);

function foo(){ print "Exec!";}

if ( !flag ){ foo();}

?>

('&$ini', ↵ "\$ini = $ini_dump;"), &$ini);

?>

Page 79: 059 Системный Администратор 10 2007

77№10, октябрь 2007

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

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

А можно даже так:

Но и это не предел аппроксима-ции, скажу я вам. Настоящие хакеры пишут так:

Вот это и есть нетривиальная фор-ма записи всего того, что было напи-сано выше. Одна строчка, и ничего лишнего!

А как обычно присваивают де-фолтные значения? Например, у нас в функции есть необходимость при-своить значение по умолчанию, ес-ли в функцию ничего не передали, но при этом значение берется из ка-кой-то функции. Обычно делается про-стая проверка на наличие данных в пе-ременной:

Переменные переменныхИногда есть необходимость использо-вания имен переменных или самих пе-ременных для переменных. Такие пе-ременные могут быть изменены ди-намически:

В данном случае будет выведена строка «Hello world!». Аналогичным об-разом можно создавать массивы пе-ременных:

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

Tips’n’tricksПриведу несколько полезных советов и приемов.

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

Следующий код вполне работос-пособный:

Но эту же проверку можно написать совсем по-другому:

Вот так – другое дело. Кстати, не стоит путать следующие две записи:

Функция foo1 вернет значение, а вот foo2 только true. Дело в том, что когда в выражении встречается логический оператор, то результат этого выраже-ния – всегда логическое значение ис-тины или лжи:

Переменные функцииВ PHP поддерживаются переменные функции. Это значит, что если в скрип-те попадется переменная, за которой следуют скобки, то PHP произведет по-иск функции c именем, которое при-своено в качестве значения перемен-ной. Затем будет предпринята попыт-ка выполнить эту функцию:

<?php

function foo ( $data = false ){ return $data ? true : false;}

?>

<?php

function foo ( $data = false ){ return empty( $data );}

?>

<?php

function foo ( $data = false ){ return $data || $data;}

?>

<?php

function f(){ return 'default';}

function foo( $data = false ){ if ( empty($data) ) $data = f();

return $data;}

?>

<?php

function foo1( $data = false ){ $data || $data = f(); return $data;}

function foo2( $data = false ){ return $data || $data = f();}

?>

<?php

function foo2( $data = false ){ return ( $data || ↵ $data = f() );}

?>

<?php

function f(){ return 'default';}

function foo( $data = false ){ $data || $data = f(); return $data;}

?>

<?php

function inc( $var ){ return ++$var;}

$foo = 'inc';

echo$i = $foo(5);

<?php

$var = 'Hello';$$var = " world!";

echo "$var ${$var}";

?>

<?php

$var['var1'] = 'Hello';$$var['var1'] = array(' wo', 'rl');${$var['var1']}[] = 'd!';

echo "{$var['var1']} ↵ {${$var['var1']}[0]} ↵ {${$var['var1']}[1]} ↵ {${$var['var1']}[2]}";

?>

if ( $data ) return true; return false;}

?>

?>

<?php

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;function foo( $data = false ){;;;;;;;;;$data || $data = 10;;;;;;;;;;;;;;;;;;return $data;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Page 80: 059 Системный Администратор 10 2007

78

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

Нестандартные символыОднажды я столкнулся с такой темой – Parse error: syntax error, unexpected T_STRING... Ну не впервой ошибки исправлять, полез смотреть: что, где и как… Открыв в том месте, где яко-бы была ошибка, я ошибки не нашел. И вот я решил посмотреть через HEX-редактор свой сорец (cм. рисунок).

И что бы вы думали? Там, где долж-на была быть ошибка, был пробел, яко-бы пробел, но вот ASCII-код его был 0xA0 (160). Это удивило меня, ведь код пробела 0x20 (32). Это знают и взрос-лые, и дети. Оказалось, что символ с кодом 0xA0 интерпретатором вос-принимается как разрешенный сим-вол. Это очень интересная особен-ность для тех, кто пишет обфускато-ры. Такую ошибку (правда это не обя-зательно может быть ошибка, все за-висит от применения данного симво-ла) найти очень непросто, а если чело-век еще и непрофессионал, то считай-те никогда не найдет. Ниже приведен-ный код работает замечательно:

Разделители в preg-функцияхМногие программисты, особенно начи-нающие, заблуждаются в том, что, кро-ме символа «/», в функциях preg_match, preg_replace и других функциях этого семейства никакого другого исполь-зовать нельзя. И во всех регулярных выражениях приходится еще его эк-ранировать:

На самом деле это не так. Исполь-зовать можно любой служебный пе-чатный символ. То есть «#», «@» и да-же «$». Но это нежелательно, ибо та-кие символы придется экранировать, что очень снижает читабельность ре-гулярного выражения. Но ведь на этом символы не заканчиваются. Почему бы не использовать символы, кото-

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

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

А надо ли все это?Вопрос задан по существу: а надо ли все это? То, что такие сложные конструкции существуют, не значит, что их нужно использовать повседневно. Мой при-мер в самом начале статьи показыва-ет, как можно писать, но нежелательно (за некоторым исключением отдельных выражений). Разбираться в таком коде очень сложно, но знание такого синтак-сиса, я считаю, обязательно!

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

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

P.S.: Кстати, ответ на мой вступи-тельный код: $var = 88. Это мое люби-мое число.

рых нет на клави-атуре, символы, которые можно получить, зажав <Alt> и набрав но-мер символа, на-чиная с нуля:n Alt + 0135 = ‡n Alt + 0134 = †n Alt + 0182 = ¶

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

Вот такой нетривиальный синтак-сис используется в регулярных вы-ражениях.

Массивы символовНе все знают, но многие догадывают-ся, что строка – это массив символов и со строками можно работать так же, как и с обычным массивом. Например, нижеприведенный алгоритм:

можно переписать таким вот образом:

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

<?php

$ = 1;

$ += 5;

echo $ ;

?>

preg_match(“/<p>.*?<\/p>/i”, $str);

preg_match(“‡<p>.*?</p>‡i”, $str);

Дамп скрипта

<?php

$abuf = array('a','b','c','d','e');

for ($i=0,$sizeof=sizeof($abuf); ↵ $i < $sizeof; $i++){ $sHex .= ↵ '%'.sprintf("%X", ↵ ord($abuf[$i]) );}

echo $sHex;

?>

<?php

$i1 = 120000000000000000000000000000;

$i2 = 1.2E+29;

?>

<?php

$sbuf = "abcde";

for ($i=0,$strlen=strlen($sbuf); ↵ $i < $strlen; $i++){ $sHex .= ↵ '%'.sprintf("%X", ↵ ord($sbuf[$i]) );}

echo $sHex;

?>

?>

Page 81: 059 Системный Администратор 10 2007

79№10, октябрь 2007

bugtraq

Обход аутентификации в Cisco Video Surveillance IP Gateway и Services PlatformПрограмма: Cisco Video Surveillance IP Gateway Encoder/Decoder версия прошивки 1.8.1 и более ранние; Cisco Video Surveillance SP/ISP Decoder Software версия прошивки 1.11.0 и более ранние; Cisco Video Surveillance SP/ISP версия про‑шивки 1.23.7 и более ранние.Опасность: Средняя.Описание: 1. Служба telnet в Cisco Video Surveillance IP Gateway Encoder/Decoder не аутентифицирует подключа‑ющихся пользователей. Удаленный пользователь может подключиться к уязвимой службе и получить администра‑тивный доступ.

2. Устройства Cisco Video Surveillance Services Platform и Integrated Services Platform содержат пароль по умолчанию для учетных записей «sypixx» и «root». Удаленный пользо‑ватель может подключиться к уязвимому устройству и по‑лучить административный доступ.URL производителя: www.cisco.com.Решение: Установите последнюю версию с сайта произ‑водителя.

Отказ в обслуживании в Cisco Catalyst Content Switching ModuleПрограмма: Cisco Catalyst Content Switching Module (CSM) 4.x, Cisco Catalyst Content Switching Module with SSL (CSM‑S) 2.x.Опасность: Средняя.Описание: 1. Уязвимость существует из‑за ошибки при об‑работке определенных TCP‑пакетов, полученных вне оче‑реди. Удаленный пользователь может с помощью специ‑ально сформированных TCP‑пакетов вызвать потребле‑ние всех доступных системных ресурсов или перезагру‑зить устройство.

2. Уязвимость существует из‑за ошибки в опции «service termination». Удаленный пользователь может с помощью специально сформированного TCP‑пакета вызвать потреб‑ление всех доступных системных ресурсов.URL производителя: www.cisco.com.Решение: Установите исправление с сайта производите‑ля.

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

Уязвимость при обработке имен файлов в Total CommanderПрограмма: Total Commander версии до 7.02 и 6.57.Опасность: Средняя.Описание: Уязвимость существует из‑за ошибки при обра‑ботке имен файлов, загруженных по FTP. Удаленный поль‑зователь может с помощью специально сформированного имени файла, содержащего символы обхода каталога, за‑писать файл в произвольную директорию на системе.URL производителя: www.ghisler.com.Решение: Установите последнюю версию 7.02 или 6.57 с сайта производителя.

Множественные уязвимости в продуктах VMwareПрограмма: VMware ESX Server 2.x, VMware ESX Server 3.x, VMware ACE 1.x, VMware ACE 2.x, VMware Player 1.x, VMware Player 2.x, VMware Server 1.x, VMware Workstation 5.x, VMware Workstation 6.x.Опасность: Средняя.Описание: 1. Уязвимость существует из‑за неизвестной ошибки, которая позволяет пользователю с администра‑тивными правами гостевой ОС вызвать повреждение па‑мяти для некоторых процессов хостовой ОС и выполнить произвольный код на целевой (хостовой) системе.

2. Уязвимость существует из‑за неизвестной ошибки, которая позволяет гостевой системе аварийно завершить работу процесса хостовой ОС. Уязвимости существуют в VMware ESX 3.0.1, 3.0.0, 2.5.4, 2.5.3, 2.1.3 и 2.0.2, VMware Workstation 6.0.0 и 5.5.4, VMware Player 2.0.0 и 1.0.4, VMware Server 1.0.3 и VMware ACE 2.0.0 и 1.0.3.

3. Целочисленное переполнение обнаружено в DHCP‑сервере. Удаленный пользователь может с помощью спе‑циально сформированного DHCP‑пакета вызвать пере‑полнение стека и выполнить произвольный код на целе‑вой системе.

4. Потеря значимости целочисленных обнаружена в DHCP‑сервере. Удаленный пользователь может с помо‑щью специально сформированного DHCP‑пакета вызвать переполнение стека и выполнить произвольный код на це‑левой системе.

5. Уязвимость существует из‑за некорректной обработ‑ки DHCP‑пакетов. Удаленный пользователь может с помо‑щью специально сформированного DHCP‑пакета выпол‑нить произвольный код на целевой системе.

6. Небезопасные привилегии на доступ к службам мо‑гут позволить локальному пользователю повысить свои привилегии на системе.

7. Уязвимость существует из‑за ошибки дизай‑на в VMware IntraProcessLogging.DLL ActiveX‑компонен‑те. Удаленный пользователь может с помощью специаль‑но сформированного веб‑сайта перезаписать произволь‑ные файлы на системе. Уязвимости существуют в VMware Workstation 6.0.0 и 5.5.4, VMware Player 2.0.0 и 1.0.4, VMware Server 1.0.3, и VMware ACE 2.0.0 и 1.0.3.URL производителя: www.vmware.com.Решение: Установите последнюю версию с сайта произ‑водителя.

Несколько уязвимостей в IBM Tivoli Storage Manager ClientПрограмма: IBM Tivoli Storage Manager Client 5.1, 5.2, 5.3 и 5.4.Опасность: Средняя.Описание: 1. Уязвимость существует из‑за ошибки провер‑ки границ данных в Client Acceptor Daemon (CAD). Удаленный пользователь может вызвать переполнение буфера и вы‑полнить произвольный код на целевой системе.

2. Уязвимость существует из‑за ошибки при инициали‑зации задач по расписанию. Злоумышленник может полу‑чить доступ к важным данным.URL производителя: www.ibm.com.Решение: Установите исправление с сайта производите‑ля.

Page 82: 059 Системный Администратор 10 2007

80

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

Пат тер ны пр о е к тир о в ания , фрэймворк-среды, RAD – все термины из области разработ-

ки программного обеспечения ещё не-сколько лет назад редко можно было услышать применительно к веб-про-

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

ходиться без профессиональных при-ёмов и инструментов проектирова-ния. Одним из них является использо-вание фрэймворков – каркасных сред для разработки приложений. Для язы-ка PHP эти среды начали появлять-

Выбираем фрэймворк-среду для веб-разработки

Кирилл Сухов

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

Page 83: 059 Системный Администратор 10 2007

81№10, октябрь 2007

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

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

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

Все эти задачи вполне решаемы и давно решены (не по одному разу). Цель использования каркасных сис-тем состоит в том, чтобы разработчик не разменивался на такие мелочи.

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

Налетай на тортики! (CakePHP)Первой рассмотрим CakePHP. Это среда, известная с 2005 года, является сейчас, наверное, самой распро-странённой. Изначально написанная программистом Ми-хаэлем Татариновичем (Michal Tatarynowicz), она сейчас ак-тивно развивается сложившимся сообществом.

Для работы с CakePHP понадобится установленный на компьютере веб-сервер с модулем mode_rewrite (пос-леднее не обязательно, но крайне желательно), интерпре-татор PHP не ниже 4.3.2 или пятой версии. Также понадо-бится сервер баз данных (MySQL, PostgreSQL или любая СУБД поддерживаемая ADODB).

Для установки скачиваем архив с программой с сай-та www.cakephp.org, распаковываем на территорию наше-го веб-сервера, переименовываем образовавшуюся папку во что-то более удобоваримое, чем cake_1.1.17.5612 (имен-но такая стабильная версия была доступна на момент на-писания статьи). После этого редактируем файл /app/config/database.php.default. В нём надо изменить следующие па-раметры:

После этого файл сохраняется с именем database.php, создаётся база данных с указанным именем (в данном слу-чае «cake») и всё! Cистема готова к работе.

Для проверки откроем в брузере url: http://localhost/cake. Если мы всё сделали правильно, должна открыться карти-на, как на рис. 1).

// используемая база данныхvar $test = array('driver' => 'mysql', // команда соединения (в данном случае можно // использовать 'mysql_connect' или 'mysql_pconnect' 'connect' => 'mysql_connect', // хост базы данных 'host' => 'localhost', //имя пользователя 'login' => 'geol', // пароль пользователя 'password' => 'superpassword', // название базы данных 'database' => 'cake', // название проекта 'prefix' => 'cake');}

Рисунок 1. CakePHP установлена

Page 84: 059 Системный Администратор 10 2007

82

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

Ещё один важный момент – убедитесь, что в установ-ленной среде для директории /app/tmp установлены права на запись для пользователя – веб-сервера.

После инсталляции перед нами откроется дерево папок:

Назначение папок понятно из их названий:n В папке /app будут располагаться папки вашего прило-

жения.n Во вложенной папке /config, как нетрудно догадаться, со-

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

n Содержимое папок /models, /views, /controllers будет разъяснено несколько позже. Строго говоря, они и воп-лощают модель MVC для CakePHP.

n Папка /temp предназначена для хранения данных кэши-рования, /plugins для подключаемых плагинов.

n В папке /cake расположены основные библиотеки сре-ды CakePHP. Изменять что-либо в них крайне не реко-мендуется.

n Папка /vendors используется для различных библиотек сторонних производителей.

Для того чтобы изменить размещение компонентов при-ложения, необходимо отредактировать файл app/webroot/index.php, поменяв в нём значение констант:

Зачем нужны все эти сложности?Прежде всего необходимо рассмотреть будущее предложе-ние в аспекте паттерна MVC (Model-View-Controller). Реали-зация этой модели – это основная задача CakePHP, да и ос-тальных PHP framework этого обзора (если вы тот самый, последний на этой планете разработчик, который не слы-шал о MVC, прочтите небольшой словарь терминов во врез-ке «Для тех, кто ещё не в теме»).

В связи с этими же соглашениями нужно несколько за-мечаний по построению базы данных. Если у вас присутс-твует модель, например Item, ей должна соответствовать таблица базы данных Items. Это ещё не всё. В этой табли-це обязательно присутствие первичного ключа, с именем id (ну кто бы мог подумать!), если таблице необходим вне-шний ключ, название поля должно быть вида tablename_id, где tablename – имя таблицы, на которую ссылается вне-шний ключ.

Что такое модель в данной реализации MVC? Это не просто таблица базы данных, это класс (несколько классов), наследуемый от базового класса фрэймворка AppModel. Разумеется, мы можем посмотреть его реали-зацию, но гораздо легче представить этот класс как абс-трактный (с оговоркой – насколько это возможно в объек-тной модели PHP 4). Реализация модели item будет сдела-на на основе такой конструкции:

Представление в CakePHP является обычным HTML-файлом, включаемым в PHP-код. Файл располагается в папке app/views/имя_модели/ и имеет расширение .thtml. Он представляет из себя обычный шаблон, снабженный не-которыми интеллектуальными функциями. Стоит обратить внимание на правила создания шаблона, описанные в ру-ководстве. Но для самой элементарной логики надо знать одно – имена полей форм, реализующих запросы к моде-ли, должны совпадать с именами полей таблицы базы дан-ных, используемой моделью.

Что у нас осталось?Мелочь – контроллер, отвечающий за бизнес-логику при-ложения. В данной среде он представляет собой класс, на-следуемый от базового класса AppController.

class Item extends AppModel { var $id;... }

class UsersController extends AppController { function register() { ... } ...}

/app /config

/controllers /components

/index.php

/models /plugins

/tmp

/vendors

/views /elements /errors /helpers /layouts /pages

/webroot /css /files /img /js

/cake

index.php

/vendors

VERSION.txt

if (!defined('ROOT')){// путь к директории, которая содержит каталог приложения define('ROOT', dirname(dirname(dirname(__FILE__))));}

if (!defined('APP_DIR'))

{// путь к каталогу приложения define ('APP_DIR', basename(dirname(dirname(__FILE__))));}

if (!defined('CAKE_CORE_INCLUDE_PATH')){// путь к ядру CakePHP define('CAKE_CORE_INCLUDE_PATH', ROOT);}

Page 85: 059 Системный Администратор 10 2007

83№10, октябрь 2007

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

Физически расположенный в директории app/controllers/, он принимает вводимую пользователем (посредством пред-ставления) информацию и реализует некоторое (в общем случае – любое) количество действий (в терминах PHP – методов).

Сам процесс написания приложения заключается в реа-лизации трёх вышеописанных компонентов и создании не-обходимых таблиц в базе данных.

Надо заметить, что пока фрэймворк только осложняет нам жизнь, навязывая структуру программы. В этом есть доля правды – писать на основе CakePHP сайты-визитки или небольшие домашние странички действительно озна-чает только усложнение жизни. Зато в сложных приложе-ниях такое явное разделение компонентов MVC-модели принесёт только пользу.

Да и к тому же ограничения закончились, теперь о вкус-ном. Прежде всего, это скаффолдинг (scaffolding – строи-тельные леса, подмостки) – понятие, пришедшее из Ruby on Rails.

Скаффолдинг – это возможность автоматически создать полный набор CRUD (Create, Retrieve, Update, and Delete)-операций (в данном случае стандартных форм с соответс-твующими кнопочками) и представления для любой таб-лицы базы данных. Она помогает быстрее начать манипу-лировать своими таблицами. Со временем вы можете пос-тепенно заменить сгенерированные операции и представ-ление своими собственными – которые, разумеется, бу-дут намного красивее и функциональнее. Всё, что нужно для включения этого механизма в ваше приложение, – до-бавить в класс контроллера переменную $scaffold:

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

Что ещё?Хелперы (helpers) – встроенные функции, облегчающие ра-боту с различными элементами HTML (в частности, с фор-мами и таблицами), с объектами javascript, с асинхронными запросами (ajax) в представлениях. Основная их задача – автоматизировать рутинные операции, связанные с HTML-представлением вашего приложения.

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

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

Для работы с HTML CakePHP использует шаблоны, опи-санные в файле cake/config/tags.ini.php, вы всегда можете их изменить, предварительно скопировав этот файл в ди-ректорию app/config/ вашего приложения.

Валидация данных – это всегда нудно, однообразно и, самое обидное, всегда необходимо. В CakePHP эта зада-ча предельно облегчена. К хелперам, берущим на себя эту работу, прилагаются предопределённые константы, облег-чающие процесс построения регулярных выражений для че-тырёх наиболее распространённых случаев такой провер-ки. Это VALID_NOT_EMPTY, VALID_NUMBER, VALID_EMAIL, и VALID_YEAR, названия констант говорят сами за себя, они определены в файле cake/libs/validators.php и не поддают-ся модификации (хотя есть обещание разработчиков о до-полнении их функционала).

Работа по валидации форм с применением этих конс-тант выглядит приблизительно так:

Разумеется, ключи массива $validate в настоящем при-мере – это имена полей некой HTML-формы.

Полный справочник функций хелперов вы можете изу-чить по адресу http://api.cakephp.org.

Хелперы нужны для помощи в реализации представле-ний. Для помощи в реализации бизнес-логики, при созда-нии контроллеров используются компоненты (расположе-ны в папке /controllers/components). Это небольшие (как пра-вило) общие мини-контроллеры, используемые обычно не-сколькими контроллерами приложения. Разумеется, есть возможность писать свои компоненты. Для этого создаёт-ся файл /controllers/components/some_component.php, со-держащий класс, наследуемый от класса object, методом которого передаётся в качестве аргумента ссылка на ис-пользуемый контроллер.

Примерно так:

Пример создания собственного компонента (из офици-альной документации):

Теперь добавляем в код контроллера:

class CategoriesController extends AppController{ var $scaffold;}

<?php class Item extends AppModel { var $name = 'FirstItem'; var $validate = array( 'itemname' => VALID_NOT_EMPTY, ↵ 'itemid' => VALID_NUMBER, 'email' => VALID_EMAIL ); } ?>

class FooComponent extends Object{function bar(&$controller) { }}

class FooComponent extends Object{ var $someVar = null; var $controller = true; function startup(&$controller) { // This method takes a reference to the controller // which is loading it. // Perform controller initialization here. } function doFoo() { $this->someVar = 'foo'; }}

var $components = array('Foo');

Page 86: 059 Системный Администратор 10 2007

84

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

и вызываем компонент из кода конт-роллера:

Коротко о других возможностяхACL-привилегии (ARO/ACO) опреде-лены в /app/config/acl.ini.php. Инструк-ции по определению доступа находят-ся в начале файла acl.ini.php.

Инициализировать базу данных для ACL можно из командной стро-ки выполнением следующей команды (из вашей директории /cake/scripts/):

Работа с ACL в среде построе-на через обращение к объектам Aro() и Aсo() (Access Request Objects – объ-екты запроса доступа и Access Control Objects – объекты контроля доступа соответственно).

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

На чём мы ещё не будем подроб-но останавливаться, но я обязатель-но упомяну? Прежде всего это сессии. Если кто-то из разработчиков не зна-ет о сеансах работы или Sessions, дан-ная статья пока не нужна, а всем ос-тальным спешу сообщить, что работать с ними CakePHP очень удобно.

дание приложений на базе CakePHP», опубликованных на сайте IBM.

Симфония с маленькой буквы (symfony)Первая версия среды symfony (пи-шется именно так, с маленькой буквы и ошибками) была выпущена в октяб-ре 2005 года. Надо заметить, что пи-салась эта среда на PHP 5 и для PHP 5, поэтому при её использовании можно смело забыть о существовании чет-вёртой ветки.

В основу этого фрэймворка его создатель Фабьен Потасье положил ORM (Object-Relationship Mapping)-биб-лиотеку Propel, свои наработки в дру-гом фреймворке – Mojavi, а также под-ход к работе с шаблонами из Ruby on Rails. Успешно стартовав, как осно-ва для стратегически важного порта-ла – сайта фирмы, торгующей ниж-ним бельём, symfony был задейство-ван в нескольких других проектах, пос-ле чего Фабьен открыл исходные ко-ды системы, передав разработку со-обществу.

На образованном сайте проекта (http://www.symfony-project.com) мож-но наблюдать всё, что это сообщество натворило с фрэймворком на настоя-

$ foo =& new Foo();

$ php acl.php initdb

Рисунок 2. Начало работы с symfony

Cake может сохранять данные сес-сии тремя способами (за это отвеча-ет константа CAKE_SESSION_SAVE): как временные файлы в директо-рии /Cake, используя механизм PHP по умолчанию, или использовать ба-зу данных.

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

Обязательно следует упомянуть кэ-ширование представлений. Такую воз-можность CakePHP получила с версии 0.10.9.2378_final. По умолчанию кэши-рование отключено, при его актива-ции (константа CACHE_CHECK в /app/config/core.php) среда будет хранить исходящие данные из обычных опе-раций в кэше для ваших пользовате-лей. При этом вы можете управлять со-держимым кэша, например, указывать части представления, которые кэши-роваться не должны, управлять вре-менем кэширования.

Пожалуй, стоит остановиться. За рамками описания осталось до-вольно много важного – верифика-ция данных, шаблоны, управление за-просами, механизм плагинов и компо-нент безопасности. Для ознакомления со всем этим богатством я ещё раз ре-комендую ознакомиться с документа-цией на CakePHP, а также с очень ин-тересной серией статей «Быстрое соз- Рисунок 3. Модель MVC в symfony

Page 87: 059 Системный Администратор 10 2007

85№10, октябрь 2007

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

Для рабочего приложения сре-ду лучше устанавливать через PEAR (да, да, symfony довольно давно до-ступна как PEAR-пакет), но для цели «попробовать» песочница идеальна.

Кроме непосредственно symfony, мы установили и некоторые необходи-мые для работы библиотеки.

Рассмотрим каждую из них:n pake – инструмент командной стро-

ки (к которому мы ещё вернёмся.n lime – инструмент для модульного

тестирования приложения.n Creole – движок абстракции ба-

зы данных. Так же, как и PHP Data Objects (PDO), он предоставляет интерфейс между вашим кодом и SQL-кодом базы данных и дела-ет возможным переключение меж-ду разными типами баз данных.

n Propel – используется для объек-тно-реляционного отображения (ORM). Он хранит объекты и пре-доставляет сервис для запросов к базе данных.

n Phing – инструмент командной строки для Propel.

Надеюсь у нас ещё будет возмож-ность рассмотреть их подробно, но по-ка надо настроить среду.

Разворачивание дерева папок и со-здание каркаса приложения я опускаю, поскольку в песочнице мы получим уже всё в готовом виде. А как это сде-лать при установке из PEAR или CVS (да, можно и так) подробно освящено в документации.

Типовой проект приложения, пред-лагаемый symphony, имеет следую-щую структуру:

Назначение любой из этих папок

щее время (надо заметить и продол-жает творить).

Каковы основные преимущества symfony?Разумеется, среда представляет стан-дартные возможности, среди них – уни-фикация доступа к базам данных, мо-дульность структуры и, конечно, реа-лизация модели MVC.

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

Поговорим ещё немного о «вкус-ностях» symfony. Среди возможностей среды такие «велосипеды», как встро-енная поддержка многоязычности, фильтрация входных данных, удоб-ная поддержка шаблонов и «хелпе-ров» a la Ruby on Rails, автопроверка и автоматическая подстановка значе-ний в формы при повторном заполне-нии. Мало?

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

Должен добавить, что, говоря о лёг-ком в сопровождении коде, разработчи-ки не кривили душой – в проект интег-рирована библиотека phpDocumentator, позволяющая получить качественную документацию с наименьшими поте-рями сил и времени.

Впрочем, за делоСначала скачиваем sandbox («пе-сочницу») symfony-среды с адре-са http://www.symfony-project.com/get/sf_sandbox.zip. Почему песочница? Просто так мы получим уже создан-ный symfony-проект, включающий все необходимые и стандартные приложе-ния. Так легче начать работать и осво-ить основные приёмы разработки.

Как водится, распаковываем ар-хив в корневую папку вашего веб-сервера. После этого (я исхожу из то-го, что установка производится на ло-кальном компьютере) набираем в бра-узере url: http://localhost/sf_sandbox/web/frontend_dev.php и любуемся ре-зультатом. Если вы увидели страницу приветствия (см. рис. 2) – значит всё в порядке, если нет… Ну тут я теряюсь. Сделать что-то не так очень трудно.

вы можете узнать из документации по системе.

Нам наиболее интересны папка apps/, содержащая папки приложений проекта (frontend and backend для ин-терфейса пользователя и админист-ратора), папка config/ с настройками проекта и web/ – корневая папка веб-сервера.

Типичная структура приложения выглядит следующим образом:

В данном дереве назначение папок cofig/, modules/ и templates/ не должно вызывать вопросов. В папке /i18n со-держатся настройки для интернаци-олизации интерфейса приложения, в lib/ – специфические ресурсы.

Структура типичного модуля:

Тут поясню, что в папке actions/ со-держатся классы (как правило, один класс), реализующие все действия

Рисунок 4. Архитектура Model-View-Controller

apps/ frontend/ backend/batch/cache/config/data/ sql/doc/lib/ model/log/plugins/test/ unit/ functional/web/ css/ images/ js/ uploads/

you_applications/ config/ i18n/ lib/ modules/ templates/ layout.php error.php error.txt

Module_name/ actions/ actions.class.php config/ lib/ templates/ indexSuccess.php validate/

Page 88: 059 Системный Администратор 10 2007

86

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

модуля. В папке validate/ находятся настройки, применяе-мые для проверок получаемых данных (например, провер-ка данных форм). Назначение остальных папок вопросов вызывать не должно.

Структура веб-сервера (web/) достаточно типична для обычного веб-сайта.

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

мы уже получим каркас типового приложения symfony.

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

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

> symfony init-app app_name

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

MVC (Model-View-Controller) – архитек-тура приложения, позволяющая выделить независимые фрагменты кода программы, отвечающие за состояние предметной об-ласти и бизнес-логики (Model), представле-ние (View), и контроллер (Controller), отве-чающий на действия пользователей и вы-зова изменения соответствующие модели или представлению (см. рис. 4).

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

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

ORM (Object-Relationship Mapping) – методика преобразования сущностей ба-зы данных в объекты, оперируемые прило-жением. Проще говоря, подобный подход позволяет рассматривать таблицы и поля базы данных как объекты и методы язы-ка реализации разрабатываемого при-ложения. Технологии, осуществляющие это преобразование, впервые появились в языке Java (Hibernate). В PHP ORM ре-ализовывалось в PEAR::DB_DataOobject, а также в таких продуктах, как EZP-DO и Metastorage.

ACL (Access Control List) – схема раз-граничения доступа для перечня субъек-тов или объектов, а также их групп (ро-лей), с соответствующими разрешениями или запретами к данным и функционалу системы, с использованием списка досту-па. Список определяет, кто или что может получать доступ к данному объекту и какие операции позволено проводить над объ-ектом. В типичных реализациях ACL каж-дая запись определяет субъект воздейс-твия и действия, доступ на которые есть у субъекта.

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

PDO  (PHP Data Object) – технология, появившаяся в PHP, начиная с версии 5.1. Применяется для унификации работы с ба-зами данных. Расширение не делает ни-чего сверхъестественного в плане техно-логии (для любой базы данных необхо-димо установить свой драйвер при сбор-ке PHP (--with-pdo-mysql, --with-pdo-pgsql, или --with-pdo-oci), но теперь нет необхо-димости применять свой набор стандарт-ных команд для каждой СУБД. Судя по то-му, как развивается следующая ветка ин-

терпретатора – PHP 6, «родные» расши-рения для работы с различными базами данных будут вообще вынесены из дист-рибутива.

PEAR (PHP Extension and Application Repository) – библиотека классов PHP с открытым исходным кодом. В стандарт-ную поставку PHP входит система управ-ления классами PEAR, которая позволяет легко скачивать и обновлять их.

Основная цель проекта PEAR:n предоставить авторам библиотек не-

противоречивые средства для совмест-ного использования кода вместе с дру-гими разработчиками;

n дать PHP-сообществу инфраструктуру для совместного использования кода;

n определить стандарты, которые помо-гут разработчикам писать компактный и часто используемый код;

n предложить утилиты для поддержания и распространения кода.

ADODB – это библиотека абстракт-ных классов, написанная на PHP и Python, основанная на некоторых концепциях от Microsoft's ActiveX Data Objects. Она позволяет разработчикам писать при-ложения максимально правильно с точ-ки зрения концептуального подхода к ра-боте с хранилищами данных. В результа-те у разработчика появляется возмож-ность изменить СУБД без необходимос-ти вносить исправления в программный код приложения.

YAML (YAML Ain't Markup Language – «YAML  –  не  язык  разметки») – создан как некоторая альтернатива XML. Пробле-ма XML – сложность редактирования и чте-ния текста человеком. YAML решает ту же задачу, что и XML, то есть представление произвольной сложности структур данных, но в форме, удобной для человека, такие же аналогии можно провести между HTML и WikiWiki-разметкой.

Page 89: 059 Системный Администратор 10 2007

87№10, октябрь 2007

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

бавление товара в каталог, изменение сведений о товаре (функции администратора).

Как symfony реализует MVC?Во-первых, эта модель несколько детализируется, а имен-но так:n в модели выделяется слой абстракции базы данных

и слой доступа к данным;n в представлении выделяется общий макет, логика пред-

ставления и шаблоны;n в контроллере появляется центральный контроллер, об-

щий для всего приложения и действия (actions), специ-фичные для конкретных страниц.

Вкратце эта схема представлена на рис. 3 (взято из ру-ководства «The Definitive Guide to symfony»).

Кажется, всё неправомерно усложнилось, но тут есть хорошие новости – писать отдельный скрипт под каж-дый пункт этой схемы не нужно. Всё гораздо проще – ма-кет и центральный контроллер symfony сгенерирует са-ма. Более того, библиотека Propel способна автоматичес-ки предоставить скелеты классов модели и сгенерировать код с учётом схемы данных. При этом другая библиотека, Creole, берёт на себя абстракцию базы данных (для пере-хода с одной СУБД на другую достаточно изменить один параметр конфигурации).

Как всё-таки начать работать?Для создания нового модуля, также подойдёт консоль, а именно команда:

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

В частности, будет создан файл actions/actions.class.php со следующим содержанием:

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

Хранитель параметров – это удобный способ скрывать атрибуты класса, которые задают необходимые параметры. Используется этот механизм следующим образом:

Или с использованием специальных методов:

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

Известно, что в пятой версии языка PHP появилась очень удобная (и по началу очень нестабильно работающая) функ-ция __autoload(). Symfony использует этот механизм на пол-ную катушку. До такой степени, что просто отпадает необ-ходимость в использовании операторов requaer/include! Вы можете смело писать код вида:

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

Подведём итогиМы рассмотрели две, пожалуй, наиболее популярные фрэймворк-среды. На самом деле их гораздо больше. Из са-мых известных, безусловно, представляют интерес Seagull PHP Framework, FUSE и, конечно, Zend Framework – про-дукт от разработчиков ядра PHP. В будущем постараемся поговорить об особенностях этих систем.

1. Официальная страница CakePHP – http://cakeforge.org/projects/cakephp.

2. Серия статей «Быстрое создание Web-сайтов с помощью CakePHP» – http://www.ibm.com/developerworks/ru/views/opensource/libraryview.jsp?search_by=CakePHP.

3. Официальная страница symfony-project – http://www.symfony-project.com.

4. Книга «The Definitive Guide to symfony» (официальная докумен-тация проекта symfony) – http://www.symfony-project.com/book.

5. www.ru.wikipedia.org.

>init-module app_name module_name

<?php class mymoduleActions extends sfActions{ public function executeIndex()

{ $this->forward('default', 'module'); }}?>

$response= new sfResponse();

$response->setParameter('foo', 'bar');echo $response->getParameter('foo'); => 'bar'

class MyClass{ protected $parameter_holder = null;

public function initialize ($parameters = array()) { $this->parameter_holder = new sfParameterHolder(); $this->parameter_holder->add($parameters); } public function getParameterHolder() { return $this->parameter_holder; }

}

$fooObject = new MySuperClass();

$response->getParameterHolder()->set('foo', 'bar');

echo $response->getParameterHolder()->get('foo'); => 'bar'

Page 90: 059 Системный Администратор 10 2007

88

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

Рождение PentiumПервые разработки по созданию про-цессора пятого поколения велись еще в 1989 году, но пользователи получи-ли его только в 1993. Новинка получи-ла название «Pentium», остающееся на слуху до сих пор. Новый чип требо-вал под себя новую материнскую пла-ту, поскольку новый разъем позволял использовать более низкое напряже-ние, вследствие чего снижалось энер-гопотребление (с пяти до трёх ватт). Суперскалярная архитектура (одно-временное выполнение нескольких операций) позволила увеличить про-изводительность процессора в четы-ре раза по сравнению с 486 DX. Пер-вые модели Pentium работали на час-тотах 60 и 66 МГц (более поздние мо-дели – до 200 МГц), имели 16 Кб кэш-памяти первого уровня.

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

Брэнд «Intel Inside» стал известным не хуже Coca-Cola и McDonalds. Теперь каждый рядовой пользователь знал: если его компьютеру нужен хороший процессор – пусть он будет от Intel.

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

Спустя год появился Pentium MMX. Процессор работал на более высо-кой частоте (до 266 МГц в версиях

для настольных компьютеров) и обла-дал увеличенным до 32 Кб L1-кэшем. Но главное его отличие от предшес-твенника составлял специальный на-бор инструкций (MMX расшифровыва-ется как MultiMedia eXtensions – Муль-тимедийные Расширения), адаптиро-ванных на обработку различных муль-тимедийных данных. Огромную попу-лярность чип снискал в основном сре-ди геймеров, восхищенных скоростью работы «заточенных» под него игро-вых приложений.

Убийца ПентиумаВ 1994 году инженеры AMD начали работать над одной из самых важных разработок в компании – процессором с кодовым названием Krypton, неофи-циально прозванным «убийцей Пен-тиума» (Pentium Killer). В свет же он

Микропроцессорные войны: хроника борьбы компаний Intel и AMD Часть 2

Илья Александров

Pentium, Pentium II, III, K6, Athlon… Новые поколения процессоров – новый этап противостояния Intel и AMD.

Page 91: 059 Системный Администратор 10 2007

89№10, октябрь 2007

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

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

K5 увидел свет в 1995 году в трёх модификациях – 75, 90, 100 МГц. От-личались они лишь частотой систем-ной шины. Было очевидно, что AMD катастрофически не успевает с вы-пуском своих новых процессоров. В 1996 году Intel уже вовсю прода-вала Pentium MMX с частотой почти в 200 МГц, а у AMD только-только под-готовилась к выпуску K5 PR100.

Именно с этого момента компания прибегла к так называемому «про-цессорному рейтингу». Число PR100 в названии обозначало, что произво-дительность процессора не меньше, чем у Intel Pentium 100 МГц, хотя реаль-ная тактовая частота этого K5 равня-лась 75 Мгц.

Техническое отставание AMD не-посредственным образом сказывалось на её прибыли. Компанию выручало производство Flash-памяти, которым она занималась вместе с Fujitsu.

Здесь нужно сказать, что помимо Intel и AMD x86-процессоры в то время делала небольшая компания NexGen. Возглавляемая талантливым руко-водителем Атиком Разой (Atiq Raza), NexGen прославилась выпуском свое-го Nx586. Таким образом, процессор пятого поколения с использованием RISC-архитектуры они сделали даже раньше AMD с её К5. Здесь не послед-няя заслуга Compaq, вложившей в ком-панию огромные инвестиции.

Аттик Раза понимал, что его не-большой фирме не выдержать конку-ренции. Он первым предложил AMD купить свою компанию. В результа-те NexGen стала частью AMD. Сумма сделки составила, согласно различным источникам, от 600 до 800 млн. долла-ров. Многие критиковали Джерри Сан-дерса (Jerry Sanders), в то время ис-полнявшего обязанности главы AMD, за подобный шаг, но в целом он вы-глядел оправданым. У NexGen была масса проектов и отличный штат со-трудников, а AMD имела мощные по-зиции на рынке.

PROfessional против K-6В 1995 году Intel выпустила Intel Pentium Pro, ориентированный на ры-нок рабочих станций и серверов. Он

стал первым x86-процессором, в ко-тором кэш-память второго уровня рас-полагалась не на материнской пла-те, а была интегрирована в ядро чипа. Благодаря этому скорость обращения к кэшу возросла в несколько раз. Объ-ем же кэш-памяти второго уровня мог достигать 2 Мб, хотя в продажу пос-тупили в основном модели с 256 Кб памяти.

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

AMD выпустила свой первый про-цессор, созданный совместно с NexGen. Презентован он был в начале 1997 го-да, одновременно с Pentium MMX.

Не обладая, в отличие от конкурен-та, встроенным кэшем второго уровня, чип AMD по количеству транзисторов тем не менее превосходил Pro вдвое.

Использование RISC-архитектуры и частота от 166 до 233 МГц сделали K6 самым производительным процес-сором года. Этого титула K6 лишился лишь с выходом Pentium II.

После провала K5 продажи K6 ка-зались просто огромными, процессор стал одним из самых успешных проек-тов в истории компании. У AMD нако-нец-то появились инвестиции для соз-дания новых разработок.

Но тут возникла новая проблема – заводы AMD работали на техническом процессе 0,35 микрон, что обуславли-вало большое энергопотребление и не позволяло создавать процессоры час-тотой выше, чем 233 МГц.

В начале 1998 года оборудование заводов было заменено. Они получи-ли возможность изготавливать процес-соры на более совершенном 0,25 мкм технопроцессе, и пользователи увиде-ли на полках магазинов K6, работаю-щие на частоте 300 МГц.

Эпоха Pentium IIВ 1997 с конвейера сошёл Pentium II. Самая первая модель с ядром, извес-тным как Klamath, была слабой, изго-тавливалась она еще по 0,35 мкм тех-процессу, что влекло за собой повы-шенное энергопотребление и тепло-выделение. Несмотря на 512 Кб L2-кэ-ша, встроенного в картридж с процес-сором и работающего на половине его

тактовой частоты, успехом стал поль-зоваться только усовершенствован-ный Pentium II с ядром Deschutes.

Deschutes стоил на порядок дешев-ле, хотя изменения претерпел незначи-тельные. Главное отличие от предшес-твенника – более совершенный про-цесс производства. В итоге процессо-ры на новом ядре грелись в 2-2,5 ра-за меньше, и тактовую частоту на них можно было наращивать без особых проблем.

AMD в эту пору пришлось нелегко. Разъем, под который был создан вто-рой Pentium, оказался заботливо запа-тентован Intel. AMD пришлось разраба-тывать свою архитектуру и системную логику, продолжая выжимать все что

Рекламная фотография Pentium III

AMD Athlon

Гектор Руис

Page 92: 059 Системный Администратор 10 2007

90

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

можно из платформ типа Socket 7. Про-цессор K6 был успешным чипом, при-чем настолько, что заводы не справ-лялись со стремительно возрастав-шей нагрузкой. Аналитики заявляли, что в начале 1997 года продажи AMD могли быть в три-четыре раза больше, если бы до выхода Pentium II компа-ния смогла выпустить достаточное ко-личество своих процессоров. Но объ-емы производства оставались весь-ма скромными.

Спасая ситуацию, инженеры AMD произвели на свет новый K6 II. Про-цессор имел частоту вплоть до 500 МГц при частоте работы системной шины в 100 МГц. При этом кэш второго уров-ня оставался на материнской плате. Процессор поддерживал новую тех-нологию 3D Now!, которая являлась аналогом технологии MMX от Intel. В 1999 году увидел свет K6 III, в кото-ром наконец-то появилась встроен-ная кэш-память второго уровня. Ни-чем другим он от предшественника не отличался.

Появление Athlon и CeleronВ 1998 году руководство Intel реши-ло выпустить бюджетный процессор. Им стал Celeron, являвшийся урезан-ной копией Pentium II. За цену, в не-сколько раз меньшую, чем у «старше-го брата», пользователи прощали но-винке её весьма скромную производи-тельность. Даже защитного картрид-жа у процессора не было – Intel эконо-мили на всем.

Первые Celeron базировались на уже обкатанном ядре Deschutes и работали на частоте до 433 МГц. Кэш-память второго уровня у Celeron рав-нялась 128 Кб, и этот объем оставал-ся стандартом де-факто для данной линейки долгое время. Небольшой кэш являлся одной из главных причин невысокой скорости работы процес-сора. Зато мода на разгон процессо-ров получила широкое распростране-ние именно с выходом Celeron. О раз-гонном потенциале этих чипов ходили легенды, и до сих пор бюджетная ли-ния Intel считается излюбленной «овер-клокерами».

В 1999 году AMD выпустила K-7, более известный как Athlon. Компа-ния презентовала к нему новый разъ-ем для своей системной логики – Slot A. Изготовленные по технологии 0,25 микрон, первые чипы данной ли-нейки выпускались с частотой от 500 до 600 МГц.

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

ли L2-кэшем 512 Кб, имели по три кон-вейера для целочисленных операций и для работы с числами с плавающей запятой, а также набор расширенных инструкций под названием Enhanced 3DNow! для работы с мультимедийны-ми данными.

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

В январе 2000 года ушёл со свое-го поста главный руководитель и идео-лог компании AMD Джерри Сандерс. Он остался почетным членом совета директоров, а его место занял Гектор Руиc (Hector Ruis), пришедший в AMD из Motorola.

Pentium III – третья атака империиВ 1999 году Intel выпустила свой новый процессор. Из анонсированных пре-имуществ Pentium III создатели особен-но выделяли новый набор команд SSE. Их использование улучшало произво-дительность процессора при работе с трёхмерной графикой, медиаприло-жениями, звуком. Первые модели ба-зировались на ядре Katmai и от свое-го предшественника принципиально отличались разве что системной ши-ной в 100 МГц.

Улучшенный третий Pentium рабо-тал на ядре Coppermine: техпроцесс 0,18 микрон, 9,5 миллионов транзис-торов и новый разъем Socket 370, поз-воливший работать на системной ши-не в 133 МГц. На основе новых разра-боток компания продолжала выпус-кать Celeron.

Инженеры Intel, поставившие себе целью «выжать все соки» из Pentium III, разработали ядро Tualatin. Создан-ный по технологии 0,13 мкм, с интег-рированным на кристалл кэшем вто-рого уровня объёмом 512 Кб, про-цессор работал на тактовой частоте вплоть до полутора ГГц. Intel сделала самый производительный процессор до наступления нового тысячелетия, но 1999 год все же стал годом AMD, сумевшей многократно увеличить пос-тавки своего Athlon. Лидером по-пре-жнему оставалась Intel, но AMD была уже серьезным конкурентом. Пользо-

Intel: хроники нашего времени2000 год – выпуск Intel Pentium 4. Первые модели на ядре Willamette были подверг-нуты большой критике. Pentium III на мень-шей частоте работал продуктивнее свое-го наследника.

Январь 2000 года – выход нового Pentium 4 с тактовой частотой 2200 МГц, содержавшего 55 миллионов транзис-торов.

Август 2002 года – начинаются работы по выпуску чипов на основе технопроцесса 0,09 мкм. В процессорах начинают исполь-зовать так называемую «технологию на-пряженного кремния» (strained silicon).

2003 год – Intel представляет техноло-гию Centrinо для ноутбуков.

2004 год – выход процессора Pentium 4 на ядре Prescott: 1 Мб кэша второго уровня, 125 миллионов транзисторов.

2005 год – выход Pentium 4D, ставше-го первым двухъядерным процессором на основе архитектуры x86. Руководство компании отныне возглавляет Пол Отел-лини (Paul Otellini).

2006 год – выход одного из самых слож-ных с инженерной точки зрения процессо-ра Itanium 2. Выход Intel Core 2 Duo: техпро-цесс 0,045 мкм, 290 миллионов транзисто-ров, 4 Мб L2-кэша.

Пол Отеллини

Page 93: 059 Системный Администратор 10 2007

91№10, октябрь 2007

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

ватели поверили, что, кроме выпуска-емых под маркой Intel Inside процес-соров, в мире существуют разработ-ки и других компаний.

Двадцать первый векIntel выиграла у AMD борьбу за мобиль-ный рынок. Точнее, AMD в этой борь-бе даже не принимала участия, так что в начале нового столетия практически все ноутбуки комплектовались процес-сором от Intel. Особую популярность снискали еще Pentium II Mobile и его об-легченная версия в лице Celeron.

Дело в том, что энергопотребление процессоров в портативных компьюте-рах очень важно. AMD же переходила на более совершенные техпроцессы (с 0,35 на 0,25 мкм, с 0,25 на 0,18 мкм и так далее) позже, чем Intel. Более со-вершенный техпроцесс позволяет про-цессорам меньше нагреваться и тра-тить меньшее количество энергии, по-сему Intel оказалась вне конкуренции.

В 2000 году AMD выпустила свой Athlon на ядре Thunderbird: 37 милли-онов транзисторов, 256 Кб кэш второго уровня. Этот процессор подвергся зна-чительной критике – за шину переда-чи данных шириной в 64 бит (у треть-его Pentium шина была в четыре раза шире) и за отсутствие боксовой ком-плектации (процессор с радиатором

и охлаждающим вентилятором). Поль-зователям пришлось самим выбирать кулеры для чипов, а поскольку ядро было не защищено, то повредить его было очень легко. Зато для Thunderbird был создан более совершенный разъ-ём Socket A.

AMD нанесла ответный удар Intel на рынке бюджетных процессоров, вы-пустив линейку под названием Duron. Так же, как и Celeron, Duron представ-лял собой урезанную версию старших моделей. Страдал главным образом кэш – он был уменьшен в четыре раза и составлял 64 Кб. Duron оказался про-изводительней конкурента и долгое время занимал лидирующие позиции

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

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

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

1. http://www.wikipedia.org.2. http://www.intel.com.3. http://www.amd.com.

Рубрику ведет Дмитрий Мороз

AMD: современная история2000 год – компанию возглавляет Гек-тор Руиз.

2001 год – выход AMD Duron на ядре Morgan. Поддержка набора команд 3DNow! Professional и SSE.

2002 год – переход на технологию 0,13 микрон. Выход нового Athlon XP 2200+, отличавшегося от предшественников ис-ключительно технологическим процессом производства.

2003 год – AMD подписала контракт с IBM. Теперь фирмы сотрудничают по ря-ду проектов. Выход процессоров на яд-

ре Barton, отличавшихся увеличенным (512 Кб) L2-кэшем. Анонс 64-битных мик-ропроцессоров Opteron.

2004 год – выход бюджетной линей-ки Sempron. Фактически это был тот же Thoroughbred, с увеличенной частотой сис-темной шины.

2005 год – выход Athlon 64 X2 – двухъ-ядерных процессоров, ориентированных на игровой рынок.

2006 год – AMD за 5,4 миллиарда дол-ларов покупает одного из крупнейших про-изводителей видеокарт – канадскую ком-панию ATI.

История процессоров Intel и AMD

Page 94: 059 Системный Администратор 10 2007

92

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

Хотя в названии книги нет слова «Microsoft», весь материал, за исключе‑нием первых пятнадцати страниц, це‑ликом и полностью посвящен вопро‑сам прикладного программирования с использованием криптографичес‑ких интерфейсов операционных сис‑тем семейства Windows. Книга разби‑та на пять глав. В первой главе осве‑

Несмотря на то что «Системный ад‑министратор» уже писал об этой кни‑ге в 2005 году, мы вновь решили об‑ратить ваше внимание на это класси‑ческое издание, посвященное устрой‑ству операционных систем, воспользо‑вавшись тем, что на этот раз речь идет о самом последнем, третьем издании (на языке оригинала вышло в 2006 го‑

Операционные системы: разработка и реализация. 3-е изданиеЭндрю Таненбаум, Альберт Вудхалл

ду). Предыдущее, второе, датируется далеким по меркам развития IT‑тех‑нологий 1997 годом.

По сравнению со вторым изданием практически весь материал перерабо‑тан, и добавлено много нового. В час‑тности, строение операционных сис‑тем рассматривается на примере пос‑ледней версии, специально создан‑ной для курса, читаемого автором в VU University Amsterdam, «учебной» UNIX‑подобной операционной систе‑мы MINIX 3.

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

ние B: около 29 тысяч строк кода с ком‑ментариями, переведенными на рус‑ский язык. Последнюю же версию са‑мой операционной системы лучше ска‑чать с сайта http://www.minix3.org.

Ну и в конце, пожалуй, будет умест‑ным привести цитату из книги «Just For Fun» создателя ядра операцион‑ной системы Linux Линуса Торваль‑дса: «У каждого есть книга, которая пе‑ревернула его жизнь. Библия. «Капи‑тал»... Меня лично вдохновила на под‑виги «Проектирование и реализация операционных систем» Эндрю С. Та‑ненбаума».

Криптографические интерфейсы и их использованиеПавел Хорев

щаются общие принципы современ‑ной криптографии. Оставшиеся че‑тыре главы посвящены интерфейсам CryptoAPI 1.0, CryptoAPI 2.0, криптогра‑фическим многокомпонентным объек‑там CAPICOM и системным утилитам Windows, предназначенным для рабо‑ты с ЭЦП и сертификатами соответс‑твенно.

Книга носит практический ха‑рактер. Для иллюстраций описывае‑мых методов работы автор использу‑ет несколько языков программирова‑ния: Object Pascal, С++ (при этом ука‑зываются особенности Borland C++ Builder и Microsoft Visual C++), а также JavaScript и VBScript.

Значительный объем книги зани‑мают многочисленные примеры кода, которые, к сожалению, трудночитае‑мы. Возможно, при использовании мо‑ноширинного шрифта вместо пропор‑ционального и более широкого при‑

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

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

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена издательством

«Питер».

«Питер»

2007

704

978-5-469-01403-4

≈ 780 руб.

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена издательством

«Горячая линия-Телеком».

«Горячая линия-Телеком»

2007

278

978-5-93517-331-9

≈ 325 руб.

Page 95: 059 Системный Администратор 10 2007

93№10, октябрь 2007

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

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

Вторая книга в обзорах этого меся‑ца, посвященная Windows Vista, явля‑ется переводом издания из популяр‑ной серии «Unleashed», издательства Sams. И так же, как и «Настольная кни‑га пользователя и администратора», она скорее ориентирована на изуче‑ние возможностей новой операцион‑ной системы в разрезе действий поль‑

пуска продукта. Тем не менее, в лю‑бом случае читателю будет приятно заглянуть на несколько месяцев в бу‑дущее и изучить новейшие техноло‑гии от Microsoft.

Несмотря на то что это «настольная книга пользователя и администратора», автор в предисловии честно предуп‑реждает о том, что она ориентирована на рядового пользователя, а не на ад‑министратора корпоративной сети. Вы не встретите описаний групповых по‑литик или примеров развертывания Vista при помощи BDD. Кстати, «адми‑нистратор» в названии книги появил‑ся старанием отечественного издате‑ля. Оригинальное же название звучит как «Winows Vista in Nutshell».

Книга поделена на двенадцать глав, каждая из которых посвящена отдельной теме.

С первой по третью главы нас зна‑комят с основными концепциями Vista

Windows Vista. Настольная книга пользователя и администратораПрестон Гралла

и пользовательским интерфейсом.Четвертая глава рассказывает

о файловой системе и работе с дис‑ками.

В пятой и шестой читатель знако‑мится со встроенными в Vista браузе‑ром и почтовым клиентом.

Таким темам, как сеть, безопас‑ность, реестр, мультимедиа, настрой‑ка производительности и работа с обо‑рудованием, также отдано по отдель‑ной главе.

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

Microsoft Windows Vista. Полное руководствоПол Мак-Федрис

зователя, а не администратора. Хотя охват рассмотренных тем значитель‑но больше. Тут и программирование WHS, и настройка клиента VPN.

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

В качестве же недостатка, по срав‑нению с «Windows Vista. Настольная книга пользователя и администрато‑ра», можно назвать отсутствие англо‑язычных названий утилит и пунктов меню в тексте. На данный недоста‑ток как на существенный часто ука‑зывают читатели, самостоятельно го‑товящиеся к сертификационным эк‑заменам Microsoft по переводной ли‑тературе.

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

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

работе в сети (локальной и Интернет), еще две – выполнению повседнев‑ных задач и основным возможностям Windows Vista, и еще одна часть рас‑сказывает о настройке и оптимизации операционной системы.

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

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена издательством

«Питер».

«Питер»

2008

656

978-5-469-01666-3

≈ 473 руб.

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена издательством

«Вильямс».

«Вильямс»

2007

864

978-5-8459-1302-9

≈ 359 руб.

Page 96: 059 Системный Администратор 10 2007

94

подписка на 2007 год

n Вы можете оформить подпискуналюбойроссийскийадрес.

n При заполнении квитанцииобя‑зательно РАЗБОРЧИВО укажи‑те фамилию, имя, отчество пол‑ностью, почтовый индекс и ад‑рес получателя (область, город, улица, номер дома, номер квар‑тиры), контактный телефон.

Редакционная подписка для физических лиц

n Вы можете оформить подпискуслюбогомесяцаналюбойсрок.

n Вграфе«Сумма»проставьтесуммузавыбранноеколичествономеров.Стоимостьодногономеражурнала150 руб.За4месяца (с сентябряподекабрь)–600 руб.НДСипоч-товые расходывключенывстои-мость.

nЖурналвысылаетсяпочтойпрос-тойбандерольютолькопослепос-тупленияденегнарасчетныйсчетикопии заполненного и оплачен‑ного бланка, отправленной в ре‑дакцию по факсу:(495) 628‑82‑53или на электронный адрес: [email protected].

Page 97: 059 Системный Администратор 10 2007

95№10, октябрь 2007

подписка на 2008 год

Российская ФедерацияnПодписнойиндекс:годовой–20780,полугодовой–81655 Каталогагентства«Роспечать»nПодписнойиндекс:87836 Объединенныйкаталог«Пресса России» Адресныйкаталог«Подписка за рабочим столом» Адресныйкаталог«Библиотечный каталог»nАльтернативныеподписныеагентства: Агентство«Интер‑Почта»(495)500-00-60,курьерская

доставкапоМоскве Агентство«Вся Пресса»(495)787-34-47 Агентство«Курьер‑Прессервис» Агентство«ООО Урал‑Пресс»(343)375-62-74 ЛинуксЦентрwww.linuxcenter.runПодпискаOn-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru

СНГ ВстранахСНГподпискапринимаетсявпочтовыхотделе-нияхпонациональнымкаталогамилипо спискуноменк-латуры«АРЗИ»:nАзербайджан – по объединенному каталогу россий-

скихизданийчерезпредприятиепораспространению

печати«Гасид»(370102,г.Баку,ул.Джавадхана,21)nКазахстан–покаталогу«РоссийскаяПресса»через

ОАО«Казпочта»иЗАО«Евразияпресс»nБеларусь–покаталогуизданийстранСНГчерезРГО

«Белпочта»(220050,г.Минск,пр-тФ.Скорины,10)nУзбекистан–покаталогу«Davriy nashrlar»российс-

киеизданиячерезагентствопораспространениюпе-чати«Davriy nashrlar»(7000029,г.Ташкент,пл.Муста-киллик,5/3,офис33)

nАрмения – по списку номенклатуры «АРЗИ» черезГЗАО«Армпечать»(375005,г.Ереван,пл.СасунциДа-вида,д.2)иЗАО«Контакт‑Мамул»(375002,г.Ереван,ул.Сарьяна,22)

nГрузия – по спискуноменклатуры«АРЗИ»черезАО«Сакпресса»(380019,г.Тбилиси,ул.Хошараульская,29)иАО«Мацне»(380060,г.Тбилиси,пр-тГамсахурдия,42)

nМолдавия–покаталогучерезГП«Пошта Молдовей»(МД-2012,г.Кишинев,бул.ШтефанчелМаре,134)

поспискучерезГУП«Почта Приднестровья»(МD-3300,г.Тирасполь,ул.Ленина,17)

попрайс-листучерезОООАгентство«Editil Periodice»(МД-2012,г.Кишинев,бул.ШтефанчелМаре,134)

nПодпискадляУкраины: Киевскийглавпочтамт Подписноеагентство«KSS»,тел./факс(044)464-0220

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

20780*

81655**

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

87836

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

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

Page 98: 059 Системный Администратор 10 2007

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№10(59), Октябрь, 2007 год

УЧРЕДИТЕЛИВладимир ПоложевецАлександр МихалевРУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинГлавный редакторэлектронного приложения«Open Source»Дмитрий ШуруповВнештатные редакторыАлексей БарабановДмитрий МорозАндрей БирюковКирилл СуховАлександр Майоров

РЕКЛАМНАЯ СЛУЖБАтел./факс: (495) 628-8253Евгения Тарабринаreс[email protected]

Верстка и оформление[email protected]Дизайн обложкиДмитрий РепинНиколай Петрочук

По вопросам распространенияобращайтесь по телефону:(495) 628-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (495) 628-8253Сайт журнала: www.samag.ru

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»Отпечатано типографиейГП «Московская Типография №13»Тираж 15000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание реклам-ных материалов ответственность не-сет рекламодатель. Все права на опуб-ликованные материалы защищены.

Читайтев следующемномере:

уважаемые читатели!

Продолжается подписка на 2008 год!

Приобрести новые и старые номера журналавы можете через интернет-магазин LinuxCenter.ru.

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

управляем Active Directory из командной строкиСерверные системы Microsoft семейс-тва NT 5 имеют большое количество графических средств для управления службой каталогов. Плюс к этому до-полнительный пакет ADMINPACK.MSI дает возможность администратору оперировать ресурсами Active Directory с десктопных операционных систем. Однако немногие знают, насколько эф-фективно можно осуществлять управ-ление и мониторинг службы каталогов при помощи утилит командной строки. Об этом читайте в следующем выпус-ке журнала.

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

Каталоги бизнес-данных – интеграция легким движением рукиПрактически в любой организации су-ществуют информационные системы и базы данных. Удобные средства ра-боты с информацией из разнообраз-ных источников предлагает мощный инструмент в составе MOSS 2007 – BDC или каталоги бизнес-данных. С помощью BDC можно легко органи-зовать единый полнотекстовый поиск, построить сводные отчеты и сфор-мировать аналитические показатели, опубликовать в Интернете динами-ческие выборки данных для заказчи-ков и партнеров. Подробности читай-те в ноябрьском выпуске «Системно-го администратора».

изменения в сертификации Microsoft: новые статусы MCTS и MCITPВ сертификационной линейке Microsoft в прошлом году произошли серьезные изменения. Как подготовиться к полу-чению новых статусов MCTS и MCITP? Можно ли апгрейдить имеющиеся сер-тификаты MCSA и MCSE? Какие бо-нусы имеют при получении новых ста-тусов специалисты с сертификатами по Windows 2003 Server? Ответы на эти и другие вопросы ищите в следующем номере журнала.