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

Page 1

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

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

ЛИ

Ь

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

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

№10(59) октябрь 2007

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

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

УЕ ХА Л

ВО

ТП

УС К

КА

БЫ С

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

Создаём отказоустойчивый сервис с помощью Cisco Content Switch Реализуем нестандартные правила управления доступом в Windows Server 2003 Нужен сервер коллективной работы? Используем Zimbra Расширяем возможности Windows Messenger Open Source-решение: сетевой шлюз Untangle

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

Защищаем систему с Outpost Security Suite Выбираем фрэймворк-среду для веб-разработки FAQ: как проходит обучение и сертификация на MCSA и MCSE



в номере 3 ТЕНДЕНЦИИ РЕПОРТАЖ 4 На выставке Softool состоялась конференция журнала «Системный администратор»

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

АДМИНИСТРИРОВАНИЕ 6 Создание и балансировка отказоустойчивых служб с помощью Cisco Content Switch

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

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

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

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

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

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

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

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

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

АДМИНИСТРИРОВАНИЕ «1С» 40 Пакетный режим запуска «1С:Предприятие 7.7»

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

ЧЕЛОВЕК НОМЕРА 44 Вся правда о «Сисадмине», или Диктофон в кармане

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

№10, октябрь 2007

БЕЗОПАСНОСТЬ 48 Реализуем нестандартные правила управления доступом на основе архитектуры организации в Windows Server 2003

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

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

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

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

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

ОБРАЗОВАНИЕ 68 FAQ: как проходит обучение и сертификация на MCSA и MCSE

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

WEB-ПРОГРАММИРОВАНИЕ 72 Нетривиальный синтаксис в PHP, или Головоломки для кодера

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

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

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

РЕТРОСПЕКТИВА 88 Микропроцессорные войны: хроника борьбы компаний Intel и AMD Часть 2

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

92 КНИЖНАЯ ПОЛКА 11, 17, 39, 79

BUGTRAQ


Журнал «Системный администратор» и учебный центр «Академия Корпоративных Систем» проводят викторину! Приглашаем вас принять участие в викторине! Трех участников, предоставивших наиболее полные и точные ответы на вопросы викторины, ждут призы!

Призы и подарки участникам Победителя ждет главный приз – бесплатное обучение* на двух авторизованных курсах по администрированию и безопасности ОС 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. Для исправления ситуации вы выполнили следующую команду: rm /var/log/*

7. Как сделать так, чтобы при нажатии в текстовой консоли на клавиши <Alt+Ctrl+Del> система начинала перезагружаться не сразу, а только через минуту? Как в течение этой минуты отменить перезагрузку? 8. В сети 192.168.8.64/27 находится веб-сервер, которому присвоен адрес 92.168.8.95. Будет ли он работать? Что в этой сети будет работать неправильно? Как исправить ситуацию, не меняя адрес веб-сервера и не меняя сети? 9. Вы пытаетесь вынуть диск из CD-привода, но сделать это не получается – при попытке размонтировать диск вам сообщают «device busy». Какая-то программа открыла файл, расположенный на диске. Как узнать, какая это программа?

однако это привело к странному результату: команда df сообщает, что свободного места по-прежнему нет, а ко10. Какие вы знаете способы узнать какие устройства в каманда du сообщает, что место незанято. а) В чём дело? кие каталоги смонтированы? Какие у этих способов неб) Как быть? достатки? 5. Пользователь looser имеет привычку подключаться к ба- 11. Два компьютера соединены кросс-кабелем. На одном поднят сервер DHCP, на другом – клиент. При загруззе данных MySQL при помощи клиентской программы ке клиент получает аренду от сервера, следовательно mysql и при этом из всех возможных способов переда«байты по кабелю ходят». Однако на ping со стороны кличи пароля базе, выбрал самый неудачный – передачу ента сервер не отвечает. Для расследования инцидента пароля в аргументе командной строки: администратор включает на сервере программу tcpdump mysql -u looser ‑p readthisifyounotlazy с тем, чтобы узнать доходят ли ICMP-пакеты до сервера. Как, работая на той же машине, на которой он запустил И в этот момент чудесным образом сервер начинает откликаться на ping. При этом команда «arp ‑an» на клиенклиентский процесс, прочитать его пароль от базы? те и на сервере показывает, что arp‑кэш сконфигурирован правильно. Каков может быть диагноз? Рецепт? 6. Как будет называться в Linux файл устройства, соответствующий второму логическому диску на Secondary 12. Сколько ног у осьминога? Slave в случае использования EIDE-интерфейса?

Решения присылайте по адресу OlgaG@hq.a-sys.ru или заполните форму на сайте www.samag.ru.

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


тенденции В 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. 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

Громовую птицу Mozilla начало штормить Проект Thunderbird меньше чем за месяц принес четыре серьезные новости для СМИ. И все как положено: две хорошие и две плохие. Началось все позитивно... Во-первых, в середине сентября было объявлено о появлении первого бета-релиза Open Source-версии Eudora (8.0.0b1). До недавнего времени email-клиент Eudora распространялся как проприетарное ПО. Компания Qualcomm, занимавшаяся разработкой Eudora, в 2006 году сделала из продукта Open Source-проект при поддержке органи-

№10, октябрь 2007


репортаж

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

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

ло не очень много. Однако уже после санием новшеств, ожидаемых в ретого, как автор вручил приз за лучший лизе PostgreSQL 8.3, число и значивопрос (докладчики нашей конферен- мость которых действительно впечатции вручали задавшему лучший воп- ляет. (К слову, 8 октября как раз вырос слушателю пакет с сертификатом шла первая бета-версия этого обновна годовую подписку на журнал «Сис- ления к СУБД.) темный администратор», DVD-архив Завершил конференцию Филипп всех выпусков журнала за 2002-2006 Торчинский, приехавший для выступгоды и другими приятными мелочами), ления из Петербурга, где базируету сцены вокруг выступавшего образо- ся российский офис компании Sun вался внушительный «кружок по ин- Microsystems. Его живое изложе тересам», оживленные беседы в кото- ние доклада «Передовые технологии ром не прекращались на протяжении OpenSolaris для системных админисвсего перерыва на обед. траторов» с обзором ключевых особенностей этой операционной систеВторая часть мы не оставило равнодушным никоконференции го из оставшихся слушателей. Всем Открыл вторую часть конференции желающим были роздан дистрибутив журнала Вячеслав Медведев из ком- с OpenSolaris и средствами для разпании «Доктор Веб», представивший работчиков. доклад «Новые технологии для защиты почтовых серверов UNIX». Под опас- В двух словах ностями, нуждающимися в защите, о выставке в данном случае понимались не только Поскольку конференция проводилась и не столько вирусы, сколько спам. в рамках столь масштабного события После этого Данила Корнев и Анд- для русскоязычного мира айтишников, рей Бешков из Microsoft устроили кра- каковым, бесспорно, является SofTool, сочную презентацию новых возмож- было бы, как минимум, некрасиво ностей Windows Server 2008. Для это- не упомянуть о самой выставке. го они специально привезли свое обоSofTool традиционно собрал велирудование и демонстрировали некото- кое множество как крупных, так и нерые базовые моменты работы с особо больших компаний, специализируюинтересным функционалом в действии. щихся в информационных технолоВсем осмелившимся задать вопросы гиях в широком понимании этого побыли щедро «разбросаны» подарки нятия, т.е. не ограничиваясь програмот Microsoft. мным обеспечением. Предпоследним докладчиком конДля поклонников операционной ференции стал Николай Самохвалов системы GNU/Linux и свободного ПО из «Постгресмен», который непос- вообще вновь была организована секредственно участвует в процессе раз- ция LinuxLand, где наиболее заметработки открытой СУБД PostgreSQL ным событием стало появление впе(реализацией XML-типа). Он высту- чатляющего стенда Mandriva. Но вмеспил с подробным и лаконичным опи- те с этим стоит отметить и отсутствие


репортаж

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

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

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

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

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

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

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

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

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

№10, октябрь 2007

Филипп Торчинский, компания Sun Microsystems

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

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

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


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

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

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


администрирование Сравнительные характеристики различных моделей CCS Итак, для начала немного о ситуации с которой я столкнулся и которая, наCCS 11000 WS-X6066-SLB-APC CSS11501 CSS11503 CSS11506 верное, знакома большинству системПроизводительность (Гбит/с) 4 4 6 20 40 ных администраторов. Количество портов 8 Встраивается в шасси 8* 32* 80* В нашей компании используются 10/100 Ethernet Cisco 6500 два выделенных DNS-сервера, на кажКоличество портов 2 – 2* 6* 12* дом из которых установлено два типа 1000 Ethernet DNS-демонов – MyDNS (порядка 10 000 Дублирование Нет Требуется два модуля Нет Нет Да доменов и 2 000 000 записей) для обподсистем служивания запросов, приходящих Стоимость 300 13 000 4 000 6 000 14 000 на вторичном рынке ($, US) из Интернета, и DNS cache для обслуживания запросов серверов, располо- * Модульная структура. Каждый модуль включает в себя 8 10/100 Ethernet или 2 1000 Ethernet-портов. женных внутри корпоративной сети. И хотя такое решение являлось до- ки, сложная структура при использо- Cisco работают годами даже в «тяжестаточно стабильным, но существовал вании более двух серверов, большое лых условиях». время переключения (порядка 5-7 сеВторой причиной, которая подвигряд проблем: n Отсутствие балансировки. Несмот- кунд) на запасной сервер, не позволи- нула меня на использование б/у устря на то что в корневых серверах ли использовать этот проект для устра- ройств, является поддержка технологии «Виртуальный маршрутизатор». DNS зарегистрированы оба DNS- нения вышеописанных проблем. После некоторого исследования Цена на б/у устройства Cisco составсервера, соотношение запросов к первому и ко второму DNS со- был обнаружен замечательный про- ляет около 10-40% от оригинальной дукт Cisco Content Switch (CCS), кото- стоимости, что дало мне возможность ставляло около 90/10. n Так как первичный сервер DNS рый позволил реализовать следующие установить большее количество CCS при сохранении конечной стоимости cache был указан первым на всех очень важные функции: n Балансировку нагрузки. решения при одновременном увеличесерверах в файле resolv.conf, то он же и обслуживал все 100% запро- n Обнаружение отказа одного из сер- нии количества «запасных» CCS. веров и исключение его из списка сов, приходящих из локальной сеиспользуемых. Избыточность и VRRP ти (для клиентов, не поддержиn Построение «виртуального» марш- Протокол VRRP – проприетарный провающих ротацию серверов DNS рутизатора. Если установлено два токол компании Cisco Systems, Inc., в resolv.conf). и более CCS, то в случае выхода позволяющий образовывать так наn Замедление обслуживания в слуодного из них клиенты прозрачно зываемый «виртуальный» маршручае отказа одного из серверов. Изпереключаются на запасной CCS. тизатор из устройств, поддерживаюза того, что вся система DNS постn Возможность использования более щих этот протокол. В каждом таком роена на протоколе UDP, клиенты трех серверов DNS. устройстве создается виртуальный инвынуждены ожидать стандартное терфейс виртуального маршрутизатовремя перед обращением к слера с адресом VIP (виртуальный IP-аддующему серверу, что вызывает Аппаратное обеспечение сильное замедление ответов сер- Семейство Cisco Content Switch вклю- рес – VIP address) , и все виртуальные чает в себя различные модели, начи- интерфейсы физических устройств висов. n В случае отказа первого сервера ная от простейших моделей типа Cisco объединяются в виртуальный маршрус DNS cache многие службы (ос- CCS 11000 до высокопроизводитель- тизатор. Адрес VIP является одинаконованные на проколах POP, FTP, ных Cisco CSS 11506 с полным дуб- вым для всех интерфейсов, входящих SMTP), использующие обратное лированием всех подсистем (см. таб- в виртуальный маршрутизатор, и клипреобразование адреса IP в домен- лицу). В моем случае скорость пото- енты, обращающиеся к этой системе, ное имя, отвечают клиентам с боль- ка к серверам DNS составляла поряд- запрашивают этот адрес. При запуске такой системы выбишой задержкой. И это также вызы- ка 10 Мбит/c, поэтому я остановился рается физический маршрутизатор со вает шквал сообщений от систем на CCS 11000. Здесь стоило бы указать причины, старшим IP-адресом, который и стамониторинга из-за превышения почему я привел цены для б/у обору- новится активным маршрутизатором. времени ожидания (timeout). При выходе из строя активного марn Невозможность указания более дования Cisco. В электронных устройствах од- шрутизатора один из запасных мартрех серверов DNS для многих служб, использующих DNS, что мо- ним из основных компонентов, кото- шрутизаторов переходит в активное жет быть серьезным ограничением рый влияет на долговечность, являет- состояние, и клиенты продолжают исся конденсатор. Ведущие производи- пользовать адрес VIP, расположенный для высоконагруженных сетей. тели сетевого оборудования приме- на активном CCS. Одно время я попытался обра- няют танталовые конденсаторы, котиться к проекту Linux-HA (The High торые в отличие от электролитичес- Структура сети Availability Linux Project), но такие огра- ких не подвержены процессу высы- Для примера я приведу структуру ничения, как отсутствие балансиров- хания. Благодаря этому устройства свой сети, состоящей из двух серве-

№10, октябрь 2007


администрирование Конфигурация Cisco Content Switch В этом разделе приведен пример конфигурации обоих CCS для создания виртуальных маршрутизаторов, служб и описание серверов dns1 и dns2: # Маршрут по умолчанию ip route 0.0.0.0 0.0.0.0 66.66.66.193 1 # Физический интерфейс CCS, который подключен к коммутатору # локальной сети и привязан к виртуальному интерфейсу # circuit VLAN3 interface ethernet-13 bridge vlan 3 # Виртуальный интерфейс, на котором определены наши # виртуальные маршрутизаторы circuit VLAN3 # Локальный адрес виртуального маршрутизатора # «Virtual router 1». Служит для обращения # к серверам DNS и работы протокола VRRP ip address 10.40.12.203 255.255.255.240

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

ров 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 и пересылает ответ запрашивающей стороне, находящейся в Интернете.

# Идентификатор виртуального маршрутизатора 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 cache keepalive dns1-cache ip address 10.40.12.196 active # Сервер dns1, демон MyDNS keepalive dns1 ip address 10.40.12.200 active # Сервер dns2, демон dns cache keepalive dns2-cache ip address 10.40.12.197 active # Сервер dns2, демон MyDNS keepalive 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


администрирование 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 # Включение трансляции адресов для прокотола UDP GROUP 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

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

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

№10, октябрь 2007

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

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

Проверка работы виртуальных маршрутизаторов Как уже упоминалось, в нашей системе сконфигурированы два виртуальных маршрутизатора, состояние которых можно проверить с помощью команды «show virtual-routers», выполненной на каждом CCS. Приблизительные результаты работы этой команды приведены ниже: Состояние виртуальных маршрутизаторов на CCS1: Interface Address: 10.40.12.203 VRID: 1 STATE: MASTER MASTER IP: STATE CHANGES: 3 INTERFACE ADDRESS: 66.66.66.203 VRID: 2 STATE: MASTER MASTER IP: STATE CHANGES: 3 LAST CHANGE:

10.40.12.203

66.66.66.203 09/06/2007

Состояние виртуальных маршрутизаторов на CCS2: Interface Address: 10.40.12.204 VRID: 1 STATE: BACKUP MASTER IP: STATE CHANGES: 2 LAST CHANGE:

10.40.12.203 09/09/2007

Interface Address: 66.66.66.204 VRID: 2 STATE: BACKUP MASTER IP: STATE CHANGES: 2 LAST CHANGE:

66.66.66.203 09/06/2007

Также необходимо проверить механизм переключения с основного CCS на запасной в случае аварии. Для этого отключаем CCS1 от сети и, выждав 2-3 секунды, проверяем опять состояние маршрутизатора на CCS2: sh virtual-routers 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:

Как можно убедиться, состояние виртуальных маршрутизаторов поменялось с «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». Если не указано имя конкретного сервиса, то будут показаны все сервисы. Для простоты приведу пример результатов проверки одного из сервисов: show service dns1 Name: dns1 Index: 10 Type: Local State: Alive RULE ( 10.40.12.200 UDP 53 ) REDIRECT DOMAIN: REDIRECT STRING:


администрирование KEEPALIVE: DNS1 MTU: CONNECTIONS: TOTAL CONNECTIONS: WEIGHT:

1500 0 0 1

STATE TRANSITIONS: MAX CONNECTIONS: TOTAL REUSED CONNS: LOAD:

0 0 0 2

Для проверки, как CCS определяет отказ одного из серверов, просто отключим первый сервер от сети и заново проверим состояние сервисов MyDNS и DNS cache на первом сервере: show service dns1 NAME: DNS1 INDEX: TYPE: LOCAL STATE: RULE ( 10.40.12.200 UDP 53 ) REDIRECT DOMAIN: REDIRECT STRING: KEEPALIVE: DNS1 MTU: 1500 CONNECTIONS: 0 TOTAL CONNECTIONS: 0 WEIGHT: 1

10 DOWN

STATE TRANSITIONS: MAX CONNECTIONS: TOTAL REUSED CONNS: LOAD:

0 0 0 2

show service dns1-cache NAME: DNS1-CACHE INDEX: 11 TYPE: LOCAL STATE: DOWN RULE ( 10.40.12.196 UDP 53 ) REDIRECT DOMAIN: REDIRECT STRING: KEEPALIVE: DNS1-CACHE MTU: 1500 STATE TRANSITIONS: CONNECTIONS: 0 MAX CONNECTIONS: TOTAL CONNECTIONS: 0 TOTAL REUSED CONNS: WEIGHT: 1 LOAD:

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

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

CONTENT RULES

STATE

SERVICES

SERVICE HITS

DNS

ACTIVE DNS1 DNS2

dns-cache

Active dns1-cache 100 dns2-cache 101

0 0

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

Балансировка других служб

Балансировка таких сервисов, как POP3, MySQL, FTP и HTTPD, выполняются аналогично, только с той разницей, что используются другие номера портов и соответствую0 щие протоколы (TCP или UDP). 0 В случае необходимости привязать клиента к конкрет0 2 ному серверу в кластере (например, используются сессии при работе с приложениями под управлением сервера Таким образом, мы видим, что CCS исключила серви- HTTPD или для доступа к серверам MySQL/FTP/POP3), можсы MyDNS и DNS cache, расположенные на сервере dns1, но воспользоваться опцией «advanced-balance sticky‑srcip», из списка активных, соответственно, дальнейшие запросы которая применяется в секции «content». будут переадресованы только сервисам на сервере dns2. Пример такой конфигурации может выглядеть следуОднако оба CCS будут продолжать проверять доступность ющим образом: сервисов на сервере dns1, и в случае восстановления раCONTENT HTTPD.EXAMPLE.COM ботоспособности оба сервиса будут включены в список активных. # Адрес VIP, на который приходят запросы

Проверка работы CCS со стороны внешнего клиента И, наконец, пора проверить, как работает вся система. Для этого воспользуемся программой dig, с помощью которой сформируем DNS-запросы к адресам VIP: # Проверка работы DNS cache для внешних доменов DIG +SHORT @10.40.12.195 GOOGLE.COM 64.233.167.99 72.14.207.99 64.233.187.99

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

66.66.66.5

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

10

vip address 66.66.66.195 PROTOCOL TCP PORT 80 advanced-balance sticky-srcip add service www1 add service www2 active

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.


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

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

Уязвимость при обработке .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. Решение: В настоящее время способов устранения уязвимости не существует.

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

Программа: ImageMagick 6.3.4, возможно более ранние версии. Опасность: Высокая. Описание: 1. Целочисленное переполнение обнаружено в функции ReadDIBImage(). Удаленный пользователь может с помощью специально сформированного изображения вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. 2. Уязвимость существует в функции ReadDCMImage() Уязвимость при обработке URL из-за некорректной проверки возвращаемого значения в Microsoft Agent функции ReadBlobByte(). Удаленный пользователь может Программа: Microsoft Windows 2000. с помощью специально сформированного изображения Опасность: Высокая. вызвать зацикливание приложения, используемого уяз- Описание: Уязвимость существует из-за ошибки в Microsoft вимую библиотеку, и потребить все доступные ресурсы Agent ActiveX-компоненте (agentdpv.dll) при обработке URL. на системе. Удаленный пользователь может с помощью специально 3. Уязвимость существует в функции ReadXCFImage() сформированного URL вызвать переполнение стека и выиз-за некорректной проверки возвращаемого значения полнить произвольный код на целевой системе. функции ReadBlobMSBLong(). Удаленный пользователь URL производителя: www.microsoft.com. может с помощью специально сформированного изобра- Решение: Установите исправление с сайта производитежения вызвать зацикливание приложения, используемо- ля. го уязвимую библиотеку, и потребить все доступные ресурсы на системе. Целочисленное переполнение 4. Ошибка завышения на единицу обнаружена в функ- в OpenOffice ции ReadBlobString() в файле magick/blob.c. Удаленный Программа: OpenOffice версии до 2.3. пользователь может с помощью специально сформирован- Опасность: Высокая. ного изображения вызвать переполнение буфера и выпол- Описание: Целочисленное переполнение обнаружено при обработке некоторых тегов в TIFF-изображениях. Уданить произвольный код на целевой системе. 5. Целочисленное переполнение обнаружено при обра- ленный пользователь может с помощью специально сфорботке DCM, DIB, XBM, XCF и XWD-файлов. Удаленный поль- мированного документа вызвать переполнение динамизователь может с помощью специально сформированного ческой памяти и выполнить произвольный код на целеизображения вызвать переполнение динамической памяти вой системе. и выполнить произвольный код на целевой системе. URL производителя: www.openoffice.org. URL производителя: www.imagemagick.org. Решение: Установите последнюю версию 2.3 с сайта проРешение: Установите последнюю версию 6.3.5-9 с сайта изводителя. производителя.

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

№10, октябрь 2007

11


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

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

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


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

В

опреки распространенной поговорке, называющей UNIX дружественным пользователю (правда, весьма разборчивым в выборе друзей), именно в адрес этой категории ОС чаще всего приходится слышать обвинения в трудности и непонятности. Само по себе это неудивительно: сложный инструмент требует соответствующей подготовки, однако всегда хочется всего и сразу, поэтому проблема «А как бы получить инструмент чуть менее мощный, но значительно менее сложный?» сегодня актуальна, как и пять-семь лет назад. В настольных системах для ее решения придумывают утилиты с труднопроизносимым названием «графические конфигураторы», а для облегчения труда администраторов серверов традиционно применяют веб-инРисунок 1. Добро пожаловать в eBox Platform! терфейсы. К л а с с и ч е с к и м п р е д с т а в и т е - сом существующих настроек придет- ным инструментом настройки во всех лем последних является Webmin ся повозиться – eBox затирает кон- версиях Ubuntu Server, начиная с Gusty (www.webmin.com) – по меткому опи- фигурационные файлы своими собс- Gibbon (7.10). санию разработчика Ubuntu Server Со- твенными). То же самое верно, конечно, и в от- Где взять? рена Хансена (Soren Hansen) «двусторонний транслятор «конфигураци- ношении Webmin, но в отличие от не- В разделе Downloads на сайте проеконный файл – HTML-форма», кото- го eBox старается всячески упростить та [1] можно найти те самые пакеты рый не столько упрощает настройку администрирование и сделать проце- Debian, о которых говорилось, ссылОС и ее сервисов, сколько позволя- дуру настройки доступной даже на- ку на репозиторий Subversion, а также ет делать это, не прибегая к команд- чинающему UNIX-администратору. eBox Installer и eBox Live CD!. Это особо ценное качество для неПервый из них – установочный ной строке. Дальнейшим логическим развити- больших компаний, располагающих CD на базе Debian Sarge с преднаем данной идеи являются проекты вро- специалистами по Windows, то есть строенным eBox «на борту», второй, де ClarkConnect (www.clarkconnect.com) людьми, знающими, как в принципе как нетрудно догадаться по названию, и специализированные дистрибути- решать ту или иную задачу, но пло- LiveCD с eBox (на базе Morphix). На мовы-брандмауэры: SmoothWall, IPCop, хо представляющими себе специфи- мент подготовки статьи Live-версия несколько отставала от установочной. m0n0wall [5] и другие. Их установ- ку UNIX-систем. При этом eBox Installer не слеПроект едва ли можно назвать мока максимально автоматизирована, а пользователю предлагается менять лодым – он развивается уже три года дует считать аналогом/конк уренлишь некоторые настраиваемые пара- и к тому моменту, когда вы будете чи- том ClarkConnect и других решений метры вроде порта, на котором должна тать эти строки уже, вероятно, достиг- «под ключ»: это действительно Installer, нет заветной версии 1.0. то есть средство для установки eBox – работать та или иная служба. В начале сентября его основной не более. Здесь нет дружественного Давайте познакомимся с новым, не совсем обычным игроком на этом разработчик испанская фирма Warp пользователю мастера первого запусNetworks (www.warp.es) завершила ка, как, скажем, в IPCop – только ориполе – eBox Platform [1]. Подобно ClarkConnect «сотова- формирование Совета директоров гинальный установщик Debian и необрищи», eBox – это среда для управ- eBox Platform (в который, кстати, вош- ходимые пакеты. К настоящему момент у слово ления сервисами и сетью через веб- ли представители компаний Nokia, Техинтерфейс. Однако в отличие от них, нологического университета г. Хель- «Debian» прозвучало в тексте столько он доступен не только в виде готово- синки и даже бывший вице-президент раз, что уже, наверное, стоит объясго CD, но и в форме deb-пакетов, ко- Microsoft!) и сейчас готовится к запус- нить склонность автора именно к этоторые можно интегрировать с подхо- ку коммерческих сервисов, построен- му семейству дистрибутивов. Секрет прост: другие разновидности Linux, дящим дистрибутивом. Иными слова- ных вокруг eBox. Сама же платформа является равно как и другие ОС, отличные ми, если у вас уже есть сервер на базе Debian и вы хотите просто снабдить полностью свободным ПО, постав- от Linux 2.6, eBox попросту не поддерего веб-интерфейсом, ничего переста- ляющимся на условиях GNU GPLv2. живает – в коде продукта присутствует навливать не придется (хотя с перено- По всей видимости, eBox будет основ- некоторое количество «дебианизмов»

№10, октябрь 2007

13


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

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

(debianisms), причем каких именно, мать кнопку «Save changes», располоразработчики, к сожалению, не сооб- женную в правом верхнем углу, чтощают. Утверждается, впрочем, что пе- бы сохранить сделанные изменения. ренос eBox на другой дистрибутив бу- При необходимости их можно и откадет несложным делом, но, как говорит- тить – нажмите на все ту же кнопку ся, «не знаем – не пробовали». «Save changes» и в появившемся меню Какой бы способ установки eBox выберите пункт «Discard changes». платформ вы ни выбрали, следует eBox русифицирован, но качестиметь в виду, что это действие явля- во перевода (на мой взгляд) оставляется потенциально опасным: eBox глу- ет желать лучшего, поэтому я предпобоко интегрируется в систему и заме- читаю общаться с ним на языке Марняет многие конфигурационные фай- ка Твена и Хемингуэя. Функционал eBox реализован в вилы своими собственными. Исходя из этого, ему следует от- де модулей, которые можно устанаввести отдельный компьютер (физи- ливать и удалять, подгоняя тем самым ческий или виртаульный), а также, ес- возможности платформы под свои ли установка производится не «с ну- нужды. Существующие модули можля», сделать резервные копии фай- но грубо разбить на две группы: работающие с сетью и работающие с серлов настройки. Процесс установки eBox на сущес- висами. Начнем наш обзор с первой твующую систему Debian описан в со- из них. ответствующем руководстве; мы же В свое время автор этих строк потбудем подразумевать, что инсталля- ратил не один день, пытаясь найти осция производилась посредством eBox нованный на Linux маршрутизатор Installer. В этом случае сразу после в духе IPCop (www.ipcop.org), способустановки и перезапуска компьюте- ный работать сразу с несколькими инра eBox будет доступен по адресу: тернет-провайдерами, причем не в реhttps://имя-хоста:443, пароль по умол- жиме балансировки или обеспечения чанию – ebox. отказоустойчивости, а по принципу «Вся почта через соединение А, вебЧто внутри? трафик с хостов 192.168.1.0/24 – через Сразу после входа в систему вашему соединение Б». вниманию предстанет следующее окВ конечном итоге было решено (см. рис. 1). но остановиться на обычном универИнтерфейс eBox построен с ис- сальном дистрибутиве и скриптах пользованием новомодных AJAX-тех- Shorewall (www.shorewall.net). eBox нологий, поэтому не забывайте нажи- Platform – единственная известная мне

14

система, способная решить эту задачу «из коробки». Давайте посмотрим, как именно. Базовым элементом сетевой подсистемы 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» реализуется толь-


администрирование ко прямым перечислением оставших- томатически: активировав некоторый n Файл-сервер и служба печати. ся 253 адресов. сервис, вы автоматически откроете доОсуществляет разделяемый доРусские буквы в названиях то- ступ к нему из соответствующих сетей. ступ к файлам по протоколу SMB/ же лучше не применять – возможны Модуль Redirects служит для проброCIFS (клиенты Microsoft Windows). странные ошибки, причем иногда с от- са портов (port forwarding) к серверам, eBox также может выступать в роложенным временем срабатывания. работающим за NAT. ли основного контроллера домена Впрочем, использование или неисВ том, что касается управления (PDC) Windows NT. Для настройки пользование сетевых объектов являет- службами, ситуация более простая. службы в любом из режимов достася делом добровольным – практически Здесь обычно срабатывает правило точно указать имя домена/Netbios и пользовательскую квоту. Управвсюду, где можно указать имя сетево- «один модуль – один сервис». Наибого объекта, система позволяет ввести лее интересные (на мой взгляд) модуление пользователями осущести обычный IP-адрес. ли, входящие в состав eBox, таковы: вляется через модуль Users. Вернемся к нашим провайдерам. n Jabber. Сервер популярной се- n Шейпинг трафика. Здесь можно Модуль Balance traffic решает задачу, ти обмена мгновенными сообщеограничить ширину канала для несформулированную несколькими паниями для компьютеров корпокоторых IP- и MAC-адресов, а также раграфами ранее: определяет проративной сети, а при желании – заранее созданных сетевых объеки для внешних хостов. В последвайдера (т.е. шлюз) для пакета, притов и служб (HTTP, FTP и так далее). шедшего от данного сетевого объекнем случае необходимо убедиться, Для правильной работы данного что в поле «Domain name» указата или IP-адреса по указанному промодуля очень важно ввести кортоколу (TCP/UDP) и имеющего соотно реально существующее доменректные значения в поля «Upload» ветствующие порты отправителя и поное имя, а флажок «Global Jabber и «Download» в настройках шлюза. лучателя. Network Connection» установлен. n Менеджер сертификатов. Ваш Хотите, чтобы все гости с ноутбуЧерез этот же модуль осуществляличный центр сертификации (CA), ками (которые получают IP из диапается и управление учетными запипозволяющий выдавать, обновлять зона 10.1.0.220-10.1.0.230) пользовасями пользователей Jabber. и отзывать сертификаты, использулись дешевым, но не слишком быст- n OpenVPN. Легковесное решение емые модулями eBox (например, расрым спутниковым каналом? Нет пробдля организации виртуальной чассмотренным выше OpenVPN) и сторонними приложениями (см. рис. 4). лем: создайте соответствующий обътной сети (VPN). Возможна работа ект и укажите его в качестве отправикак в режиме сервера, так и в ретеля (см. рис. 2). А установив переклюжиме клиента. Процедура настройПомимо этого присутствуют традичатель Traffic balancing в положение ки для типовых ситуаций (Road ционные серверы DHCP и NTP (с возEnabled, вы просто распределите наWarrior и безопасное соединение можностью синхронизации часов грузку между каналами: здесь все опдвух офисов) описаны в руководс- клиентских компьютеров по локальределяется весом, который вы указатве пользователя eBox [3]. Серти- ной сети), DNS-кэш (кстати, не на бали при создании шлюза. фикаты, необходимые для рабо- зе dnsmasq, как это обычно бывает, Несмотря на наличие столь богаты OpenVPN, можно получить че- а на основе полноценного BIND), почтотых возможностей по управлению трарез модуль Certificate Authority вый сервер с защитой от вирусов и спама (Postfix + SpamAssassin + ClamAV, фиком, я все же не спешу установить Management (см. ниже). eBox на свой маршрутизатор. Почему? Дело в том, что платформа не поддерживает ни PPTP, ни PPoE, а именно их-то и используют мои провайдеры. Судя по спискам рассылки и информации в trac [2], вряд ли можно ожидать, что ситуация изменится в ближайшем будущем, если только кто-то из заинтересованных лиц не выпустит соответствующий неофициальный модуль. Наконец, никакая уважающая себя локальная сеть не должна обходиться без брандмауэра. Для этих целей в eBox включены модули Packet Filter и Redirects (см. рис. 3). Настройки межсетевого экрана разбиты на три категории: правила фильтрации для сетевых объектов, доступ к сервисам и обмен данными между внутренними сеРисунок 3. Настройки пакетного фильтра. Красный фон кнопки «Save changes» тями. Часть настроек выполняется авсигнализирует о наличии несохраненных изменений

№10, октябрь 2007

15


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

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

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

А как оно устроено?

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

Стройная объектно-ориентированная структура 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 Platform посдля веб-интерфейса, но и для генера- тавляется с полным комплектом доции конфигурационных файлов. Каж- кументации, причем весьма неплоходый раз, когда вы сохраняете настрой- го качества. Вашему вниманию предки, платформа заново создает их, ис- лагаются три руководства (на английпользуя заранее приготовленные шаб- ском и испанском языках): User's Guide лоны (кстати, это означает, что все из- (для пользователей), Developer's Guide менения, внесенные в конфигурацию (для разработчиков) и Installation Guide вручную, будут потеряны), а затем пере- (инструкция по установке), не считая запускает соответствующие сервисы. контекстной справки, которая появляНаконец, последний неотъемлемый ется по щелчку на ссылке «Show Help» компонент работающей eBox-платфор- в веб-интерфейсе. мы – это демон GСonf (gnome.org/ Руководство пользователя опиprojects/gconf). Традиционно ассоции- сывает основные функции eBox. Оно рующийся с рабочим столом GNOME не является заменой учебника по той

16

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

И наконец... По законам жанра, здесь должна стоять фраза вроде: «Конечно, мы рассмотрели далеко не все возможности eBox. За бортом остались...», но я предпочту этого не делать. Моей целью было дать вам общее представление о платформе eBox Platform накануне ее официального запуска, и если после прочтения у вас сформировалось мнение «Да, на это стоит посмотреть» или, наоборот, «Нет, мне это не нужно» – значит, я не зря потратил время на ее написание. Со своей стороны, думаю, что eBox будет интересен небольшим предприятиям, которым нужен надежный и простой в управлении сервер по типу «все в одном», а также консалтинговым фирмам, внедряющим Linux-решения в таких организациях. 1. Сайт eBox Platform – http://www.eboxplatform.com. 2. eBox Trac – http://trac.ebox-platform.com. 3. eBox User's Guide – http://www.eboxplatform.com/users-guide. 4. Мичурин А. Оцениваем возможности mod_python и mod_perl. //Системный администратор, №8, 2007 г. – С. 62-66. 5. Яремчук С. m0n0wall – дистрибутив для создания межсетевого экрана. //Системный администратор, №5, 2007 г. – C. 74-77.


bugtraq Множественные уязвимости в CA ARCserve Backup

ListForRestore, rxcReadSaveSetProfile, rxcInitSaveSetProfile, rxcAddSaveSetNextAppList, rxcAddSaveSetNextFilesPath Программа: CA ARCserve Backup for Laptops and Desktops List, rxcAddNextBackupSetIncWildCard, rxcGetRevisions, r11.5, CA ARCserve Backup for Laptops and Desktops r11.1 SP2, rxrAddMovedUser, rxrSetClientVersion, rxsSetDataGrowthS CA ARCserve Backup for Laptops and Desktops r11.1 SP1, CA cheduleAndFilter и rxrSetMessageLogSettings. Удаленный 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, 7. Уязвимость существует из-за ошибки проверки граCA Desktop Management Suite 11.1, CA Desktop Management ниц данных в функции GetUserInfo(). Удаленный пользоваSuite 11.0, CA Protection Suites r2 тель может с помощью специально сформированного заОпасность: Высокая. проса вызвать переполнение стека и выполнить произвольОписание: 1. Уязвимость существует из-за того, что обра- ный код на целевой системе. ботчики команд, отвечающие за сетевые запросы, не про- URL производителя: www.ca.com. веряют, является ли их сосед аутентифицированным. Уда- Решение: Установите исправление с сайта производителенный пользователь может выполнить произвольный ля. код на целевой системе с привилегиями учетной записи SYSTEM. 2. Уязвимость существует из-за ошибки проверки гра- Выполнение произвольного кода ниц данных в команде rxrLogin при обработке имени поль- в Microsoft Visual Studio зователя в библиотеке rxRPC.dll. Удаленный пользователь ActiveX‑компонентах может послать на порт приложения TCP/1900 специально Программа: Microsoft Visual Studio 6 Enterprise, Microsoft сформированный RPC-пакет, содержащий слишком длин- Visual Studio 6 Professional. ное имя пользователя, вызвать переполнение стека и вы- Опасность: Высокая. полнить произвольный код на целевой системе. Описание: 1. Уязвимость существует из-за того, что мето3. Уязвимость существует из-за ошибки проверки гра- ды StartProcess() и SyncShell() в PDWizard.ocx ActiveX-компониц данных при обработке пароля пользователя в коман- ненте могут быть использованы для выполнения произвольде rxrLogin в библиотеке rxRPC.dll. Удаленный пользова- ных команд на системе. Также сообщается о наличии слетель может послать на порт приложения TCP/1900 специ- дующих небезопасных методов: SaveAs(), CABDefaultURL(), ально сформированный RPC-пакет, содержащий слишком CABFileName() и CABRunFile(). длинный пароль пользователя, вызвать переполнение сте2. Уязвимость существует из-за наличия методов Load() ка и выполнить произвольный код на целевой системе. и SaveAs() в VBTOVSI.DLL ActiveX-компоненте. Удаленный 4. Целочисленное переполнение обнаружено при об- пользователь может загрузить локальный файл и сохраработке пароля пользователя в команде rxrLogin в библи- нить его в произвольной директории на системе. отеке rxRPC.dll. Удаленный пользователь может послать URL производителя: www.microsoft.com. на порт приложения TCP/1900 специально сформирован- Решение: В настоящее время способов устранения уязвиный RPC‑пакет, вызвать переполнение буфера и выпол- мости не существует. нить произвольный код на целевой системе. 5. Уязвимость существует из-за ошибки при обработке имен файлов в команде rxrReceiveFileFromServer в библио- Переполнение буфера в Altnet Download теке rxRPC.dll. Удаленный пользователь может подключить- Manager ActiveX-комопненте ся к порту TCP/1900 приложения, отправить запрос уязвимо- Программа: Altnet Download Manager 4.0.0.6, возможно, бому приложению на загрузку файла и с помощью специаль- лее ранние версии; Kazaa 3.2.7, возможно, более ранние но сформированного имени файла, содержащего символы версии; Grokster 1.3.3, и более ранние версии; Grokster 2.6. обхода каталога («..\»), перезаписать произвольные файлы Опасность: Высокая. на системе с привилегиями учетной записи SYSTEM. Описание: Уязвимость существует из-за ошибки проверки 6. Переполнение буфера обнаружено при обработ- границ данных в методе Install() в ADM4 ActiveX-компоненке аргументов в командах rxsAddNewUser, rxsSetUserInfo, те (adm4.dll). Удаленный пользователь может с помощью rxsRenameUser, rxsSetMessageLogSettings, rxsExportData, специально сформированного веб-сайта передать слишrxsSetServerOptions, rxsRenameFile, rxsACIManageSend, ком длинный аргумент уязвимому методу, вызвать переrxsExportUser, rxsImportUser, rxsMoveUserData, rxsUse полнение стека и выполнить произвольный код на целеLicenseIni, rxsLicGetSiteId, rxsGetLogFileNames, rxsGetBackup вой системе. Log, rxsBackupComplete, rxsSetDataProtectionSecurity Примечание: Приложение входит в состав Kazaa Data, r xsSetDefaultConfigName, r xsGetMessageLog и Grokster. Settings, rxsHWDiskGetTotal, rxsHWDiskGetFree, rxsGetSub URL производителя: www.altnet.com/help/downloader.asp. Dirs, rxsGetServerDBPathName, rxsSetServerOptions, Решение: В настоящее время способов устранения уязвиrxsDeleteFile, rxsACIManageSend, rxcReadBackupSetList, мости не существует. rxcWriteConfigInfo, rxcSetAssetManagement, rxcWriteFile

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

№10, октябрь 2007

17


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

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

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


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

В

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

№10, октябрь 2007

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

ку на него можно публиковать в виАналогично при наведении мышки на рисунок во вложении во всплываюде RSS/Atom. Не заблудиться в больших объ- щем окне будет показано его изобраемах информации позволяет мощная жение. Если это имя документа, то посистема контекстного поиска. Исполь- казывается имя пользователя, создавзуя Advanced Search, можно искать шего его, URL по которому можно пронужное слово по любому полю элект- читать остальным пользователям. ронного письма, включая тексты сообВ качестве браузера можно испольщений, вложения и документы. зовать любое популярное сегодня реА чтобы не потерять сообщения, шение – Internet Explorer, Mozilla Firefox содержащие определенную темати- или Safari. Поэтому при использоваку, но полученные от разных пользо- нии Zimbra нет необходимости соблювателей, можно задействовать сис- дать единообразие программной сретему тегов (Tags). При получении та- ды в организации. кого письма просто выбираем в меню Но это еще не все сюрпризы. Разпункт «Tag Conversation» и указыва- работчики предоставили специальное ем, к какому тегу относится это сооб- API, позволяющее создавать дополнищение. Если тега по данной теме еще тельные плагины, расширяющие вознет, то выбираем «New Tag» и созда- можности Zimbra, называемые zimlets. ем новый тег. Все просто и одновре- Зимлеты предназначены для интеграции ZCS-продуктов и сервисов, разраменно удобно. Серверная и клиентская части раз- ботанных третьими лицами. Все, что сказано выше, как раз и ределены. В последней применена технология AJAX, возможности которой ализуется с помощью zimlets, но на разработчиками использовали по мак- этом список возможностей не заканчисимуму. вается. Например, если навести мышку Так, например, при наведении мыш- на адрес в сообщении, зимлет, подклюки на имя контакта, почтовый адрес чившись к Yahoo Maps, покажет карту в заголовке письма или в тексте до- с местонахождением этой точки. кумента, появится всплывающая подИли щелчок на телефонном носказка с полной информацией о дан- мере запустит Skype, Cisco VoIP или ном человеке или сервисе (см. рис. 2). GnomeMeeting, позволяя сразу погоЕсли это дата, то появится окно кален- ворить с этим человеком. даря, показывающее запланированПосетив демо-страницу проекные события на этот день, причем по- та [3] или скачав ролик, можно познанимаются некоторые английские сло- комиться с основными возможностява вроде tomorrow, today. ми zimlets.

19


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

Установка Zimbra в Ubuntu

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

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

20

Использование 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 должна выглядеть так: 127.0.0.1 localhost.localdomain localhost

Любое недоразумение сразу же приведет к ошибке при установке. Дальше все просто. Скачиваем архив под свой дистрибутив (чуть больше 200 Мб), распаковываем его и запускаем установочный скрипт: $ 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


администрирование Если какого-то пакета не будет найдено, напротив его имени выводится MISSING, а скрипт по окончании анализа заканчивает свою работу. Устанавливаем недостающее и повторяем попытку. Если этот шаг пройден нормально, скрипт проверяет наличие пакетов и запрашивает разрешение на установку каждого. Последнее несколько непонятно, так как в состав Zimbra входит 8 пакетов, и только один zimbra-snmp отмечен в документации как опциональный, без остальных вся система работать просто не будет. Вероятно, это наследие версии Network. Далее выдается запрос на разрешение модификации системы: The system will be modified. Continue? [N]

Соглашаемся, и начинается процесс установки. Если скрипту что-то будет непонятно с действительным именем домена, то, возможно, последует вопрос о его смене: Change domain name? [Yes] Create Domain: [server.com]

7) 8) 9) 10) r) s) x) q)

zimbra-mta: zimbra-snmp: zimbra-logger: zimbra-spell: Start servers after configuration Save config to file Expand menu Quit

server.com server.com 389 set Enabled Enabled yes admin@server.com UNSET yes spam.vzq5qdm1@server.com ham.oq548wueku@server.com wiki@server.com server.com 80 443 http no 143 993 110 995 yes http://server.com:7780/aspell.php Enabled Enabled Enabled Enabled yes

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

Любое значение, указанное выше, сейчас можно откорректировать. Особое внимание следует обратить на пункты, отмеченные звездочками, означающие ненастроенный параметр. В нашем случае это «Admin Password», показывающий на отсутствие пароля администратора. Для вызова нужного пункта нажимаем соответствующую ему цифру, в нашем случае это 6, появляется еще одно меню, в котором «Admin Password» стоит четвертым по списку. Нажимаем <4> и вводим пароль: Password for admin@server.com (min 6 characters): [4HkOvKOtNw] p@ssw()rd

№10, октябрь 2007

Можно отказаться от этого шага. Вот собственно и весь процесс установки. В некоторых случаях скрипт иногда и без объяснимых причин завершает работу с ошибкой. Перед повторной установкой следует деинсталлировать все пакеты: $ ./install.sh -u

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

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

Локализация Zimbra

Checking for port conflicts Main menu Hostname: Ldap master host: Ldap port: Ldap password: zimbra-ldap: zimbra-store: +Create Admin User: +Admin user to create: ******* +Admin Password +Enable automated spam training: +Spam training user: +Non-spam(Ham) training user: +Global Documents Account: +SMTP host: +Web server HTTP port: +Web server HTTPS port: +Web server mode: +Enable POP/IMAP proxy: +IMAP server port: +IMAP server SSL port: +POP server port: +POP server SSL port: +Use spell check server: +Spell server URL:

Notify Zimbra of your installation? [Yes]

$ sudo rm –Rf /opt/zimbra

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

1) 2) 3) 4) 5) 6)

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

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

После этого перезапускаем Zimbra: $ sudo /etc/init.d/zimbra restart

Или воспользуемся утилитой zmcontrol: $ su - zimbra $ zmcontrol restart

Параметр status должен показать список сервисов: $ sudo /etc/init.d/zimbra restart Host server.com antispam antivirus ldap logger mailbox mta snmp spell

Running Running Running Running Running Running Running Running

21


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

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

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

Использование веб‑интерфейса Для регистрации в системе используем логин вида admin@server.com и пароль, введенный во время установки. Доступны два интерфейса. Обычные пользователи для работы с почтой, документами и календарем должны набирать в браузере URL сервера без указания номера порта. Следует также отметить, что здесь можно работать в одном из двух вариантов веб-клиента: расширенном и базовом, переход между которыми осуществляется по ссылке на странице регистрации пользователя. В базовом варианте отсутствует все, что связано с AJAX, то есть работа с документами, всплывающие подсказки и прочее. Доступны только календарь и работа с почтой, интерфейс в базовом варианте в настоящее время не переведен. Разобраться, как работать с почтой, в любом варианте очень просто. Чтобы получить доступ к административной консоли, следует набрать ссылку https://server.com:7071/. Принимаем сертификат сервера и регистрируемся. Администратору доступны четыре вкладки:

22

n Адреса – управление аккаунтами пользователей, листами распространения и ресурсами, создание алиасов, просмотр почты пользователей и смена пароля (см. рис. 2); n Конфигурация – глобальные настройки доступных возможностей сервера, тем, параметров по умолчанию (квоты, длина и время жизни пароля), серверного пула, включение и установка zemlets, настройки домена, виртуальных узлов и прочее (см. рис. 3); n Мониторинг – вывод статуса и статистики сервера; n Tools – управление почтовыми очередями. Система очень проста в администрировании, все находится на своих местах, без «сюрпризов», поэтому разобраться со всеми настройками человеку, понимающему процесс, очень просто. Так, чтобы завести новую учетную запись, достаточно нажать «Учетные записи → Новый → Учетная запись» и заполнить поля. Аналогично создаются и любые другие объекты. Следует отметить удобство при администрировании большого количества серверов и доменов. Так, изначально для всех серверов действуют установки, указанные в «Конфигурация → Глобальные настройки» (см. рис. 3). Если необходимо создать несколько групп серверов с различными пара-

метрами, следует создать новый класс сервера, в котором их и указать. Затем при создании нового домена выбираем нужный класс, и все настройки будут наследованы. Затем уже во вкладке сервера эти настройки можно будет переопределить персонально для каждого. Таким образом, параметры будут примененные в таком порядке: «Глобальные настройки → Класс сервера и персональные настройки». В настройках сервера есть кнопки, позволяющие сбросить параметр до глобального значения. По умолчанию устанавливается только 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.



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

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

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


администрирование Расширенные возможности 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-B6D711D2-BF36-00C04FB90A03}\branding\ SIP_DOMAIN_NAME содержится информация о дополнительных закладках, баннере и т. д.

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

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

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

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

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

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

Описание

Пример

BannerURL

URL-путь к картинке. Поддерживается JPEG, GIF

http://wmconfig/logotip.jpg

BannerLinkURL

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

http://homesite

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

Описание

Пример

ProviderName

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

Помощь

HelpURL

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

http://help/msn

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

GUID

Name (реестр)

Path (реестр)

URL (реестр)

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

F1B1920C-6A3C-4ce7B18C-AFAB305FD03D

Application Sharing

C:\WINDOWS\System32\ rcImLby.exe

http://www.microsoft.com

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

56b994a7-380f-410b9985-c809d78c1bdc

Remote Assistance

C:\WINDOWS\System32\ rcImLby.exe

http://www.microsoft.com

Доска

1DF57D09-637A-4ca591B9-2C3EDAAF62FE

Whiteboard

C:\WINDOWS\System32\ rtcshare.exe

http://www.microsoft.com

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

Описание

Пример

TabURL

Ссылка на конфигурационный файл закладок в формате XML

http://wmtabs/tabs.xml

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

№10, октябрь 2007

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

25


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

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

Рисунок 4. Описание нового пункта меню раздела «Справка» в реестре

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

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

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

Создание закладок в Windows Messenger По умолчанию в Windows Messenger отображается всего лишь одна закладка (tab), в которой перечислены контакты пользователей. С помощью реестра и конфигурационного файла в формате XML можно увеличить их количество до 32 (см. рис. 6). Описание ключей реестра смотрите в таблице 4.

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

26

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

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

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

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

Описание

Пример

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


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

№10, октябрь 2007

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

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

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

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

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

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

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

27


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

OWA

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

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

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

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

28

OWA (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. Этот параметр исключают, когда необходимо инициировать какой-либо диалог, например, вызвать форму отправки нового письма.

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


администрирование 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-файл имеет следующую структуру: <%@ Language=VBScript CODEPAGE=1251%> <HTML> … <BODY> … <%VBSCRIPT CODE%> </BODY> </HTML>

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

№10, октябрь 2007

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

Описание параметра

Наглядный пример

?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

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

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

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

В противном случае имя пользователя не будет определено, т.к. интерпретатор не сможет идентифицировать встроенных функций. Таким образом, структура ASPфайла будет следующей: <?xml version="1.0" ↵ encoding="windows-1251" ?> <% VBSCRIPT CODE %> <msntabdata>

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

29


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

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

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

Определение пользователя, который вызвал страницу, осуществляется с помощью функции HttpContext. Current.User.Identity.Name или Request.ServerVariables («AUTH_USER»). В обоих случаях функция возвращает имя в пользователя согласно шаблону DOMAIN\USERNAME. Поэтому необходимо вычленить USERNAME для подстановки в XML‑файл c помощью процедуры: <% Dim UserName = HttpContext.Current.User.Identity.Name

30

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

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


администрирование По желанию можно добавить ссылки на папки: «Календарь», «Задачи», «Настройка параметров почты» и др. Перечень создаваемых закладок и ссылок на них смотрите в таблице 7. Выражением <%Response.Write(userName)%> подставляется сетевое имя пользователя (login) в URL-ссылку для успешной работы. Привожу листинг файла Config.ASP: <?xml version="1.0" encoding="windows-1251" ?> <% Dim UserName = HttpContext.Current.User.Identity.Name UserName = 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>

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

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

№10, октябрь 2007

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

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

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

31


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

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

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

С

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

Кластер

между собой (чаще всего локальной сетью), имеющая единую систему управления. Кластеры бывают трех основных видов: 1. Отказоустойчивые кластеры (Highavailability clusters, HA). 2. Кластеры с балансировкой нагрузки (Load balancing clusters). 3. Вычислительные кластеры (Highperformance clusters, HPC).

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

Пожалуй, одним из лучших определеMPI ний понятия кластера является выскаПервый вид кластеров чаще все- Message Passing Interface (интерфейс зывание Грегори Пфистера (Gregory F. го применяется для создания высоко- передачи сообщений) – это хорошо Pfister). «Кластер – это разновидность надежных систем, там, где остановка стандартизированный механизм пепараллельной или распределенной комплекса приведет к большим фи- редачи сообщений между компьюсистемы, которая: нансовым потерям предприятия, чаще терами, выполняющими одну зада1. Состоит из нескольких связанных всего это серверы баз данных и веб- чу параллельно. В данной модели памежду собой компьютеров. сервера. раллельная программа представля2. Используется как единый, унифиВторой вид кластера предназна- ет собой множество процессов, взацированный компьютерный ре- чен для распределения нагрузки по уз- имодействие которых (обмен даннылам системы, в основном применяет- ми) осуществляется путем передачи сурс». ся для создания высокоэффективных сообщений. Говоря же проще, кластер, это сис- веб-серверов. Данная технология берет свое натема, состоящая из нескольких вычисИногда первые два вида кластеров чало в 1993 году, когда обобщение разлительных единиц (нод), связанных объединяются для создания высокона- личных библиотек привело к появле-

32


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

Описание кластера Итак, оставив историю и теорию позади, приступим к рассмотрению и конфигурированию нашего HPC MPI-кластера. Вся настройка будет выполняться на базе ОС Scientific Linux, основанного на семействе операционных систем компании RedHat. Выбор данного дистрибутива обусловлен тем, что в нем присутствует компилятор Intel Fortran Compiler в стандартной комплектации, необходимый для работы, и некоторые другие специализированные пакеты. Аппаратную конфигурацию кластера см. в таблице. Некоторые дополнительные пояснения к таблице. Только на управляющем ЭВМ есть жесткие диски (о них позже), остальные станции бездисковые. Вторая и третья группа станций поддерживает технологию Hyper Threading в процессорах, а четвертая 64‑битную архитектуру. Кроме различий в процессорах, группы различаются количеством оперативной памяти и ее скоростными характеристиками.

№10, октябрь 2007

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

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

Уже заранее можно прогнозиро- и загружаются по сети с управляющей вать, что более медленные вычисли- машины. С головной машины также тельные единицы предыдущего поко- производится распределение вычисления будут затормаживать весь клас- лительных задач по модулям. тер в целом, и далее на тестах мы увидим это наглядно, но более подроб- Дисковый массив но мы рассмотрим этот момент в кон- управляющей машины це статьи. Дисковое пространство всегда лучше Стоит отметить, что отличительной планировать заранее и, если есть возчертой процессоров Xeon серии 5130 можность, всегда резервировать неявляется высокая производительность которое количество гигабайт «про запри более низких частотах. пас». Итак, первый дисковый состоит Еще одной важной деталью явля- из двух жестких дисков объемом 70 Гб, ется то, что в кластере используется объединенных в RAID 1. Второй массив коммуникационная технология Gigabit (под пользовательские данные), четыEthernet, самая дешевая, но и, к сожа- ре винчестера по 160 Гб, объединенных лению, самая медленная для органи- в RAID 10 (1+0). Таблица разделов бузации связи в кластере. дет выглядеть так: Все эти данные помогут нам в буСистемный RAID-1 разбит следуюдущем распределять типы задач и со- щим образом: ответственно нагрузку на единицы n /boot – 100 Мб, данные загрузчика кластера. и ядро ОС. Вся система функционирует следующим образом (см. рис. 1): управляюСоздана группа логических томов щей является машина с единственным SysVolGroup, занимающая всё оставдисковым массивом, все остальные шееся пространство на системном модули являются вычислительными RAID, включающая следующие логи(далее вычислительные модули – ВМ) ческие тома: Аппаратное обеспечение вычислительного кластера Тип

Процессор

Ядра

ОЗУ (Гб)

Количество

Управляющий

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

33


администрирование ɍɩɪɚɜɥɹɸɳɚɹ ɦɚɲɢɧɚ

Ʉɨɦɦɭɬɚɬɨɪ

%0

%0

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

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

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

n DisklessRoot (/diskless/root) – корневая файловая система для ВМ, 10 Гб. n SpecProgs (/usr/local) – спецпрограммы, общие для всех узлов системы, ~760 Мб. n DisklessSnap (/diskless/snapshot) – необходимые индивидуальные файлы для ВМ, 5 Гб n В запасе (неразмеченная область) – примерно 40 Гб.

Сети для кластеров Несмотря на широкое распространение ethernet-сетей, для связи в кластере данная технология крайне не эффективна. Связано это с тем, что для синхронизации задач на кластере между вычислительными единицами требуется пересылать большое количество коротких сообщений и время задержки в их пересылке по сети играет огромную роль. Но это скорее следствие, дело в том, что Ethernet построен на CSMA/CD – конкурентном доступе к среде передачи с возможными коллизиями, что при массированном доступе создает непредсказуемые задержки, что и является причиной неэффективности технологии. Специально для решения этих задач были разработаны различные сетевые технологии, вот наиболее распространенные из них и их характеристики: n Myrinet (www.myri.com) – данный стандарт наиболее широко распространен, так как является «золотой серединой» по соотношению цена/качество, обеспечивает пропускную способность до 250 Мб/сек, при времени задержки 10 мс. n SCI (www.dolphinics.com) – другой распространенный стандарт, используе-

34

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

Сервисы кластера Для работы кластера нам необходимы следующие сетевые сервисы: n DNS-сервер – прямое и обратное преобразование имен машин необходимо для работы некоторых сервисов кластера. n NFS-сервер – экспорт файловых систем сервера вычислительным модулям. n tftp-сервер – первоначальная загрузка ВМ по сети. n NTP-сервер – синхронизация времени на всех ВМ кластера. n DHCP-сервер – автоматическое установление имени машины, выдачи IP-адреса бездисковых ВМ. мый для построения кластеров, позволяет пересылать данные на уровне 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 мс.

n ssh-сервер – защищённый терминальный доступ пользователей на кластер. Это все основные сетевые службы, они необходимы для работы кластера, рассмотрим их настройку и некоторых других служб подробнее.

Настройка сети Настройка сети может осуществляться на этапе установки ОС, может и после установки системы. Конфигурирование сетевых интерфейсов может производиться как с помощью графических средств, так и с помощью консольных утилит. Ниже приведен пример настройки путём прямого редактирования файлов настроек. Файлы с настройками сетевых интерфейсов находятся в каталоге /etc/sysconfig/networkingscripts (пожалуй, стоит напомнить, что вся настройка осуществляется в дистрибутиве Scientific Linux, основанном на RedHat Linux, в иной ОС *nix, данные файлы могут находиться в другом месте). Название этих файлов ifcfg-eth0 и ifcfg-eth1 для первого и второго сетевого интерфейса соответственно. Листинг файла ifcfg-eth0 (внутренний интерфейс): cat /etc/sysconfig/ ↵ networking-scripts/ifcfg-eth0 DEVICE=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

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

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


администрирование 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 "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; }; }; // Указание, где находится описание обратного преобразования // для зоны cluster zone "31.168.192.in-addr.arpa" { notify no; type master; file "192.168.31"; allow-update { none; }; }; include "/etc/rndc.key";

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

parallel master m01 m02 m03 ... m11

IN SOA cluster. root.parallel.cluster 2007042700 3H 15M 1W 1D ) IN NS parallel.cluster. IN A 192.168.31.1 IN A 192.168.31.1 IN A 192.168.31.11 IN A 192.168.31.12 IN A 192.168.31.13 IN A

( ; ; ; ; ;

serial (d. adams) refresh retry expiry minimum

192.168.31.21

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

86400 IN

SOA

№10, октябрь 2007

NS

1

IN

PTR

parallel.cluster.

11 12 13 ... 21

IN IN IN

PTR PTR PTR

m01.cluster. m02.cluster. m03.cluster.

IN

PTR

m11.cluster.

; Expire ; Minimum

tftp-сервер

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

$TTL @

IN

3600000 86400 ) parallel.cluster.

cluster. root.parallel.cluster. ( 2007042600 ; Serial 28800 ; Refresh 14400 ; Retry

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

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

DHCP-сервер Протокол динамической конфигурации узлов (Dynamic Host Configuration Protocol, DHCP) – сетевой протокол для автоматической выдачи IP-адресов и других сетевых параметров клиентским компьютерам. Каждый клиент DHCP соединяется с выделенным DHCP-сервером, который возвращает ему параметры сети, включая IP-адрес, адреса шлюза и DNS-серверов. Конфигурационный файл для кластера /etc/dhcpd.conf содержит следующие данные: default-lease-time 600; max-lease-time 7200; authoritative; ddns-update-style none; option option option option option

domain-name "cluster"; routers 192.168.31.1; domain-name-servers 192.168.31.1; swap-path code 128 = string; 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 {

35


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

}

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

} } allow booting; allow bootp;

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

MPICH

DHCPDARGS=eth0

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

NFS-сервер Необходим для экспорта файловых систем или отдельных каталогов для бездисковых клиентов. Файл настроек /etc/ exports выглядит следующим образом: # 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)

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

192.168.31.0 mask 255.255.255.0 nomodify notrap 127.0.0.1 127.127.1.0 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

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

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

36

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

MPICH версии 1.2.7p1 [3] cобирался из исходных кодов со следующими опциями: -rsh=ssh -with-device=ch_p4 --with-comm=shared ↵ --prefix=/usr/local/gmpich-1.2.7p1 -f90=gfortran

В каталоге /usr/local создана мягкая ссылка mpich на каталог gmpich-1.2.7p1. Конфигурационный файл machines.LINUX находится в каталоге /usr/local/mpich-1.2.7p1/share. Содержимое файла настроек: m11:4 m10:4 m09:4 m08:4 m07:4 m06:4 m05:4 m04:2 m03:2 m02:2 m01:2 parallel:2

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

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

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

1 1 2 8

root root root root

root root root root

944 Май 30 2006 files 54 Авг 19 15:22 files.custom 16384 Янв 16 2007 lost+found 4096 Янв 18 2007 m01

8 root root 4096 Янв 18 2007 m11

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


администрирование новых узлов стандартные каталоги (boot, dev, etc, lib, root и var). Файл «files» мы изменять не будем, в нем содержится список файлов, которые копирует каждый клиент, а вот в файл «files.custom» при желании можно изменять, так как он создан специально для добавления необходимых файлов (см. дополнительную информацию). В директориях /diskless/ snapshot/MХX/etc/ (где ХХ – номера ВМ) наших вычислительных станций внесем некоторые изменения. Файл fstab: none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /tmp tmpfs defaults 0 0 parallel:/usr/local /usr/local nfs defaults,ro 0 0 parallel:/home /home nfs defaults,rw 0 0

Файл hosts (пример на ВМ m01): 127.0.0.1 m01.cluster m01 localhost.localdomain localhost

И файл ntp.conf:

Рисунок 2. Производительность Xeon 5130

restrict 127.0.0.1 server parallel.cluster server 127.127.1.0 # local clock driftfile /var/lib/ntp/drift keys /etc/ntp/keys

Также необходимо скопировать файлы passwd, group, shadow и gshadow из директории /etc/ в папки на вычислительные станции. Далее выполним chroot в /diskless/root и с помощью утилиты chkconfig выключим необязательные на ВМ сервисы. Наверное, более «красивым» решением было бы использовать NIS и LDAP в данном случае, эта задача, возможно, будет реализована в будущем на кластере. Еще одним, казалось бы, явным решением было использовать символические ссылки, но в данном случае, если сделать ссылки на не экспортируемой файловой системе – «не заработает». Все, если все было правильно сделано (и несомненно прочитана документация, приведенная в начале абзаца), то наш кластер будет готов для тестирования.

Тестирование кластера

Рисунок 3. Производительность Xeon 5130 плюс P4 (без Hyper Threading)

План: тестирование «новых» модулей на параллельной версии linpack (HPLinpack [5] и библиотека ATLAS [6]), отдельное водительность в Gflop/s, снизу количество задействовантестирование модулей с предыдущим поколением процес- ных ядер, справа – размерность матрицы. В следующем тесте (см. рис. 3) количество ядер увелисоров, далее этап измерения производительности системы из «новых» и «старых» модулей. Изменение в производи- чивалось за счёт машин с процессорами Xeon 5130. Последние восемь ядер – более ранние модели (P4 Xeon c 3,0 тельности будут отражать графики. Тестирование модулей с процессорами Xeon 5130. Раз- и 2,8 Ггц соответственно). На графике хорошо видно, как мерность матрицы для тестовых запусков варьируется падает производительность системы на матрицах больших от 1000 до 15000 и верхняя граница определяется объёмом доступ- Что за чудо-юдо зверь – HPLinpack? проще, HPLinpack – это набор тестов (проHPLinpack представляет собой пакет грамм), которые решают задачи линейной ной оперативной памяти. Несмотря на то что на 28 процессорах есть воз- для тестирования вычислительных клас- алгебры (если еще проще – решают задаможность использовать тестовый на- теров с распределенной памятью. В осно- чи с большими матрицами). Алгоритм рабор с квадратной матрицей размер- ву тестов пакета заложено: решение сис- боты пакета (математику) и другие интеностью 20000, на одном процессоре тем линейных алгебраических уравнений ресные темы, связанные с тестированием (СЛАУ) методом LU-факторизации (разло- кластерных систем, можно почитать либо запуск задачи с матрицей 16000 был жения) c выбором ведущего элемента стол- на сайте программы, либо в статье Андрея невозможен – недостаточно памяти бца матрицы, при этом матрица системы Сапронова «Обзор некоторых пакетов изна вычислительном модуле. График заполняется случайными вещественными мерения производительности кластерных тестов выглядит следующим образом (см. рис. 2), где слева показана произ- числами с двойной точностью. Говоря же систем» [7].

№10, октябрь 2007

37


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

Рисунок 4. Производительность Xeon 5130 плюс P4 (с Hyper Threading)

размерностей, на матрицах малого размера, изменение производительности незначительно на 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 Ггц.

Выводы

Рисунок 5. Производительность Xeon P4

Рисунок 6. Производительность Xeon 5130 и Xeon 3.0 Ггц

38

Итак, тестирование завершено, теперь можно делать выводы. Различные группы (см. таблицу) кластера не имеет смысла объединять для решения одной задачи, так как суммарная производительность системы существенно снизится. Лучшим вариантом будет распределение задач по модулям в зависимости от приоритетов: низкоприоритетные задачи запускать на модулях с процессорами предыдущего поколения, а задачи с высоким приоритетом запускать на модулях, оснащённых процессорами 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://mathatlas.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.


bugtraq Множественные уязвимости в Sun Java JRE

Раскрытие данных в Cisco Adaptive Security Appliance

Программа: 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. Решение: Установите исправление с сайта производителя.

Программа: Cisco Adaptive Security Appliance (ASA) 7.x. Опасность: Низкая. Описание: Уязвимость существует из-за того, что Cisco ASA некорректно фильтрует сообщения команды «test aaa‑server» перед отправкой их в syslog. Злоумышленник может получить доступ к потенциально важным данным, таким как имена пользователей и пароли. Ошибка происходит, когда пользователь с уровнем доступа 15 или выше запускает команду «test aaa-server» и уровень журналирования установлен в значение «6» (notification). URL производителя: www.cisco.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

Переполнение буфера в Mercury Mail Transport System Программа: Mercury Mail Transport System 4.52, возможно более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за ошибки проверки границ данных в IMAPD-модуле при обработке команды IMAP SEARCH. Удаленный пользователь может с помощью слишком длинного аргумента (более 60 байт), переданного уязвимой команде, вызвать переполнение стека и выполнить произвольный код на целевой системе. U R L п р о и з в о д и т е л я : w w w. p m a i l .c o m /ove r v i ew s / 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 с сайта производителя.

Уязвимость в IBM WebSphere

Программа: Cisco Unified CallManager 3.x, Cisco Unified Application Server CallManager 4.x, Cisco Unified Communications Manager 4.x. Программа: IBM WebSphere Application Server 6.1.x Опасность: Средняя. Опасность: Средняя. Описание: 1. Уязвимость межсайтового скриптинга обна- Описание: Уязвимость позволяет удаленному пользоваружена в поле ввода имени пользователя в странице вхо- телю обойти некоторые ограничения безопасности. Уязда в систему. вимость существует из-за ошибки в Edge Component. Под2. SQL-инъекция обнаружена в параметре «lang» робности уязвимости не сообщаются. в CCMUser/logon.asp. URL производителя: www.ibm.com. URL производителя: www.cisco.com. Решение: Установите исправление Fix Pack 11 (6.1.0.11) Решение: Обновите до версий 3.3(5)sr2b, 4.1(3)sr5, 4.2(3)sr2, с сайта производителя. or 4.3(1)sr1.

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

№10, октябрь 2007

39


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

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

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

П

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

40

зировать процесс обслуживания информационных баз. Оформление запуска конфигуратора в пакетном режиме в виде файла *.bat или *.cmd с помощью любого планировщика позволяет организовать полностью

автоматическое выполнение некоторых рутинных операций в заданное время, таких как: n создание архивных копий; n тестирование и исправление информационной базы;


администрирование «1С» n автоматический обмен (в случае использования компоненты УРИБ); n переиндексация таблиц баз данных.

Параметры запуска «1С:Предприятие 7.7» в пакетном режиме Формат командной строки: 1cv7.exe MODE [ /M | /D<Путь> | ↵ /U<Путь> | /N<Имя> | ↵ /P<Пароль> | /@<ИмяФайла> | ↵ /T<Путь> | /L<Параметр>]

где MODE – режим запуска 1С. П р и з а п ус ке ф а й л а 1cv7.exe (1cv7L.exe, 1cv7S.exe) в командной строке могут быть указаны следующие значения режима: n C O N F I G – з а п у с к с и с т е м ы «1С:Предприятие» в режиме «Конфигуратор». n ENTERPRISE – запуск системы «1С:Предприятие». n DEBUG – запуск системы «1С:Предприятие» в режиме «Отладчик». n M O N I TO R – з а п ус к с и с т е м ы «1С:Предприятие» в режиме «Монитор».

Серия «вопросы-ответы» Какие порты используются в работе сервера «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 → Connectionoriented TCP/ IP → Proper ties → 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 не установлено другого. Рекомендуется для удаленных рабочих мест использовать или локальные ключи, или сетевой ключ, расположенный в той же локальной сети, которой принадлежат удаленные рабочие места.

располагается в каталоге информационной базы, там же, где и файл самой информационной базы. Например, если информационная база хранится в файле 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.

Параметры CONFIG, ENTERPRISE, DEBUG, MONITOR нельзя смешивать между собой – в командной строке дол- Гд е ф и з и ч е с к и н а хо д и тжен быть указан только один из этих с я ж у р н а л р е г и с т р а ц и и «1С:Предприятие 8»? параметров. В файловом варианте инфорИдем дальше: n /D<Путь> – каталог информацион- мационной базы «1С:Предприятие 8.0» журнал регистрации ной базы. Журнал регистрации n /U<Путь> – рабочий каталог польется только при запуске в режиме зуется другое расширение, то оно зователя. Использование этого па«1С:Предприятие» и только для се- должно явно указываться при обрараметра отменяет установку работевой версии системы. щении к файлу. Пример строки запусчего каталога пользователя, выn /@<ИмяФайла> – запуск системы ка «Конфигуратора» в пакетном реполненную в процессе создания «1С:Предприятие» в режиме «Кон- жиме: списка пользователей. фигуратор» в пакетном режиме, n /N<Имя> – имя пользователя. Должc:\1cv7\bin\1cv7.exe CONFIG ↵ где <ИмяФайла> – имя файла, соно быть указано так же, как в спис /Dc:\1cv7\db /NAdmin /P111 ↵ держащего параметры пакетного ке пользователей, создаваемом /@C:\lCV7\Backup запуска. в конфигураторе. n /P<Пароль> – пароль пользователя, n /T<Путь> – каталог для размещения временных файлов. Таблица параметров имя которого указано в параметре / N. Если у пользователя нет пароля, n /L<Параметр> – язык интерфейса. файла пакетного режима ENG – английский, UKR – украинс- Структура файла включает секции этот параметр можно опустить. Наи параметры, определенные для кажкий, RUS – русский личие в командной строке параметдой секции. Секция задается отдельров /N и /P (если пароль у пользованой строкой с именем секции в прямотеля существует) подавляет выдачу Файл параметров пакетного запуска угольных скобках. Параметры задаютдиалога «Авторизация доступа». n /M – запуск системы в монополь- Файл пакетного режима имеет по умол- ся отдельными строками после строки ном режиме. Параметр использу- чанию расширение .prm, если исполь- соответствующей секции с указанием

№10, октябрь 2007

41


администрирование «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=Пароль

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

SaveToFile=Имя_Файла

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

FileList=Список сохраняемых файлов

Задается как перечисление имен файлов, разделенных пробелами или запятыми. Длинные имена файлов, содержащие пробелы, должны заключаться в кавычки «». В именах файлов могут использоваться символы «*» для обозначения групп файлов. Если параметр не задан, то список сохраняемых файлов будет взят из файла 1cv7file.lst, так же как и в случае выполнения сохранения из пункта меню «Администрирование»

Секция SaveData. Предназначена для описания выполнения сохранения данных информационной базы

имени параметра и значением, отде- выполнения конкретных функций. Табленным знаком «=». лица взята из книги «КонфигурироваОсновная секция General описы- ние и администрирование». Часть 2, вает общие параметры пакетного ре- глава 27. жима и необходимость выполнения отдельных функций пакетного режи- Заключение ма. Остальные секции содержат па- Таким образом, используя этот нераметры, описывающие особенности хитрый механизм, программист или

42

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



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

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

Я далеко не самый давний автор журнала «Системный администратор», сотрудничаю год‑полтора… Стоп-стоп, я не с этого хотела начать. Я собиралась в этот номер сделать интервью с Биллом Гейтсом. Все-таки пять лет журналу, и такой эксклюзив. А потом подумала – а почему бы с Владимиром Положевцом не поговорить, исполнительным директором этого издания?

К

ак я у же сказала, я у истоков журнала не стояла, истории не знаю. А тут такой случай. Но Владимир Петрович улыбнулся и сказал, что он человек скромный, а не «Человек номера». Я огорчилась.

44

А потом узнала, что у директора отпуск, первый за пять лет намечается. Номер этот доделывают без зоркого ока начальства. Решила я пойти ва-банк. Диктофон в карман – и в редакцию. Чаю, мол, для автора не най-

дется? Кое-что за чайными беседами удалось выяснить…

Журналист-системотехник Стихийное, доложу я вам, начало было у журнала. Владимир Положевец,


человек номера у которого родители – известные в росКстати. Выяснилось, что практи- нистрирования. У нас всегда не хватасийской журналистике люди, никогда чески все «ветераны», «столпы» ре- ет финансов, поэтому системный адне собирался идти по их стопам. Учился дакционного коллектива в свое время министратор должен постоянно присебе в Бауманке на инженера-системо- поступили как авантюристы. думывать, как устроить, чтобы с митехника, работал в телецентре в фирНаталья Хвостова, ответственный нимумом средств, которые ему выдеме по обеспечению техстудий. Между секретарь: ляют, все хорошо работало. прочим, неплохо работал, поднялся по – Ко мне приехали в гости Володя Диктофон выключила – еще закарьерной лестнице до технического Положевец и Володя Лукин с конфе- метит! Кажется, вовремя, потому что директора. С пути его сбил товарищ тами Коркунов и предложили рабо- дальше пошла грустная история. Пипо институту. «Он рассказал, что в Анг- тать в журнале, который был только лотный номер «Системного админислии есть такой журнал, «Сисадмин» на- еще в задумке. Я согласилась. И через тратора» не поспел к выставке Softool зывается. Для системных администра- полгода процесс начался. Было страш- 2002 года – уж очень много проблем торов. Популярный. На что я ему ска- но, поскольку все начиналось с нуля. возникло с типографией, пленками. зал: «Хорошо, давай делать русскую С другой стороны – было интересно. Пять тысяч экземпляров рассылали версию». С этого все и началось». С Володей Лукиным мы учились по фирмам, раздавали на мероприЭто у меня дословно записано, на в одной группе. А еще у нас в группе ятиях и конференциях для IT-специаудиокассете. А еще Владимир вспо- училась Валя, будущая жена Володи алистов. минал, как восприняли эту идею в его Положевца... Начинающие издатели с больтехническом отделе. Коллектив был Владимир Лукин, технический ре- шими надеждами открыли подписку на 2003 год. В январе 2003 года дру жный, сплоченный. Ясное де- дактор: ло, испугались за своего начальни– Когда мы были на 6-м курсе, Во- «Системный администратор» начал ка. Без журналистского образования лодя Положевец спросил, чем я соби- выходить ежемесячно. Это радоваиздательский проект затеять… Поло- раюсь дальше заниматься. Я сказал, ло и окрыляло. А вот данные о поджевца долго убеждали: «Журнал – аб- что не знаю. Он предложил начать свое списке на январь 2003 года вызвали солютно убыточное дело. У тебя семья дело. Мы втроем с Александром Миха- шок. 324 человека. Это сегодня, когнамечается, дети, ты не сможешь про- левым сидели, обсуждали. Сошлись да тираж 15 тысяч и весь он уходит жить на те деньги, которые получишь на том, что надо заняться печатным из- подписавшимся читателям, Владиот журнала». «Перебежчику» предла- данием. Я никогда не думал, что буду мир Положевец шутит: в 2003 знали всех подписчиков в лицо, поименно… гали увеличить зарплату. Сулили сини- заниматься издательским делом. цу в руках, отговаривали от призрач– Как сейчас себя чувствуете в жур- Но тогда было не до смеха. Редакция находилась в истерике, кто в тихой, ного журавля. Но Володе хотелось на- нале? чать собственное дело. – Нормально. Надо только рабо- кто в громкой… И работа началась. Идея прозвуча- тать, работать и работать. Мы свой Вот уважаю я таких людей! Никто ла в марте 2002 года, в апреле изда- путь ищем. не сбежал, не бросил дело. Стиснули ние зарегистрировали. Весь июнь бу– Альтернативные предложения зубы и продолжили активнее себя «пидущие журналисты прилежно сдавали у вас были? арить» – раздавать журнал на выставсессию. В июле усердно набирали ав– Да. Интернет-магазин пуговиц. ках, рассылать по фирмам. Уже к леторов, искали материалы. Новая работу количество подписчиков достигло двух – двух с половиной тысяч и дальта так захватила Владимира Положев- Бизнес-Золушки ца, что в августе он все-таки покинул В следующий мой визит в редакцию, ше только росло. А может быть, насвой технический отдел – надежную сделав вид, что кладу себе сахар, я не- до было испытать это потрясение, это бухту. И в сентябре, в импровизиро- заметно спрятала за сахарницей дик- ощущение падения в бездну, чтобы ванном офисе, который расположил- тофон и сама поинтересовалась у Вла- оценить радость победы? В конце конся прямо дома у исполнительного ди- димира Положевца: цов все истории про «бизнес-Золушек» ректора нового журнала «Системный – В самом начале ты представ- именно так и выглядят: неудачи следоадминистратор», буквально за три дня лял, что это будет за журнал, кому бу- вали одна за другой, но трудолюбивый первый номер был сделан. дет нужен? клерк стал магнатом, потому что терНе верите в мистику – и не на– Мы планировали, что это будет пел и работал 25 часов в сутки. до. А по-моему, без высших сил тут журнал для системных администратоЧто к этому добавить? Самоокупаене обошлось. Журнал вышел 5 ок- ров. В нем сами системные админист- мость наступила через три года после тября. Свадьба Владимира и его суп- раторы будут описывать собственный старта. В прошлом году команда возруги Валентины состоялась 3 октяб- опыт для своих же коллег. Было важно, вращала долги. А с 2007 начала раборя. В том же знаковом 2002 году ро- чтобы писали люди, живущие на тер- тать на себя. дился старший сын исполнительно- ритории России и стран СНГ, никаких Кстати, Светлана Зобова, ведаюго директора «Системного админист- переводов иностранных материалов. щая в «Системном администраторе» ратора». А еще 5 октября – День учи- Нам пишут люди, которые сами чего-то бухгалтерией и подпиской, признателя. Не догадываетесь, к чему это я? достигли, но в нашей специфике, по- лась, что давно узнала о существоваДа ведь журнал входит в издательский тому что Россия, СНГ – очень специ- нии журнала: «Я с Владимиром Полодом «Учительская газета»! фичное место для системного адми- жевцем познакомилась, когда проек-

№10, октябрь 2007

45


человек номера та еще не было. Однажды он говорит: буду журнал издавать. Подарил пилотный номер. Я порадовалась. А спустя четыре года мы встречаемся, и он предлагает мне: пошли к нам работать. Я всего два номера видела – первый и 50-й. Согласилась. Мне здесь комфортно.

Читатель на свету, читатель «в тени» В следующий раз я пришла на кофе. Вернее, сама его принесла – хватит уже редакцию обделять. Несколько капель коньяка в чашечку... И можно выведывать секреты дальше. Портрет читателя? Запросто! Владимир Положевец подбирает краски: – Мужчина лет 30, хорошо образованный, часто с двумя высшими. У него неплохая работа. Он все еще, может быть, системный администратор, но скоро, возможно, станет начальником IT-департамента или старшим системным администратором, или просто начнет собственное дело. У него есть чувство юмора и различные хобби. А еще я выяснила потрясающую вещь – настоящее количество читателей журнала. Владимир Петрович выдал цифру с улыбкой, но вообще-то я бы на его месте рассердилась… – Надо отнестись к этому как к данности. У нас есть 15 тысяч человек, которые выписывают журнал, честно платя за это деньги, помогая делать журнал лучше, толще, красивее. По данным анкетирования, которое мы проводили, журнал читают отделами. Выписывает один человек, но этот экземпляр прочитывают от пяти до семи человек. Это нормально – дать другу почитать. Не наказуемо… Получается, что читают материал около 90 тысяч системных администраторов. И есть добрые люди, которые сканируют наш журнал и выкладывают в Сеть. Мы с ними пытаемся бороться, но стараемся относиться к этому факту как к бесплатной рекламе. Людей, которые читают сканированные версии, по нашим подсчетам, еще 100‑180 тысяч человек. Получается внушительная цифра. Если бы из них хотя бы треть подписывалась на журнал, всем бы жилось гораздо легче. Поставив чашку на стол, Положевец уже серьезно добавил:

46

– И стоил бы журнал гораздо дешевле. Да, я совсем забыла рассказать. Вы, может быть, знаете, а вот для меня это было открытие – оказывается у «Системного администратора» есть офис в Америке, который распространяет электронную версию журнала по Штатам. Это еще некоторое количество подписчиков в копилку. Причем подписаться можно на полную версию журнала или на выборку статей. Удобно! Кто эти зарубежные читатели? Конечно, в первую очередь русские эмигранты. Но не только. Иностранцы тоже читают, чтобы наконец понять эту загадочную русскую душу…

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

– Это как? – У нас есть костяк команды – капитан, помощник капитана, боцман, впередсмотрящий, казначей, начальники палуб... Авторов можно сравнить с экипажем пиратского корабля. Корабль идет от порта до порта, в процессе кто-то потерялся, упал за борт, других зарезали во время абордажа.... Вышел номер, команда сходит в очередном порту. Естественно, возвращаются не все. У людей меняются интересы, появляются семьи, новая работа, не относящаяся к системному администрированию. Они идут вверх по карьерной лестнице. Это нормальный процесс, но весьма болезненный для редакции. Однако у нас постоянно появляются и новые люди. Всегда есть человек, который займет место выбывшего. Он пишет совершенно по-другому, на другие темы. И это хорошо! Я себя почувствовала одноногим Сильвером. Или одноглазым, уже не помню точно классику… И почему это, спрашивается, я в каждом новом порту возвращаюсь на борт?.. И партнеры верные у журнала тоже есть! Например, «Линукс-центр», лучший друг. На своем семилетии сотрудники и начальники «Линукс-центра» сказали, что без поддержки команды «Системного администратора», без их опыта, советов они не смогли бы сделать хороший журнал «Linux Format», который выходит уже два года. Между прочим, главный редактор журнала «Linux Format» – технический редактор и автор «Системного администратора»! Кстати, на вопрос о том, как он стал сотрудничать с журналом, Дмитрий Шурупов, главный редактор электронного приложения «Open Source», ответил так: «Когда-то в журнале был такой автор – Всеволод Стахов. А у меня в то время уже был веб-сайт nixp.ru, у которого в сети существовал IRC-канал. На этом канале мы с ним познакомились. В 2004 году он сказал мне, что журналу нужен новый сайт, ищут человека. Я встретился с Володей Положевцом у станции метро Измайловская, мы обсудили сайт, возможные варианты дальнейшего сотрудничества, и началось... – Почему здесь работаете, не ушли никуда?


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

– Дружелюбная атмосфера, широкие возможности роста и саморазвития – это главное.

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

№10, октябрь 2007

зательно поинтересуются, что пишет коллега, напишут в редакцию, похвалят или дадут полезный совет. Ну и наличие «доброго» и «злого» технического редактора очень влияет на качество журнала. Разговаривать с исполнительным директором на выставке сложно – кофе под рукой нет, сахарницы тоже, диктофон спрятать некуда. Я набираюсь смелости и вытаскиваю записывающее устройство на всеобщее обозрение. – Каким тебе видится будущее? – Новые проекты появляются. У нас есть электронное приложение «Open Source». Оно бесплатное, выходит раз в три недели уже полтора года. У него десять с половиной тысяч подписчиков, которые его регулярно получают. А скачивают еще 20-25 тысяч человек. Дальше оно расходится волнами. Мы планируем сделать его бумажным. Возможно, что будем вкладывать его в журнал. Есть еще много разных задумок на следующий год любопытных. Но они пока в секрете! Владимир наконец замечает диктофон. Но возмущаться нет сил и времени – надо убегать на самолет, впе-

реди отпуск. Он обреченно улыбается и заявляет, что в таком случае хочет совершенно официально сказать «спасибо»: – Хотелось бы сказать, что пять лет назад «Учительская газета», сейчас это издательский дом, сделала для нас очень много, очень помогла профессионально вырасти. Ведь у нас нет журналистов в редакции... Ветераны редакции – «бауманцы», мои друзья, с которыми мы пять лет делаем журнал. Очень приятно, что они есть, без них журнал был бы не такой. Спасибо тем, кто сейчас работает с нами. Новые люди всегда очень хорошо разбавляют старую кровь, бодрят журнал. У них много идей. Мы стараемся за ними успевать. Володя помахал рукой и убежал. А я подумала: как здорово работать в журнале с такой внушительной перспективой. Знаете, сколько системных администраторов на территории России и стран СНГ? Я узнавала – в среднем 400 тысяч. Представляете, если все они подпишутся на журнал?

Текст: Оксана Родионова, фото: Владимир Лукин

47


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

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

Вадим Андросов Как создать надстройку для Windows 2003 Server, управляющую допуском на компьютеры на основе модели архитектуры организации.

Подготовка к созданию надстройки Операционная система Windows 2003 Server поддерживает широкий набор настроек безопасности, в том числе и на основе информационно-управленческой архитектуры (ИУА) организации. Так, с помощью оснастки «Active Directory Users and Computers» возможно создание структурной модели предприятия. Далее с помощью групповых политик безопасности настраиваются необходимые параметры защиты, привязанные к структурным единицам организации. Данная тема подробно освещена в литературе, посвященной администрированию серверных операционных систем Microsof [1‑5], в статье же будут рассмотрены возможности расширения средств управления доступом к рабочим станциям для реализации особых правил, не предусмотренных в стандартных утилитах. Существуют различные механизмы добавления новой функциональности. Остановимся на самом простом методе с использованием сценариев. Этот подход не требует наличия никаких специальных инструментальных средств, тем не менее позволяя полноценно реализовать задуманное. В рамках статьи будет продемонстрировано создание механизма разграничения доступа пользователей

48

на компьютеры. Рассмотрим следующий пример (см. рис. 1). Часто на предприятиях существуют отделы с особой пропускной системой сотрудников. Причем это не обязательно секретные военные организации. В коммерческой фирме также может существовать информация, оберегаемая от конкурентов (списки контрагентов, рецептуры продукции, способы производства и т. п.). Распространена практика изоляции работы с закрываемой информацией в рамках специальных отделов. Здесь обычно применяется более тщательный подбор кадров, особая пропускная система. Конечно, стандартные средства разграничения доступа Windows 2003 позволяют защитить основные ресурсы. Однако в случае высокой сложности архитектуры организации и тем более ее динамичности (например, отдел, работающий со скрываемой информацией, может быть перенесен в другое подразделение) уследить за всем становится невозможно. Сегодня мы рассмотрим пример обеспечения автоматического контроля за доступом к рабочим станциям на основе модели архитектуры организации. Конечно, это не законченный механизм, который позволит искоренить промышленный шпионаж. Скорее, речь идет о демонстрации возможнос-

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


безопасность лению физического контроля над допуском на территорию закрытых отделов и смещению акцентов защиты данных к программным средствам. Но упрощенный доступ к рабочим станциям тут же понизил эффективность информационной защиты. Да, получить физический доступ к базе данных на сервере практически невозможно (если злоумышленник – не администратор системы). Однако очень много информации хранится на локальных компьютерах: файлРисунок 1. Модель серверные базы данных (а это не редкость даже на сегодняшний день), таблицы Excel, документы Word и тому подобное. Если же с данными работает несколько человек в разные смены, то общие файлы почти наверняка окажутся в доступном для всех месте… Конечно, почти все это – вопросы культуры работы со скрываемой информацией. Но если бы эта культура существовала в реальной жизни, то не было бы систем типа Windows 2003 Server. Так что важно иметь возможность управлять доступом к рабочим станциям на основе их принадлежности не только конкретному домену, но и подразделению. Таким образом, мы защитим локальную свободно доступную информацию. Так что именно повышение эффективности защиты информации – конечная цель предлагаемой надстройки, хоть непосредственно с секретными объектами работа и не ведется.

Постановка задачи Для начала реализуем максимально простое правило – на компьютеры отдела должны иметь возможность входа только пользователи того же отдела. Так, для приведенной модели пользоваться компьютером CCLI должны иметь возможность только сотрудники организационной единицы «Accounting». При этом решение хотелось бы сделать устойчивым к изменениям в архитектуре. То есть при добавлении пользователя в этот отдел он автоматически должен допускаться к соответствующим компьютерам. Также удаление пользователя должно влечь за собой потерю им прав использования рабочими станциями отдела. Это можно сделать с использованием простого стартового сценария (на языке VBScript). 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

Сценарий основан на использовании отличительных имен объектов (distinguished name или DN) пользователей и компьютеров. Эти имена содержат не только название объекта, но и его положение в архитектуре организации.

№10, октябрь 2007

архитектуры организации

Например, для пользователя «John Zoidberg», работающего в отделе «Aid post» предприятия «Planet Express», компьютеры которого объединены в домен «futurama.mult», полное имя будет выглядеть следующим образом: CN=John Zoidberg,OU=Aid post,OU= Planet Express, ↵ DC=futurama,DC=mult

Здесь CN обозначает «common name» (общее имя), OU – «Organizational unit» (организационная единица, структурное подразделение предприятия), DC – «Domain Component» (доменный компонент). Программа определяет контейнеры, в которых расположены учетные записи пользователя и компьютера, и, если они не совпадают, завершает сеанс пользователя. На организацию (в нашем примере – на организационную единицу «Предприятие») накладывается групповая политика безопасности, в соответствии с которой созданный сценарий должен запускаться при каждой попытке входа пользователя на рабочую станцию (logon script). Однако подобное решение недостаточно жизнеспособно. Случаи, когда на компьютерах отдела могут работать только его сотрудники, не так уж сильно распространены. Гораздо чаще требуется ограничить использование рабочих станций в пределах целого подразделения, объединяющего в себе ряд отделов. Кроме того, попытка входа на запрещенный компьютер является опасной ситуацией (особенно для предприятий, работающих со скрываемой информацией), которая требует принятия немедленных мер. Будет хорошо, если наша настройка сможет не просто регулировать доступ, но и выполнять действия, лишающие предполагаемого злоумышленника возможности дальнейшей работы. Расширим надстройку, приведя ее к более реалистичному виду. Для начала сформулируем правила доступа на компьютеры: n Существует ряд отделов, доступ на компьютеры которых предоставляется только сотрудникам подразделения. n В некоторых отделах доступ к рабочим станциям имеют сотрудники самого подразделения и всех дочерних. То есть компьютеры доступны в рамках поддерева. n Администратор должен иметь возможность блокировки, как конкретного отдела, так и поддерева подразделений. В заблокированных подразделениях полностью запрещается вход на компьютеры.

49


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

Рисунок 2. Новые атрибуты схемы

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

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

50

Для организационных единиц введем несколько новых атрибутов: n Статус. Будет обозначать тип подразделения: со свободным доступом к компьютерам, с доступом только своих сотрудников, с доступом своих сотрудников и сотрудников дочерних подразделений. Тип можно использовать как числовой (будет занимать меньше места, однако придется помнить соответствие числа и типа отдела), так и строковый (занимает много места, но более информативен). Поскольку для эффективного администрирования наглядность играет большую роль, чем экономия места, остановимся на строковом типе данных. n Заблокирован. Признак блокировки отдела. Логическое поле. Для реализации приведенных правил будет достаточно этих двух атрибутов. В статье рассматривается создание только работоспособного макета механизма управления доступом на основе архитектуры организации. Концепция конечного варианта будет окончательно сформулирована только после испытаний макета. Так, с большой уверенностью можно говорить о том,

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


безопасность Это объясняется тем, что ошибки в схеме могут привести к некорректной работе всего домена. Кроме того, все изменения схемы необратимы, другими словами, добавив атрибут, его уже невозможно удалить или изменить (но можно отключить). Присутствует и более привычный механизм защиты: чтобы получить право модифицировать схему, пользователь должен входить в группу Schema Admins. Сначала создаются атрибу ты: OULocked (признак блокировки организационной единицы), OUState (состояние) (см. рис. 2). Непосредственное добавление атрибутов во встроенные классы операционной системы возможно, но делать это настоятельно не рекомендуется. Поэтому создадим специальный дополнительный (auxiliary) класс OURulesEx, в который и добавим новые атрибуты (см. рис. 3). Затем он будет присоединен к существующему классу (в нашем случае – к классу организационной едиРисунок 3. Класс ницы). Новые атрибуты сделаем необязательными (чтобы упростить внедрение в случаях, когда требуется добавить правило к действующей модели организации). Таким образом, теперь мы сможем использовать для организационных единиц созданные атрибуты. Несмотря на высокую защиту, процесс добавления пользовательских свойств в системные классы (как и создание пользовательских) можно считать удобным и прозрачным. Изменения, сделанные в процессе разработки текущей надстройки, не привели к некорректной работе операционной системы. Но если вы планируете добавить свои атрибуты и тем более классы, сделайте это сначала на тестовой конфигурации, которую в случае чего можно будет безболезненно переустановить. После модификации схемы организационные единицы поддерживают необходимые свойства, далее требуется создать механизмы их использования. Для начала реализуем функции доступа к новым свойствам. Приведем пример реализации только для свойства UOLocked, поскольку доступ к свойству OUState происходит аналогичным образом. function isOULocked(dn) Set objOU = GetObject("LDAP://" & dn) isOULocked = objOU.OULocked if isEmpty(isOULocked) then isOULocked = false end function function setOULocked(dn, lock) Set objOU = GetObject("LDAP://" & dn) objOU.OULocked = lock objOU.setInfo end function

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

№10, октябрь 2007

с дополнительными свойствами

к объекту мы можем сразу использовать введенные свойства. Случаи, когда значение свойства не определено, можно отследить с помощью функции isEmpty. Так, после добавления новых свойств для всех организационных единиц значение isEmpty(objOU.OULocked) будет истинно. Функция isOULocked в этом случае сообщает о незаблокированной организационной единице. Подробнее остановимся на особенности добавления новых полей в стандартные классы операционной системы. После добавления поля в схему оно становится доступным для использования во всех новых объектах измененного класса. Однако что происходит с объектами, существующими на момент добавления нового свойства? Как выяснилось, в них новые свойства также появляются (по крайней мере, необязательные (optional)), проанализированные пустым значением. Скорее всего, необязательные параметры физически хранятся в списке в виде пар «название, значение», неинициализированные свойства отсутствуют в списке, а их пустое значение моделируется в процессе доступа. Подобный подход позволяет хранить объекты классов с очень большим возможным количеством редко используемых атрибутов, избегая лишних расходов на хранение. Поэтому специальной инициализации новых свойств для существующих объектов не требуется – достаточно проверки с помощью функции isEmpty в функциях доступа и возврата удобного значения по умолчанию. Приступим к практической реализации.

Разработка необходимых функций Windows 2003 уже содержит средства, позволяющие задавать руководителей подразделений. Это можно сделать с помощью окна свойств организационной единицы (см. рис. 4).

51


безопасность isAllowed = STATE_ALLOWED

Изначально считается, что вход на компьютер разрешен (возврат константы STATE_ALLOWED означает, что пользователь имеет право доступа на компьютер). dim compOU, userOU compOU = getParent(compDN) userOU = getParent(userDN)

Затем для каждого объекта определяется имя контейнера (организационной единицы), которому они принадлежат. if isOuLocked(compOU) then isAllowed = STATE_LOCKED exit function end if

Первая проверка – не заблокирована ли текущая организационная единица. Если заблокирована, функция возвращает признак недопустимости входа. Далее мы увидим, что функция может возвращать несколько значеРисунок 4. Задание руководителя отдела ний. Но только STATE_ALLOWED разРассмотрим вспомогательную функцию для определе- решает пользователю зайти на компьютер, остальные знания, в каком отделе находится объект (пользователь, ком- чения представляют собой запреты (такой подход был испьютер или организационная единица). пользован, чтобы зависимые от этой функции подпрограммы могли узнать причину запрета). В рассматриваемом маfunction getParent(dn) кете эта дополнительная информация нигде не используif UCase(Left(dn, 2))="DC" then ется, однако она наверняка понадобится при расширении getParent = "" else функциональности надстройки. getParent = right(dn, len(dn) - instr(1, dn, ",", ↵ vbTextCompare)) end if end function

Функция getParent отбрасывает общее имя (первый элемент – CN) с помощью функций обработки строк. Таким образом, остается подстрока, описывающая положение объекта (пользователя, компьютера или организационной единицы) в архитектуре организации. Если достигнут корень иерархии (родительского элемента нет), функция возвращает пустую строку. В нашем случае корневым элементом является первый доменный компонент (DC). Например, для имени пользователя «CN=Gomer, OU=Security, OU=aes, DC=simpsons, DC=ua» корневым элементом является «DC=simpsons, DC=ua». Напишем сценарий, реализующий усложненные правила входа на компьютеры на основе ИУА организации. Так будет выглядеть тело основной функции проверки допустимости входа на рабочую станцию. function isAllowed(userDN, compDN)

Функция принимает два параметра: полные имена пользователя и компьютера, на который осуществляется вход. Как уже говорилось, полное имя компьютера содержит информацию о положении объекта в ИУА предприятия.

52

if userOU = compOU then exit function end if

Если пользователь и компьютер находятся в одной незаблокированной организационной единице, то доступ разрешается. if getOUState(compOU) = STATE_EXPLICIT then isAllowed = STATE_EXPLICIT exit function end if

Если же они принадлежат различным контейнерам и при этом организационная единица, в которой расположен компьютер, помечена как STATE_EXPLICIT, то вход запрещается. STATE_EXPLICIT обозначает подразделение, где пользоваться компьютерами могут только свои сотрудники (такое правило было реализовано в начале статьи). dim compTreeRoot compTreeRoot = getTreeRoot(compOU) if compTreeRoot <> getTreeRoot(userOU) then if compTreeRoot <> EMPTY_STR then isAllowed = ↵ STATE_TREE exit function end if end function


безопасность И последним проверяется правило для организационных единиц, допускающих к работе также сотрудников дочерних отделов. Функция getTreeRoot поднимается вверх по дереву структуры предприятия до тех пор, пока не встретит первое подразделение, помеченное как STATE_TREE. В случае если таких организационных единиц найдено не было, возвращается пустая строка. function getTreeRoot(dn) if (dn=EMPTY_STR) then getTreeRoot = dn exit function end if if (getOUState(dn)=STATE_TREE) then getTreeRoot = dn exit function end if getTreeRoot = getTreeRoot(getParent(dn)) end function

Рисунок 5. Пример архитектуры предприятия

на компьютер. То есть для отключения профиля у каждоДля реализации правила достаточно провести такой го пользователя должны быть права на эту операцию. В то поиск дважды: начиная от пользователя и от компьюте- же время передача пользователям даже части администра. И если в результате будет получен один и тот же ко- ративных функций крайне нежелательна. Поэтому для отрень, доступ разрешается. Отмечу особенность реализа- ключения профилей создадим специального пользоватеции последнего правила. В случае наличия вложенных ор- ля (punisher), от имени которого и будем выполнять отклюганизационных единиц с общим доступом к компьютерам чение, с помощью следующей функции. сотрудников дочерних подразделений разрешение достуFunction disableUser(userDN, compDN) па через нашу функцию передано не будет. При такой реаSet dso = GetObject("LDAP:") лизации сотрудники подструктур с отличными настройкаSet userObj = dso.OpenDSObject("LDAP://" & userDN, ↵ "punisher@complex.ua", "P@ssw0rd", ↵ ми безопасности не могут использовать рабочие станции ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND) из родительских подразделений. userObj.accountDisabled = true userObj.description = "Unallowed access on " & compDN Рассмотрим пример (см. рис. 5). Допустим, для архиuserObj.SetInfo тектуры, приведенной на рис. 2, для организационной едиend function ницы «Производство» установлено свойство STATE_TREE Здесь для привязки к объекту мы используем метод (т.е. разрешение общего использования компьютеров в рамках всего поддерева). В этом случае пользователь, OpenDSObject вместо функции GetObject, поскольку он позпринадлежащий подразделению «Цех», может пользовать- воляет обращаться к объектам домена от имени заданнося компьютерами, установленными в «Производство». Од- го пользователя. нако если установить такой атрибут еще и для подразделения «Учет», то пользователи могут работать только с компьютерами своего поддерева. Другими словами, пользователь из отдела «Бухгалтерия» сможет воспользоваться компьютером в архиве, но не сможет в цехе. Правила доступа поддерева перекрывают правила родительских единиц. Такое решение предс тавляется более защищенным, хотя может и не удовлетворять политике разрешения доступа некоторых организаций. Для реализации альтернативных правил потребуется незначительная модификация приведенной функции. Перейдем к реализации функций реакции на запрещенные попытки входа. Во-первых, профиль пользователя должен быть автоматически заблокирован. Это достаточно простая операция, однако нужно помнить, что сценарии входа выполняются от имени пользователя, осуществляющего вход Рисунок 6. Разрешения, необходимые и достаточные для отключения пользователей

№10, октябрь 2007

53


безопасность События будет получать от подс и с те мы веде ния ло го в (о бъе к т «Win32_NTLogEvent»). Нас интересуют события категории «Account Logon». «Полевые» испытания показали появление нескольких видов таких событий при успешной аутентификации доменного пользователя: n 672: Authentication Ticket Granted n 673: Service Ticket Granted Выбор был сделан в пользу первого, поскольку оно приходило в единственном экземпляре. С объектом каждого события связан так называемый отчет: массив строк с дополнительной информацией о событии. Именно из него можно получить имя пользователя и рабочей станции, на которую производится вход. Таким образом, мы можем контролировать процедуру авторизации на сервере с поРисунок 7. Сообщение руководителю подразделения о недопустимом входе мощью сценария, запущенного от имеПароль пользователя содержится в открытом виде, по- ни пользователя, достаточно привилегированного для внеэтому исходный код сценария целесообразно зашифро- сения изменений в профили, не распространяя его пароль. вать. Кроме того, пользователю punisher нужно предоста- Итак, для подписки на выбранное событие нужно выполвить только необходимый набор полномочий, чтобы ми- нить следующий код (должен выполняться на контролленимизировать потери, связанные со взломом профиля. ре домена, в противном случае точку в следующей строке Для нашего случая будет достаточно прав на запись огра- следует заменить именем контроллера): ничений объектов пользователей в рамках закрытых подset objwmiservice=getobject("winmgmts://./root/cimv2") разделений. И поскольку было запланировано сохранение информации о причине отключения пользователя в его strwql="select * " & ↵ "from __instancecreationevent " & ↵ свойствах, нужно разрешить еще и эту операцию. Так что, "where targetinstance isa 'Win32_NTLogEvent' " & ↵ кроме отключения пользователя, функция сохраняет в его "and targetinstance.EventIdentifier = 672" профиле информацию о причине блокировки (в виде «Неset objeventsource=objwmiservice.execnotificationquery(strwql) санкционированный доступ на компьютер…»). Обладая правами, отмеченными на рис. 6, punisher То есть на самом деле мы получаем уведомление о сосможет только задавать ограничения для других пользо- здании экземпляра объекта типа Win32_NTLogEvent. вателей в рамках заданной части архитектуры (на рис. 6 – Это те самые объекты, которые можно просмотреть, исдля подразделения «Management» и дочерних). Также це- пользуя оснастку EventViewer. Далее сценарий переходит лесообразно поместить пользователя punisher в специаль- в режим ожидания событий. ную организационную единицу, для которой с помощью While True групповых политик безопасности запрещен запуск люset objeventobject=objeventsource.nextevent() бых программ. Таким образом, используя этот профиль, domain = getDomain user = objEventobject.TargetInstance.InsertionStrings(0) нельзя будет ни воспользоваться каким-либо приложениcomp = getCompName(objEventobject.TargetInstance. ↵ ем, ни даже войти на компьютер (при входе от имени поль InsertionStrings(9)) check user, comp, domain зователя запускаются системные программы). Wend Тем не менее наличие учетной записи, с помощью которой можно заблокировать всех пользователей предприяТакой способ подписки крайне ненадежен – при завертия, является неприятным побочным эффектом. Да и рас- шении работы сценария (из-за ошибки в нем, например), пространение пароля по сети, пусть даже в зашифрован- обработка событий полностью прекратится. Существуном виде, опасно. Поэтому функции, требующие специ- ют более надежные варианты (когда операционная систеальных прав, возможно, стоит перенести на сервер. Рас- ма вызывает нужные подпрограммы), но они не доступны смотрим альтернативный вариант «наказания» пользо- для сценариев. Так что такое решение пригодно в основвателей. ном для иллюстрации способа реализации. При успешной аутентификации пользователя сервер Свойство InsertionStrings – отчет о событии, описанный получает ряд уведомлений (событий). Рассмотрим спо- выше. Он состоит из 10 строк. Нам для дальнейшей рабособ их обработки. Но сначала определимся, на какое со- ты требуется первая строка (нумерация начинается с 0), бытие реагировать. которая содержит имя пользователя и последняя строка

54


безопасность с IP‑адресом компьютера. Функция check выполняет всю полезную деятельность. Но сначала рассмотрим вспомогательные функции. Во‑первых, в нашем распоряжении будут только названия пользователя и компьютера. Для функции же проверки требуются их отличительные имена (DN). Для этого придется произвести поиск в модели архитектуры предприятия с помощью следующей функции: getUserADsPath = EMPTY_STR Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider"

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) next end function

Имя компьютера представлено в этой таблице в виде «compName.domainName», поэтому в конце функции мы отбрасываем часть строки, чтобы осталось только имя комРассмотрим параметры: пьютера, по которому его можно будет найти в базе данn Name – это искомое имя объекта; ных LDAP. n className – имя класса (в нашем случае функция будет Поскольку сценарий проверки теперь выполняется использоваться как для поиска компьютеров, так и поль- на сервере от имени привилегированного пользователя, зователей); функция отключения профиля максимально упрощается. n nameField – какое поле объекта считать его именем Function disableUser(userPath, compPath) при поиске (для компьютера это «cn», а для пользоваSet userObj = GetObject(userPath) теля – «SamAccountName»); userObj.accountDisabled = true userObj.description = " Unallowed access on " & compPath n domain – домен, в котором будем производить поиск. 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).value end function

При поиске снова воспользуемся провайдером «Active Directory Provider», поскольку он предоставляет удобную возможность использования SQL-подобного языка. Домен в данном случае играет роль контейнера, с которого начинается поиск. 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) next end function

Следующий вопрос, который необходимо решить, – получение имени компьютера на основе его IP-адреса. Для этого воспользуемся сценарием, использующим WMI. С помощью данного инструментария можно обращаться ко многим объектам операционной системы как к таблицам базы данных. На компьютере под управлением Windows 2003, исполняющей роль DNS-сервера, есть таблица MicrosoftDNS_AType, записи которой и определяют соответствие адреса и имени рабочей станции. Следующий сценарий извлекает из таблицы имя нужного компьютера. В качестве параметра он получает IPадрес.

№10, октябрь 2007

userObj.SetInfo end 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, compPath end function

Здесь хотелось бы обратить ваше внимание на условный оператор «if userPath = EMPTY_STR then …». Дело в том, что сообщение с кодом 672, как оказалось, приходит еще в одном случае – когда включается компьютер, входящий в домен. Тогда в первой строке отчета содержится имя не пользователя, а рабочей станции. В этом случае пользователь найден не будет, и функция завершит работу. Итак, описанный альтернативный подход позволит производить проверку доступа на рабочие станции с помощью серверного сценария. Однако такое решение стоит рассматривать как дополнение предыдущего, а не его альтернативу. Основной недостаток: невозможно гарантировать, что сообщение придет за определенное время, тем более при большой частоте операций входа на рабочие станции. События обрабатываются последовательно. Рассмотрим особенности выполнения основных действий в серверном (постоянно работающем на сервере) и клиентском (распространяемом в рамках глобальной политики безопасности) сценариях. Операции проверки допустимости входа и отправки сообщения руководителя рассматривать не станем, так как их реализация не зависит от вида сценария. Как уже говорилось, операция отключения пользователя из клиентского сценария выглядит достаточно опас-

55


безопасность ной. Поэтому данную функцию лучше перенести на сервер. В то же время первый вариант гораздо проще и надежнее в работе, что позволяет оставить его в качестве возможной альтернативы. Завершение пользовательского сеанса целесообразно оставить в ведении клиентского сценария. Может пройти большой промежуток времени от входа злоумышленника на рабочую станцию до обработки на сервере этого события. Теоретически можно дождаться загрузки профиля и, выдернув сетевой шнур, начать спокойно работать с локальной информацией, которую мы собственно и стараемся защитить. Перейдем к вопросу информирования глав подразделений. Рассмотрим вспомогательные функции. Следующая подпрограмма определяет руководителя заданного подразделения. function findManager(startOU) findManager = "" if startOU = "" then exit function

В качестве параметра передается полное имя организационной единицы, руководителя которой нужно определить. Если имя подразделения – пустая строка, то функция завершает работу. set ou = getObject("LDAP://" & startOU) manDN = ou.managedBy

Далее проверяем свойство «Руководитель» текущего подразделения. Если его значение – пустая строка, то данной организационной единице не сопоставлен руководитель, и поиск продолжается вверх по дереву с помощью рекурсивного вызова этой же функции (т.е. делается попытка найти учетную запись руководителя подразделения более высокого уровня). if manDN <> "" then findManager = manDN exit function else findManager = findManager(getParent(startOU)) end if end function

водителя подразделения, пользователя, осуществляющего недопустимый вход, и компьютера. 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 & " " & time objEmail.Configuration.Fields.Item ↵ ("http://schemas.microsoft.com/cdo/configuration/ ↵ smtpserver") = "smtp_server " objEmail.Configuration.Fields.Update objEmail.Send end function

Затем настраиваются почтовые параметры (SMTP-сервер в данном примере функционировал на компьютере с именем «smtp_server») и формируется текст письма. Задача данной статьи – показать способы использования архитектуры предприятия для эффективной защиты объектов информационной подсистемы, поэтому основное внимание мы уделяем способу определения руководителя подразделения и его информирования. Текст же письма сделан максимально простым (содержит имя пользователя, компьютера, а также дату и время несанкционированной попытки входа в компьютер), т.к. задача составления более информативного послания может быть при необходимости легко решена. Теперь руководитель (manager@complex.ua) при попытках несанкционированного доступа будет получать письма следующего вида (см. рис. 7). Остается написать результирующий сценарий, который использует все описанные в статье подпрограммы. Set objSysInfo = CreateObject("ADSystemInfo") userDN = objSysInfo.UserName compDN = objSysInfo.ComputerName

Сначала определяется характеристики пользователя и компьютера. if isAllowed(userDN, compDN) = STATE_ALLOWED ↵ then WScript.Quit

Затем вызывается функция проверки доступа. Если доФункция возвращает полное имя первого руководите- ступ разрешен – сценарий завершается. В противном слуля подходящего подразделения или пустую строку, если чае принимаются карательные меры: отключается профиль, ни у текущей, ни у родительских организационных единиц информируется руководитель, а сеанс прекращается. Есруководители не определены. ли было принято решение перенести функцию отключения Адрес электронной почты пользователя определяет сле- пользователя на серверный сценарий, следующую строку дующая функция. В качестве параметра ей также переда- необходимо удалить. ется полное имя объекта. function getMail(dn) set userObj = getObject("LDAP://" & dn) getMail = userObj.get("mail") end function

Чтобы отправить сообщение руководителю подразделения, на компьютер которого была попытка несанкционированного доступа, нужно выполнить следующий сценарий: function informManager(manDN, userDN, compDN)

Функция получает три параметра: полные имена руко-

56

disableUser userDN, compDN informManager findManager(getParent(compDN)), userDN, compDN set shellObj = CreateObject("WScript.Shell") shellObj.exec "shutdown /l"

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


безопасность ры предприятия (используя стандартную оснастку Active Directory Users and Computers). Например, нужно назначить руководителя подразделения с помощью процедуры на рис. 4, чтобы этот пользователь начал получать уведомления по электронной почте о несанкционированных попытках захода на компьютеры своего отдела. Также, переместив компьютер из одной организационной единицы в другую, администратор автоматически сделает его доступным для сотрудников нового и запрещает доступ бывшего подРисунок 8. Информация о дополнительных параметрах разделения. Предложенной модификацией уже можно эффективно ная функциональность программы заключается в выводе пользоваться, однако остается неудобство установки ста- на экран нужной информации с помощью диалогового октуса организационных единиц. Пока эту процедуру можно на (см. рис. 8). Для установки пункта меню нужно сохранить программу осуществить путем ручного запуска сценариев. Такое решение нельзя назвать приемлемым, в особенности для случа- вывода информации (в нашем примере – «c:\ou_info.vbs») ев сложных моделей информационно-управленческих ар- и один раз выполнить сценарий со следующей командой: хитектур. Поэтому нужно подключить сценарии к визуальinstallOUMenu 100, "ArchitectureEx: OU Info", ↵ ным инструментам моделирования. "c:\ou_info.vbs" Создать новый пункт меню для оснастки «Active Аналогичным образом добавим сценарии для выполнеDirectory Users And Computers» можно с помощью следуния всех запланированных действий: ющей функции: n ArchitectureEx: Lock Single. Блокировка одного подfunction installOUMenu(id, name, scriptPath) разделения. Set root= GetObject("LDAP://rootDSE") n ArchitectureEx: Lock Cascade. Блокировка всех подsConfig = root.Get("configurationNamingContext") sPath = "LDAP://cn=organizationalUnit-Display,cn=409, ↵ разделений поддерева, начиная с текущего. cn=DisplaySpecifiers," & sConfig n ArchitectureEx: Unlock Single / Cascade. РазблокировSet obj= GetObject(sPath) sValue = id & "," & name & "," & scriptPath ка одного подразделения или поддерева. vValue = Array(sValue) n ArchitectureEx: Set Explicit State. Установка для подразobj.PutEx 3, "adminContextMenu", vValue obj.SetInfo деления режима разрешения доступа только для своих end function сотрудников. n ArchitectureEx: Set Tree State. Установка для подраздеЕй требуется передать три параметра: номер пункта ления разрешения доступа ко всем компьютерам под(используется для определения позиции пункта меню), надерева. звание команды и путь к файлу сценария, который должен n ArchitectureEx: Set Free State. Свободный доступ к комбыть выполнен при выборе пункта меню. пьютерам подразделения для зарегистрированных После выполнения приведенной функции в оснастках пользователей. управления объектами Active Directory для организационных единиц появится новый пункт контекстного меню, выВсе функции модификации свойств уже определены, поэзывающий заданный сценарий. Сначала приведем пример вывода на экран информации о дополнительных парамет- тому ограничимся примером только одного сценария выполрах организационных единиц (тех, которые были добавле- нения команды. Рассмотрим самый сложный сценарий – каскадную блокировку отделов (все остальные сводятся к вызоны в схему в начале статьи). ву одной функции). Сначала определим функцию каскадного Set oArgs = WScript.Arguments обновления свойства «Заблокировано» подразделений. dim lock, state Set ouObj = getObject(oArgs.item(0)) if isOULocked(ouObj) then lock = "yes" else lock = "no" end if state = getOUState(ouObj) msgbox "Name: " & ouObj.ou & chr(10) & "Locked: " & ↵ lock & chr(10) & "State: " & state, vbInformation, ↵ "Additional attributes"

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

№10, октябрь 2007

function setSubtreeLock(startFromOU, lock)

В качестве параметров функция получает путь к корню поддерева, начиная с которого нужно заблокировать или разблокировать организационные единицы (конкретное действие зависит от второго параметра). Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider"

57


безопасность полученных сценариев их исходный код приводиться не будет. После завершения настроек в оснастке «Active Directory Users And Computers» появятся дополнительные пункты меню со всеми новыми операциями. Приставка «ArchitectureEx» используется для того, чтобы отличить встроенные команды от добавленных в ходе данной работы (см. рис. 9).

Заключение В статье приводится пример надстройки над стандартной системой управления доступом операционной системы Windows 2003 Server. Можно сделать вывод о наличии мощных встроенных средств моделирования информационно-управленческих архитектур организаций. Однако этот механизм ограниченно используется при настройке правил безопасности. Основная причина ограничений – подобные правила практически невозможно обобщить, сделав их удобными для большинства Рисунок 9. Расширенное контекстное меню управления организационными единицами организаций. Поэтому в самой операДанное действие удобнее выполнить, снова воспользо- ционной системе реализован лишь общий каркас системы вавшись провайдером «Active Directory Provider». С его по- безопасности на основе архитектуры. Его дополняют размощью можно выполнять запросы к модели ИУА организа- витые средства расширения функциональности, с помощью ции, используя встроенные средства для выборки подде- которых можно, приложив относительно небольшие усилия ревьев (для включения этого режима в программе исполь- (по сравнению с разработкой подобной системы с нуля), резуется константа ADS_SCOPE_SUBTREE). ализовать нестандартные средства защиты объектов ИУА. Конечно, решения на основе сценариев являются, скоSet objCOmmand.ActiveConnection = objConnection рее, макетом реальной надстройки. Так, даже поддержка objCommand.CommandText = _ базовых свойств потребовала создания восьми пунктов ме"Select ADsPath from '" & startFromOU & "' " ↵ & "Where objectClass='organizationalUnit'" ню. Для более удобного использования их понадобится еще objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE больше. Более логичным будет конфигурирование надстроSet objRecordSet = objCommand.Execute objRecordSet.MoveFirst ек с помощью специальных закладок в свойствах объектов Active Directory, которые реализуются в виде библиотек, наПосле выполнения запроса мы получаем набор записей, писанных на компилируемых языках (C++, Visual Basic и т. п.). содержащих пути ко всем организационным единицам, при- Однако это относится уже к улучшению пользовательсконадлежащих заданному поддереву. Остается только обой- го интерфейса, основные методы реализации надстройки ти эту выборку и назначить каждой единице требуемые на- не изменятся (в случае же использования для создания надстройки блокировки. стройки среды Visual Basic все основные функции из этой статьи можно будет использовать без изменений). Do Until objRecordSet.EOF ouPath = objRecordSet.Fields(0).value set ouObj = getObject(ouPath) ouObj.OULocked = lock ouObj.setInfo objRecordSet.MoveNext Loop end function

Сценарий для обработки меню будет выглядеть так: Set oArgs = WScript.Arguments setSubtreeLock oArgs.item(0), true

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

58

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



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

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

Постановка задачи чивать ее на рабочих станциях под уп- приемлемые: процессор с частотой 450 МГц или выше (включая поддержМежсетевой экран, антивирусная сис- равлением именно Windows XP. тема, средства предотвращения вторОтсутствие Vista в списке поддер- ку многоядерных процессоров), 256 Мб жения, антиспам – все эти компоненты живаемых операционных систем ме- оперативной памяти, 100 Мб свободноявляются на сегодняшний день неотъ- ня особо не удивило, так как не секрет, го дискового пространства. емлемой частью системы безопаснос- что многие компании-разработчики ти для домашних компьютеров и рабо- сознательно не указывают в списках Установка чих станций, не находящихся под кон- поддерживаемых продуктов эту опе- Разработчики настоятельно рекоментролем корпоративных средств защи- рационную систему, так как опасают- дуют удалить с рабочей станции антиты. Сейчас многие компании, специа- ся за надежность функционирования вирусные продукты и межсетевые эклизирующиеся на разработке антиви- своих продуктов. К тому же сущест- раны от других производителей. Одрусных приложений, а также средств вует мнение, что Microsoft сознатель- нако мне удалось добиться совмесбезопасности, предлагают на рынке но осложняет интеграцию продуктов, тной работы Outpost Security Suite свои решения. Как правило, все эти связанных с безопасностью, со своей с Symantec Client Security. Правда, решения содержат в себе полный на- новой операционной системой, для то- межсетевой экран, входящий в состав бор средств защиты, необходимых для го, чтобы пользователи применяли для продукта от Symantec, лучше все-таобеспечения неуязвимости персональ- защиты только продукты от MS. Одна- ки отключить. Итак, тем, кто уже знаного компьютера. Сегодня я расскажу ко, по словам разработчиков, Agnitum ком с продуктами семейства Outpost о новом продукте компании Agnitum – Outpost Security Suite Pro 2008 для Vista (к примеру, с их межсетевыми экранаOutpost Security Suite Pro, о функцио- сейчас находится в финальной стадии ми), процесс установки Outpost Security нале данного приложения, его досто- публичного бета-тестирования. Suite Pro покажется знакомым. После инствах и недостатках. Получить испыТак как в состав Outpost Security запуска у вас появляется окно мастера, тательную версию данной программы Suite Pro входят компоненты для ра- в котором вам предлагается выбрать боты с электронной почтой на сто- уровень безопасности (см. рис. 1). вы можете по адресу [1]. роне клиента, в связи с этим привоКак видно, нам предлагается три Требования к системе дится следующий список: Microsoft возможных уровня: повышенный, обычПрежде чем начать описание возмож- Outlook Express, Microsoft Outlook 2000, ный и низкий. Обычно выбор уровня ностей Outpost Security Suite Pro, скажу 2002, 2003 и 2007. Как видите, под- защищенности делается между повынесколько слов о том, какие аппарат- держиваются только почтовые клиен- шенным и обычным, и определяется, ные требования предъявляют прило- ты от Microsoft. Это не слишком хоро- как правило, уровнем владения комжения к системе пользователя. По ин- шо, так как всё больше пользовате- пьютером того пользователя, который формации с сайта производителя, под- лей применяют программное обеспе- постоянно использует данную машину. держиваются следующие платформы: чение с открытым кодом, и отсутствие То есть на машине системного админисWindows 2003 Server (x86 и x64 версии), поддержки таких приложений в даль- тратора лучше использовать повышенXP (x86 и x64 версии), 2000 Professional. нейшем может сказаться на востребо- ный уровень, так как админ в состоянии В качестве тестовой системы я исполь- ванности программы. При этом список грамотно реагировать на те сообщения, зовал Windows XP SP2, думаю, боль- поддерживаемых почтовых протоко- которые будет выдавать программа в процессе работы и настраивать ее сошинство потенциальных пользовате- лов стандартен: POP3, SMTP, IMAP. лей данной программы будут развораАппаратные требования вполне ответствующим образом. А вот, напри60


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

Рисунок 1. Выбор уровня безопасности

Рисунок 2. Настройка создания правил

мер, генеральному директору вряд ли По собственному опыт у рабо- протоколы, также статистику по разрепонравится большое количество непо- ты с межсетевыми экранами Agnitum шенным и запрещенным соединениям, нятных сообщений на его ноутбуке, по- и другими могу сказать, что второго как открытым, так и закрытым. этому такому пользователю лучше ог- режима вам будет явно недостаточно. Следующим разделом являются раничиться обычным уровнем защиты Всегда найдется какое-либо специфи- «Plug-Ins». Здесь уже можно отметить с дополнительными настройками, о ко- ческое приложение, готового шаблона все преимущества Outpost Security торых я расскажу чуть позже. для которого не окажется в базе меж- Suite перед предыдущими версиями, Следующим шагом после выбора сетевого экрана. Поэтому рекомендую являвшимися, по сути, лишь межсеуровня защиты является конфигура- выбрать первый режим. Далее будет тевыми экранами с некоторыми доция модуля «Антивирус+Антишпион». осуществлен поиск сетей и создана полнениями. Необходимо настроить уровень пос- база контроля компонентов. В разделе «Active Content» можтоянной защиты системы. Можно В следующем окне необходимо за- но наблюдать статистику по блокипроверять файлы только при запус- вершить настройку конфигурации. На- рованию различных активных компоке или при каждом обращении. Если жав кнопку «Дополнительно», можно нентов, таких как всплывающие окна, у вас мощный компьютер, и вы хотите произвести специальные настройки, ActiveX‑сценарии, JavaScript, VBScript настроить повышенный уровень безо- в частности, указать приложения, ко- и другие. пасности, то лучше выбрать второй ва- торым разрешен или запрещен выход В разделе «Ads» можно наблюдать риант. Далее, если вы желаете ускорить в сеть, указать режимы работы Outpost статистику по блокировке рекламы. В разделе «Anti-Malware» находитпроцесс сканирования, рекомендуется и других компонент. Это меню навключить технологию SmartScan. Она стройки в полном составе сохранилось ся статистика по обнаруженным врезначительно увеличивает скорость ра- от прежних версий межсетевого экра- доносным приложениям, также и инботы модуля, кэшируя результаты про- на Agnitum Outpost. Сохраняем конфи- формация о версиях антивирусных верки неизменившихся файлов и папок гурацию, нажав «Finish». Как и приня- баз. Здесь же можно запустить продо следующего обновления баз виру- то для подобных приложений, для ак- верку диска на вирусы. сов и шпионского по, что дает много- тивации настроек Outpost Security треВ разделе «Anti-Spam» приводиткратное ускорение при повторной про- бует перезагрузки системы. ся статистика по почтовым сообщеверке ПК в течение одного дня. Это поПосле перезагрузки в правом ниж- ниям. При этом отдельно фигурируможет снизить нагрузку на производи- нем углу экрана должен появиться зна- ют сообщения, признанные как летельность системы, но будьте осторож- чок Outpost Security. Нажав на него, мы гальная почта, подозрительные и прины, возможны ложные срабатывания попадаем в окно администрирования знанные спамом. Также здесь можно средств по борьбе с руткитами (анти- программы. В левой части окна распо- видеть состояние словарей, отдельно руткитов) на скрытые файлы. лагается набор инструментов для мо- для спама и отдельно для легальных Далее, открывается окно автомати- ниторинга. Рассмотрим эти инструмен- сообщений. ческого создания правил. Здесь вы мо- ты более подробно. Раздел «Attack Detection» также пежете либо разрешить автоматическое решел из предыдущих версий межсесоздание правил при запросе дейст- Мониторинг и статистика тевого экрана. В нем вы можете вивия, или же использовать предустанов- В разделе «My Internet» вы можете на- деть информацию о том, кто, когда ленные правила для предустановлен- блюдать сетевую активность, количес- и каким образом пытался атаковать ных приложений (см. рис. 2). тво открытых портов, используемые вашу систему.

№10, октябрь 2007

61


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

Рисунок 3. Обнаружение вредоносного кода

Рисунок 4. Обнаружение попытки отправки конфиденциальных данных

Раздел «Content» содержит статистику о блокировании содержимого веб-сайтов. И, наконец, раздел «DNS Cache» содержит информацию о сохраненных DNS-запросах. Итак, мы рассмотрели мониторинг основных компонент, теперь поговорим о настройках. Для этого необходимо зайти в меню «Параметры». Содержимое этого раздела вы уже видели при установке системы. Рассмотрим подробнее последний раздел «Модули». В свойствах плагина «Интерактивные элементы» вы можете настроить фильтрацию определенных активных компонент. При этом возможны три действия: разрешено, запрос, запрещено. Здесь можно также настроить список исключений. А вот плагин «Реклама» располагает более интересным функционалом. Здесь можно задавать слова, по которым признавать тот или иной сайт рекламной страницей и блокировать ее. Также можно блокировать картинки по их размерам. Естественно, все эти свойства можно изменять, добавлять и удалять нужные слова и размеры картинок. Также есть возможность экспорта и импорта этих настроек.

Средства защиты от вредоносного кода Особого внимания заслуживает плагин «Антивирус+Антишпион (AntiMalware)». Фактически данная компонента Outpost Security Suite явля-

62

ется системой антивирусной защиты цию в мире файрволов. Поэтому я буи не только. ду тестировать лишь новые компоненВ закладке «Общие» мы видим ос- ты – «Антивирус+Антишпион» и «Анновные настройки двух опций «Malware тиспам». Сканер» и «Постоянная защита». ДоДля тестирования антивируса статочно стандартные для антивирусов воспользуемся тестовой сигнатурой настройки: проверять ли файл при каж- eicar.com [2]. Это фрагмент кода, котодом обращении или только при запуске рый по договоренности все антивируси какое действие выполнять при обна- ные компании используют для проверружении вредоносного кода. ки вирусных сканеров (см. рис. 3). В закладке «Личные данные» можКак и следовало ожидать, данный но настроить блокирование отправки «вирус» был успешно обнаружен и законфиденциальных данных: паролей блокирован при первой же попытке оби номеров кредитных карт. Формат ращения. Конечно, по такому простому этих конфиденциальных данных ни- тесту нельзя судить о том, насколько как не ограничивается, так что вполне хорошо Outpost обнаруживает настоможно фильтровать и другие важные ящий вредоносный код, но по крайней для бизнеса данные, такие как имена мере мы убедились в работоспособдокументов, файлов и т. п. ности компонентов антивируса. Чуть позже я расскажу о результаСледующий тест – это предотвратах тестирования работы этой и дру- щение утечки конфиденциальных дангих компонентов на практике. ных пользователя. В качестве примеВ следующей закладке «Почта» мы ра я указал в настройках некое число, можем определить настройки сканиро- якобы являющееся номером кредитвания почтового трафика. Рекомендую ной карты, и решил попробовать отпрасканировать как входящую, так и исхо- вить этот номер через веб-интерфейс дящую почту. Также можно настроить бесплатной почтовой службы. Не секфильтрацию прикрепленных файлов, рет, что некоторые простенькие сценанапример, запретить пересылку фай- рии на VBScript именно так и поступалов определенного типа. ют, собирают конфиденциальную инНаконец, в закладке «Дополни- формацию на локальном диске и зательно» можно настроить расписание тем, открыв в невидимом режиме браудля проведения полного сканирования, зер, с помощью заранее запрограммифайлы и папки, которые можно исклю- рованных кодов клавиш осуществляют чить. Также в этом разделе можно на- отправку писем с этими данными. И вот строить защиту критических компо- что у меня получилось (см. рис. 4). нентов системы, таких как компоненНо на этом я не стал останавлиты браузера Internet Explorer, WinLogon ваться, у HTTP есть два метода пеи другие. Данная защита представля- редачи данных GET и POST. В приет собой контроль целостности данных мере с бесплатной почтой был мекомпонентов. тод POST. В случае с GET мы переПлагин «Антиспам» не содержит даем данные в формате: «http://site.ru/ в себе каких-либо настроек, так как index.php?id=12345». они осуществляются непосредственДля примера я взял любой файл на все том же сервере и попробовал но в почтовом клиенте. На этом перечисление компонен- передать ему в качестве параметра все тов Outpost Security Pro можно счи- тот же номер кредитной карты в виде: тать завершенным. Теперь самое вре- «index.php?id=…» (то, что у этого сцемя посмотреть продукт в реальных ус- нария нет такой переменной или она имеет другой формат, в данном слуловиях. чае совершенно не важно, так как Проверяем на прочность Outpost должен перехватить эти данВ качестве тестовой площадки я ис- ные раньше, чем они достигнут сервепользовал Windows XP с установлен- ра). Outpost также перехватил попытку ным Service Pack 2. Тестировать фун- отправки этих данных. кционал межсетевого экрана смысК слову, когда некоторое время нала особого нет, так как межсетевые зад я тестировал продукт одного доэкраны Outpost и так хорошо извест- вольно известного российского разны и имеют непререкаемую репута- работчика, также предназначенный


безопасность для перехвата попыток отправки конфиденциальных данных, эта программа почему-то не определяла данные, переданные методом GET. И, наконец, третья попытка имитировать утечку данных – через протокол SMTP. Попробуем передать тот же пресловутый номер в теле письма, замаскировав его с двух сторон набором бессмысленных символов. Сообщение также перехвачено. Я немного изменил тест, разместив номер кредитной карты в текстовом файле, который прикрепил к письму. Outpost также обнаружил утечку. Последний тест – я заархивировал текстовый файл с номером в ZIP-архив (без пароля). И вот тут-то мне удалось беспрепятственно отправить конфиденциальные данные. Конечно, строго говоря, мы можем средствами того же Outpost запретить отправку файлов с расширением ZIP, но это не совсем то. Так что авторам есть над чем поработать. Еще один тест я провел с фильтром вложений. Я включил фильтрацию для файлов с расширением ZIP, но изменил расширение ZIP-файла на TXT и в таком виде попытался отправить письмо. Файл был успешно отправлен. Конечно, такой тест не совсем корректен, так как в настройках программы ясно указано «расширение», а не «тип» файла, но сейчас многие антивирусные программы умеют различать типы файлов не только по расширениям, но и по содержимому, так авторам следовало бы проработать такую возможность фильтрации файлов. Например, как это реализовано во многих антивирусных системах, где можно настроить, как обрабатывать архивы: файлы какого объема сканировать, а какие сразу отправлять в карантин или удалять и так далее.

Защита от спама Следующим тестом будет проверка защиты от нежелательных рассылок – спама. Вообще к системам защиты от спама, установленным на клиенте, я отношусь не слишком хорошо. Дело в том, что, как правило, такие решения обладают слабыми механизмами определения спама, производят только контекстный анализ и нуждаются в постоянном обучении. Но посмотрим, на что способен Outpost Security Suite. Для настройки фильтра нежелательной почты необходимо его сначала обучить. Предложение произвести это обучение появляется при каждом запуске почтового клиента. Далее появляется мастер, с помощью которого мы можем указать папки, в которых должны сохраняться письма, относящиеся к «хорошей» почте. Затем мастер произведет сканирование данных папок. По результатам сканирования создаются правила распознавания нежелательных почтовых рассылок. Следует отметить, что эта возможность недоступна без использования Outpost Security Suite . Также можно создавать эти правила вручную по различным критериям: имя отправителя и получателя, тема, содержимое письма и так далее. Есть возможность составления белых и черных списков, что тоже бывает очень полезно при работе (см. рис. 5). После выполнения необходимых настроек я провел несколько тестов. Фильтр нежелательной почты с базовыми настройками показал себя очень неплохо. Хорошо филь-

№10, октябрь 2007

Рисунок 5. Настройки фильтра нежелательной почты

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

Заключение Подведем итоги. Outpost Security Suite является достаточно мощной системой защиты рабочих станций и домашних компьютеров от различных угроз. Ключевым элементом Outpost Security Suite является хорошо зарекомендовавший себя межсетевой экран. Антивирусные и антишпионские компоненты, средства защиты от утечки информации, а также система фильтрации нежелательной почты также хорошо функционируют, хотя и имеют некоторые недостатки, которые, я надеюсь, будут устранены в дальнейшем. 1. Испытательная версия Outpost Security Suite Pro – http:// www.security-suite.ru. 2. Сайт проекта Eicar.com – http://eicar.com.

63


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

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

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


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

П

латформа Untangle [1], представленная одноименной компанией (раннее Metavize), создана на основе более 30 решений с открытыми исходными текстами, среди которых – дистрибутив Knoppix, Snort, ClamAV, SpamAssasin, Squid и другие. Целью проек та Untangle является замена коммерческих решений, таких как ISA Server, SonicWall или WatchGuard в небольших и средних организациях. Основная идея нового проекта – дать администратору простой в настройке и управлении устанавливаемый на один компьютер инструмент, позволяющий укрепить безопас ность сети. В отличие от многих подобных решений, в которых присутствуют все модули защиты, в Untangle изначальРисунок 1. Соответствие элементов компьютера требованиям Untangle но ничего нет. Администратор самостоятельно выбирает необходимые быть добавлены любые другие ком- зу Java. В результате все изменения в консоли управления, в том числе ему модули защиты, которые уста- поненты. Продук т находится в постоян- и статистика работы, доступны в ренавливаются уже после инсталляции основной системы (Untangle Gateway ном развитии, планируется добавле- альном времени. ние поддержки VoIP, улучшение подПоддерживаются только EthernetPlatform). Среди них компоненты, обеспечи- держки VMware и других виртуаль- соединения со статически или динамически выдаваемым адресом вающие маршрутизацию, фильтра- ных машин. Все модули устанавливаются уже и PPPoE-соединения. Как видите, цию спама, антивирусную и spyware проверку, межсетевой экран, анти- практически настроенными и гото- здесь нет популярных сегодня ADSL, фишинг, обнаружение атак, контент выми к работе и обеспечивают неко- WiFi и других типов, но такой подход фильтр, контроль протоколов, сервер торый уровень защиты. Хотя, естест- вполне соответствует основной задавенно, администратору придется по- че сервера Untangle: не организация OpenVPN и другие. Модуль Attack Blocker собственной догнать их параметры под конкрет- доступа, а защита сети. Для аутентификации пользоватеразработки позволяет защитить сеть ные условия. Например, следует самостоятель- ля может использоваться встроенный от DoS-атак и некоторых других атак низкого уровня. Внешнему компью- но определить, какие системы и сер- LDAP-сервер или средства интегратеру в зависимости от его активнос- висы будут доступны из внешней сети. ции с Active Directory. Работающая система автоматити присваивается определенный ста- Фильтр контента может блокировать тус, хосты, получившие плохую репу- загрузку файлов по типу MIME, рас- чески по расписанию или после регистрации в консоли администратотацию (атака, SYN flooding или ска- ширению, категориям или URL. По умолчанию модуль Virus Blocker ра проверяет наличие обновлений, хонирование портов), ограничиваются в трафике или полностью блокирует- сканирует только входящий веб, ftp тя такое поведение можно изменить. ся доступ к защищаемым ресурсам и почтовый трафик, но при необхо- Например, отключить и обновлять выдимости можно активировать и про- бранные компоненты вручную. Сохра(расположенным в DMZ). Система предоставляет админист- верку исходящего. Если есть необ- нить резервную копию конфигурации ратору разнообразные отчеты по сете- ходимость в проверке при помощи системы можно на жесткий диск или вой активности, протоколам и пользо- двух антивирусов, следует устано- USB-устройство. Распространяется Untangle по вателям, инцидентам, количеству спа- вить модуль Dual Virus Blocker. Мома и обнаруженных вирусов, которые дуль Protocol Control «знает» больше двум лицензиям. Основная часть системы по лицензии GNU GPL, но есть можно сохранить в файлы форматов чем о 90 протоколах. Для настройки компонентов ис- дополнительные модули, распростраPDF, HTML, XLS, CSV и XML. Поддерживается NAT и при нали- пользуется хотя и не локализован- няемые по коммерческой лицензии. Последняя представляет возможчии третьего сетевого интерфейса ный, но вполне понятный графический интерфейс. Разработчики отка- ность технической поддержки в ревозможна организация DMZ. Разработчики утверждают, что при зались от использования популяр- альном времени, управление политинеобходимости в любое время могут ных сегодня веб-технологий в поль- ками доступа пользователей и групп,

№10, октябрь 2007

65


безопасность данные, переходим к этапу проверки оборудования. После оценки производительности процессора, объема ОЗУ, жесткого диска и наличия сетевых карт будет показана оценка их соответствия минимальным и рекомендуемым требованиям (см. рис. 1). Если компьютер не подходит под минимальные требования, появится предупреждение красного цвета, а если рекомендуемого – оранжевого. Читаем финальное предупреждение и нажимаем кнопку «Finish», после чего файлы копируются на жесткий диск, дальше потребуется перезагрузка. Вот, собственно, и вся установка.

Постинсталляционная настройка Рисунок 2. Определение сетевых интерфейсов в «Server Setup Wizard»

интеграцию с Active Directory, сохранение настроек на специализированном сервере для более быстрого восстановления (24-hour Replacement), а также Remote Access Portal, обеспечивающий безопасный доступ ко внутренним ресурсам сети через обычный веб-браузер без установки VPNклиента. Вторым источником доходов фирмы-разработчика является продажа серверов Untangle XD Server и XD+ Server с предустановленной и настроенной системой. Для свободной версии доступна только он-лайн-поддержка обществом пользователей.

Системные требования

вередлив к аппаратной части. Так, мне не удалось запустить Untangle ни на одном компьютере с жестким диском SATA. Причем, судя по разделу «Hardware Discussion» [2] на форуме проекта, такая проблема возникала не только у меня. В некоторых случаях после запуска ядра появлялся просто черный экран либо заставка, но процесс замирал, дальше дело не шло. Причем это было как на старых, так и на новых компьютерах. Поэтому четко сказать, где будет работать Untangle, а где нет, я не могу. Покупать новый компьютер для установки Untangle без предварительного тестирования весьма рискованно.

В Untangle использован Java. Отсюда и системные требования. Так, для Установка работы понадобится компьютер с Intel- ISO-образ размером в 410 Мб скачисовместимым процессором с часто- вается по ссылке с SourceForge без той 1 Гц, оперативной памятью 512 Мб, предварительной регистрации и дружестким диском на 20 Гб и двумя се- гих неудобств, которыми изобилуют тевыми картами. Это минимальные некоторые проекты. требования, которые примерно соотПосле загрузки ядра появится окветствуют обслуживанию сети с 50 но приветствия, и далее для установпользователями. Рекомендуемые тре- ки Untangle необходимо будет сделать бования следует умножить на 2, плюс еще четыре шага. для DMZ понадобится еще одна сетеСначала принимаем лицензионное вая карта. Компьютер с такой конфи- соглашение, затем выбираем диск. гурацией сможет обслуживать уже Кстати, если в системе будет подклюсеть с 300 пользователями. чено два диска, то установщик может К сожалению, после многочис- прекратить работу. Прочитав два раленных пробных установок можно за предупреждение о том, что на вызаметить, что Untangle весьма при- бранном диске будут уничтожены все

66

В качестве загрузчика используется Grub, что очень удобно, так как мне пришлось задавать дополнительные параметры ядру, чтобы отключить APIC. После перезагрузки вас встретит еще один мастер – Server Setup Wizard, который поможет произвести первичную настройку системы. Здесь нужно пройти 9 шагов. В следующем после приветствия окне заполняем контактную информацию (организация, адрес, e-mail, имя, фамилия и прочее). Поля, отмеченные как «required», следует заполнить обязательно. Далее вводим пароль для учетной записи admin и указываем часовой пояс. На следующем шаге «Interface Test» система пытается найти сетевые устройства и выдает результирующую таблицу (см. рис. 2). И переходим к настройке внешнего интерфейса. Здесь требуется указать имя узла, задать использование DHCP или указать статический IP-адрес компьютера, шлюза и DNS-серверов, сетевую маску и учетные данные для PPPoE-подключения. Очень неудобно, что никакой наводящей информации по поводу наименования сетевых устройств не предоставляется. Но как раз, чтобы помочь определиться, и предназначен следующий шаг мастера – Connectivity Test. В документации этот процесс описан при-


безопасность близительно так – нажимаем кнопку, Перейдя во вк ла дк у «Backup/ ражаются результаты его работы (коесли соединения нет, то возвращаем- Restore», можно сохранить или вос- личество заблокированных сообщеся к предыдущим настройкам или пе- становить настройки в файл, раздел ний, найденных вирусов и прочее). ретыкаем кабель в другой разъем. диска или USB. При помощи двух кнопок можно Далее мастер предлагает настроПосле выхода из любого пункта включить или отключить компонент ить вариант использования сервера конфигурация обновляется автома- или просмотреть его статус: включен; Untangle. тически. включен, но есть проблемы в работе; Это может быть роутер, в этом В пункте «Upgrade» выбираются отключен и сохраняет настройки. случае будет включен NAT и DHCP, компоненты, которые следует обноНастройка параметров работы при настройках необходимо будет вить, и настраивается периодичность любого модуля интуитивна, и имея указать IP-адрес внутреннего интер- обновления. предварительный план, легко его рефейса. Удаленное управление практи- ализовать. Если сервер подключен к друго- чески ничем не отличается от рабому маршрутизатору или брандма- ты за локальной консолью. Используя Вердикт уэру, следует выбрать «Transparent веб-браузер, сначала заходим по ад- Несмотря на проблемы с оборудоваBridge». ресу сервера, загружаем по ссылке нием и отсутствие локализации, впеСервер Untangle может отс ы - клиент, и после регистрации перед чатления от знакомства с платфорлать почтовые сообщения напрямую вами предстанет аналогичное окно мой Untangle только положительные. или через промеж у точный SMTP- (см. рис. 3). Перед нами качественный, проссервер. Это настраивается на шаге При установленном соединении той в настройке продукт, на который «Email Setting«. Здесь же для сооб- с Интернетом во вкладке «My Apps» можно возложить все задачи по защений сервера указывается почто- будут показаны все доступные для ус- щите сети. вый адрес, который будет стоять в по- тановки компоненты. Просто выбирале «От». Нажатием кнопки можно про- ем то, что нужно, и щелкаем мышкой. 1. Сайт проекта – http://www.untangle. верить работу почты. Через некоторое время компонент поcom. Вот и все настройки. явится в окне справа. 2. Hardware Discussion Forum – http:// Нажав кнопку «Show Setting», можforums.untangle.com / forumdisplay. Работа в Untangle но уточнить его настройки. php?f=3. По умолчанию сразу же после устаЧуть правее кнопки на каждом 3. Д е м о в е р с и я к л и е н т а U n t a g l e – новки можно управлять сервером компоненте отображаются графики, ht tp: //untangledemo.untangle.com / только с локальной консоли. Основ- в которых в реальном времени отобwebstart. ные настройки производятся при помощи клиента, вызываемого нажатием «Launch Client». В некоторых случаях можно использовать терминал, но его назначение скорее вспомогательное. Для регистрации в клиенте управления используем учетную запись admin и пароль, указанный при работе Server Setup Wizard. После установки будут доступны настройки только во вкладке «Config». Выбрав эту вкладку, вы получите доступ к тем же параметрам, которые указывались при начальной конфигурации. В «Remote Admin» создаются другие учетные записи для администрирования сервера, здесь же разрешается удаленное управление и настраиваются параметры доступа к серверу (адрес, с которого разрешен доступ, публичный адрес ресурса, создаются сертификаты). В отдельном пункте этой же вкладки разрешается мониторинг при помощи SNMP или отсылка информации на сервер Syslog. Рисунок 3. Клиент управления сервером Untangle

№10, октябрь 2007

67


образование

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

Дмитрий Павлов Профессиональные статусы MCSA (Microsoft Certified Systems Administrator) и MCSE (Microsoft Certified Systems Engineer) – одни из самых популярных среди IT-специалистов. Давно прошло время, когда необходимо было объяснять важность и полезность сертификации для карьерного роста и повышения своей ценности на рынке труда. Мой опыт организации обучения и сертификации говорит о том, что есть набор постоянно повторяющихся вопросов, на которые приходится регулярно отвечать, консультируя клиентов перед обучением или сдачей экзаменов. На самые распространенные из них я постараюсь сегодня ответить. 68


образование

П

очти все вопросы и ответы по организации сертификационных экзаменов универсальны. Аналогичным образом сдаются экзамены на сертификаты почти всех крупнейших вендоров и независимых организаций: Cisco, IBM, Oracle, Linux Professional Institute (LPI) и многих десятков других.

Таблица 1. Экзамены и курсы, входящие в стандартную программу MCSA Экзамены

Курсы Три обязательных экзамена

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 чтобы получить сертификат MCSA? 70-299: Implementing and Administering Security in a Microsoft Windows Server 2003 Network 2823 Для получения сертификата MCSA неТаблица 2. Экзамены для получения сертификата MCSE, при наличии сертификата MCSA обходимо сдать 4 экзамена: 3 обязаЭкзамены Курсы тельных и 1 по выбору. В таблице 1 указан список тестов, необходимых 70-293: Planning and Maintaining a Microsoft Windows Server 2003 Network Infrastructure 2278 для получения MCSA и номера курсов, 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 мание, что у каждого теста и курса есть Для сдачи теста необходимо наномер. Именно номерамив, а не длин- ных вариантов. В трех тестах из проными названиями привыкли опери- грамм MCSA/MCSE есть небольшое брать не меньше 700 баллов из 1000 ровать менеджеры учебных центров количество заданий-симуляций, в ко- возможных. и тестовые администраторы, и имен- торых следует произвести последоно номер теста или курса удобнее ука- вательность практических действий, Можно ли сдавать экзамены на русзывать при их заказе. По номеру экза- имитирующих работу в реальном про- ском языке? Насколько хорошо намена информацию по нему вы сможе- дукте. Кроме того, в отдельных экзаме- до знать английский для успеште легко найти на сайте Microsoft: http:// нах присутствуют вопросы, требующие ной сдачи тестов? Можно ли польwww.microsoft.com/learning/mcpexams/ описать решение какой-либо практи- зоваться словарем при сдаче экзаческой ситуации. мена? prepare/examresults.aspx?orderby=ID. Несколько лет назад многие тесты Сейчас русифицированных экзамеПоследовательность сдачи тестов никак формально не регламентирова- Microsoft были адаптивными. При сда- нов, входящих в сертификацию MCSA/ на. Можно сначала сдать тест по вы- че адаптивного экзамена тестовая MCSE, нет. Для успешной сдачи экзабору (например, тест по работе с ISA программа генерирует каждый следу- мена владеть языком в совершенсServer), а потом приступать к сдаче ющий вопрос в зависимости от отве- тве не надо. Необходимо уметь бегло та на предыдущий. То есть, если сдаю- читать технический текст, чтобы по«базовых» тестов. щий неверно отвечает на вопрос, про- нимать вопросы и варианты ответов. Какие тесты необходимо сдать, что- грамма может выдать несколько сле- По правилам работы тестовых центбы получить сертификат MCSE, ес- дующих вопросов на ту же тему, при ров на экзамене нельзя пользоваться этом более сложных. Если програм- никакими дополнительными материали у меня уже есть MCSA? Необходимо сдать 3 дополнительных ма видит, что вы не ориентируетесь лами или записями. Если кандидат сдает экзамен теста: по работе со службой каталогов в данной теме, она продолжит выдаActive Directory, а также по планирова- вать вопросы по этой теме, тем самым в стране, где английский язык не явнию сетевой инфраструктуры и пла- сокращая количество вопросов, кото- ляется государственным, то продолжительность теста увеличивается нированию безопасной работы сети рые вы знаете хорошо. Сейчас все тесты из программ на 30 минут. (см. таблицу 2). MCSA/MCSE неадаптивные. В неадапПеред экзаменом вы обязаны сдать Что представляют собой экзаме- тивных тестах программа показывает тестовому администратору личные вены? Сколько вопросов в каждом сразу весь список вопросов, на кото- щи (сумку, рюкзак) и мобильный телеэкзамене? Сколько длятся экзаме- рые можно отвечать в произвольном фон. Все это запирается в металличесны? Каков проходной балл при сда- порядке. Поэтому есть возможность кий ящик, как на входе в супермаркет, сначала пробежаться по всем вопро- а вы получаете только специальный че тестов? Экзамен – это серия вопросов на ан- сам и ответить на очевидные, а затем планшет и маркер для записей (котоглийском языке с вариантами отве- вернуться к ответам на более сложные. рые после экзамена сдаете тестовому тов. Количество вопросов, как прави- Все вопросы, на которые вы не успели администратору). Иногда приходится слышать заявло, от 45 до 90. Для каждого вопроса ответить, будут засчитываться как неления: «А вот в другом центре тестиродается от 2 до 5 ответов. Чаще всего верные. Время сдачи теста всегда фикси- вания мне на экзамене разрешили слонеобходимо выбрать один правильный ответ. Но в некоторых вопросах необ- рованно. В зависимости от вида теста варем пользоваться». Что ж, это значит, что данный тестовый центр груходимо выбрать несколько правиль- на него отводится от 2 до 4 часов.

№10, октябрь 2007

69


образование бо нарушает условия работы и легко ные знания со временем начинают заможет лишиться авторизации. Важ- бываться. но понимать, что строгости при проверке личности сдающего (необходи- Где можно сдать экзамены? мо предъявлять перед сдачей 2 удос- Сейчас в мире существует два тестовых товерения личности) и прочие прави- провайдера: Pearson VUE (www.vue.com) ла сдачи тестов – это не прихоть конк- и Thomson Prometric (www.prometric.com), ретного тестового центра, а очень ло- которые предоставляют возможность гичные требования тестовых провай- сдавать сертификационные экзамены деров, которые необходимо неукосни- через сеть авторизованных тестовых центров. В России авторизацию одного тельно выполнять. или обоих провайдеров имеет нескольКакие темы входят в каждый из тес- ко десятков тестовых центров. До нетов? Можно ли сдать пробные тес- давнего времени экзамены Microsoft ты для подготовки и оценки уровня можно было сдавать через любого готовности? провайдера. Однако минувшим летом Подробная информация о каждом тес- Microsoft сообщила о том, что не проте, в том числе темы, входящие в эк- длила договор с VUE и сдавать экзазамен, содержится на сайте Microsoft. мены Microsoft с ноября 2007 года можПо ссылке http://www.microsoft.com/ но будет только через Prometric. Най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 http://www.measureup.com/Site/ вать выездное тестирование. display_article.aspx?id=955; n http://www.selftestsoftware.com/ Как проходят курсы? Что входит в стоимость обучения? Какой доdept.aspx?dept_id=1000. кумент об окончании курсов я поКроме того, разнообразной инфор- лучу? мацией о том, кто как готовился, сда- Курсы из программ MCSA/MCSE поствал, что наиболее сложное в конкрет- роены по методике интенсивного треном тесте и так далее, IT-специалис- нинга. Объяснение тренером теории ты активно делятся, например, в сете- занимает примерно 60% курса, остальвом Клубе сертифицированных спе- ное время уходит на выполнение лабоциалистов: http://certification.ru/cgi-bin/ раторных работ. forum.cgi?action=topic&id=3. Перед каждым курсом слушатели получают методические пособия (фирЧерез какой период времени после менные учебники Microsoft), в которых курсов я должен сдать экзамен? есть теоретическая часть, описание Формальных правил, регламентирую- лабораторных работ и диски с дополщих сроки сдачи экзамена в зависи- нительными материалами и Trial-вермости от сроков обучения, нет. Луч- сиями изучаемых на курсах продукше придерживаться золотой середи- тов. Почти все учебники из программ ны. То есть не торопиться и не сдавать MCSA/MCSE англоязычные, поэтотест на следующий день после окон- му знание технического английскочания курса, потратив какое-то время го очень желательно для максимальна дополнительную подготовку. И в то но эффективного прохождения курса. же время не затягивать со сдачей эк- Кроме учебников в стоимость обучезаменов. Некоторые вопросы и темы, ния входит, как правило, питание (обеподробно рассматриваемые на кур- ды или ужины и кофе-брейки). сах, могут не встречаться в вашей повМногие учебные центры берут седневной практике, и тогда получен- на себя обязательство оказывать сво-

70

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


образование Можно ли разбить программу MCSA ются за 5 дней, порой приходится гона несколько частей или необхо- дами пыль глотать». димо слушать все курсы без перерывов? Сколько стоит программа MCSA/ Естественно, и программу MCSA и тем MCSE с учетом стоимости тестов? более программу MCSE можно слу- Стоимость программ подготовки сушать с перерывами между курсами. щественно отличается в разных учебКурсы во многих московских центрах ных центрах. В среднем для физиидут с периодичностью раз в 4-5 не- ческого лица подготовка к MCSA дель. Поэтому ждать следующего «по- на 19‑дневной программе стоит окотока», с которым можно будет продол- ло 40 000 руб. Для юридического лица та же программа стоит около жить обучение, долго не придется. Мы рекомендуем нашим слушате- 50 000 руб. Самая короткая програмлям пройти единым блоком без пере- ма MCSE (29 дней обучения) стоит сейрывов первые 4 курса из программы час от 55 000 руб. для физических лиц MCSA (курсы 2285, 2276, 2273, 2277), и от 67 000 руб. для корпоративных засделать перерыв на месяц или два, казчиков. в течение которого можно сдать 3 серВ данном случае речь идет о стоитификационных экзамена, а затем за- мости программ с учетом существенканчивать программу курсом 2824, ли- ных скидок за единовременную предобо продолжать слушать инженерскую плату. Для выбора наиболее привлекапрограмму. тельного по стоимости варианта имеет смысл внимательно познакомиться Могу ли я подготовиться к серти- со специальными предложениями, кофикации на дистанционных курсах торые регулярно публикуют учебные и дистанционно сдать тесты? центры и которые позволяют снизить Дистанционные курсы для подготовки стоимость обучения еще на 5‑10%. к MCSA сейчас предлагают два мосСтоимость теста Microsoft для Росковских учебных центра – «Звезды сии $50. По такой цене можно заказать и С» и «Специалист». и оплатить экзамен, если сделать это Следует также обратить внимание, самостоятельно через сайт Thomson что, комбинируя дистанционное и оч- Prometric. В рублевом исчислении ное обучение, есть возможность не- стоимость почти во всех тестовых ценмного снизить стоимость подготовки трах обычно не меньше 1500 рублей. В некоторых учебных центрах один к сертификации. Подготовиться к экзаменам при по- или несколько экзаменов предлагаютмощи дистанционных курсов вполне ся в виде бонуса при оплате програмреально, но сдавать экзамены необ- мы обучения. ходимо в авторизованном тестовом центре. Сразу ли я получу сертификат после сдачи всех экзаменов? Можно ли сдать тесты и получить После окончания экзамена в тестовом сертификат, подготовившись само- центре вы получите отчет об экзамене. стоятельно? Он содержит всю необходимую инфорЭто вполне реально, если у вас есть мацию о сданном (или не сданном тесбольшой практический опыт работы те): его номер и название, дату сдачи, с продуктом, и вы можете выделить идентификационный номер тестового достаточно времени для самообуче- центра, результат (сдан – не сдан), кония и целенаправленной подготовки личество набранных баллов, а также к экзаменам. информацию о том, насколько хороПреимущество авторизованно- шо вы знаете отдельные темы, вклюго обучения именно в том и состо- ченные в экзамен. ит, что с его помощью вы имеете возОтчет о тестировании с оценкой можность изучить необходимые про- Pass (Сдан), заверенный печатью тесдукты и технологии во много раз быс- тового центра, является важным дотрее, чем при самостоятельной подго- кументом. Во-первых, его нужно хратовке. Как образно говорит один из на- нить, пока вы не получите официальших тренеров: «Людям, чтобы получить ный сертификат. Во-вторых, если ваш знания и навыки, которые в курсе да- результат намного превосходит про-

№10, октябрь 2007

ходной балл, это свидетельствует о вашей прекрасной подготовке по теме экзамена. После сдачи первого теста присваивается статус MCP (Microsoft Certified Professional). На сайте Microsoft заводится личная страничка сертифицированного специалиста, на которой ведется история сдачи тестов и присвоения статусов. Информация с этой страницы может служить подтверждением того, какие именно тесты и когда сдавал специалист и какой профессиональный статус он в настоящее время имеет. То есть, даже не имея на руках сертификат в «бумажном» виде (он доставляется по почте из европейского представительства Microsoft, и иногда его получение затягивается на несколько недель, а то и месяцев), вы всегда можете показать, что вы являетесь сертифицированным специалистом. Что делать, если очень долго не приходит сертификат по почте? По ссылке http://www.microsoft.com/ Rus/Learning/certification/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» звучит намного солиднее и более веско, чем «Я сертифицированный профессионал по информационным технологиям».

71


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

Нетривиальный синтаксис в 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'; {

72

$var1 = $var2 ? ↵ 'abc123' : def456;

$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); ?>

Блоки Блок – группа связанных между собой операторов, рассматриваемых как единое целое. Операторы, образующие блок, логически связаны между собой. Иногда их называют составным оператором. Чаще всего они используются как составная часть других операторов, таких как if, switch, function и прочих. Но блок может являться и самостоятельной единицей программы. Иногда такое их применение целесообразно для улучшения читабельности кода. <?php

Есть ли в этом примере ошиб{ $a = 1; ки? Где? Докажите. Если нет ошибок, $a += 4; то что делает этот скрипт? Что выве{ дет функция var_dump()? Почему? Ес $b *= $a; ли вы затрудняетесь ответить, что тут } } написано, то вам следует прочесть эту статью! ?> Могу вам дать только одну подсказку. В этом примере нет ни одной синПрименение блоков особенно удобтаксической ошибки, он весь рабочий! но, если ваш редактор отслеживает А теперь рассмотрим каждую конст- фигурные скобки и позволяет сворарукцию подробнее. чивать блоки.


web-программирование Тернарный оператор Тернарный оператор поможет записать несложное условное выражение в одну строку. Приведенные конструкции: <?php if ( $var == 'test' ) { $str = "Ok!"; } else { $str = "No!"; } print $str; ?>

и <?php print $str = $var == 'test' ? ↵ "Ok!" : "No!"; ?>

эквивалентны. Для кого-то вторая конструкция покажется неудобной, но так короче. Скажу по личному опыту, что понимание конструкций, записанных в нетривиальной форме, наоборот, упрощает разработку, а также поиск ошибок, особенно в чужих программах. Такие конструкции не так-то уж и сложны для понимания. Кстати, не стоит думать, что $str присвоит значение $var. В результате интерпретации строка будет прочтена как:

Он в любом случае вернёт «люблю PHP!», а вовсе не «Я люблю PHP!». К вопросу, как же все это так работает. Напомню, что строка в PHP читается в так называемой венгерской нотации, то есть справа налево, соответственно попутно выполняя инструкции.

Операции с одновременным присвоением

<?php $var1 = $var2 = $var3 = 1; ?>

Все три переменные будут инициализированы, и им будет присвоена единица. <?php $var +=1; ?>

<?php

<?php

$var = "Я ".(1 == 1) ? ↵ "люблю PHP!" : "ненавижу PHP!";

for ($i=0;;$i=$i+4) { … } for ($i=0;;$i+=4){ … } ?>

то же самое, что и этот: <?php $var = ("Я ".(1 == 1)) ? ↵ "люблю PHP!" : "ненавижу PHP!"; ?>

№10, октябрь 2007

$i = $n = 2; $var = ($i *= 4) + ++$n; ?>

Эта запись равносильна записи: <?php $var = ($i * 4) + ($n = $n + 1); ?>

Операции с одновременным присвоением, такие как /=, *=, -=, +=, %=, .=, В результате переменной $var буочень удобно использовать. Опера- дет присвоено число 11.Согласитесь, ция присвоения всегда возвращает что такие записи экономят не только переменную, стоящую в левой час- место, но и время на написание и чити от знака равенства. Также в PHP таются они удобнее. Нужно привыкразрешено множественное присвое- нуть, а главное, понимать суть всех ние, что удобно при инициализации этих операций. переменных.

В данном случае такая запись эквивалентна $var++ (или ++$var, в данном примере не играет роли). Где это может быть удобно? <?php Очень часто в циклах требуется инкремент/декремент, увеличиваюprint $str = ( ($var == 'test') ? ↵ "Ok!" : "No!" ); щий или уменьшающий значение переменной на единицу. Но бывают слу?> чаи, когда нужно увеличение большее, У тернарного оператора очень чем на единицу. низкий приоритет. Поэтому следуюСравните записи цикла, приведенщий код: ные ниже:

?>

<?php

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

Преобразование типов

PHP не является жестко типизированным языком. Тип переменной определяется программистом или контекстом её использования. Иногда требуется изменить тип. Привести к нужному типу переменную в PHP можно тремя способами. Первый – использовать стандартные функции для приведения типов: intval(), floatval(), doubleval(), strval(). Также напомню, что doubleval() является алиасом floatval(), так как, начиная с PHP 4 и выше, используется floatval(), double остался для совместимости. Для приведения к типам существует и универсальная функция settype(). Дополнительную информацию по данным функциям ищите в мануалах. Второй способ приведения к нужному типу – это использовать так называемые кастинги, такие специальные инструкции, которые позволяют приводить к определенному типу переменные. <?php $str = "123.4567a89"; $i = (int) $str; $d = (double) $str; $f = (float) $str;

// 123 // 123.4567 // 123.4567

?>

Также существует и обратное приведение в строку: <?php $i = 123.456;

73


web-программирование $str = (string) $i; ?>

В PHP таким же образом можно приводить переменные к массиву, если требуется: <?php $sbuf = "123"; $sbuf = (array) $sbuf;

В результате получится массив с одним элементом строкового типа. Эту же запись можно переписать и так: <?php $sbuf = (array) "123"; echo $sbuf[0]; ?>

Привести переменную к объекту можно аналогично. В результате будет создано поле scalar, которое и будет содержать значение:

0; 0; 1; 1;

}

$sbuf = (object) "123"; echo $sbuf->scalar; ?>

А теперь настал черед нестандартных приемов, которые позволяют конвертировать переменные из одного типа в другой. Это и есть третий способ. Итак, чтобы привести к числу строку, достаточно с ней произвести математическое действие, тогда PHP автоматически приведет строку к типу float, если в строке встретится точка, или к int, если будут найдены только цифры. <?php $s = "123.456a78"; += -= *= /=

0; 0; 1; 1;

?>

Любое вышеперечисленное действие приведет строку к типу float(123.456). <?php $s = "123a4";

print $arr[$i];

?>

?>

Любая вышеперечисленная операция над переменной приведет строку к типу int(123). Из числа в строку можно привести, используя конкатенацию:

$s = 123; $s .= ''; ?>

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

Приведет к string(“123”). С логическими типами дела обстоят аналогично: <?php true + 0; false + 0; false + 1; true + true;

// // // //

1 0 1 2

!123; !!123; !!0; !0;

// // // //

false true; false; true;

?>

<?php

74

+= -= *= /=

<?php

?>

$s $s $s $s

$s $s $s $s

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

Циклы Про циклы говорить много не будем. Тут вопросы не столько нестандартного синтаксиса, сколько оптимизации. Но на практике я чаще встречаю как раз неоптимизированные циклы, что и наводит на мысль, что правильно написанная форма цикла есть нестандартный синтаксис. Как обычно перечисляют массивы в циклах, например: <?php for ($i=0; $i < count($arr); $i++) {

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; ?>

Иногда в цикле может понадобиться 2-я проверка. Для наглядности поставим задачу и решим её сначала стандартным способом, а затем нетривиальным. Допустим, у нас есть массив целых чисел. Нам надо узнать индекс элемента массива, который будет больше 5, и завершить просмотр массива. <?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; } ?>


web-программирование В этом варианте задачи ответ будет равен 7, так как индекс первого встретившегося числа, большего 5, это 7 ($arr[7] = 8). Но это же решение можно записать намного короче и даже, по-моему, удобнее: <?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); ?>

Здесь проверку вынесли в блок проверки условия, тем самым отказавшись от оператора break, потому что теперь проверка осуществляется в операторе for. Выражения в блоке проверки указываются также через запятую, а трактуются как «ИЛИ». На этом с условиями можно закончить.

Оператор switch() Этот оператор многие знают, но немногие используют его вместо многоуровневых проверок ifelse(). А ведь switch() очень даже удобнее использовать в таких случаях. Приведу пример: <?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;

№10, октябрь 2007

case eregi("RegExp2", $str1): /* ваш код для обработки */ break;

default: /* ваш код для обработки */

}

?>

Развивать эту тему с условиями и проверками можно долго, со временем вы сами найдете все плюсы и минусы той или иной формы записи. Могу сказать только, что через switch() удобно эмулировать оператор goto (для тех, кто не знал, в PHP нет оператора перехода по меткам goto), который сложно повторить, если использовать только ifelse.

Эмуляция функции eval() Хотя бы раз в жизни каждому PHP-программисту приходилось сталкиваться с необходимостью использовать в своей программе eval(). Вообще все стараются отказаться от использования этого небезопасного оператора, но иногда он позволяет облегчить работу программисту. Из соображений безопасности некоторые хостинговые провайдеры даже запрещают использование данной функции. Но все же обойтись без этого оператора можно, причем стандартными средствами PHP. Для наглядности придумаю задачу, которую легче всего решить функцией eval(). Может, это не самый лучший пример, но все же… Итак, нам надо хранить данные, например, какие-то настройки. Все эти настройки у нас хранятся в массиве. Этот массив приходится хранить в базе. Самый простой вариант – это создать в таблице поле, можно текстовое, в которое будет сбрасываться дамп массива, а затем браться, когда надо, и снова заноситься в переменную. <?php $ini = array( 'host'=>'localhost', 'login'=>'root', 'pass'=>'', 'db_name'=>'mysql', 'boolean'=>false, 'int'=>123, 'float'=>123.456, 'array'=>array(0,1,2,3) );

та, нужно воспользоваться функцией var_export(): <?php $ini_dump = var_export($ini, true); ?>

Теперь в переменной содержится дамп, который соответствует синтаксису PHP: 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, ), )

Мы записываем это в базу или куда нам нужно. Теперь настал черед загрузки этой структуры. С помощью функции eval() это делается так: <?php eval("\$ini = $ini_dump;"); ?>

Таким образом мы загрузили нашу структуру обратно в переменную. Но вот что делать, если нет возможности использовать функцию eval()? Решение есть. Первый, самый мощный из всех способов, это функция create_function(). <?php $ini = null; $loader = create_function('&$ini', ↵ "\$ini = $ini_dump;"); $loader($ini); ?>

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

?>

<?php

Чтобы сбросить дамп в виде текс-

call_user_func( create_function ↵

75


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

('&$ini', ↵ "\$ini = $ini_dump;"), &$ini);

?>

Мне нравится последний вариант. Таким вот образом эмулируется eval(). Есть еще один способ эмулировать eval(), но он пригоден не для всего. Например, создать массив из строки или переменные из строки: <?php parse_str("arr[]=1&arr[]= ↵ \ndfsdfsdfdsf\nefrewrer ↵ \nererew&arr[]=fef"); var_dump($arr); ?>

Дамп переменной приведен ниже: array(3) { [0]=> string(1) "1" [1]=> string(28) " dfsdfsdfdsf efrewrer ererew" [2]=> string(3) "fef" }

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

ют работать с определенными битами. Почему стоит использовать побитовые операторы? Потому что такие операции вычисляются в десятки раз быстрее, чем обычные математические. Одними из наиболее ресурсоемких операций в PHP, как и во многих других языках, являются операции умножения и деления. Намного быстрее выполняются операции двоичного сдвига. Немного теории, так сказать, повторение курса информатики, а точнее булевой алгебры. Допустим, есть число 40 (101000). Нам надо разделить число на 2. В двоичной системе деление происходит сдвигом вправо. Деление на 2 – это сдвиг вправо на 1 позицию. Последнее число отсеивается и остается только 10100, это и есть не что иное, как 20 в десятичной. Умножение происходит с точностью до наоборот. Умножать, как и делить, можно на числа, кратные двойке. В коде порой частенько приходится делить на числа, кратные двойке, поэтому если взять за правило вместо деления/умножения использовать сдвиг, то такая мелкая оптимизация будет приносить свои плоды:

ют в десятки раз быстрее умножения и деления.

Логические операторы Очень интересно можно упрощать условия. Например, есть код: <?php define('flag', false); function foo() { print "Exec!"; } if ( !flag ) { foo(); } ?>

Эту проверку с условием можно упростить до безобразия: <?php flag || foo(); ?>

Аналогичным образом упрощаем: <?php if ( flag ) { foo(); }

<?php

<?php

// Упрощенный вариант предыдущей // записи flag && foo();

parse_str("arr[a]=1&arr[b]= ↵ 2&arr[c]=3");

$a = 40;

?>

var_dump($arr); ?>

Будет создан массив следующей структуры: array(3) { ["a"]=> string(1) "1" ["b"]=> string(1) "2" ["c"]=> string(1) "3" }

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

Использование битовых операторов Многие, даже опытные PHP-программисты слышали о битовых операторах в PHP, но не используют их в своих программах. А зря. Побитовые операторы позволя-

76

$b = $a << 2; // $b = 160

Записи получаются очень короткими и удобными. Иногда требуются функции, коЭто код в обычном виде выгля- торые совершают какие-то действия над данными, а затем возвращают дит так: просто true или false, в зависимости <?php от того, есть данные или нет. Классический прототип такой функции: $a = 40; ?>

$b *= 4; ?>

Битовые операции, как и математические, можно использовать с непосредственным присвоением. То есть наш пример можно переписать так: <?php $a = 40; $a <<= 2; //$a = 160 ?>

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

<?php function foo ( $data = false ) { if ( !empty($data) ) return true; else return false; } ?>

Здесь, правда, можно удалить else, тогда запись будет короче: <?php function foo ( $data = false ) {


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

if ( $data ) return true; return false;

?>

Но и это все же скорее тривиальный синтаксис, нежели нетривиальный. Вы можете сказать, что можно использовать тернарный оператор, вот и будет нестандартная форма записи. Согласен. Наша функция будет иметь вид: <?php function foo ( $data = false ) { return $data ? true : false; }

Но эту же проверку можно написать совсем по-другому: <?php

Переменные переменных

function f() { return 'default'; }

Иногда есть необходимость использования имен переменных или самих переменных для переменных. Такие переменные могут быть изменены динамически:

function foo( $data = false ) { $data || $data = f(); return $data; } ?>

Вот так – другое дело. Кстати, не стоит путать следующие две записи:

?>

<?php

А можно даже так:

function foo1( $data = false ) { $data || $data = f(); return $data; }

<?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;

?>

№10, октябрь 2007

?>

function foo2( $data = false ) { return $data || $data = f(); } ?>

Функция foo1 вернет значение, а вот foo2 только true. Дело в том, что когда в выражении встречается логический оператор, то результат этого выражения – всегда логическое значение истины или лжи: <?php function foo2( $data = false ) { return ( $data || ↵ $data = f() ); } ?>

Переменные функции В PHP поддерживаются переменные функции. Это значит, что если в скрипте попадется переменная, за которой следуют скобки, то PHP произведет поиск функции c именем, которое присвоено в качестве значения переменной. Затем будет предпринята попытка выполнить эту функцию: <?php function inc( $var ) { return ++$var; } $foo = 'inc'; echo $i = $foo(5);

<?php $var = 'Hello'; $$var = " world!"; echo "$var ${$var}"; ?>

В данном случае будет выведена строка «Hello world!». Аналогичным образом можно создавать массивы переменных: <?php $var['var1'] = 'Hello'; $$var['var1'] = array(' wo', 'rl'); ${$var['var1']}[] = 'd!'; echo

"{$var['var1']} ↵ {${$var['var1']}[0]} ↵ {${$var['var1']}[1]} ↵ {${$var['var1']}[2]}";

?>

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

Tips’n’tricks Приведу несколько полезных советов и приемов.

Точка с запятой Могут стоять внутри скрипта где угодно, если это не нарушает работу операторов. То есть, по сути, вы можете делать выделения каких-то участков кода. Особенно интересно использовать это при обфускации в качестве шума. Следующий код вполне работоспособный: <?php ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;function foo( $data = false ){;; ;;;;;;;$data || $data = 10;;;;;;;; ;;;;;;;;;;return $data;};;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

77


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

рых нет на клавиатуре, символы, которые можно Нестандартные символы получить, зажав Однажды я столкнулся с такой темой – <Alt> и набрав ноParse error: syntax error, unexpected мер символа, наДамп скрипта T_STRING... Ну не впервой ошибки чиная с нуля: жет быть, но не многие используют. Есисправлять, полез смотреть: что, где n Alt + 0135 = ‡ ли вдруг в вашей программе происхои как… Открыв в том месте, где яко- n Alt + 0134 = † дит инициализация переменной, котобы была ошибка, я ошибки не нашел. n Alt + 0182 = ¶ рой следует присвоить очень большое И вот я решил посмотреть через HEXредактор свой сорец (cм. рисунок). Такие символы вряд ли встретятся число, или вы иницианилизируете конИ что бы вы думали? Там, где долж- в тексте просто так, поэтому можно ис- станту с таким числом, то для удобсна была быть ошибка, был пробел, яко- пользовать их, и тогда отпадает надо- тва можно использовать экспоненцибы пробел, но вот ASCII-код его был бность в экранировании всех осталь- альную запись числа: 0xA0 (160). Это удивило меня, ведь код ных символов, кроме этих: <?php пробела 0x20 (32). Это знают и взросpreg_match(“‡<p>.*?</p>‡i”, $str); лые, и дети. Оказалось, что символ $i1 = 120000000000000000000000000000; с кодом 0xA0 интерпретатором вос$i2 = 1.2E+29; принимается как разрешенный симВот такой нетривиальный синтак?> вол. Это очень интересная особен- сис используется в регулярных выность для тех, кто пишет обфускато- ражениях. Вы видите две записи одного и торы. Такую ошибку (правда это не обяго же числа, но вторая запись удобнее зательно может быть ошибка, все за- Массивы символов висит от применения данного симво- Не все знают, но многие догадывают- и короче. Очень многие люди, с котола) найти очень непросто, а если чело- ся, что строка – это массив символов рыми я общаюсь, не догадывались, век еще и непрофессионал, то считай- и со строками можно работать так же, что так можно записывать числа. те никогда не найдет. Ниже приведен- как и с обычным массивом. Например, А надо ли все это? ный код работает замечательно: нижеприведенный алгоритм: Вопрос задан по существу: а надо ли все <?php <?php это? То, что такие сложные конструкции существуют, не значит, что их нужно $ = 1; $abuf = array('a','b','c','d','e'); использовать повседневно. Мой при$ += 5; for ($i=0,$sizeof=sizeof($abuf); ↵ мер в самом начале статьи показыва $i < $sizeof; $i++) echo $ ; { ет, как можно писать, но нежелательно $sHex .= ↵ (за некоторым исключением отдельных ?> '%'.sprintf("%X", ↵ ord($abuf[$i]) ); выражений). Разбираться в таком коде } очень сложно, но знание такого синтакecho $sHex; сиса, я считаю, обязательно! Разделители в preg-функциях Во-первых, знание особенностей Многие программисты, особенно начи?> языка позволяет однозначно трактонающие, заблуждаются в том, что, кроме символа «/», в функциях preg_match, можно переписать таким вот образом: вать выражения и предсказывать результат. Легче искать ошибки и разpreg_replace и других функциях этого <?php бираться в чужом коде. Ну и еще одна семейства никакого другого испольположительная сторона – это защита. зовать нельзя. И во всех регулярных $sbuf = "abcde"; Иногда хочется защитить код от модивыражениях приходится еще его экfor ($i=0,$strlen=strlen($sbuf); ↵ фикации. Обфускацию никто не отмеранировать: $i < $strlen; $i++) { нял, а авторское право защищать каж $sHex .= ↵ preg_match(“/<p>.*?<\/p>/i”, $str); дый волен, как может. '%'.sprintf("%X", ↵ ord($sbuf[$i]) ); А вообще в статье описано немало } приемов оптимизации кода как по сисНа самом деле это не так. Испольecho $sHex; темным ресурсам, так и читабельносзовать можно любой служебный пети. И я считаю, что их следует испольчатный символ. То есть «#», «@» и да?> зовать, как бы это не казалось сложже «$». Но это нежелательно, ибо тано. Дерзайте, изучайте, эксперименкие символы придется экранировать, тируйте. что очень снижает читабельность ре- Числа в экспоненциальной P.S.: Кстати, ответ на мой вступигулярного выражения. Но ведь на этом форме символы не заканчиваются. Почему В завершение темы хочу добавить та- тельный код: $var = 88. Это мое любибы не использовать символы, кото- кой трикс, который многие знают, мо- мое число.

78


bugtraq Множественные уязвимости в продуктах Обход аутентификации в Cisco Video VMware Surveillance IP Gateway и Services Platform Программа: VMware ESX Server 2.x, VMware ESX Server 3.x, Программа: Cisco Video Surveillance IP Gateway Encoder/ VMware ACE 1.x, VMware ACE 2.x, VMware Player 1.x, VMware Decoder версия прошивки 1.8.1 и более ранние; Cisco Video Player 2.x, VMware Server 1.x, VMware Workstation 5.x, VMware Surveillance SP/ISP Decoder Software версия прошивки 1.11.0 Workstation 6.x. и более ранние; Cisco Video Surveillance SP/ISP версия про‑ Опасность: Средняя. шивки 1.23.7 и более ранние. Описание: 1. Уязвимость существует из-за неизвестной Опасность: Средняя. ошибки, которая позволяет пользователю с администра‑ Описание: 1. Служба telnet в Cisco Video Surveillance IP тивными правами гостевой ОС вызвать повреждение па‑ Gateway Encoder/Decoder не аутентифицирует подключа‑ мяти для некоторых процессов хостовой ОС и выполнить ющихся пользователей. Удаленный пользователь может произвольный код на целевой (хостовой) системе. подключиться к уязвимой службе и получить администра‑ 2. Уязвимость существует из-за неизвестной ошибки, тивный доступ. которая позволяет гостевой системе аварийно завершить 2. Устройства Cisco Video Surveillance Services Platform работу процесса хостовой ОС. Уязвимости существуют и Integrated Services Platform содержат пароль по умолчанию в VMware ESX 3.0.1, 3.0.0, 2.5.4, 2.5.3, 2.1.3 и 2.0.2, VMware для учетных записей «sypixx» и «root». Удаленный пользо‑ 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- URL производителя: www.cisco.com. сервере. Удаленный пользователь может с помощью спе‑ Решение: Установите последнюю версию с сайта произ‑ циально сформированного DHCP-пакета вызвать пере‑ водителя. полнение стека и выполнить произвольный код на целе‑ вой системе. Несколько уязвимостей 4. Потеря значимости целочисленных обнаружена в IBM Tivoli Storage Manager Client в DHCP-сервере. Удаленный пользователь может с помо‑ Программа: IBM Tivoli Storage Manager Client 5.1, 5.2, 5.3 щью специально сформированного DHCP-пакета вызвать и 5.4. переполнение стека и выполнить произвольный код на це‑ Опасность: Средняя. левой системе. Описание: 1. Уязвимость существует из-за ошибки провер‑ 5. Уязвимость существует из-за некорректной обработ‑ ки границ данных в Client Acceptor Daemon (CAD). Удаленный ки DHCP-пакетов. Удаленный пользователь может с помо‑ пользователь может вызвать переполнение буфера и вы‑ щью специально сформированного DHCP-пакета выпол‑ полнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки при инициали‑ нить произвольный код на целевой системе. 6. Небезопасные привилегии на доступ к службам мо‑ зации задач по расписанию. Злоумышленник может полу‑ гут позволить локальному пользователю повысить свои чить доступ к важным данным. привилегии на системе. URL производителя: www.ibm.com. 7. Уязвимость существует из-за ошибки дизай‑ Решение: Установите исправление с сайта производите‑ на в VMware IntraProcessLogging.DLL ActiveX-компонен‑ ля. те. Удаленный пользователь может с помощью специаль‑ но сформированного веб-сайта перезаписать произволь‑ Отказ в обслуживании в Cisco Catalyst ные файлы на системе. Уязвимости существуют в VMware Content Switching Module Workstation 6.0.0 и 5.5.4, VMware Player 2.0.0 и 1.0.4, VMware Программа: Cisco Catalyst Content Switching Module (CSM) 4.x, Cisco Catalyst Content Switching Module with SSL Server 1.0.3, и VMware ACE 2.0.0 и 1.0.3. URL производителя: www.vmware.com. (CSM‑S) 2.x. Решение: Установите последнюю версию с сайта произ‑ Опасность: Средняя. водителя. Описание: 1. Уязвимость существует из-за ошибки при об‑ работке определенных TCP-пакетов, полученных вне оче‑ Уязвимость при обработке имен файлов реди. Удаленный пользователь может с помощью специ‑ ально сформированных TCP-пакетов вызвать потребле‑ в Total Commander Программа: Total Commander версии до 7.02 и 6.57. ние всех доступных системных ресурсов или перезагру‑ Опасность: Средняя. зить устройство. 2. Уязвимость существует из-за ошибки в опции «service Описание: Уязвимость существует из-за ошибки при обра‑ ботке имен файлов, загруженных по FTP. Удаленный поль‑ termination». Удаленный пользователь может с помощью зователь может с помощью специально сформированного специально сформированного TCP-пакета вызвать потреб‑ имени файла, содержащего символы обхода каталога, за‑ ление всех доступных системных ресурсов. писать файл в произвольную директорию на системе. URL производителя: www.cisco.com. URL производителя: www.ghisler.com. Решение: Установите исправление с сайта производите‑ Решение: Установите последнюю версию 7.02 или 6.57 ля. Составил Александр Антипов с сайта производителя.

№10, октябрь 2007

79


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

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

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

П

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

80

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

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


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

Зачем нужен фрэймворк? Надо сказать, это популярный вопрос среди PHP-программистов со стажем. Прежде всего использование фрэймворка ускоряет разработку приложений. Это достигается путём автоматизации стандартных (шаблонных) решений, предоставления различных инструментов для решения типовых (и не очень) задач, обычно оформленных в виде классов. Код, который пишется в рамках фрэймворка, Рисунок 1. CakePHP установлена более структурирован и унифицироДля работы с CakePHP понадобится установленный ван. Он удобен в сопровождении и легче поддаётся модификации. Пожалуй, главная причина, по которой сто- на компьютере веб-сервер с модулем mode_rewrite (посит применять фрэймворк-системы – отсутствие необхо- леднее не обязательно, но крайне желательно), интерпредимости изобретать очередной велосипед (вернее, целый татор PHP не ниже 4.3.2 или пятой версии. Также понадопарк таковых) на каждый новый проект. Вот лишь несколь- бится сервер баз данных (MySQL, PostgreSQL или любая ко взятых на вскидку проблем, которые решают фрэйм- СУБД поддерживаемая ADODB). Для установки скачиваем архив с программой с сайворк-системы: n унификация доступа к различным серверам баз данных; та www.cakephp.org, распаковываем на территорию нашего веб-сервера, переименовываем образовавшуюся папку n единая валидация отправляемых данных; во что-то более удобоваримое, чем cake_1.1.17.5612 (именn система распределения и назначения прав доступа; но такая стабильная версия была доступна на момент наn автоматическая генерация представлений; писания статьи). После этого редактируем файл /app/config/ n управление кэшированием; database.php.default. В нём надо изменить следующие паn управление сеансами работы; раметры: n работа с шаблонами; n работа с HTML. Все эти задачи вполне решаемы и давно решены (не по одному разу). Цель использования каркасных систем состоит в том, чтобы разработчик не разменивался на такие мелочи. При написании обзора не ставилась задача детально рассказывать о работе какой-нибудь конкретной фрэймворк-среды, производить их детальное сравнение я тоже не собирался. Скорее это представление и инструкция по началу работы с несколькими популярными средами этой ниши.

// используемая база данных var $test = array('driver' => 'mysql', // команда соединения (в данном случае можно // использовать 'mysql_connect' или 'mysql_pconnect' 'connect' => 'mysql_connect', // хост базы данных 'host' => 'localhost', //имя пользователя 'login' => 'geol', // пароль пользователя 'password' => 'superpassword', // название базы данных 'database' => 'cake', // название проекта 'prefix' => 'cake'); }

После этого файл сохраняется с именем database.php, Налетай на тортики! (CakePHP) Первой рассмотрим CakePHP. Это среда, известная создаётся база данных с указанным именем (в данном слус 2005 года, является сейчас, наверное, самой распро- чае «cake») и всё! Cистема готова к работе. Для проверки откроем в брузере url: http://localhost/cake. странённой. Изначально написанная программистом Михаэлем Татариновичем (Michal Tatarynowicz), она сейчас ак- Если мы всё сделали правильно, должна открыться картина, как на рис. 1). тивно развивается сложившимся сообществом.

№10, октябрь 2007

81


web-программирование Ещё один важный момент – убедитесь, что в установленной среде для директории /app/tmp установлены права на запись для пользователя – веб-сервера. После инсталляции перед нами откроется дерево папок: /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

Назначение папок понятно из их названий:

n В папке /app будут располагаться папки вашего приложения. n Во вложенной папке /config, как нетрудно догадаться, содержатся различные настройки. Это параметры соединения с базой данных, аутентификации, данные ACL. n Содержимое папок /models, /views, /controllers будет разъяснено несколько позже. Строго говоря, они и воплощают модель MVC для CakePHP. n Папка /temp предназначена для хранения данных кэширования, /plugins для подключаемых плагинов. n В папке /cake расположены основные библиотеки среды CakePHP. Изменять что-либо в них крайне не рекомендуется. n Папка /vendors используется для различных библиотек сторонних производителей. Для того чтобы изменить размещение компонентов приложения, необходимо отредактировать файл app/webroot/ index.php, поменяв в нём значение констант: if (!defined('ROOT')) { // путь к директории, которая содержит каталог приложения define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR'))

82

{ // путь к каталогу приложения define ('APP_DIR', basename(dirname(dirname(__FILE__)))); } if (!defined('CAKE_CORE_INCLUDE_PATH')) { // путь к ядру CakePHP define('CAKE_CORE_INCLUDE_PATH', ROOT); }

Зачем нужны все эти сложности? Прежде всего необходимо рассмотреть будущее предложение в аспекте паттерна MVC (Model-View-Controller). Реализация этой модели – это основная задача CakePHP, да и остальных PHP framework этого обзора (если вы тот самый, последний на этой планете разработчик, который не слышал о MVC, прочтите небольшой словарь терминов во врезке «Для тех, кто ещё не в теме»). В связи с этими же соглашениями нужно несколько замечаний по построению базы данных. Если у вас присутствует модель, например Item, ей должна соответствовать таблица базы данных Items. Это ещё не всё. В этой таблице обязательно присутствие первичного ключа, с именем id (ну кто бы мог подумать!), если таблице необходим внешний ключ, название поля должно быть вида tablename_id, где tablename – имя таблицы, на которую ссылается внешний ключ. Что такое модель в данной реализации MVC? Это не просто таблица базы данных, это класс (несколько классов), наследуемый от базового класса фрэймворка AppModel. Разумеется, мы можем посмотреть его реализацию, но гораздо легче представить этот класс как абстрактный (с оговоркой – насколько это возможно в объектной модели PHP 4). Реализация модели item будет сделана на основе такой конструкции: class Item extends AppModel { var $id; ... }

Представление в CakePHP является обычным HTMLфайлом, включаемым в PHP-код. Файл располагается в папке app/views/имя_модели/ и имеет расширение .thtml. Он представляет из себя обычный шаблон, снабженный некоторыми интеллектуальными функциями. Стоит обратить внимание на правила создания шаблона, описанные в руководстве. Но для самой элементарной логики надо знать одно – имена полей форм, реализующих запросы к модели, должны совпадать с именами полей таблицы базы данных, используемой моделью.

Что у нас осталось? Мелочь – контроллер, отвечающий за бизнес-логику приложения. В данной среде он представляет собой класс, наследуемый от базового класса AppController. class UsersController extends AppController { function register() { ... } ... }


web-программирование Физически расположенный в директории app/controllers/, Валидация данных – это всегда нудно, однообразно он принимает вводимую пользователем (посредством пред- и, самое обидное, всегда необходимо. В CakePHP эта задаставления) информацию и реализует некоторое (в общем ча предельно облегчена. К хелперам, берущим на себя эту случае – любое) количество действий (в терминах PHP – работу, прилагаются предопределённые константы, облегметодов). чающие процесс построения регулярных выражений для чеСам процесс написания приложения заключается в реа- тырёх наиболее распространённых случаев такой проверлизации трёх вышеописанных компонентов и создании не- ки. Это VALID_NOT_EMPTY, VALID_NUMBER, VALID_EMAIL, и VALID_YEAR, названия констант говорят сами за себя, они обходимых таблиц в базе данных. Надо заметить, что пока фрэймворк только осложняет определены в файле cake/libs/validators.php и не поддаютнам жизнь, навязывая структуру программы. В этом есть ся модификации (хотя есть обещание разработчиков о додоля правды – писать на основе CakePHP сайты-визитки полнении их функционала). или небольшие домашние странички действительно ознаРабота по валидации форм с применением этих консчает только усложнение жизни. Зато в сложных приложе- тант выглядит приблизительно так: ниях такое явное разделение компонентов MVC-модели <?php class Item extends AppModel { принесёт только пользу. var $name = 'FirstItem'; Да и к тому же ограничения закончились, теперь о вкусvar $validate = array( 'itemname' => VALID_NOT_EMPTY, ↵ 'itemid' => VALID_NUMBER, 'email' => VALID_EMAIL ); ном. Прежде всего, это скаффолдинг (scaffolding – строи} тельные леса, подмостки) – понятие, пришедшее из Ruby ?> on Rails. Скаффолдинг – это возможность автоматически создать Разумеется, ключи массива $validate в настоящем приполный набор CRUD (Create, Retrieve, Update, and Delete)- мере – это имена полей некой HTML-формы. операций (в данном случае стандартных форм с соответсПолный справочник функций хелперов вы можете изутвующими кнопочками) и представления для любой таб- чить по адресу http://api.cakephp.org. лицы базы данных. Она помогает быстрее начать манипуХелперы нужны для помощи в реализации представлелировать своими таблицами. Со временем вы можете пос- ний. Для помощи в реализации бизнес-логики, при создатепенно заменить сгенерированные операции и представ- нии контроллеров используются компоненты (расположеление своими собственными – которые, разумеется, бу- ны в папке /controllers/components). Это небольшие (как прадут намного красивее и функциональнее. Всё, что нужно вило) общие мини-контроллеры, используемые обычно недля включения этого механизма в ваше приложение, – до- сколькими контроллерами приложения. Разумеется, есть бавить в класс контроллера переменную $scaffold: возможность писать свои компоненты. Для этого создаётся файл /controllers/components/some_component.php, соclass CategoriesController extends AppController держащий класс, наследуемый от класса object, методом { которого передаётся в качестве аргумента ссылка на исvar $scaffold; } пользуемый контроллер. Примерно так: Скаффолдинг берёт на себя большую часть рутинной class FooComponent extends Object работы по созданию скелета приложения. О том, как его { правильно настроить и использовать, читайте в соответсfunction bar(&$controller) { твующем разделе документации.

Что ещё? Хелперы (helpers) – встроенные функции, облегчающие работу с различными элементами HTML (в частности, с формами и таблицами), с объектами javascript, с асинхронными запросами (ajax) в представлениях. Основная их задача – автоматизировать рутинные операции, связанные с HTMLпредставлением вашего приложения. В самом деле – организовывать вывод из базы данных, в виде таблицы, причём с выделенными цветом чётными строчками – хороший пример рутинной операции, на которую не надо больше тратить время. То же самое (пусть и с оговорками) относится к проверке данных форм, впрочем хелперы могут тут помочь и при создании формы и при перехвате сообщений об ошибках валидации. Для работы с HTML CakePHP использует шаблоны, описанные в файле cake/config/tags.ini.php, вы всегда можете их изменить, предварительно скопировав этот файл в директорию app/config/ вашего приложения.

№10, октябрь 2007

}

}

Пример создания собственного компонента (из официальной документации): 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');

83


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

Симфония с маленькой буквы (symfony)

Рисунок 2. Начало работы с symfony

и вызываем компонент из кода контроллера: $ foo =& new Foo();

Коротко о других возможностях ACL-привилегии (ARO/ACO) определены в /app/config/acl.ini.php. Инструкции по определению доступа находятся в начале файла acl.ini.php. Инициализировать базу данных для ACL можно из командной строки выполнением следующей команды (из вашей директории /cake/scripts/): $ php acl.php initdb

Работа с ACL в среде построена через обращение к объектам Aro() и Aсo() (Access Request Objects – объекты запроса доступа и Access Control Objects – объекты контроля доступа соответственно). Работа со списками доступа очень удобна и прозрачна, но подробно останавливаться на ней не будем. В документации приведены достаточно подробные примеры как назначения, так и проверки привилегий. На чём мы ещё не будем подробно останавливаться, но я обязательно упомяну? Прежде всего это сессии. Если кто-то из разработчиков не знает о сеансах работы или Sessions, данная статья пока не нужна, а всем остальным спешу сообщить, что работать с ними CakePHP очень удобно.

84

Cake может сохранять данные сессии тремя способами (за это отвечает константа CAKE_SESSION_SAVE): как временные файлы в директории /Cake, используя механизм PHP по умолчанию, или использовать базу данных. Работа с сессиями происходит через компонент сессий, который, кроме базовых возможностей (чтение, запись), умеет сообщать об ошибках и процессах, обновлять сессию (с установкой нового идентификатора), оперировать с собственными сообщениями. Обязательно следует упомянуть кэширование представлений. Такую возможность CakePHP получила с версии 0.10.9.2378_final. По умолчанию кэширование отключено, при его активации (константа CACHE_CHECK в /app/ config/core.php) среда будет хранить исходящие данные из обычных операций в кэше для ваших пользователей. При этом вы можете управлять содержимым кэша, например, указывать части представления, которые кэшироваться не должны, управлять временем кэширования. Пожалуй, стоит остановиться. За рамками описания осталось довольно много важного – верификация данных, шаблоны, управление запросами, механизм плагинов и компонент безопасности. Для ознакомления со всем этим богатством я ещё раз рекомендую ознакомиться с документацией на CakePHP, а также с очень интересной серией статей «Быстрое соз-

Первая версия среды symfony (пишется именно так, с маленькой буквы и ошибками) была выпущена в октябре 2005 года. Надо заметить, что писалась эта среда на PHP 5 и для PHP 5, поэтому при её использовании можно смело забыть о существовании четвёртой ветки. В основу этого фрэймворка его создатель Фабьен Потасье положил ORM (Object-Relationship Mapping)-библиотеку Propel, свои наработки в другом фреймворке – Mojavi, а также подход к работе с шаблонами из Ruby on Rails. Успешно стартовав, как основа для стратегически важного портала – сайта фирмы, торгующей нижним бельём, symfony был задействован в нескольких других проектах, после чего Фабьен открыл исходные коды системы, передав разработку сообществу. На образованном сайте проекта (http://www.symfony-project.com) можно наблюдать всё, что это сообщество натворило с фрэймворком на настоя&OLHQW

,QWHUQHW 5HTXHVW

5HVSRQVH

)URQW &RQWUROOHU

$FWLRQ

'DWD $FFHVV

/D\RXW

9LHZ /RJLF

7HPSODWH 'DWDEDVH $EVWUDFWLRQ

'DWDEDVH 6HUYHU

Рисунок 3. Модель MVC в symfony


web-программирование щее время (надо заметить и продолжает творить).

Каковы основные преимущества 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) – значит всё в порядке, если нет… Ну тут я теряюсь. Сделать что-то не так очень трудно.

№10, октябрь 2007

Для рабочего приложения среду лучше устанавливать через PEAR (да, да, symfony довольно давно доступна как PEAR-пакет), но для цели «попробовать» песочница идеальна. Кроме непосредственно symfony, мы установили и некоторые необходимые для работы библиотеки. Рассмотрим каждую из них: n pake – инструмент командной строки (к которому мы ещё вернёмся. n lime – инструмент для модульного тестирования приложения. n Creole – движок абстракции базы данных. Так же, как и PHP Data Objects (PDO), он предоставляет интерфейс между вашим кодом и SQL-кодом базы данных и делает возможным переключение между разными типами баз данных. n Propel – используется для объектно-реляционного отображения (ORM). Он хранит объекты и предоставляет сервис для запросов к базе данных. n Phing – инструмент командной строки для Propel. Надеюсь у нас ещё будет возможность рассмотреть их подробно, но пока надо настроить среду. Разворачивание дерева папок и создание каркаса приложения я опускаю, поскольку в песочнице мы получим уже всё в готовом виде. А как это сделать при установке из PEAR или CVS (да, можно и так) подробно освящено в документации. Типовой проект приложения, предлагаемый symphony, имеет следующую структуру: apps/ frontend/ backend/ batch/ cache/ config/ data/ sql/ doc/ lib/ model/ log/ plugins/ test/ unit/ functional/ web/ css/ images/ js/ uploads/

Назначение любой из этих папок

&OLHQW

,QWHUQHW

5HTXHVW

5HVSRQVH

&RQWUROOHU

9LHZ

0RGHO 6HUYHU

Рисунок 4. Архитектура Model-ViewController

вы можете узнать из документации по системе. Нам наиболее интересны папка apps/, содержащая папки приложений проекта (frontend and backend для интерфейса пользователя и администратора), папка config/ с настройками проекта и web/ – корневая папка вебсервера. Типичная структура приложения выглядит следующим образом: you_applications/ config/ i18n/ lib/ modules/ templates/ layout.php error.php error.txt

В данном дереве назначение папок cofig/, modules/ и templates/ не должно вызывать вопросов. В папке /i18n содержатся настройки для интернациолизации интерфейса приложения, в lib/ – специфические ресурсы. Структура типичного модуля: Module_name/ actions/ actions.class.php config/ lib/ templates/ indexSuccess.php validate/

Тут поясню, что в папке actions/ содержатся классы (как правило, один класс), реализующие все действия

85


web-программирование Для тех, кто ещё не в теме (основные термины, используемые в статье) 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-разметкой.

модуля. В папке validate/ находятся настройки, применяеКаждое приложение, выполненное на основе среды мые для проверок получаемых данных (например, провер- symfony, представляет собой один или несколько програмка данных форм). Назначение остальных папок вопросов мных модулей. Модульная структура – это основное отливызывать не должно. чие данного продукта от описанного выше (хотя над разСтруктура веб-сервера (web/) достаточно типична для личием компонентной и модульной модели пусть ломает обычного веб-сайта. мозг кто-нибудь другой). Вообще для создания рабочего приложения предусмотСам модуль представляет собой один или несколько рены команды интерфейса командной строки. Выполнив: скриптов (в одном или нескольких файлах), выполняющих родственные или взаимозависимые функции. Допустим, > symfony init-app app_name модуль «Каталог продукции» может отвечать за реализацию просмотра каталога продукции, просмотра описания мы уже получим каркас типового приложения symfony. отдельного товара (функции пользователя приложения), до-

86


web-программирование бавление товара в каталог, изменение сведений о товаре (функции администратора).

Как symfony реализует MVC? Во-первых, эта модель несколько детализируется, а именно так: n в модели выделяется слой абстракции базы данных и слой доступа к данным; n в представлении выделяется общий макет, логика представления и шаблоны; n в контроллере появляется центральный контроллер, общий для всего приложения и действия (actions), специфичные для конкретных страниц. Вкратце эта схема представлена на рис. 3 (взято из руководства «The Definitive Guide to symfony»). Кажется, всё неправомерно усложнилось, но тут есть хорошие новости – писать отдельный скрипт под каждый пункт этой схемы не нужно. Всё гораздо проще – макет и центральный контроллер symfony сгенерирует сама. Более того, библиотека Propel способна автоматически предоставить скелеты классов модели и сгенерировать код с учётом схемы данных. При этом другая библиотека, Creole, берёт на себя абстракцию базы данных (для перехода с одной СУБД на другую достаточно изменить один параметр конфигурации).

Как всё-таки начать работать? Для создания нового модуля, также подойдёт консоль, а именно команда: >init-module app_name module_name

выполненная в папке проекта. После этого будет автоматически сгенерирован модуль с вышеописанной типовой структурой. В частности, будет создан файл actions/actions.class.php со следующим содержанием: <?php class mymoduleActions extends sfActions { public function executeIndex() { }

$this->forward('default', 'module');

} ?>

Тут у меня большое искушение прервать объяснения, так как дальнейший процесс создания модулей, страничек и приложений подробно освящён в документации (ссылки на которую даны в конце статьи), но хотелось бы освятить некоторые интересные моменты работы с классами в symfony – это хранители параметров и автоматическая загрузка. Хранитель параметров – это удобный способ скрывать атрибуты класса, которые задают необходимые параметры. Используется этот механизм следующим образом: $response= new sfResponse();

№10, октябрь 2007

$response->getParameterHolder()->set('foo', 'bar'); echo $response->getParameterHolder()->get('foo'); => 'bar'

Или с использованием специальных методов: $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; } }

Известно, что в пятой версии языка PHP появилась очень удобная (и по началу очень нестабильно работающая) функция __autoload(). Symfony использует этот механизм на полную катушку. До такой степени, что просто отпадает необходимость в использовании операторов requaer/include! Вы можете смело писать код вида: $fooObject = new MySuperClass();

и, если 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.symfonyproject.com. 4. Книга «The Definitive Guide to symfony» (официальная документация проекта symfony) – http://www.symfony-project.com/book. 5. www.ru.wikipedia.org.

87


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

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

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

Рождение Pentium Первые разработки по созданию процессора пятого поколения велись еще в 1989 году, но пользователи получили его только в 1993. Новинка получила название «Pentium», остающееся на слуху до сих пор. Новый чип требовал под себя новую материнскую плату, поскольку новый разъем позволял использовать более низкое напряжение, вследствие чего снижалось энергопотребление (с пяти до трёх ватт). Суперскалярная архитектура (одновременное выполнение нескольких операций) позволила увеличить производительность процессора в четыре раза по сравнению с 486 DX. Первые модели Pentium работали на частотах 60 и 66 МГц (более поздние модели – до 200 МГц), имели 16 Кб кэшпамяти первого уровня.

88

Стоил новый процессор недешево. Для оправдания затрат, ушедших на его разработку, руководство Intel приняло решение запустить мощную рекламную кампанию, в которую вошли: ролики на телевидении, реклама в журналах, информационная поддержка IT-мероприятий. Брэнд «Intel Inside» стал известным не хуже Coca-Cola и McDonalds. Теперь каждый рядовой пользователь знал: если его компьютеру нужен хороший процессор – пусть он будет от Intel. Именно отсутствие у AMD значительной рекламной компании собственных чипов во многом обусловило меньшую распространенность ее продукции. Спустя год появился Pentium MMX. Процессор работал на более высокой частоте (до 266 МГц в версиях

для настольных компьютеров) и обладал увеличенным до 32 Кб L1-кэшем. Но главное его отличие от предшественника составлял специальный набор инструкций (MMX расшифровывается как MultiMedia eXtensions – Мультимедийные Расширения), адаптированных на обработку различных мультимедийных данных. Огромную популярность чип снискал в основном среди геймеров, восхищенных скоростью работы «заточенных» под него игровых приложений.

Убийца Пентиума В 1994 году инженеры AMD начали работать над одной из самых важных разработок в компании – процессором с кодовым названием Krypton, неофициально прозванным «убийцей Пентиума» (Pentium Killer). В свет же он


ретроспектива вышел под именем K5. Задумывал- стал первым x86-процессором, в кося данный чип как ответ Intel Pentium, тором кэш-память второго уровня расуже во всю штурмовавший прилавки полагалась не на материнской плакомпьютерных магазинов. те, а была интегрирована в ядро чипа. K5 увидел свет в 1995 году в трёх Благодаря этому скорость обращения модификациях – 75, 90, 100 МГц. От- к кэшу возросла в несколько раз. Объличались они лишь частотой систем- ем же кэш-памяти второго уровня мог ной шины. Было очевидно, что AMD достигать 2 Мб, хотя в продажу поскатастрофически не успевает с вы- тупили в основном модели с 256 Кб пуском своих новых процессоров. памяти. В 1996 году Intel уже вовсю продаИнновации инженеров Intel сыгравала Pentium MMX с частотой почти ли большую роль в развитии процесв 200 МГц, а у AMD только-только под- сорных технологий, но пользователи готовилась к выпуску K5 PR100. их не оценили. Pentium Pro стоил очень Именно с этого момента компания дорого, выделял много тепла и славы прибегла к так называемому «про- не снискал. цессорному рейтингу». Число PR100 AMD выпустила свой первый пров названии обозначало, что произво- цессор, созданный совместно с NexGen. дительность процессора не меньше, Презентован он был в начале 1997 гочем у Intel Pentium 100 МГц, хотя реаль- да, одновременно с Pentium MMX. Не обладая, в отличие от конкуренная тактовая частота этого K5 равнялась 75 Мгц. та, встроенным кэшем второго уровня, Техническое отставание AMD не- чип AMD по количеству транзисторов посредственным образом сказывалось тем не менее превосходил Pro вдвое. на её прибыли. Компанию выручало Использование RISC-архитектуры производство Flash-памяти, которым и частота от 166 до 233 МГц сделали она занималась вместе с Fujitsu. K6 самым производительным процесЗдесь нужно сказать, что помимо сором года. Этого титула K6 лишился Intel и AMD x86-процессоры в то время лишь с выходом Pentium II. делала небольшая компания NexGen. После провала K5 продажи K6 каВозглавляемая талантливым руко- зались просто огромными, процессор водителем Атиком Разой (Atiq Raza), стал одним из самых успешных проекNexGen прославилась выпуском свое- тов в истории компании. У AMD накого Nx586. Таким образом, процессор нец-то появились инвестиции для созпятого поколения с использованием дания новых разработок. Но тут возникла новая проблема – RISC-архитектуры они сделали даже раньше AMD с её К5. Здесь не послед- заводы AMD работали на техническом няя заслуга Compaq, вложившей в ком- процессе 0,35 микрон, что обуславливало большое энергопотребление и не панию огромные инвестиции. Аттик Раза понимал, что его не- позволяло создавать процессоры часбольшой фирме не выдержать конку- тотой выше, чем 233 МГц. ренции. Он первым предложил AMD В начале 1998 года оборудование купить свою компанию. В результа- заводов было заменено. Они получите NexGen стала частью AMD. Сумма ли возможность изготавливать процессделки составила, согласно различным соры на более совершенном 0,25 мкм источникам, от 600 до 800 млн. долла- технопроцессе, и пользователи увидеров. Многие критиковали Джерри Сан- ли на полках магазинов K6, работаюдерса (Jerry Sanders), в то время ис- щие на частоте 300 МГц. полнявшего обязанности главы AMD, за подобный шаг, но в целом он вы- Эпоха Pentium II глядел оправданым. У NexGen была В 1997 с конвейера сошёл Pentium II. масса проектов и отличный штат со- Самая первая модель с ядром, известрудников, а AMD имела мощные по- тным как Klamath, была слабой, изготавливалась она еще по 0,35 мкм техзиции на рынке. процессу, что влекло за собой повыPROfessional против K-6 шенное энергопотребление и теплоВ 1995 году Intel выпустила Intel выделение. Несмотря на 512 Кб L2-кэPentium Pro, ориентированный на ры- ша, встроенного в картридж с процеснок рабочих станций и серверов. Он сором и работающего на половине его

№10, октябрь 2007

Гектор Руис

тактовой частоты, успехом стал пользоваться только усовершенствованный Pentium II с ядром Deschutes. Deschutes стоил на порядок дешевле, хотя изменения претерпел незначительные. Главное отличие от предшественника – более совершенный процесс производства. В итоге процессоры на новом ядре грелись в 2-2,5 раза меньше, и тактовую частоту на них можно было наращивать без особых проблем. AMD в эту пору пришлось нелегко. Разъем, под который был создан второй Pentium, оказался заботливо запатентован Intel. AMD пришлось разрабатывать свою архитектуру и системную логику, продолжая выжимать все что

Рекламная фотография Pentium III

AMD Athlon

89


ретроспектива Появление Athlon и Celeron

Пол Отеллини

можно из платформ типа Socket 7. Процессор K6 был успешным чипом, причем настолько, что заводы не справлялись со стремительно возраставшей нагрузкой. Аналитики заявляли, что в начале 1997 года продажи AMD могли быть в три-четыре раза больше, если бы до выхода Pentium II компания смогла выпустить достаточное количество своих процессоров. Но объемы производства оставались весьма скромными. Спасая ситуацию, инженеры AMD произвели на свет новый K6 II. Процессор имел частоту вплоть до 500 МГц при частоте работы системной шины в 100 МГц. При этом кэш второго уровня оставался на материнской плате. Процессор поддерживал новую технологию 3D Now!, которая являлась аналогом технологии MMX от Intel. В 1999 году увидел свет K6 III, в котором наконец-то появилась встроенная кэш-память второго уровня. Ничем другим он от предшественника не отличался.

Intel: хроники нашего времени 2000 год – выпуск Intel Pentium 4. Первые модели на ядре Willamette были подвергнуты большой критике. Pentium III на меньшей частоте работал продуктивнее своего наследника. Январь 2000 года – выход нового Pentium 4 с тактовой частотой 2200 МГц, содержавшего 55 миллионов транзисторов. Август 2002 года – начинаются работы по выпуску чипов на основе технопроцесса 0,09 мкм. В процессорах начинают использовать так называемую «технологию напряженного кремния» (strained silicon).

90

В 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 микрон. Новые модели облада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-кэша.

ли 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 Inside процессоров, в мире существуют разработки и других компаний.

Двадцать первый век

AMD: современная история 2000 год – компанию возглавляет Гектор Руиз. 2001 год – выход AMD Duron на ядре Morgan. Поддержка набора команд 3DNow! Professional и SSE. 2002 год – переход на технологию 0,13 микрон. Выход нового Athlon XP 2200+, отличавшегося от предшественников исключительно технологическим процессом производства. 2003 год – AMD подписала контракт с IBM. Теперь фирмы сотрудничают по ряду проектов. Выход процессоров на яд-

Intel выиграла у AMD борьбу за мобильный рынок. Точнее, AMD в этой борьбе даже не принимала участия, так что в начале нового столетия практически все ноутбуки комплектовались процессором от Intel. Особую популярность снискали еще Pentium II Mobile и его облегченная версия в лице Celeron. Дело в том, что энергопотребление процессоров в портативных компьютерах очень важно. AMD же переходила и охлаждающим вентилятором). Польна более совершенные техпроцессы (с зователям пришлось самим выбирать 0,35 на 0,25 мкм, с 0,25 на 0,18 мкм и кулеры для чипов, а поскольку ядро так далее) позже, чем Intel. Более со- было не защищено, то повредить его вершенный техпроцесс позволяет про- было очень легко. Зато для Thunderbird цессорам меньше нагреваться и тра- был создан более совершенный разътить меньшее количество энергии, по- ём Socket A. AMD нанесла ответный удар Intel сему Intel оказалась вне конкуренции. В 2000 году AMD выпустила свой на рынке бюджетных процессоров, выAthlon на ядре Thunderbird: 37 милли- пустив линейку под названием Duron. онов транзисторов, 256 Кб кэш второго Так же, как и Celeron, Duron представуровня. Этот процессор подвергся зна- лял собой урезанную версию старших чительной критике – за шину переда- моделей. Страдал главным образом чи данных шириной в 64 бит (у треть- кэш – он был уменьшен в четыре раза его Pentium шина была в четыре раза и составлял 64 Кб. Duron оказался прошире) и за отсутствие боксовой ком- изводительней конкурента и долгое плектации (процессор с радиатором время занимал лидирующие позиции

ре Barton, отличавшихся увеличенным (512 Кб) L2-кэшем. Анонс 64-битных микропроцессоров Opteron. 2004 год – выход бюджетной линейки Sempron. Фактически это был тот же Thoroughbred, с увеличенной частотой системной шины. 2005 год – выход Athlon 64 X2 – двухъядерных процессоров, ориентированных на игровой рынок. 2006 год – AMD за 5,4 миллиарда долларов покупает одного из крупнейших производителей видеокарт – канадскую компанию ATI.

в списках продаж. Подобно Celeron, с особенно трепетной любовью к нему относились любители разгона. Дальнейшие события происходили на наших глазах, и описывать их в подробностях не имеет никакого смысла. Противостояние Intel и AMD продолжается ежеминутно. Но мы, пользователи компьютеров, всегда останемся в выигрыше от этой борьбы! 1. http://www.wikipedia.org. 2. http://www.intel.com. 3. http://www.amd.com.

Рубрику ведет Дмитрий Мороз

История процессоров Intel и AMD

№10, октябрь 2007

91


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

Криптографические интерфейсы и их использование Павел Хорев

Хотя в названии книги нет слова «Microsoft», весь материал, за исключе‑ нием первых пятнадцати страниц, це‑ ликом и полностью посвящен вопро‑ сам прикладного программирования с использованием криптографичес‑ ких интерфейсов операционных сис‑ тем семейства Windows. Книга разби‑ та на пять глав. В первой главе осве‑

щаются общие принципы современ‑ менения возможностей форматирова‑ ной криптографии. Оставшиеся че‑ ния издатель смог бы упростить рабо‑ тыре главы посвящены интерфейсам ту с книгой. Также было бы хорошим CryptoAPI 1.0, CryptoAPI 2.0, криптогра‑ подспорьем наличие примеров в элек‑ фическим многокомпонентным объек‑ тронном виде на сайте издательства, там CAPICOM и системным утилитам что является общепринятой практикой Windows, предназначенным для рабо‑ для книг по программированию. ты с ЭЦП и сертификатами соответс‑ В целом издание ориентировано на не слишком широкую аудиторию, твенно. Книга носит прак тический ха‑ поскольку затрагивает весьма специ‑ рактер. Для иллюстраций описывае‑ фическую тему и тесно завязано на од‑ мых методов работы автор использу‑ ну-единственную платформу. С другой ет несколько языков программирова‑ стороны, если вы разработчик криптог‑ ния: Object Pascal, С++ (при этом ука‑ рафического ПО под Windows, эта кни‑ зываются особенности Borland C++ га будет для вас незаменима. Builder и Microsoft Visual C++), а также n Издательство: «Горячая линия-Телеком» JavaScript и VBScript. Год издания: Значительный объем книги зани‑ n 2007 Количество страниц: мают многочисленные примеры кода, n 278 ISBN: которые, к сожалению, трудночитае‑ n 978-5-93517-331-9 Цена: мы. Возможно, при использовании мо‑ n ≈ 325 руб. ноширинного шрифта вместо пропор‑ К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м ционального и более широкого при‑ «Горячая линия-Телеком».

Операционные системы: разработка и реализация. 3-е издание Эндрю Таненбаум, Альберт Вудхалл

Несмотря на то что «Системный ад‑ министратор» уже писал об этой кни‑ ге в 2005 году, мы вновь решили об‑ ратить ваше внимание на это класси‑ ческое издание, посвященное устрой‑ ству операционных систем, воспользо‑ вавшись тем, что на этот раз речь идет о самом последнем, третьем издании (на языке оригинала вышло в 2006 го‑

92

ду). Предыдущее, второе, датируется ние B: около 29 тысяч строк кода с ком‑ далеким по меркам развития IT‑тех‑ ментариями, переведенными на рус‑ нологий 1997 годом. ский язык. Последнюю же версию са‑ По сравнению со вторым изданием мой операционной системы лучше ска‑ практически весь материал перерабо‑ чать с сайта http://www.minix3.org. тан, и добавлено много нового. В час‑ Ну и в конце, пожалуй, будет умест‑ тности, строение операционных сис‑ ным привести цитату из книги «Just тем рассматривается на примере пос‑ For Fun» создателя ядра операцион‑ ледней версии, специально создан‑ ной системы Linux Линуса Торваль‑ ной для курса, читаемого автором дса: «У каждого есть книга, которая пе‑ в VU University Amsterdam, «учебной» ревернула его жизнь. Библия. «Капи‑ UNIX-подобной операционной систе‑ тал»... Меня лично вдохновила на под‑ мы MINIX 3. виги «Проектирование и реализация Книга состоит из шести глав и двух операционных систем» Эндрю С. Та‑ приложений. Первая глава является ненбаума». введением в операционные системы. n Издательство: «Питер» Вторая посвящена процессам. Третья n Год издания: 2007 вводу-выводу. Четвертая – управлению n Количество страниц: 704 памятью, и наконец пятая – файловым ISBN: 978-5-469-01403-4 системам. Шестая представляет из се‑ n n Цена: ≈ 780 руб. бя библиографию. К книге прилагается CD-диск. Наверное, наиболее ценное К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м из записанного на нем – это Приложе‑ «Питер».


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

Windows Vista. Настольная книга пользователя и администратора Престон Гралла

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

пуска продукта. Тем не менее, в лю‑ и пользовательским интерфейсом. бом случае читателю будет приятно Четвертая глава рассказывает заглянуть на несколько месяцев в бу‑ о файловой системе и работе с дис‑ дущее и изучить новейшие техноло‑ ками. гии от Microsoft. В пятой и шестой читатель знако‑ Несмотря на то что это «настольная мится со встроенными в Vista браузе‑ книга пользователя и администратора», ром и почтовым клиентом. автор в предисловии честно предуп‑ Таким темам, как сеть, безопас‑ реждает о том, что она ориентирована ность, реестр, мультимедиа, настрой‑ на рядового пользователя, а не на ад‑ ка производительности и работа с обо‑ министратора корпоративной сети. Вы рудованием, также отдано по отдель‑ не встретите описаний групповых по‑ ной главе. литик или примеров развертывания В целом можно сказать, что данная Vista при помощи BDD. Кстати, «адми‑ книга в первую очередь будет полезна нистратор» в названии книги появил‑ «продвинутому пользователю». ся старанием отечественного издате‑ ля. Оригинальное же название звучит n Издательство: «Питер» как «Winows Vista in Nutshell». n Год издания: 2008 Книга поделена на двенадцать n Количество страниц: 656 глав, каждая из которых посвящена n ISBN: 978-5-469-01666-3 отдельной теме. n Цена: ≈ 473 руб. С первой по третью главы нас зна‑ К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м комят с основными концепциями Vista «Питер».

Microsoft Windows Vista. Полное руководство Пол Мак-Федрис

Вторая книга в обзорах этого меся‑ ца, посвященная Windows Vista, явля‑ ется переводом издания из популяр‑ ной серии «Unleashed», издательства Sams. И так же, как и «Настольная кни‑ га пользователя и администратора», она скорее ориентирована на изуче‑ ние возможностей новой операцион‑ ной системы в разрезе действий поль‑

№10, октябрь 2007

зователя, а не администратора. Хотя работе в сети (локальной и Интернет), охват рассмотренных тем значитель‑ еще две – выполнению повседнев‑ но больше. Тут и программирование ных задач и основным возможностям WHS, и настройка клиента VPN. Windows Vista, и еще одна часть рас‑ Преимуществом данной книги для сказывает о настройке и оптимизации русскоязычного читателя является то, операционной системы. что все снимки с экрана были сделаны В целом же, из всех имеющихся в настоящий момент переводных книг, с русской версии Windows Vista. В качестве же недостатка, по срав‑ затрагивающих новейшую клиентскую нению с «Windows Vista. Настольная операционную систему от Micrsoft, книга пользователя и администрато‑ «Полное руководство», пожалуй, дейс‑ ра», можно назвать отсутствие англо‑ твительно является самым полным язычных названий утилит и пунктов и исчерпывающим. меню в тексте. На данный недоста‑ ток как на существенный часто ука‑ n Издательство: «Вильямс» зывают читатели, самостоятельно го‑ n Год издания: 2007 товящиеся к сертификационным эк‑ n Количество страниц: 864 заменам Microsoft по переводной ли‑ n ISBN: 978-5-8459-1302-9 тературе. n Цена: ≈ 359 руб. В целом книга поделена на пять К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м частей, две из которых посвящены «Вильямс».

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

93


подписка на 2007 год

Редакционная подписка для физических лиц n Вы можете оформить подписку

n Вы можете оформить подписку

n Журнал высылается почтой прос-

на любой российский адрес. n При заполнении квитанции обя‑ зательно РАЗБОРЧИВО укажи‑ те фамилию, имя, отчество пол‑ ностью, почтовый индекс и ад‑ рес получателя (область, город, улица, номер дома, номер квар‑ тиры), контактный телефон.

с любого месяца на любой срок. n В графе «Сумма» проставьте сумму за выбранное количество номеров. Стоимость одного номера журнала 150 руб. За 4 месяца (с сентября по декабрь) – 600 руб. НДС и почтовые расходы включены в стоимость.

той бандеролью только после поступления денег на расчетный счет и копии заполненного и оплачен‑ ного бланка, отправленной в ре‑ дакцию по факсу: (495) 628‑82‑53 или на элек тронный а д рес: info@samag.ru.

94


подписка на 2008 год Российская Федерация

n Подписной индекс: годовой – 20780, полугодовой – 81655

Каталог агентства «Роспечать» n Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» n Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru n Подписка 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 по каталогу агентства «Пресса России» *

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

**

№10, октябрь 2007

95


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

96

Читайте в следующем номере: Управляем Active Directory Каталоги бизнес-данных – из командной строки интеграция легким Серверные системы Microsoft семейс- движением руки тва NT 5 имеют большое количество Практически в любой организации суграфических средств для управления ществуют информационные системы службой каталогов. Плюс к этому до- и базы данных. Удобные средства раполнительный пакет ADMINPACK.MSI боты с информацией из разнообраздает возможность администратору ных источников предлагает мощный оперировать ресурсами Active Directory инструмент в составе MOSS 2007 – с десктопных операционных систем. BDC или каталоги бизнес-данных. Однако немногие знают, насколько эф- С помощью BDC можно легко органифективно можно осуществлять управ- зовать единый полнотекстовый поиск, ление и мониторинг службы каталогов построить сводные отчеты и сфорпри помощи утилит командной строки. мировать аналитические показатели, Об этом читайте в следующем выпус- опубликовать в Интернете динамике журнала. ческие выборки данных для заказчиков и партнеров. Подробности читайВведение в системное те в ноябрьском выпуске «Системнопрограммирование го администратора». Развитие вычислительных систем, особенно повсеместное внедрение Изменения технологии виртуализации привело в сертификации Microsoft: к значительному увеличению нагрузки новые статусы MCTS на системных администраторов. Тра- и MCITP диционный способ облегчения труда В сертификационной линейке Microsoft сисадмина путем использования гра- в прошлом году произошли серьезные фического интерфейса исчерпал се- изменения. Как подготовиться к полубя, так как был направлен не столь- чению новых статусов MCTS и MCITP? ко на увеличение «мощности» адми- Можно ли апгрейдить имеющиеся сернистрирования, сколько на упроще- тификаты MCSA и MCSE? Какие боние процесса и снижение професси- нусы имеют при получении новых стаональных барьеров. Быть может, при- тусов специалисты с сертификатами шло время снова обратить внимание по Windows 2003 Server? Ответы на эти на традиционный инструментарий ко- и другие вопросы ищите в следующем мандной строки? номере журнала.

Уважаемые читатели! Продолжается подписка на 2008 год! Приобрести новые и старые номера журнала вы можете через интернет-магазин LinuxCenter.ru.

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


Turn static files into dynamic content formats.

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