Академический Документы
Профессиональный Документы
Культура Документы
ИТОГИ КОНФЕРЕНЦИИ
OPEN SOURCE FORUM RUSSIA 2005
С 27 по 29 апреля в «Рэдиссон Славянская» прошла выставка и конференция
Open Source Forum 2005. Это первое в России мероприятие такого масштаба,
посвященное движению отрытого исходного кода.
ервый день назывался Open Standarts Day и был за- C самого утра по выставочным залам стали расхажи-
нят циклом докладов специалистов организации вать большие императорские пингвины, а перед началом
OASIS (Organization for the Advancement of Structured выступлений на сцене, отгоняя злых духов, танцевали с
Information Standards). Большинство выступающих акцен- бубном шаманы. Эти милые сердцу каждого админа пер-
тировало внимание слушателей на проблемах внедрения сонажи вызывали улыбки у посетителей.
открытых стандартов в ИТ индустрии. С вступительным
словом выступил коммерческий директор компании
UnitSpace Александр Гершойг. Он прояснил слушателям
различия между открытым кодом и открытыми стандарта-
ми. Открытость стандартов априори предполагает, что все
данные между сервисами будут передаваться в XML-фор-
мате. Все доклады тем или иным образом были связаны с
сервис-ориентированной архитектурой предприятия, под-
ходами к ее реализации и роли отрытых стандартов в обес-
печении безопасной взаимной совместимости платформ от
разных поставщиков. Отдельного упоминания стоят доволь-
но интересные презентации директора по стратегии разви-
тия и архитектуре Oracle Application Server Suite Вадима
Розенберга, рассказавшего о новом языке BPEL. Также лю-
бопытные мысли о методах безопасной интеграции SOA
прозвучали в речи директора по информационной безопас-
ности Microsoft в России и СНГ Владимира Мамыкина. Сто- Ôèííî-óãîðñêèå øàìàíû îòãîíÿþò çëûõ äóõîâ
ит отметить, что практически все ораторы тем или иным Первое пленарное заседание открыл президент ассо-
образом озвучили важность постепенного и безопасного циации «Руссофт» Валентин Макаров. В своей речи он упо-
внедрения открытых стандартов. Но к вечеру слушатели на- мянул, что в мероприятиях форума участвуют более 30 из-
чали засыпать – осветить столь объемную тему за один день вестнейших специалистов в области опенсорс, среди кото-
было не под силу даже столь блестящим специалистам. рых и создатель языка Perl Ларри Уолл.
Параллельно с этим в других залах шел монтаж стен- Кроме этого на форуме от лица Правительства Российс-
дов выставочного зала и Linux City. кой Федерации выступали Владимир Матюхин – руководи-
28 апреля началась регистрация для посетителей выс- тель Федерального агентства по информационным техно-
тавки и состоялось торжественное открытие форума. логиям, Церен Церенов – заместитель директора Департа-
мента корпоративного управления и новой экономики Ми-
нистерства экономического развития и торговли РФ. Пред-
ставители министерств рассказали о том, почему государ-
ственные структуры поддерживают Форум по открытому
коду, как используются программы в открытых кодах для
нужд государства и каковы перспективы их дальнейшего
внедрения в государственное управление.
Затем на сцену вышел один из выдающихся ораторов и
идеологов движения Джон Холл более известный как
maddog (интервью с ним читайте на 4 cтр.).
Доклад Джона по праву может считаться жемчужиной
форума, в нем гуру Open Source аргументированно дока-
зал, что закрытое программное обеспечение мешает рос-
ту местного рынка ПО, связывает пользователей по рукам
и ногам. Проприетарное ПО подобно черному ящику: неиз-
вестно как оно работает и ничего нельзя изменить. К тому
Ïåðâûå ïîñåòèòåëè âûñòàâêè же, с ростом корпораций, производящих закрытое ПО, уро-
2
репортаж
ладов аудитория то увеличивалась почти до сотни человек,
то вновь уменьшалась до десятка – другого слушателей.
Но самым красноречивым отражением экспансии откры-
того кода, конечно же, стал Linux City со стендами решений
на основе Linux. Среди этого мини-городка большего всего
бросались в глаза кассовые аппараты, кинотеатр, банк, ар-
битражный суд, рабочее место бухгалтера, созданное на
основе Wine и 1С.
кажите, что вы думаете о собственный способ изобретения коле- веров, до сих пор бесперебойно рабо-
перспективах коммерческих са нет нужды. К тому же в голову сразу тающих на основе разных версий Novell
компаний, опирающихся в же приходят мысли, как на этом можно Netware, но, к сожалению, эти решения
своем бизнесе только на Linux-ре- сэкономить. уже не дают той гибкости, в которой
шения? нуждаются клиенты. В то же время, у
Все говорят, что сейчас на рынке нет Как вы относитесь к попыткам запус- Suse и Ximian нет денег для дальней-
убедительных примеров успешных кать Windows-приложения под Linux шего развития. Кроме этого, Novell
Linux-компаний, если не брать в рас- c помощью Wine? Что вы думаете о предлагает не только деньги, но и свою
чет Red Hat. Я думаю, вся проблема со- свободной реализации Windows API, хорошо налаженную сеть распростра-
стоит в том, что многие фирмы непра- называемой React OS? нения. Думаю, что подобное объедине-
вильно рассчитывают срок выхода на Мне кажется, что воссоздать API от ние приведет к появлению более каче-
уровень не только самоокупаемости, Microsoft довольно сложно, у людей, ственных продуктов. Обратите внима-
но и прибыльности. Из-за этого полу- работающих над проектом Wine, ушли ние: то же самое сейчас происходит с
чается, что большинство молодых ком- долгие годы на реализацию основных Mandrake и Connectiva, я думаю, что
паний решают уйти с рынка слишком функций. Сейчас они добились совме- это к лучшему.
рано. Это в корне неверно, посмотри- стимости с Windows 98, но ведь на дан-
те на Red Hat: для получения прилич- ный момент актуальна Windows XP. К В последние 10 лет только и разго-
ных доходов им пришлось трудиться не тому же стоит учесть, что при каждом воров, что о Linux, некоторые люди
покладая рук несколько лет. изменении, вносимом Microsoft без уже начинают считать, что Linux яв-
предупреждения, в API и ABI вся сис- ляется единственной ОС для привер-
Каковы ваши прогнозы тенденций тема перестает работать. Мне кажет- женцев движения открытых исход-
развития коммерческих UNIX-сис- ся более перспективным создавать ников. Не кажется ли вам, что вок-
тем? стандартный ABI для Linux-приложе- руг этой ОС шумиха несколько пре-
Я думаю, что коммерческие UNIX мерт- ний, тогда их можно будет запускать увеличена?
вы. Их поддержка слишком дорого об- под какой угодно ОС. Лет 10 назад ко мне пришли люди, за-
ходится производителю. В свое время нимающиеся BSD, и спросили, почему
я работал в DEC, и ежегодно мы трати- Как вы думаете, слияние Novell, Suse я ничего не говорю об их ОС в своих
ли 2 миллиона долларов на поддержку и Ximian – это объективная необхо- выступлениях. Я ответил: «Покажите
собственного диалекта UNIX. Вдумай- димость или попытка в последний мне 5 хороших форумов о BSD или
тесь в эту цифру. Как только Linux до- момент успеть вскочить на поднож- армию поклонников этой ОС». Выбор
растает до того, чтобы работать на спе- ку набирающего ход Linux-поезда? ОС никак не связан с качеством про-
цифическом оборудовании, к примеру, Продукты, поставляемые Novell, уже дукта, в сущности, это всего лишь воп-
от HP или IBM, менеджмент начинает давно завоевали славу очень стабиль- рос правильного маркетинга. Иначе
задумываться о том, что развивать свой ных решений. В мире очень много сер- Microsoft не продал бы ни единой ко-
4
интервью
жон мэддог Холл (John Hаll) изложения концепций, он стал одной
известен как один из пионеров из наиболее ярких фигур мира ИТ.
движения Open Source. Непов- Господинн Холл начинал свою карь-
торимая харизма «Бешеного еру как программист, и впоследствии
пса» снискала ему славу среди сторон- он занимал должности специалиста по
ников и противников открытого кода по разработке систем, системного админи-
всему миру. Проведя более 30 лет в ра- стратора, руководителя отдела реали-
боте в мире ИТ, сначала с UNIX, потом зации продуктов и технического дирек-
с Linux, он объездил много стран, рас- тора в таких организациях, как Western
сказывая о преимуществах и перспек- Electric Corporation, Bell Laboratories,
тивах открытого кода. С 1995 года и Aetna Life and Casualty, Digital Equipment
по сей день он является Президентом Corporation, VA Linux Systems.
и СЕО Linux International (www.li.org) – Джон Холл известен своей любо-
некоммерческой организации постав- вью к преподаванию. Он вел несколь-
щиков ИТ-услуг, выступающих в под- ко курсов лекций в Hartford State
держку развития и продвижения ОС Technical College, Merrimack College и
Linux. Он также входит в состав прав- Daniel Webster College. Именно студен-
ления нескольких компаний и неком- ты Hartford State Technical College, где
мерческих организаций, включая он был деканом факультета Computer
USENIX Association. Перу Мэддога при- Science, дали ему никнейм «maddog»,
надлежит книга «Linux for Dummies», и которым он любит себя называть до
он является автором многочисленных сих пор. Свободное время Джон Холл
статей, посвященных специфике от- посвящает своему проекту «maddog's
крытого кода. Благодаря чувству юмо- monastery for microcomputing and
ра, приветливости и оригинальности microbrewing».
Âûñòóïëåíèå Äæîíà Õîëëà
пии своих программ. Заказчик хочет можно, такая участь постигнет и эту продукты, а на предоставляемые сер-
получить решение на основе Linux, и я компанию. С другой стороны, начать висы. Грядет время сервис-ориентиро-
считаю: неправильно пытаться застав- работать в стиле открытых исходных ванной экономики, и тот, кто начнет
лять его переходить на BSD только по- кодов им будет чрезвычайно трудно. приспосабливаться к новым условиям,
тому, что кому-то она кажется более Дело не только в том, что каждая боль- первым займет очень выгодные пози-
качественной. шая структура неповоротлива и косна, ции. На данный момент, по моему мне-
но и в том, что внутри их продуктов нию, примером сервис-ориентирован-
Что вы думаете об инициативе по встроено много закрытых технологий, ной компании можно считать IBM.
уменьшению количества разновид- лицензированных у других производи-
ностей лицензий, под которыми вы- телей. Мне кажется, что Microsoft со Андрей Бешков
пускается свободное программное временем превратится в компанию, Фото Андрея Бешкова,
Андрея Маркелова
обеспечение? ориентированную не на продаваемые
Слишком много людей не понимает
отличий разных видов лицензий, и для
своих сиюминутных нужд создают все
новые и новые варианты близнецов. С
другой стороны, я бы не хотел никого
ограничивать в свободе выбора подхо-
дящей модели лицензирования свое-
го кода. Рассмотрев разные варианты
существующих лицензий, считаю, что
GPL на данный момент лучше всего,
хотя и она не совершенна.
ЛАРРИ УОЛЛ:
«СЕГОДНЯ PERL ПРИМЕНЯЕТСЯ ДЛЯ РЕШЕНИЯ
РЯДА ПРОБЛЕМ, О КОТОРЫХ Я И НЕ ПОДОЗРЕВАЛ,
СОЗДАВАЯ ЭТОТ ЯЗЫК»
Ларри Уолл – человек, ненамеренно сделавший очень многое
для распространения UNIX-систем. Он никогда не занимался
целенаправленной рекламой UNIX, но создание языка Perl
сделало его одним из самых популярных людей
Open Source-движения. Сейчас уже, наверное, невозможно
найти технического специалиста, работающего в UNIX
и не знакомого с верблюдом, изображенным на логотипе
Perl. Благодаря гибкости и переносимости Perl вышел
далеко за рамки UNIX, сейчас его довольно часто можно
встретить под Windows и многими другими платформами.
есколько лет назад Perl пози- Я думаю, всем вышеперечисленным. За выполнялись три экземпляра одного и
ционировался как лучший последние пять лет мы увидели, что того же скрипта, компиляция выполня-
язык для разработки веб-при- людям может пригодиться самый нео- лась трижды. В новой версии будет ре-
ложений. Сейчас его заметно потес- бычный и фантастический функционал, ализовано понятие разделяемой памя-
нил PHP. Что вы думаете об этой си- о котором только можно подумать. По- ти и кэша байт-кода. Это значит, что
туации? Какова экологическая ниша этому мы стараемся сделать так, что- скрипт будет компилироваться только
Perl сейчас и для чего, по вашему бы язык позволял делать многие вещи первый раз и при запуске новых экзем-
мнению, его стоит теперь применять? прозрачнее и проще, чем раньше, но в пляров этого скрипта скомпилирован-
Perl и PHP – очень разные языки. Пер- то же время не ограничивать пользова- ный код будет браться прямо из кэша
вый является языком общего назначе- теля, давая возможность реализовы- Parrot.
ния. В целом он предназначен для раз- вать сложные вещи. В новой версии
нообразных научных применений, обра- разработчик получит еще больше мо- Хотелось бы узнать приблизитель-
ботки баз данных, всевозможных мани- гущества и сможет работать гораздо ные сроки выхода Perl 6.
пуляций с текстом, системного админи- эффективнее. Представьте себе, что Сказать точно, когда это произойдет,
стрирования, быстрой разработки про- нам нужно построчно сложить значения, я не могу, делать одновременно мно-
тотипов интернет-сервисов. Благодаря хранящиеся в двух массивах, и помес- жество вещей, к сожалению, невоз-
этим качествам некоторое время по не- тить результат в третий. Традиционно можно. Как любой Open Source-проект,
доразумению он использовался как веб- для решения этой задачи нужно было мы располагаем ограниченными сред-
язык. Второй же предназначен только бы использовать цикл с операциями ствами, соответственно не можем себе
для веб-разработки и справляется с сложения и присваивания, но в новой позволить нанимать дополнительных
этой задачей очень хорошо. Неудиви- версии все это можно будет сделать работников, приходится выбирать меж-
тельно, что в этой нише он доминиру- всего лишь одним оператором. ду скоростью разработки и качеством
ет, но я не думаю, что он будет рабо- кода. Мы думаем, что лучше выпустить
тать хорошо за ее пределами. Сейчас Будет ли шестая версия языка при чуть позже очень устойчивую альфа-
Perl применяется для решения таких всех своих улучшениях работать версию, чем быстро сделать несколь-
проблем, о которых я и не подозревал, быстрее, чем пятая? ко промежуточных неотшлифованных
создавая этот язык. К примеру, он с ус- Я думаю, да. В новой версии после релизов.
пехом применяется в генетических ис- компиляции текста в байт-код добав-
следованиях, ведь ДНК принято обозна- ляется больше служебных сведений о Планируется ли в новой версии вне-
чать как набор символов, а в удобстве типах используемых данных, ходе вы- сти изменения в синтаксис языка,
работы с символами Perl нет равных. полнения кода, это помогает оптими- чтобы сделать его более друже-
зировать выполнение программы. В то ственным к пользователю?
Во время разработки новой версии же время стоит отметить, что и код са- Этим вопросом будут заниматься дру-
Perl каким качествам продукта при- мого компилятора Perl претерпел зна- гие разработчики, единственная зада-
дается первостепенное значение? чительные изменения в лучшую сторо- ча, которую я зарезервировал для
Оптимизации, гибкости и красоте ну. Обычно для каждого запускаемого себя, – транслятор Perl 5 в Perl 6. Мне
кода или наличию наибольшего ко- скрипта производилась компиляция в как лингвисту было бы очень интерес-
личества полезных функций? байт-код, соответственно, если у нас но этим заняться, но, к сожалению, пе-
6
интервью
реработка глубинных компонентов старается быть как можно более дру- уметь вычислять выражения вроде:
языка отнимает довольно много време- жественным к другим языкам. Когда ((8 + 7) * 12 - (10 * 44/11) ) %10. Через
ни. Perl уже давно перерос размеры пользователи захотели получить воз- пару дней все было готово, ведущий
проекта, который можно обслуживать можность выполнять C-код из про- разработчик был просто в восторге от
в одиночку, поэтому многие задачи де- грамм на Perl, пришлось много потру- того, что в выражениях можно исполь-
легируются специалистам в этой обла- диться, чтобы реализовать такой фун- зовать не только стандартные арифме-
сти, которые сделают работу лучше. кционал, но я думаю, что труды были тические операции, но и расчет процен-
ненапрасны, потому что это позволит тов. Оказалось, что встроить виртуаль-
Для представления строковых дан- значительно улучшить кодовую базу ную машину интерпретатора Perl в при-
ных Perl использует кодировку многих проектов. ложение было легче, чем реализовать
Unicode, и этим выгодно отличается тот же самый функционал на языке C++.
от других языков. Так было задума- Бытует мнение, что виртуальная На быстродействие получившегося про-
но изначально или пришло само со- машина Parrot по своему дизайну дукта такой симбиоз практически не по-
бой, когда разработчики столкну- очень похожа на среду выполнения влиял, а вот время работы над прило-
лись с проблемами локализации? Microsoft .Net. Не могли бы вы про- жением существенно уменьшилось. Ко-
В момент появления Perl такого поня- комментировать это утверждение? нечно, для сообщества разработчиков
тия, как Unicode, не существовало. Я думаю что .Net по особенностям реа- дальнейшее совершенствование Perl в
Мы, как и многие другие проекты, про- лизации больше похож на Microsoft Java качестве встраиваемого языка не явля-
шли через все стадии проблем с ло- Virtual Machine со свойственной ему ста- ется высшим приоритетом, но мы все
кализацией. Хранение строковых дан- тической типизацией данных. В дизайн же стараемся сделать так, чтобы он мог
ных в Unicode появилось в версии 5.6 Parrot изначально заложена способ- применяться в максимально возможном
и работало не очень хорошо. К версии ность работать в двух режимах с дина- количестве областей.
5.8 к проекту присоединились люди, мическими типами данных и со стати-
которые наконец-то довели все это до ческими. Соответственно, пользова- Расскажите, в какой компании вы
ума. тель сможет самостоятельно добавлять сейчас работаете и, если не секрет,
данные о типе переменных, используе- чем занимаетесь?
На сайте Slashdot.org несколько лет мых в программе, и это позволит управ- Большую часть времени в течение пос-
назад появилась шутка о том, что лять тем, как будет выглядеть поведе- ледних четырех лет я официально ни у
скоро должен появиться новый язык ние языка. кого не работаю. В основном средства
Parrot, который должен будет воб- к существованию получаю за счет вы-
рать в себя лучшее из Perl и Python. Что вы думаете о применении полнения грантов от Perl Foundation, раз-
Через какое-то время была разрабо- embedded Perl в качестве встроен- рабатывая новые и улучшая существу-
тана виртуальная машина Parrot, ис- ного языка для скриптования ком- ющие подсистемы Perl 6. Плюс к этому
пользуемая для выполнения компи- понентов приложения? регулярно поступают авторские отчис-
лированного байт-кода Perl 6. Как вы В данной области Perl 5 успешно при- ления от публикации книг о Perl. В об-
думаете, сможет ли Parrot когда-ни- меняется уже довольно долго. В моей щем, можно сказать, что я не бедствую
будь компилировать и выполнять практике был случай, когда один из за- и довольно легко могу позволить себе
код, написанный на Python? казчиков для своей бухгалтерской про- путешествовать по всему миру.
Perl является самым распространен- граммы попросил меня помочь реали-
ным из скриптовых языков, сообще- зовать сложные поля редактирования. Андрей Бешков
ство людей, использующих его, огром- Программа должна была понимать и Фото автора
но. Я считаю, что мы должны старать-
ся устанавливать добрососедские от-
ношения, всесторонне сотрудничать и
поддерживать сообщества разработ-
чиков других скриптовых языков. По-
этому я всегда стремился к разработ-
ке какой-то единой платформы, кото-
рая сможет запускать не только Perl и
Python.
В свою очередь сообщество разра-
ботчиков Perl 6 решило, что неплохо
было бы поддерживать этой платфор-
мой и другие языки, такие как Ruby,
Basic, Lisp, Lua. Когда работы над Perl 6
будут окончены, я думаю, мы сможем
работать в его рамках c любым язы-
ком, использующим динамическую ти-
пизацию данных. На самом деле Perl Ëàððè Óîëë è ðåäàêòîð æóðíàëà Âàëåíòèí Ñèíèöûí
Валентин Синицын
Ó÷àñòíèêè êîíôåðåíöèè ñëóøàþò âûñòóïëåíèå Äìèòðèÿ Àðòåìîâà Фото автора
8
тенденции
10
тенденции
12
администрирование
Возможные источники сообщения перечислены в таб- чить требуемый уровень безопасности, исключив возмож-
лице 2: ность чужим хостам писать что-нибудь в ваши журналы. Ус-
Òàáëèöà 2. Èñòî÷íèêè ñîîáùåíèé тановить ограничения на входящие соединения позволяет
ключ -a (см. man syslogd). Также не последнюю роль играет
правильно настроенный брандмауэр.
Еще один полезный ключ -l позволяет задавать дополни-
тельные файлы сокетов, которые прослушиваются демоном
syslogd в дополнение к используемому по умолчанию /var/
run/log. Например, этот ключ необходим, чтобы syslog мог
обслуживать программы, запущенные в chroot-окружении.
В частности, так работает named, начиная с версии BIND 9.
Во FreeBSD 5.3 syslogd запускается со следующими клю-
чами:
Отладочные сообщения пользовательских процессов будут В данном случае сообщения mail.err попадут как в maillog,
выводиться на терминал, к которому в настоящее время так и в error.log.
подключен пользователь vasya.
Стратегия составления
user.debug vasya конфигурационного файла
Завершая рассмотрение конфигурационного файла, ска-
Все сообщения от служб новостей и электронной почты жу несколько слов о стратегиях его составления. Помимо
будут пересылаться на 514-й порт машины syslog.host.ru. очень популярной «лишь бы работало», можно выделить
две основные, которые условно назовем «по источнику» и
mail.*,news.* @syslog.host.ru «по назначению».
! Первая стратегия, которую можно наблюдать в ряде ди-
В указанный файл будут помещаться все сообщения служ- стрибутивов GNU/Linux, заключается в том, что для каж-
бы печати, уровень которых ниже warning. Как указывалось дого источника сообщений записывается свое правило
ранее, по умолчанию используется сравнение «больше или (или группа правил, если сообщения разных уровней
равно», а символ «!» его инвертирует, заменяя на «мень- должны обрабатываться по-разному). Ее достоинство –
ше». Если нужно исключить конкретный уровень, следует простота определения, куда записываются сообщения
использовать конструкцию «!=». конкретных служб.
! Стратегия «по назначению» подразумевает создание по
lpr.!warning /var/log/printers.log возможности только одной строки для каждого «полу-
чателя» сообщения, например, файла. Такого подхода
Сообщения уровня debug (и только его), имеющие facility придерживается, в частности, FreeBSD. В итоге можно
14
администрирование
легко определить, какая информация заносится в конкрет- /var/log/pflog root:wheel 600 3 100 * JB ↵
ный лог-файл, но, например, пункты назначения для сооб- /var/run/pflog.pid 1
щений ядра приходится собирать по всему конфигураци- В соответствии с этим правилом файл pflog должен пере-
онному файлу. записываться, как только его размер превысит 100 Мб (5-е
поле) независимо от времени (символ «*» в 6-м поле). Ар-
Утилита logger хивные файлы буду т иметь имена вида pflog.X.bz2
В составе системы есть утилита logger, которая позволяет (pflog.0.bz2, pflog.1.bz2 и т. д), причем X не может быть боль-
отправлять сообщения службе syslog непосредственно из ше трех (параметр 3 в 4-м поле). Флаг J указывает, что ар-
командной строки. Ее удобно использовать при тестирова- хивный файл должен упаковываться с помощью утилиты
нии правил конфигурации, а также в разрабатываемых сце- bzip2. Благодаря флагу B в архивируемый и вновь созда-
нариях для протоколирования их работы. Примеры: ваемый файлы не будут добавляться служебные сообще-
ния о ротации, поскольку файл воспринимается как двоич-
user$ logger –p user.err “Error in user program!” ный. Вновь создаваемый файл будет принадлежать пользо-
user$ logger –h syslog.host.ru “Test it”
вателю root и группе wheel (это поле можно было бы опус-
Первый пример отправит сообщение с facility user уров- тить, поскольку этот владелец устанавливается по умолча-
ня err, которое будет обработано в соответствии с файлом нию). Права доступа будут установлены в rw------- (число-
конфигурации. Вторая команда отправит сообщение на уда- вое значение 600), то есть только владелец сможет читать
ленный хост, источник и уровень по умолчанию будут уста- этот файл и писать в него. Наконец, процессу, PID которо-
новлены как user.notice. го хранится в файле /var/run/pflog.pid, будет послан сигнал
1 (HUP), чтобы он переоткрыл свой лог-файл.
Использование механизмов ротации
Рассмотренный выше механизм протоколирования не пре- /var/log/maillog 640 7 * @T00 J
дусматривает какого-либо управления log-файлами. Сооб-
щения просто помещаются в них согласно правилам, опи- Это правило указывает параметры ротации для файла
санным в конфигурационном файле. Это значит, что фай- maillog: независимо от размера (звездочка в 5-м поле), файл
лы журналов будут постоянно расти, и если ничего не пред- будет перезаписываться каждую ночь в 00:00 (в man
принимать, то рано или поздно заполнят все доступное про- newsyslog.conf формат указания времени описан достаточ-
странство соответствующего раздела. Чтобы этого избе- но подробно). Архив должен упаковываться, будут сохра-
жать, используется механизм ротации. няться последние 8 архивов (с номерами от 0 до 7 включи-
Например, как только размер файла debug.log превысит тельно), вновь созданный файл будет принадлежать пользо-
100 Мб, он переименовывается в debug.log.0 и упаковывает- вателю root (значение по умолчанию, поэтому поле владель-
ся в debug.log.0.bz2. А вместо него создается новый debug.log. ца пропущено) и иметь права доступа rw-r-----.
Далее, когда размер и нового файла достигает 100 Мб, Для просмотра упакованных log-файлов можно исполь-
debug.log.0.bz2 переименовывается в debug.log.1.bz2, и опи- зовать утилиты zcat и bzcat (для gzip и bzip2 соответствен-
санная выше процедура повторяется. Система хранит толь- но). Midnight Commander вызывает соответствующие ути-
ко определенное количество архивных файлов, удаляя наи- литы автоматически.
более старые из них. Это и есть ротация. После редактирования файла newsyslog.conf никакие
сигналы никуда посылать не требуется – конфигурация бу-
Утилита newsyslog дет перечитана при следующем вызове newsyslog.
В системе FreeBSD за ротацию отвечает утилита newsyslog, Следует заметить, что утилита newsyslog не привязана
которая по умолчанию запускается в начале каждого часа к демону syslogd. То есть она может быть использована для
демоном cron. Изменить период ротации можно, отредак- ротации любых файлов, которые в этом нуждаются. Если
тировав файл /etc/crontab. ротация включается для логов, которые приложение ведет
Указанные в приведенном выше примере параметры ро- самостоятельно (например, к логам clamd или squid), то осо-
тации (размер файла, упаковка), а также ряд других зада- бенно внимательно отнеситесь к указанию владельца и пра-
ются в конфигурационном файле /etc/newsyslog.conf. Для вам доступа. Их неправильное указание может привести к
каждого файла, нуждающегося в ротации, в нем содержится тому, что после ротации приложение, запущенное от име-
строка в общем случае из девяти полей: имя файла, владе- ни непривилегированного пользователя, не сможет осуще-
лец и группа, права доступа, наибольший номер в имени ствлять запись во вновь созданный файл.
архивных файлов, максимальный размер файла, период
ротации, дополнительные флаги, а также путь к PID-файлу Подводя итоги
приложения, которому нужно отправить сигнал после рота- Система syslog является очень мощным и эффективным ин-
ции, и номер сигнала, который должен быть послан. (От- струментом протоколирования различных событий, проис-
правка сигнала процессу может понадобиться, например, ходящих в системе. Настройки, используемые по умолчанию,
в том случае, если процесс держит log-файл все время от- достаточно сбалансированы и вполне работоспособны для
крытым; если этого не сделать, то используемый файло- большинства систем. Тем не менее понимание механизма
вый дескриптор не будет соответствовать вновь созданно- работы syslog позволит вам существенно повысить качество
му файлу.) Некоторые поля могут быть опущены. Приве- протоколирования, настроив запись журнальной информа-
дем два примера, полный и «типичный»: ции строго в соответствии со своими потребностями.
ВАЛЕНТИН СИНИЦЫН
радиционно для управления ИБП применяются штат- или /dev/usb/hid/hiddev/x для устройств, управляющихся че-
ные утилиты, разработанные производителем обору- рез USB1. Драйвер ИБП инкапсулирует в себе протокол, ко-
дования. Зачастую они доступны не только для торый поддерживает UPS и напрямую используется край-
Windows, но и для UNIX, Linux и других систем. Хотя эти ин- не редко. Его основная задача – привести данные, полу-
струменты можно назвать кроссплатформенными в фор- ченные от ИБП в стандартный формат и передать их демо-
мальном смысле этого слова, нередко они несут на себе «от- ну upsd через сокет UNIX, расположенный в каталоге statedir
печаток» той ОС, для которой были созданы изначально. Как (см. ниже) для последующей обработки. Сам upsd не пред-
правило, это программы с графическим пользовательским принимает никаких активных действий, но выполняет роль
интерфейсом, что делает их малопригодными для запуска в диспетчера сообщений, транслирующего все необходимые
режиме демона, к которому привыкли администраторы UNIX. сведения по запросу многочисленных клиентов, которые мо-
Более того, и сама графическая среда X Window устанавли- гут быть установлены как в локальной, так и на удаленной
вается на сервер далеко не всегда. Об очевидных пробле- системе. Именно upsd поддерживает списки контроля дос-
мах совместимости (производитель может не предоставлять тупа (ACL) и определяет, кто сможет наблюдать за выде-
ни пакеты для вашего любимого дистрибутива, ни исходные ленным ИБП, а кто – нет.
тексты для самостоятельной сборки) не стоит и говорить. Вы- Клиенты – самое высокоуровневое приложение в номен-
ходом из сложившейся ситуации может стать использова- клатуре NUT. Среди них есть непрерывно наблюдающие
ние открытых решений, об одном из которых – Network UPS за «здоровьем» ИБП (upsmon), обеспечивающие доступ к
Tools (NUT) версии 2.0 – мы и поговорим подробнее. считыванию и изменению параметров UPS через интерфейс
Что подразумевает собой понятие «настройка ИБП»? В командной строки (upsc/upscmd) или через Web (upstats/
первую очередь, это обеспечение корректного останова ОС upset), планировщики (upssched) и даже графические ути-
при истощении аккумуляторных батарей и последующий ав- литы: KNutClient (http://www.alo.cz/knutclient), WMNut (http://
томатический запуск компьютера после восстановления wmnut.mgeups.org»).
электропитания. Во-вторых, это наблюдение за такими па- Таким образом, для настройки ИБП необходимо выб-
раметрами состояния ИБП, как режим работы («от сети» рать соответствующий драйвер (NUT 2.0 поддерживает из-
или «от батарей»), степень разряда АКБ, входное и выход- делия около 25 различных производителей, в том числе
ное напряжение, температура, а также мощность нагрузки. APC, Powercom, MGE, Ippon, и др.), назначить списки конт-
В последнем случае фатальными могут оказаться как слиш- роля доступа для upsd и подготовить один или более кли-
ком большие, так и слишком маленькие значения, о чем ентов. Обязательным минимумом является upsmon, кото-
будет сказано чуть позже. рый и будет останавливать систему в случае разряда бата-
Прежде чем переходить к использованию NUT, давайте рей. Рекомендуется также обеспечить средства для мони-
вкратце рассмотрим его внутреннее устройство. торинга параметров ИБП: upsc, upstat/upset и т. д.
Однако прежде чем произвести упомянутые выше дей-
Мониторинг ИБП изнутри ствия, NUT необходимо установить в вашу систему. Наи-
В терминологии NUT программный код, отвечающий за не- более общим способом является сборка из исходных тек-
посредственное взаимодействие с оборудованием, называ- стов, и поэтому мы поговорим о ней подробнее.
ется «драйвер ИБП» (UPS driver). Следует, однако, понимать,
что этот драйвер существенно отличается от драйверов тра- Собираем собственную версию NUT
диционных устройств: сетевых и звуковых карт, клавиатур, Прежде чем браться за компиляцию NUT, проверьте, суще-
«мышей» и т. п. Последние выполняются в режиме ядра и ствует ли для вашей системы готовый пакет (http://eu1.
используют его API для передачи сообщений приложениям. networkupstools.org/packages.html). Если таковой имеется,
В свою очередь драйвер ИБП – обычная программа, имею- убедитесь, что в него включен драйвер для вашей модели
щая интерфейс командной строки и периодически запраши- ИБП (учтите, что один драйвер может поддерживать не-
вающая характеристики ИБП через соответствующее уст- сколько различных устройств). Если нужный драйвер от-
ройство в файловой системе. Например, /dev/ttySx для UPS, сутствует, вам все же придется произвести самостоятель-
подключенного к последовательному порту в системе Linux ную сборку, но вы сможете использовать spec-файлы RPM,
1
NUT поддерживает как ИБП, подключающиеся к последовательному порту, так и более новые USB HID UPS и даже SNMP UPS (RFC 1628).
В последних двух случаях соответствующие драйвера (hidups, newhidups и snmp-ups) пока что имеют статус экспериментальных.
16
администрирование
build-сценарии и прочие подобные вещи, чтобы не нарушить манду «make install-conf», то сейчас сможете воспользовать-
пакетную базу данных вашего дистрибутива. ся шаблонами, сохраненными в файлах *.sample.
Загрузите архив nut-2.0.x.tar.gz с сайта http://www.net- Первый файл, в который вам предстоит внести измене-
workupstools.org и распакуйте его в любой подходящий ка- ния, называется ups.conf. Он определяет все параметры под-
талог. NUT использует стандартную среду autoconf/automake, ключенных к вашему компьютеру ИБП, а также задает неко-
и его сборка может быть выполнена привычной последова- торые глобальные опции, например, учетную запись, от име-
тельностью команд: ни которой будут выполняться драйверы (директива user) и
интервал опроса оборудования (директива pollinterval).
# ./configure <ïàðàìåòðû> && make && make install
Ëèñòèíã 1. Ïðèìåð ôàéëà ups.conf
Среди полезных параметров сценария configure назовем: user = nut
! --prefix – задает общий «корень» для всего дерева ди-
[ups0]
ректорий NUT. Значением по умолчанию является /usr/ driver = ippon
local/ups, но вы можете выбрать другой путь, например, port = /dev/ttyS0
desc = "Server UPS"
/usr/local или /usr, чтобы установить NUT в общесистем-
ные каталоги (исполняемые файлы – в /usr/bin вместо Данный файл определяет один источник бесперебойно-
/usr/local/ups/bin и т. д.). го питания, имеющий имя «ups0» и подключенный к перво-
! --with-statepath – задает каталог для хранения сокетов му последовательному порту (/dev/ttyS0). Поле «desc» явля-
UNIX, создаваемых драйверами и другой информации ется необязательным и задает текстовую строку-описание
о состоянии. Значение по умолчанию – /var/state/ups. для ИБП. Поле «driver» определяет название драйвера, ко-
Пользователь, от имени которого работает NUT (см. торый будет использоваться для связи с UPS. В данном слу-
ниже), должен иметь право чтения/записи на эту дирек- чае используется ippon, универсальный драйвер для всех
торию. ИБП одноименного производителя. Поля «driver» и «port»
! --with-port – указывает TCP-порт, используемый, в част- должны присутствовать в каждой секции файла ups.conf.
ности, демоном upsd для приема входящих соединений. Руководство пользователя NUT также рекомендует удосто-
По умолчанию NUT 2.0 использует порт 3493, а более вериться, что файл устройства (в нашем примере /dev/ttyS0)
ранние (несовместимые) версии – 3305. не доступен ни для кого, кроме пользователя «nut». После
! --with-user – задает пользователя, от имени которого бу- того как файл ups.conf создан, вы можете проверить его кор-
дут выполняться демоны NUT. Значение по умолчанию – ректность, загрузив драйвер ИБП. Для этого используется
nobody. При желании вы (или разработчики дистрибу- утилита upsdrvctl, расположенная в каталоге <prefix>/bin.
тива) можете создать для NUT специальную учетную за-
пись и группу, например, nut:nut. # upsdrvctl start
! --with-drivers – здесь указывается список драйверов ИБП,
подлежащих сборке. В подавляющем большинстве слу- Если все пойдет гладко, утилита отрапортует об успеш-
чаев необходимо выбрать лишь один из них. ном обнаружении ИБП и перейдет в фоновый режим. В про-
тивном случае будет выдано сообщение об ошибке. Проверь-
Более подробную информацию можно найти в файле те, правильно ли заполнены поля driver и port, а также удос-
docs/configure.txt в архиве с исходными текстами NUT. Пос- товерьтесь, что выбранный вами драйвер не требует указа-
ле выполнения configure наберите «make» и «make install» ния дополнительных параметров. Если таковые имеются, до-
(от имени root), чтобы завершить сборку и установку. Для бавьте их в соответствующую секцию ups.conf. Другой рас-
создания шаблонов конфигурационных файлов используй- пространенной проблемой является невозможность созда-
те «make install-conf». Помимо этого, не забудьте создать ния файлов в каталоге statepath при работе от имени пользо-
каталог для хранения сокетов (statepath) и назначить ему вателя, указанного директивой «user» в файле ups.conf (или
необходимые права доступа (0700, владелец nut:nut, где параметром --with-user сценария configure, если таковая от-
«nut» – пользователь, от имени которого будут выполнять- сутствует). Теперь, когда в вашей системе имеется новый
ся демоны). Подробности ищите в файле INSTALL, вклю- фоновый процесс, собирающий информацию о состоянии
ченном в стандартный комплект поставки. ИБП, настало время подумать и о том, как эту информацию
получать. В первую очередь необходимо настроить демон
Запускаем NUT upsd, поскольку, как мы помним, именно он отвечает за пе-
В данном разделе мы рассмотрим настройку NUT в самом редачу этих данных приложениям-клиентам.
простом случае, когда имеется один ИБП, подключенный к Конфигурация upsd сводится к построению списков кон-
одному компьютеру. В принципе NUT способен поддержи- троля доступа (ACL), которые сохраняются в файле <prefix>/
вать и более сложные системы, когда один UPS контроли- upsd.conf.
рует несколько машин. В такой ситуации компьютер, к ко-
торому подключен ИБП, является главным (master) и отве- Ëèñòèíã 2. Ïðèìåð ôàéëà upsd.conf
чает за своевременное оповещение и выключение подчи- ACL local 127.0.0.1/32
ненных (slave) систем. ACL all 0.0.0.0/0
Конфигурационные файлы NUT хранятся в каталоге ACCEPT local
<prefix>/etc. Если на предыдущем этапе вы выполнили ко- REJECT all
2
Обратите внимание, что для некоторых драйверов эта важная характеристика не предоставляется оборудованием, а вычисляется на
основании других параметров. Используйте ее только в оценочных целях.
18
администрирование
Аппаратные аспекты
Непосредственное подключение UPS к системному блоку, что здесь опасна как перегрузка, так и «недогрузка». С пер-
как правило, не вызывает затруднений и подробно описы- вой из них все понятно: подключение к ИБП лазерного прин-
вается в документации к оборудованию. Проблема состоит тера, утюга или электрочайника приведет к срабатыванию
в другом: как настроить компьютер таким образом, чтобы предохранителя и немедленному отключению потребите-
он не только корректно выключался, но и автоматически лей тока. Никакого сигнала «battery low» в данном случае
включался? сгенерировано не будет, так что upsmon, upsd и прочие ока-
С точки зрения компьютера (не операционной системы!), жутся бесполезными.
истощение батарей ИБП есть сбой электропитания (UPS Как это ни удивительно, «недогрузка» зачастую грозит
просто перестает генерировать выходное напряжение, как теми же последствиями. В некоторые ИБП встраивается так
только процент разрядки превысит некоторый критический называемая «зеленая функция» (green function), предотвра-
порог). Современные версии BIOS позволяют настроить щающая работу на холостом ходу при малой внешней на-
реакцию системы на события такого рода. Соответствую- грузке. Опыт показывает, что ИБП Ippon Back Power Pro 400
щая опция обычно называется «After power fail» или подоб- не замечает «народный сервер» Celeron-600/256 RAM/HDD
ным образом и может быть найдена в самых различных без монитора. Симптомы, свидетельствующие о срабаты-
подменю. Заводская установка – «Off» означает «требует- вании «зеленой функции», таковы: слишком малое время
ся ручное включение». Измените ее на «On», и тогда ком- работы от аккумулятора (5-10 минут), несмотря на то, что
пьютер будет автоматически включаться при появлении на- подключенный к ИБП компьютер имеет небольшую мощ-
пряжения на входных клеммах блока питания. Поскольку ность; некорректный останов ОС при условии наличия пра-
ИБП, переходя в режим работы «от сети», сразу же подает вильно настроенной системы слежения (NUT или подобной).
ток на все обслуживаемые устройства, от администратора Для устранения «неполадки» можно обратиться в сервис-
больше не требуется никаких настроек. ный центр или же решить проблему с другого конца – по-
Другим важным аспектом является мощность нагрузки. высить общую мощность, например, подключив к компью-
Памятуя поговорку «все крайности плохи», можно сказать, теру дополнительные жесткие диски.
цесс, работающий с привилегиями суперпользователя. Уг- несмотря на то, что батареи ИБП истощены), мы подо-
роза для безопасности системы здесь невелика, поскольку зреваем «энергетическую гонку» и принудительно пе-
сетевое взаимодействие и прочая активность upsmon про- резагружаем систему.
исходит в другом процессе. При возникновении критичес-
кой ситуации непривилегированный процесс-потомок сооб- Для проверки флага лучше использовать не стандарт-
щает об этом «дремлющему» родителю, который и выпол- ные средства bash (оператор -f), а специальный параметр
няет команду SHUTDOWNCMD. командной строки утилиты upsmon, -K. В данном случае код
Директива MONITOR задает ИБП, за которым будет завершения upsmon будет равен EXIT_SUCCESS (0), если
наблюдать upsmon (в нашем примере – ups0@localhost) и флаг присутствует и EXIT_FAILURE в противном случае. Это
реквизиты пользователя. Поскольку последние содержат- обеспечивает более надежное функционирование сценария.
ся в файле upsmon.conf в открытом виде, необходимо сно-
ва позаботиться об ограничении доступа (см. выше). Ëèñòèíã 5. rc-ñöåíàðèé, îáåñïå÷èâàþùèé çàùèòó îò power race
«Энергетической гонкой» называется ситуация, когда /usr/local/ups/sbin/upsmon -K >/dev/null 2>&1
ИБП переходит в режим работы от сети вскоре после гене- if [ $? = 0 ]; then
KILLPOWER=1
рации сигнала «battery low», в процессе останова системы. else
В этом случае компьютер, настроенный на автоматическое KILLPOWER=0
fi
включение после сбоя электропитания (см. раздел «Аппа- # ...ðàçìîíòèðîâàíèå ÔÑ, îñòàíîâ äåìîíîâ
ратные аспекты») окажется заложником собственной «ос- if [ $KILLPOWER = 1 ]; then
echo "Swithching UPS off, please wait"
торожности», ведь фактически никакого сбоя не произой- /usr/local/ups/bin/upsdrvctl shutdown
дет! Мне приходилось слышать, что некоторые модели UPS sleep 120
разрешают данную проблему автоматически, однако, «во # Power-race workaround
избежание» предлагаю вам использовать следующий ме- echo “Hmm... Still alive?!”
reboot -d -f -i
ханизм, обеспечивающий корректную работу системы даже fi
в случае «глупого» ИБП (см. листинг 5):
! В начале своего выполнения rc-сценарий, отвечающий В рамках одной статьи сложно осветить все возможно-
за останов системы (/etc/rc.d/halt, rc.halt и т. п.) прове- сти такого богатого инструмента, как NUT. «За бортом» ос-
ряет наличие флага POWERDOWNFLAG. тались и веб-приложения, и поддержка SSL, и многие дру-
! Если флаг присутствует, сценарий выполняет все дей- гие вопросы. Однако, я надеюсь, изложенных здесь сведе-
ствия, необходимые для корректного завершения рабо- ний будет достаточно, чтобы понять, нужен ли вам NUT, по-
ты (выгружает демоны, размонтирует файловые систе- лучить представление о его архитектуре и базовые навыки
мы и т. п.), после чего засыпает на непродолжительное конфигурирования. За более подробной информацией вы
время, например на 2-3 минуты. всегда сможете обратиться к страницам руководства и спра-
! Если по истечении этого времени rc-сценарию верну- вочной документации, распространяющимися вместе с ис-
лось управление (т.е. компьютер остался включенным, ходными текстами NUT. Успехов!
Еще не так давно сети с коммутацией каналов (телефонные сети) и сети с коммутацией
пакетов (IP-сети передачи данных) существовали практически независимо друг от друга
и использовались для различных целей. Телефонные сети использовались для передачи
голосовой информации, а IP-сети – для передачи данных. Определенной вехой в истории
телекоммуникаций и Интернета является IP-телефония, позволившая передавать «голос»
поверх получивших уже значительное распространение IP-сетей. IP-телефония дала
возможность общения не только пользователям Интернета. С помощью специальных
устройств – шлюзов (gateway) она также объединила телефонные сети и сети передачи данных.
МИХАИЛ ПЛАТОВ
20
администрирование
Пять причин использовать IP-телефонию Данное направление систем IP-телефонии очень хоро-
С помощью IP-телефонии вы сможете: шо развито производителями оборудования. Наиболее
1. Сократить расходы на междугородные и междуна- известными поставщиками являются такие компании
родные переговоры. Один из наиболее распространен- как, Cisco Systems, Avaya, Nortel Networks.
ных вариантов использования IP-телефонии. Связь че- 3. Получить дополнительные возможности, не свой-
рез IP получается дешевле по ряду причин. Во-первых, ственные обычным телефонным сетям: сlick2Dial –
в IP-телефонии используются широко распространен- возможность совершить звонок (например, менеджеру
ные (и дешевые) сети с коммутацией пакетов1 (в отли- продаж или в службу тех. поддержки) прямо с веб-сайта
чие от более дорогостоящих сетей с коммутацией кана- компании, голосовые авто-информаторы на основе IVR
лов, применяемых в традиционной телефонии). Во-вто- (Interactive Voice Response), аудио- и видеоконференций,
рых, благодаря использованию голосовых кодеков (во- голосовую почту и историю пропущенных звонков через
кодеров, voice coders) достигается существенное сжа- web, определение присутствия абонента в сети и т. д.
тие речевой информации. Так, при передаче голосово- 4. Обеспечить «дешевую связь» в пределах зон Wi-Fi.
го потока в системах цифровой телефонии2 требуется Пользователь, находящийся в пределах беспроводной
канал 64 кБит/с (ISDN). В системах IP-телефонии, при точки доступа 802.11 может применять VOIP (вместо
использовании наиболее популярных на сегодняшний сотовой связи)5.
день кодеков, требуется гораздо меньшая пропускная 5. Организовать сеансы аудиосвязи или связи типа точ-
способность (6-13 кБит/с). ка-точка через Интернет. Используя стандартное обо-
Можно выделить два наиболее популярных варианта рудование IP-телефонии, можно организовать сеанс
подключения к провайдерам междугородной и между- связи между пользователями Интернет (например, c ис-
народной телефонии: пользованием Microsoft NetMeeting) или соединить не-
! Через ТФОП (Телефонная сеть Общего Пользова- сколько географически отдаленных филиалов.
ния) – при подключении пользователь набирает «го-
родской» номер сервера IP-телефонии провайдера, Протоколы IP-телефонии
проходит аутентификацию (по pin-коду) и набирает На данный момент существует несколько стандартизован-
нужный ему номер. Чтобы пользоваться IP-телефо- ных протоколов, на базе которых строятся системы IP-те-
нией по этой схеме, достаточно иметь обычный го- лефонии. Рассмотрим некоторые из них более подробно.
родской номер.
! С помощью специальных «шлюзов» – в этом случае Протокол H.323
пользователь приобретает специальное устройство – Автором данного стандарта является организация ITU-T
шлюз IP-телефонии, с помощью которого получает (International Telecommunication Union). Существует несколь-
возможность совершать звонки без использования ко версий стандарта H323. Первая была выпущена в 1996
ТФОП (через интернет-канал, предоставляемый про- году. Последующие являются эволюционным развитием
вайдером). В место шлюзов также можно применять (большая гибкость, масштабируемость и надежность). Пос-
программные (в том числе и бесплатные) и аппарат- ледняя на данный момент версия 4 появилась в 2000 году.
ные IP-телефоны. На данный момент протокол H.323 является стандартом де-
2. Построить корпоративную телефонную сеть. В дан- факто для междугородной и международной телефонии.
ном случае для ведения телефонных разговоров в рам- Если вы захотите воспользоваться предложением одного из
ках предприятия используется внутренняя IP-сеть3. Од- транснациональных операторов IP-телефонии, то придется
нако в минимальном варианте такие системы использу- обратить внимание именно на H.323. Стандарт определяет
ются достаточно редко4 и как правило, корпоративные си- базовую архитектуру сети передачи мультимедиаданных:
стемы IP-телефонии также решают следующие задачи:
! обеспечение «мобильности» внутренних пользова-
телей;
! организация связи между географически отдален-
ными филиалами;
! объединение телефонной емкости филиалов в еди-
ный номерной план;
! организация аудио- и видеоконференций;
! построение центров обработки вызовов (call-центров). Ðèñóíîê 1. Âîçìîæíàÿ ñòðóêòóðà H323-ñåòè
1
Необходимо отметить, что, хотя в сетях IP-телефонии для передачи голоса и используется IP-сеть, она не является IP-сетью в обычном
понимании. Так, в голосовых IP-сетях особое внимание уделяется обеспечению гарантированного качества обслуживания QoS (DiffServ,
IntServ, MPLS), хотя это вовсе не означает, что в IP-сетях без QoS IP-телефония не будет работать.
2
Которые в виду своей стоимости так и не «ушли в массы».
3
Вариант может быть особенно интересен предприятиям, еще не имеющим коммуникационной инфраструктуры, т.к. при использовании IP-
телефонии можно полностью отказаться от прокладки «двойной проводки».
4
Все-таки основным преимуществом корпоративных сетей является функциональность, а не стоимость.
5
Инсталляции, работающие по такому принципу, существуют в некоторых западных образовательных учреждениях.
6
Для сетей сетей H323 наличие «привратника» не является обязательным. В этом случае H323-устройства работают в режиме Peer to Peer
и самостоятельно разрешают имена в IP-адреса.
7
Устройство управления конференциями.
8
Real-Time Protocol – для передачи «голоса».
9
Session Description Protocol – для описания параметров сессии.
10
Multiparty Multimedia Session Control.
22
администрирование
SIP также очень похожи на стандартные коды протокола шения. Могут использоваться для более интеллектуаль-
HTTP. В случае удачного ответа клиенту посылается код ной маршрутизации (перенаправление вызовов, голо-
200, адрес не найден (404), ошибка авторизации (403) и др. совая почта, дополнительная обработка вызовов и т. д.),
Клиенты SIP-сети идентифицируются по универсальным могут самостоятельно повторно пересылать пакеты (в
идентификаторам SIP-URI, внешне похожим на адреса элек- случае если они были потеряны при передаче). Платой
тронной почты: sip:platov@cs.vsu.ru. Таким образом, имя за дополнительные возможности является более слож-
клиента SIP состоит из персональной части (до знака @), ная реализация и большие требования в вычислитель-
идентифицирующей пользователя, и доменной части (пос- ной мощности сервера (из-за необходимости хранить
ле @), определяющей, например, организацию. В качестве информацию о каждой SIP-сессии). Наиболее популяр-
доменной части возможно использование DNS-имени. ным Open Source stateful прокси-сервером, работающим
Протокол SIP выделяет следующие типы объектов сети: по протоколу SIP, является Asterisk – The Open Source
! Агенты. Linux PBX13.
! Серверы регистрации.
! Серверы перенаправления.
! Прокси-серверы.
Агенты
Под агентами подразумеваются конечные устройства поль-
зователя (телефоны, программные телефоны, мобильные Ðèñóíîê 3. Òèïè÷íàÿ ñõåìà èñïîëüçîâàíèÿ SIP-ïðîêñè-ñåðâåðà
телефоны, наладонные компьютеры, шлюзы в ТФОП, сис- Если пользователь A1@a.com захочет позвонить пользо-
темы голосовых меню и т. д.) вателю B1@b.com, то он передаст запрос INVITE B1 свое-
В составе агентов выделяются две логические состав- му прокси-серверу, который перенаправит вызов прокси-
ляющие: серверу b.com абонента B1.
! агент-клиент (UAC – user agent client) – посылает запро-
сы и получает ответы; Сервер регистрации (REGISTRAR)
! агент-сервер (UAS – user agent server) – принимает зап- Перед работой в сети каждое устройство должно зарегист-
росы и посылает ответы. рироваться с помощью специального сообщения REGISTER.
При этом клиент сообщает серверу свое имя в формате:
IP-адрес, номер порта, SIP-URI и пароль доступа. В случае
успешной регистрации информация о клиенте заносится в
специальную базу данных (используется в дальнейшем для
нахождения клиента) и клиенту высылается сообщение:
«200 OK». С определенной периодичностью этот процесс
повторяется, таким образом обеспечивается «актуальность»
данных о клиентах. Как правило, серверы REGISTRAR со-
вмещаются с прокси-серверами. PBX Asterisk, рассмотре-
нию которого будет посвящена отдельная статья, в этом от-
Ðèñóíîê 2. Âçàèìîäåéñòâèå UAC è UAS ношении не является исключением и может выполнять как
Ввиду того, что большинству устройств необходимо как функции прокси-сервера, так и сервера регистрации.
передавать, так и принимать данные, в реальных устрой-
ствах присутствует как UAC, так и UAS11. SCCP (Skinny Client Control Protocol)
Данный протокол является корпоративным. Он разработан
Прокси-серверы компанией Cisco Systems для организации работы IP-теле-
Являются неотъемлемой частью SIP-сети, отвечают за мар- фонов Cisco под управлением ПО Cisco Call Manager, явля-
шрутизацию сообщений, а также аутентификацию и авто- ющегося в том числе и шлюзом в сети H.323. Идея подхо-
ризацию пользователей. В стандарте определяется два типа да, лежащего в основе разработки протокола SCCP, зак-
SIP-прокси-серверов: лючалась в переносе логики обработки H.323 соединений
! Без учета состояния (stateless). Такие серверы не от- из конечных устройств в ПО Cisco Call Manager. Таким об-
слеживают состояния SIP-сессий и передают сообще- разом, существенно упрощалась (и удешевлялась) реали-
ния, используя внутренние правила маршрутизации. Их зация конечного устройства клиента.
основное применение – распределение нагрузки и мар-
шрутизация. Open Source-примером stateless SIP-про- Как оценить качество систем
кси-сервера является SER12 (SIP Express Router). IP-телефонии
! С учетом состояния (stateful). Отслеживают состояние Существуют различные методики оценки качества систем
каждой SIP-сессии от момента ее создания до завер- IP-телефонии. Наиболее известные из них MOS (Mean
11
Более детально к вопросу о UAC и UAS мы вернемся при рассмотрении тестовых утилит для SIP.
12
http://www.iptel.org.
13
http://www.asterisk.org.
14
На практике MOS редко превышает 4.5.
15
Чем больше размер пакета, тем сильнее скажется его пропажа на восстановленном голосе.
16
Различные алгоритмы обладают разной степенью устойчивости к пропаже пакетов (при восстановлении используется информация «со-
седних» кадров).
17
Эти данные также подтверждаются оценкой MOS.
24
администрирование
значительной частью устройств IP-телефонии. При ком- таким интерфейсом могут подключаться обычные те-
мерческом использовании требуется лицензия. лефонные аппараты, факсы и другие абонентские уст-
! GSM (RPE-LTP) – голосовой кодек, разработанный для ройства. Фактически, интерфейс FXS это то, что прихо-
использования в системах сотовой связи стандарта дит к нам по телефонному кабелю от городской или
GSM. При кодировании кадра используется информа- мини-АТС. В задачу устройств, реализующих этот ин-
ция предыдущего кадра, кодирование осуществляется терфейс, входят: генерация сигнала готовности АТС (гу-
блоками по 20 мс со скоростью 13 кбит/с. Поддержива- док в линии), сигналов вызова абонента и т. д.
ется производителями оборудования, в основном в шлю- ! FXO (Foreign eXchange Office) – аналоговый интерфейс
зах между сотовыми и VoIP-сетями. абонентских устройств телефонных станций. Устройства
! iLBC (Internet low bitrate codec) – открытый (не требу- с таким интерфейсом подключаются к интерфейсу FXS.
ются лицензионные отчисления) голосовой кодек. Пред- Так те же самые факсовые аппараты, телефоны, моде-
назначен для кодирования с потоком 13.33 кбит/сек (при мы реализуют интерфейс FXO. Существует такое про-
размере кадра 30 мс) и 15.20 кбит/сек (при размере кад- стое правило – если есть провод, соединяющий два ана-
ра 20 мс). По субъективным оценкам экспертов, каче- логовых устройства телефонии, то с одной стороны это-
ство речи данного кодека превышает G.729A. Кроме го провода должен быть FXS (АТС), а с другой – FXO
того, кодек более устойчив (по сравнению с g729) к по- (телефон). Таким образом, шлюзы с интерфейсом FXO
тере кадров, что позволяет эффективно использовать подключаются вместо телефона. С их помощью можно
его при организации сеансов связи через сеть Интер- организовать связь с ТФОП или предоставить доступ к
нет. Примером этому является популярная сеть IP-те- IP-телефонии, используя «внутренние» (более дешевые)
лефонии – Skype18. Поддерживается ограниченным чис- линии мини-АТС. Так как шлюзы FXO фактически «эму-
лом производителей оборудования. лирует телефон», зачастую для них бывает необходи-
ма настройка «отбоя». Для того чтобы шлюз «клал труб-
Сравнительные характеристики кодеков приводятся в ку», нужно научить его понимать сигнал «занято» той
таблице: мини-АТС, к которой он подключен.
Òàáëèöà. Îñíîâíûå ïàðàìåòðû êîäåêîâ IP-òåëåôîíèè
18
Бесплатная для звонков компьютер-компьютер.
19
Некоторые кодеки поддерживают несколько размеров пакетов.
20
При передаче через Ethernet к пакет «обрастает» различными заголовками (MAC, IP, RTP). В даной колонке приводится суммарная про-
пускная способность (без сжатия заголовков RTP, удаления пауз и потерь при передаче). В таблице приводятся данные для одного госо-
лового канала, в то время как при сеансе их обычно 2 (прямой и обратный).
21
Кроме Е1 (2 Мбит) также существуют Е2 (4 канала E1 или 8 Мбит), Е3 (4 Е2 или 34М бит), Е4 (4 Е1 или 139 Мбит), Е5 (4 Е4 или 565 Мбит).
В Северной Америке используется очень схожая иерархия каналов T1, Т2 и т. д., отличающаяся количеством каналов (Т1 – 24 канала по 64
кБит) и, соответственно, пропускной способностью (Т1 – 1,5 Мбит).
РОМАН МАРКОВ
Выбираем способ доставки актуально (низкая исходящая скорость канала, высокая сто-
исходящей почты имость исходящего трафика). Дело в том, что MDaemon, яв-
В меню «Setup → Primary Domain», закладка «Delivery», ука- ляясь полноценным почтовым сервером, имеет возможность
зывается способ отправки писем нашим почтовым серве- прямой отправки писем адресатам по протоколу SMTP. Этот
ром во внешний мир. процесс абсолютно стандартен, однако иногда становится
«Always send every outbound email to the server specified непонятным для начинающих администраторов, которые кон-
below» – всегда отправлять исходящие сообщения на сер- фигурируют почтовый сервер впервые. При использовании
вер, указанный в поле «Mail server». Данную опцию предпоч- SMTP-сервера провайдера происходит отсылка одной копии
тительно использовать при большом количестве адресатов письма, независимо от количества указанных в нем получа-
в исходящих сообщениях и слабых ресурсах почтового сер- телей, а доставкой конечным адресатам занимается уже
вера, а также для экономии исходящего трафика, если это именно сервер провайдера, поэтому этот процесс обычно
26
администрирование
скрыт от конечных пользователей. В случае прямой отправ- нию выберите опцию «Click here to configure how undeliverable
ки писем сервером MDaemon, каждая копия письма для ука- mail is handled».
занных получателей отправляется отдельно, так как достав-
ляется прямо на почтовый сервер адресата (согласно полу- Настраиваем интегрированный
ченной от DNS-сервера MX-записи для домена получателя). антивирус
Поэтому исходящий трафик от одного письма для 50 адре- Устанавливаем интегрируемый в MDaemon антивирус. Ска-
сатов, отправленного через сервер провайдера, будет ра- чиваем дистрибутив оттуда же, откуда загружали сам
вен размеру этого письма, а при прямой доставке на серве- MDaemon (http://www.altn.com/download) и запускаем файл.
ра получателей – 50-кратному размеру этого письма. Поэто- В окне мастера выбираем язык, а также путь установки.
му если вы осуществляете рассылки больших объемов ин- Можно, например, создать папку антивируса внутри самой
формации для своих подписчиков (например, ежедневные папки MDaemon. Инсталлятор автоматически останавлива-
прайс-листы), а исходящая скорость канала мала, или вы ет почтовый сервер, копирует нужные файлы и предлагает
оплачиваете исходящий трафик, опция «Always send every перезапустить MDaemon уже с интегрированным антиви-
outbound email to the server specified below» будет для вас русом. Соглашаемся с предложением мастера и после за-
оптимальным решением. Минусом этого метода является пуска сервера регистрируем наш антивирусный продукт.
отсутствие возможности проанализировать протокол достав- Его регистрация не требует дополнительной активации и
ки сообщения с конечным сервером получателя, так как наш осуществляется вводом серийного номера. Меню «Help →
почтовый сервер будет записывать только протокол обмена About MDaemon → Antivirus». Вводим в данной закладке вы-
с SMTP-сервером провайдера. данный нам при покупке серийный номер и перезагружаем
В поле «Mail server» указывается SMTP-сервер вашего почтовый сервер («Пуск → MDaemon → Stop MDaemon →
провайдера (или любой другой сервер, позволяющий осу- Start MDaemon»). После установки антивирус может запус-
ществлять ретрансляцию почты). Если данный сервер тре- тить процедуру автоматического обновления. Если в этот
бует аутентификации пользователя при отправке, укажите момент ваш компьютер имеет подключение к Интернету,
учетные данные для аутентификации в поле «Access to the то новые базы будут автоматически установлены.
above mail server requires a log in». Если SMTP-сервер про- Сразу же настроим параметры антивируса: период про-
вайдера предъявляет требование проверить существующий верки обновлений, режим сканирования, действия при об-
POP3-ящик для доступа к отправке почты, укажите пара- наружении вируса или запрещенного вложения. Меню
метры этого ящика, кликнув по опции «Access to the above «Security → Antivirus». На основной закладке («Antivirus»)
mail server requires a POP mailbox check». выбираем «Enable Antivirus scanner». Если необходимо,
«Try direct delivery but send problem emails to the server здесь же можно задать отправителей/получателей, письма
specified below» – наиболее предпочтительный способ дос- которых сканироваться не будут. В секции «Scanner
тавки ваших писем, если предыдущие замечания не повли- Configuration» настраиваются действия, которые будут пред-
яют на экономические и качественные показатели почто- приниматься к инфицированным письмам.
вой системы. То есть если исходящая скорость канала ве- Наиболее универсальное решение – попытаться выле-
лика, а исходящий трафик бесплатен (дешев). При выборе чить зараженное вложение, а при неудаче – удалить его
данного способа доставки почтовый сервер будет пытать- («Clean the infected attachment»). Можно помещать заражен-
ся отправить почту напрямую каждому адресату, исполь- ные вложения в карантин, сразу удалять их, а также полнос-
зуя данные его MX-записи, а в случае неудачи (например, тью удалять содержащие их письма. Опция «Quarantine
отсекание почты от отправителя, IP-адрес которого не имеет messages that cannot be scanned» перемещает в карантин те
обратной DNS-записи, соответствующей его почтовому сообщения, которые не получилось проверить. В противном
домену) – на указанный в поле «Mail-Server» хост. Преиму- случае такие вложения отрезаются. Здесь же можно отре-
щества способа заключаются в возможности анализа фай- дактировать сообщение, которое будет посылаться в каче-
лов протоколов обмена при прямой доставке писем для стве оповещения об обнаружении вируса. Рекомендуем до-
локализации проблемы на основе этих данных. бавить в сообщение по умолчанию (на английском языке)
«Always send all outbound email directly to the recipient’s несколько русских фраз в стиле: «В данном сообщении со-
mail server» – данная опция указывает, что MDaemon дол- держался вирус, который был удален. Нет причины для бес-
жен всегда доставлять письма только напрямую, не исполь- покойства – ваш компьютер защищен». В противном случае
зуя сервер провайдера. В случае невозможности доставить администратор вынужден будет получать множество жалоб
почту указанному адресату при существующей MX-записи от пользователей, у которых «обнаружен вирус!». При необ-
для него, MDaemon поставит такие письма в очередь систе- ходимости данное оповещение можно вообще отключить.
мы повтора (Retry Queue System) и будет предпринимать В закладке «Antivirus Updater» настроим ежечасную про-
повторные попытки доставки в соответствии с настройками верку обновлений антивирусных баз через Интернет (об-
удержания таких писем в этой очереди (по умолчанию – по- новляя базы реже, вы рискуете пропустить в свою сеть све-
стоянно в течение 60 минут, а затем раз в 240 минут в тече- жий вирус, описание которого уже добавлено в антивирус-
ние 5 дней). В случае невозможности доставки письма в те- ные базы). В этой закладке также можно просмотреть те-
чение первого периода пользователь получит об этом опо- кущее состояние версии антивирусного ПО и вирусных сиг-
вещение. После окончания 5-дневного срока пользователь натур. Опция «Activate Urgent Updates» позволяет вам под-
также получит уведомление о том, что его письмо по-пре- писаться на срочные критические обновления, которые бу-
жнему не доставлено. Для изменения настроек по умолча- дут высылаться на системную учетную запись домена. Для
28
администрирование
Проверим наш сервер вручную на элементарные уязви-
мости, попробовав отправить письмо от пользователя
postmaster:
telnet mailserver 25
telnet mailserver 25
Подводя итоги
MDaemon – мощный корпоративный почтовый сервер с
большим набором разносторонних режимов и возможнос-
тей. К минусам можно отнести отсутствие штатной возмож-
ности интегрировать с ним антивирусные продукты других
Ðèñóíîê 2. Íàñòðîéêà ïðàâèë ñîðòèðîâêè производителей, кроме Kaspersky Labs. Помимо этого было
Здесь можно создать практически любое правило для бы полезным сделать более жесткими настройки безопас-
сортировки и произведения необходимых действий. Рас- ности по умолчанию (например, принудительная аутенти-
сматривать все правила мы не будем – они интуитивно по- фикация независимо от IP-адреса и пр.) К сожалению, даже
нятны. Для примера создадим гибкое правило для писем. в двух статьях невозможно описать настройку всех возмож-
«New Rule» – задаем интуитивно понятное имя для даль- ностей продукта. Например, мы не смогли более подробно
нейшего анализа правил. рассказать про более тонкое конфигурирование веб-интер-
Поле «Select Conditions For This Rule» – устанавливаем фейса, общую адресную книгу, использование календаря
флаги «If the FROM HEADER contains», «If the TO HEADER и планировщика GroupWare, антиспам-систему, настройку
contains» – «If the SUBJECT HEADER contains». Content-Filter, создание автоматической подписки на кли-
Затем в поле «Select Actions For This Rule» отмечаем ентскую рассылку, используя веб-сайт компании и многие
флаги «Send a note 1 to:», «Run a program…» и «Delete the другие возможности. Расположение всех файлов конфигу-
message». рации в текстовых файлах формата Plain-text открывает
Перейдем в третье поле – «Rule Description», в котором широкие возможности для конфигурирования сервера, не
зададим условия в созданном нами правиле. Укажем, что используя GUI-интерфейс, а также для написания скрип-
правило распространяется только на письма, содержащие тов автоматического конфигурирования. Если отзывы чи-
в полях FROM, TO и SUBJECT строго определенные значе- тателей покажут, что развитие темы будет интересным для
ния, укажем, что при получении таких писем необходимо них, мы постараемся найти возможность продолжить цикл
отсылать сообщение на определенный ящик, после этого статей про MDaemon.
30
bugtraq
КРИС КАСПЕРСКИ
Немного истории Все последующие версии линейки 4.x BSD прошли под
UFS ведет свою историю от S5 FS – самой первой файло- знаменем FFS, но в 5.x BSD файловая система вновь из-
вой системы, написанной для UNIX в далеком 1974 году. менилась. Для поддержки дисков большого объема шири-
S5 FS была крайне простой и неповоротливой (по некото- ну всех адресных полей пришлось удвоить: 32-битная ну-
рым данным, средняя производительность FS составляла мерация фрагментов уступила место 64-битной. Были вне-
всего лишь 2%-5% от «сырой» производительности жест- сены и другие менее существенные усовершенствования.
кого диска), но понятия суперблока (super-block), файло- Фактически мы имеем дело с тремя различными фай-
вых записей (inodes) и блоков данных (blocks) в ней уже ловыми системами, не совместимыми друг с другом на уров-
существовали. не базовых структур данных, однако, некоторые источники
В процессе работы над дистрибутивом 4.2 BSD, вышед- склонны рассматривать FFS как надстройку над UFS. «UFS
шим в 1983 году, S5 FS претерпела некоторые улучшения. (and UFS2) define on-disk data layout. FFS sits on top of UFS
Были добавлены длинные имена, символические ссылки (1 or 2) and provides directory structure information, and a variety
и т. д. Так родилась UFS. of disk access optimizations» говорит «Little UFS2 FAQ» (UFS/
В 4.3 BSD, увидевшей свет уже в 1984 году, улучшения UFS2 определяет раскладку данных на диске. FFS реализо-
носили намного более радикальный, если не сказать рево- вана поверх UFS 1 или 2 и отвечает за структуру директо-
люционный, характер. Появились концепции фрагментов рий и некоторые оптимизации доступа к диску). Если загля-
(fragments) и групп цилиндров (cylinder groups). Быстродей- нуть в исходные тексты файловой системы, действительно,
ствие файловой системы существенно возросло, что и оп- можно обнаружить два подкаталога – /ufs и /ffs. В /ffs нахо-
ределило ее название FFS – Fast File System (быстрая фай- дится определение суперблока (базовой структуры, отвеча-
ловая система). ющей за раскладку данных), а в /ufs – определение inode и
32
администрирование
структуры директорий, что опровергает данный тезис, с по- В начале раздела расположен загрузочный сектор, за-
зиций которого все должно быть с точностью до наоборот. тем следует суперблок, за которым находится одна или не-
Чтобы не увязнуть в болоте терминологических тонко- сколько групп цилиндров. Для перестраховки копия супер-
стей, под UFS мы будем понимать основную файловую си- блока дублируется в каждой группе. Загрузочный сектор
стему 4.5 BSD, а под UFS2 – основную файловую систему не дублируется, но по соображениям унификации и едино-
5.х BSD. образия под него просто выделяется место. Таким обра-
зом, относительная адресация блоков в каждой группе ос-
Структура UFS тается неизменной.
Внешне UFS очень похожа на ext2fs – те же inode, блоки
данных, файлы, директории… Но есть и отличия. В ext2fs
имеется только одна группа inode и только одна группа бло-
ков данных для всего раздела. UFS же делит раздел на не-
сколько зон одинакового размера, называемых группами
цилиндров. Каждая зона имеет свою группу inode и свою
группу блоков данных, независимую от всех остальных зон.
Другим словами, inodе описывают блоки данных той и толь-
ко той зоны, к которой они принадлежат. Это увеличивает
быстродействие файловой системы (головка жесткого дис-
ка совершает более короткие перемещения) и упрощает
процедуру восстановления при значительном разрушении Ðèñóíîê 2. Ïîñëåäîâàòåëüíî ðàñïîëîæåííûå ãðóïïû öèëèíäðîâ
данных, поскольку, как показывает практика, обычно гиб- В UFS cуперблок располагается по смещению 8192 байт
нет только первая группа inode. Чтобы погибли все груп- от начала раздела, что соответствует 16-му сектору. В UFS2
пы… я даже не знаю, что же такое с жестким диском нужно он «переехал» на 65536 байт (128 секторов) от начала, ос-
сделать. А! Знаю! Под пресс положить! вобождая место для дисковой метки и первичного загруз-
В UFS каждый блок разбит на несколько фрагментов чика операционной системы, а для действительно больших
фиксированного размера, предотвращающих потерю сво- (в исходных текстах – piggy) систем предусмотрена возмож-
бодного пространства в хвостах файлов. Благодаря этому, ность перемещения суперблока по адресу 262144 байт (це-
использование блоков большого размера уже не кажется лых 512 секторов)!
расточительной идеей, напротив, это увеличивает произ- Среди прочей информации суперблок содержит:
водительность и уменьшает фрагментацию. Если файл ис-
пользует более одного фрагмента в двух несмежных бло- ! fs_cblkno – смещение первой группы блока цилиндров,
ках, он автоматически перемещается на новое место, в измеряемый в фрагментах, отсчитываемых от начала
наименее фрагментированный регион свободного про- раздела;
странства. Поэтому фрагментация в UFS очень мала или ! fs_iblkno – смещение первой inode в первой группе ци-
же совсем отсутствует, что существенно облегчает восста- линдров (фрагменты от начала раздела);
новление удаленных файлов и разрушенных данных. ! fs_dblkno – смещение первого блока данных в первой
группе цилиндров (фрагменты от начала раздела);
! fs_ncg – количество групп цилиндров (штуки);
! fs_bsize – размер одного блока в байтах;
! fs_fsize – размер одного фрагмента в байтах;
! fs_frag – количество фрагментов в блоке;
! fs_fpg – размер каждой группы цилиндров, выраженный
в блоках (также может быть найден через fs_cgsize).
sec_n(fragment_offset) = fragment_offset*(fs_bsize/fs_frag/512)
Ðèñóíîê 1. Ñòðóêòóðà ôàéëîâîé ñèñòåìû s5/ext2fs (à) è ufs (b) sec_n(fragment_offset) = fragment_offset*fs_fsize/512
Адресация ведется либо по физическим смещениям, из-
меряемых в байтах и отсчитываемых от начала группы ци- Структура суперблока определена в файле /src/ufs/ffs/fs.h
линдров (реже – UFS-раздела), либо в номерах фрагментов, и в упрощенном виде выглядит так:
отсчитываемых от тех же самых точек. Допустим, размер бло-
ка составляет 16 Кб, разбитых на 8 фрагментов. Тогда 69-й Ëèñòèíã 1. Ôîðìàò ñóïåðáëîêà (âòîðîñòåïåííûå ïîëÿ îïóùåíû)
сектор будет иметь смещение 512 х 69 == 35328 байт или struct fs {
1024 x (16/8)/512 x 69 = 276 фрагментов. /* historic file system linked list, */
34
администрирование
За картами следует массив inode, смещение которого
содержится в поле cg_iusedoff (адрес первой группы inode
продублирован в суперблоке). По сути, в UFS структура
inode ничем не отличается от ext2fs, только расположение
полей другое.
Давайте лучше рассмотрим назначение основных полей
inode, к числу которых принадлежат:
! di_nlink – количество ссылок на файл (0 означает «уда-
лен»);
! di_size – размер файла в байтах;
! di_atime/di_atimensec – время последнего доступа к фай-
лу;
! di_mtime/di_mtimensec – время последней модификации;
! di_ctime/di_ctimensec – время последнего изменения
inode;
! di_db – адреса первых 12-блоков данных файла, отсчи-
тываемые в фрагментах от начала группы цилиндров;
! di_ib – адрес блоков косвенной адресации (фрагменты
от начала группы).
struct dinode {
/* 0: IFMT, permissions; see below. */
/* 0x00 */ u_int16_t di_mode;
/* 2: File link count. */
/* 0x02 */ int16_t di_nlink;
/* 0x04 */ union {
/* 4: Ffs: old user and group ids. */
u_int16_t oldids[2];
/* 4: Lfs: inode number. */
int32_t inumber;
} di_u;
/* 8: File byte count. */
/* 0x08 */ u_int64_t di_size;
/* 16: Last access time. */
/* 0x10 */ int32_t di_atime; Ðèñóíîê 3. Ñõåìàòè÷íîå èçîáðàæåíèå inode. Ê ïîëþ Extensions
/* 20: Last access time. */ îòíîñèòñÿ âñå, ÷òî íàõîäèòñÿ íèæå di_ib
/* 0x14 */ int32_t di_atimensec;
/* 24: Last modified time. */ Ëèñòèíã 4. Ñòðóêòóðà inode â USF2
/* 0x18 */ int32_t di_mtime;
/* 28: Last modified time. */ struct ufs2_dinode {
/* 0x1C */ int32_t di_mtimensec; /* 0: IFMT, permissions; see below. */
/* 32: Last inode change time. */ /* 0x00 */ u_int16_t di_mode;
/* 0x20 */ int32_t di_ctime; /* 2: File link count. */
/* 36: Last inode change time. */ /* 0x02 */ int16_t di_nlink;
/* 0x24 */ int32_t di_ctimensec; /* 4: File owner. */
/* 40: Direct disk blocks. */ /* 0x04 */ u_int32_t di_uid;
/* 0x28 */ ufs_daddr_t di_db[NDADDR]; /* 8: File group. */
/* 88: Indirect disk blocks. */ /* 0x08 */ u_int32_t di_gid;
/* 0x58 */ ufs_daddr_t di_ib[NIADDR]; /* 12: Inode blocksize. */
/* 100: Status flags (chflags). */ /* 0x0C */ u_int32_t di_blksize;
/* 0x64 */ u_int32_t di_flags; /* 16: File byte count. */
/* 104: Blocks actually held. */ /* 0x10 */ u_int64_t di_size;
/* 0x68 */ int32_t di_blocks; /* 24: Bytes actually held. */
/* 108: Generation number. */ /* 0x18 */ u_int64_t di_blocks;
/* 0x6C */ int32_t di_gen; /* 32: Last access time. */
/* 112: File owner. */ /* 0x20 */ ufs_time_t di_atime;
/* 0x70 */ u_int32_t di_uid; /* 40: Last modified time. */
/* 116: File group. */ /* 0x28 */ ufs_time_t di_mtime;
/* 0x74 */ u_int32_t di_gid; /* 48: Last inode change time. */
/* 120: Reserved; currently unused */ /* 0x30 */ ufs_time_t di_ctime;
/* 0x78 */ int32_t di_spare[2]; /* 56: Inode creation time. */
}; /* 0x38 */ ufs_time_t di_birthtime;
/* 64: Last modified time. */
/* 0x40 */ int32_t di_mtimensec;
В UFS2 формат inode был существенно изменен – по- /* 68: Last access time. */
явилось множество новых полей, удвоилась ширина адрес- /* 0x44 */ int32_t di_atimensec;
/* 72: Last inode change time. */
ных полей и т. д. Что это обозначает для нас в практичес- /* 0x48 */ int32_t di_ctimensec;
ком плане? Смещения всех полей изменились только и все- /* 76: Inode creation time. */
/* 0x4C */ int32_t di_birthnsec;
го, а общий принцип работы с inode остался прежним (см. /* 80: Generation number. */
листинг 4). /* 0x50 */ int32_t di_gen;
36
администрирование
! в директории удаленного файла размер предшествую- идеале это будет один непрерывный регион. Хуже, если
щей структуры direct увеличивается на d_reclen, в ре- первый фрагмент расположен в «чужом» блоке (т.е. блоке,
зультате чего она как бы «поглощает» имя удаляемого частично занятом другим файлом), а оставшиеся 12 бло-
файла, однако его перезаписывания не происходит, во ков находятся в одном или нескольких регионах. Вообще-
всяком случае оно уничтожается не сразу, а только тог- то достаточно трудно представить себе ситуацию, в кото-
да, когда в этом возникнет реальная необходимость. рой первые 13 блоков были бы сильно фрагментированы
(а поддержка фоновой дефрагментации в UFS на что?). Та-
Как мы будем действовать кое может произойти только при интересной «перегруппи-
После непреднамеренного удаления одного или нескольких ровке» большого количеств файлов, что в реальной жизни
файлов немедленно демонтируйте раздел и запустите дис- практически никогда не встречается (ну разве только что
ковый редактор, работающий на уровне секторов. Например, вы задумали навести порядок на своем жестком диске).
можно воспользоваться BSD-портом уже известной нам Итак, будем считать, что 13-й блок файла найден. В мас-
утилитой lde. К сожалению, на моей системе (4.5 BSD) она сив непосредственной адресации он уже не помещается
работает крайне нестабильно и не отображает основных (там содержатся только 12 блоков), и ссылка на него, как и
структур данных в удобочитаемом виде, хотя поддержка на все последующие блоки файла, должна содержаться в
UFS в ней заявлена. При наличии достаточного количества блоках косвенной адресации, которые при удалении фай-
свободного места можно скопировать раздел в файл и от- ла помечаются как свободные, но не перезаписывается, точ-
крыть его с помощью любого hex-редактора (например, нее, перезаписывается, но не сразу. Большинство файлов
biew) или обратиться непосредственно к самому устройству обходятся только одним косвенным блоком, что существен-
раздела (например, /dev/ad0s1a). но упрощает нашу задачу.
А еще можно вставить в привод загрузочный CD-ROM с Как найти этот блок на диске? Вычисляем смещение
Windows PE и воспользоваться любым Windows-редактором 13-го блока файла от начала группы цилиндров, перево-
от Microsoft Disk Probe до Runtime Disk Explorer. То же са- дим его в фрагменты, записываем получившееся число
мое справедливо и для Norton Disk Editor, запущенного c задом наперед (так, чтобы младшие байты располагались
дискеты из-под MS-DOS (правда, ни диски большого объе- по меньшим адресами) и осуществляем контекстный по-
ма, ни SCSI-устройства он не поддерживает). Еще можно иск в свободном пространстве.
запустить KNOPPIX или любой Live LINUX, ориентирован- Отличить блок косвенной адресации от всех остальных
ный на восстановление (правда, в большинстве «реанима- типов данных очень легко – он представляет собой массив
ционных» дистрибутивов, и в частности, Frenzy 0.3, ника- указателей на блоки, а в конце идут нули. Остается только
кого дискового редактора вообще нет!). извлечь эти блоки с диска и записать их в файл, обрезая
В общем, как говорится, на вкус и цвет товарищей нет… его по нужной длине.
Внимание! Если вы нашли несколько «кандидатов» в
Техника восстановления файлов блоки косвенной адресации, это означает, что 13-й блок
Начнем с грустного. Поскольку при удалении файла ссыл- удаленного файла в разное время принадлежал различным
ки на 12 первых блоков и 3 блока косвенной адресации файлам (а так, скорее всего, и будет). Не все косвенные
необратимо затираются, автоматическое восстановление блоки были затерты, вот ссылки и остались. Как отличить
данных невозможно в принципе. Найти удаленный файл «наш» блок от «чужих»? Если хотя бы одна из ссылок ука-
можно только по его содержимому. Искать, естественно, зывает на уже занятый блок данных (что легко определить
необходимо в свободном пространстве. Вот тут-то нам и по карте), такой блок можно сразу откинуть. Оставшиеся
пригодятся карты, расположенные за концом описателя блоки перебираются вручную до получения работоспособ-
группы цилиндров. ной копии файла. Имя файла (если оно еще не затерто)
Если нам повезет и файл окажется нефрагментирован- можно извлечь из директории. Естественно, при восстанов-
ным (а на UFS, как уже отмечалось, фрагментация обычно лении нескольких файлов мы не можем однозначно ска-
отсутствует или крайне невелика), остальное будет делом зать, какое из имен какому файлу принадлежит, тем не
техники. Просто выделяем группу секторов и записываем менее это все же лучше, чем совсем ничего. Директории
ее на диск, но только ни в коем случае не на сам восста- восстанавливаются точно так же, как и обыкновенные фай-
навливаемый раздел! (Например, файл можно передать на лы, хотя, по правде говоря, в них, кроме имен файлов, не-
соседнюю машину по сети). чего и восстанавливать…
К сожалению, поле длины файла безжалостно затира-
ется при его удалении и актуальный размер приходится Заключение
определять «на глазок». Звучит намного страшнее, чем Описанный метод восстановления данных страдает мно-
выглядит. Неиспользуемый хвост последнего фрагмента жеством ограничений. В частности, при удалении большо-
всегда забивается нулями, что дает хороший ориентир. го количества сильно фрагментированных двоичных фай-
Проблема в том, что некоторые типы файлов содержат в лов он ничем не поможет. Вы только убьете свое время, но
своем конце некоторое количество нулей, при отсечении навряд ли найдете среди обломков файловой системы что-
которых их работоспособность нарушается, поэтому тут то полезное. Но как бы там ни было, другого выхода про-
приходится экспериментировать. сто нет (если, конечно, не считать резервной копию, кото-
А если файл фрагментирован? Первые 13 блоков (имен- рой тоже, скорее всего, нет), поэтому я все-таки считаю,
но блоков, а не фрагментов!) придется собирать руками. В что данная статья будет совсем небесполезной.
СЕРГЕЙ СУПРУНОВ
Формат memo-полей писи данных будут начинаться с блока 8 (длина заголовка
Если нужно сохранить в одном поле данные большого или 512, деленная на размер блока 64).
неопределенного объема, в FoxPro (как и в некоторых дру-
гих СУБД) используются поля специального типа – так на- С чем предстоит бороться
зываемые memo-поля. Данные такого поля физически со- Теоретически формат DBF позволяет хранить в поле типа
храняются в отдельном файле (в случае с FoxPro он имеет memo до 4 Гб данных. Однако на практике из-за внутренних
то же имя, что и dbf-файл, но с расширением fpt). Логичес- ограничений FoxPro на длину строки оперировать с полями
ки мемо-поля связываются с таблицей таким образом, что свыше 65504 символов становится проблематично. На прак-
доступны, как и любое другое поле текущей записи. тике длина этого поля редко превышает несколько тысяч
Файл fpt для упрощения работы с данными хранит их символов. Поэтому вполне допустимо полагать, что данные
поблочно. Размер блока по умолчанию в FPD 2.6 составля- из поля типа memo могут быть размещены в поле типа text
ет 64 байта. Заголовок fpt-файла имеет размер 512 байт, таблицы PostgreSQL (максимальное значение поля – 1 Гб).
структура его следующая: Так что размеры полей проблемой считать не будем.
Òàáëèöà. Ñòðóêòóðà çàãîëîâêà fpt-ôàéëà Сложнее то, что memo-поля могут содержать разнооб-
разные символы, включая символ перевода строки. По-
скольку при обработке текстового файла PostgreSQL вос-
принимает этот символ как разделитель записей, то необ-
ходимо позаботиться об его экранировании. Причем в слу-
чае формата конца строки в стиле DOS (CR+LF) экраниро-
Начиная с 513-го байта от начала файла, располагают- вать нужно как символ перевода строки (0x0D), так и сим-
ся блоки данных. Значение поля может занимать один или вол возврата каретки (0x0A).
несколько блоков. Каждый блок, являющийся первым для Можно использовать формат CSV для загрузки в
записи, содержит 8-байтный заголовок (4 байта сигнатура PostgreSQL – в этом случае значением поля будут считать-
0х00000001 и 4 байта – длина поля), после которого следу- ся все символы, заключенные в «кавычки». «Кавычками»
ют собственно данные. в данном случае может выступать любой символ, он зада-
Для обеспечения связи таблицы с данными в fpt-файле ется как параметр команды COPY. Теперь внутри поля нуж-
в каждой записи dbf-файла memo-полю отводится 10 байт, но экранировать «кавычки» (путем удвоения), однако в дан-
в которые заносится номер первого блока данных. Причем ном случае больше шансов найти подходящий символ, мало
номер хранится в символьном виде с ведущими пробела- используемый внутри поля данных. К тому же исключают-
ми. Например, для указания на блок 8 данное поле будет ся проблемы с различными стилями перевода строки.
содержать значение « 8» (в шестнадцатеричном виде
«20 20 20 20 20 20 20 20 20 38», где 38 – ASCII-код символа Реализация на FoxPro
«8»). Нумерация блоков идет от начала файла, то есть вклю- FoxPro работает с memo-полями прозрачно, так что никаких
чает и заголовок. усилий со стороны программиста не требуется. Не забудь-
Например, при стандартной длине блока 64 байта за- те поставить символ «\» перед символами-разделителями:
38
администрирование
Ëèñòèíã 1. Ôàéë memo2pg.prg (FoxPro) if fields[i].type == 'M':
fld = memo2pg(fld)
close databases # ----------^^^^^^^
* Ýòî – êîììåíòàðèé ñ íà÷àëà ñòðîêè
&& À òàê âûäåëÿþòñÿ êîììåíòàðèè â ïðîèçâîëüíîì ìåñòå ñòðîêè if fields[i].type == 'D':
fld = fld[:4] + '-' + ↵
use wmem && Îòêðûâàåì òàáëèöó ñ memo-ïîëÿìè fld[4:6] + '-' + ↵
m.delimiter = chr(9) && ñèìâîë Tab fld[6:]
m.txf = fcreate('memo2pg.txt') .. .. ..
scan Здесь при обнаружении поля типа memo считанное зна-
* Òåêñòîâîå ïîëå – ýêðàíèðóåì ðàçäåëèòåëè è ñèìâîë «\»
m.descr = strtran(Descr, '\', '\\') чение трактуется как содержащее номер первого блока дан-
m.descr = strtran(m.descr, m.delimiter, ; ных, и вызывается функция разбора fpt-файла:
'\' + m.delimiter)
* Â memo-ïîëå äîïîëíèòåëüíî ýêðàíèðóåì ñèìâîëû
* êîíöà ñòðîêè (ASCII-êîäû 10 è 13) Ëèñòèíã 3. Ôðàãìåíò ñöåíàðèÿ dbf2pg.py, ôóíêöèÿ memo2pg
m.memfld = strtran(Memfld, '\', '\\')
m.memfld = strtran(m.memfld, m.delimiter, ; def memo2pg(startblock):
'\' + m.delimiter) # Íîìåð áëîêà ïðåîáðàçóåì â ÷èñëî
m.memfld = strtran(m.memfld, chr(13), ; startblock = int(startblock)
'\' + chr(13))
m.memfld = strtran(m.memfld, chr(10), ; fpt = open(basetabname + '.fpt', 'rb')
'\' + chr(10)) fpt.read(6)
* Çàïèñûâàåì ðåçóëüòàò â ôàéë, ðàçäåëÿÿ ïîëÿ
* ñèìâîëîì, õðàíÿùèìñÿ â ïåðåìåííîé m.delimiter # Ñ÷èòûâàåì ðàçìåð áëîêà
=fputs(m.txf, m.descr + ; blocksize = int(ord(fpt.read(1)) * 256 + ord(fpt.read(1)))
m.delimiter + ;
m.memfld) # Ñìåùàåìñÿ ê íà÷àëó áëîêà äàííûõ
endscan fpt.seek(blocksize * startblock)
=fclose(m.txf) fpt.read(4)
wait window 'Finished.'
# Ñ÷èòûâàåì ðàçìåð ïîëÿ äàííûõ
fieldsize = ord(fpt.read(1)) * 16777216 + ↵
ord(fpt.read(1)) * 65536 + ↵
ord(fpt.read(1)) * 256 + ↵
ord(fpt.read(1))
# ×èòàåì äàííûå
data = fpt.read(fieldsize)
fpt.close()
# Ïåðåêîäèðîâêà, ýêðàíèðîâàíèå è ïðî÷.
data = unicode(data, 'cp866').encode('koi8-r')
data = data.replace('\\', '\\\\')
data = data.replace('\x0A', '\\' + '\x0A')
data = data.replace('\x0D', '\\' + '\x0D')
data = data.replace(delimiter, '\\' + delimiter)
return data
ЮЛИЯ ШАБУНИО
абота администратора базы 2000. Основные причины замедления Представьте себе, что у вас есть таб-
данных Microsoft SQL Server по- работы будут актуальны и для 2005-й лица заказов с полями Data и Status. И
рой бывает легка и необремени- версии, но способы решения для них вас интересуют невыполненные заказы
тельна. В самом деле, если настроена могут заметно отличаться (впрочем, в за последние полгода. Если вы попы-
регулярная архивация, вдумчиво про- 2005-й наверняка появятся свои соб- таетесь получить информацию через
писаны права пользователей, везде ственные, уникальные способы работать запрос с параметрами, то сервер, ско-
стоит последняя версия клиентского медленно). Результаты DBCC-запросов рее всего, выберет индекс по дате. Про-
приложения, то заняться бывает не- и структура системных таблиц могут сто потому, что Status, как правило, оди-
чем. Но увы, рано или поздно звонит для них заметно отличаться, но общая наков для всех («Выполнен»), а вот дата
(а то и прибегает) какой-нибудь «Глав- логика работы остаётся прежней. принимает огромное число разных зна-
ный Пользователь» и громко жалует- чений, и условие по ней может вернуть
ся на то, что «всё тормозит и ничего Причина первая. как большой, так и очень маленький ре-
не работает». При этом беглый анализ Ошибки в индексах зультирующий набор. Мы-то знаем, что
ситуации показывает, что вроде бы всё Они встречаются чаще всего. Когда нас интересуют только невыполненные
в порядке, сервисы запущены, в логах программист создаёт индекс на табли- заказы, которых совсем мало, и при их
ошибок нет. То есть всё работает. Но це базы данных, таблица чаще всего поиске индекс по статусу сработал бы
очень медленно. И приходится адми- или совсем пуста, или заполнена не- великолепно. Но серверу на момент
нистратору базы данных, а то и про- сколькими тестовыми строчками. Про- компиляции запроса не известно, какое
граммисту из службы техподдержки верить эффективность выбранных ин- значение мы подставим в параметр
брать универсальные инструменты дексов в данной ситуации практически @Status – «Выполнен» или «Не выпол-
Microsoft – EM (SQL Server Enterprise невозможно. Поэтому индексируемые нен». Поэтому он не может использо-
Manager) и QA (SQL Query Analyzer) и поля выбираются или наугад, или в со- вать индекс по статусу, так как в том
браться за решение проблемы произ- ответствии со стандартными подсказ- случае, когда параметр равен «Выпол-
водительности Microsoft SQL Server. ками Microsoft SQL Server. Например, нен», этот индекс бесполезен. Вместо
Мой опыт показывает, что причин EM автоматически создаёт кластерный этого сервер предпочтёт индекс по дате,
внезапных «торможений» не так уж и индекс по суррогатному первичному который даст более-менее приемлемую
много. ключу, что довольно редко является скорость в любом случае.
идеальным решением. Из проблем про- Таким образом, упускается возмож-
изводительности эта наиболее прият- ность использовать индекс по статусу,
ная, так как простое изменение схемы позволяющий мгновенно выбрать невы-
базы данных позволяет совершить ма- полненные заказы. И неэффективный
ленькое чудо. план выполнения заставляет систему
задуматься в самом неожиданном мес-
Причина вторая. те, где в нормальных условиях сервер
Неправильные планы запросов зависать не должен.
Microsoft SQL Server обладает очень Отмечу, что не только запрос с па-
неплохим оптимизатором запросов. Но раметрами может порождать неудачные
Все примеры в данной статье рас- и он иногда ошибается. Типичная при- планы запросов. Не менее часто встре-
смотрены на базе Microsoft SQL Server чина ошибок – запрос с параметрами. чаются сбои из-за нехватки памяти и
40
администрирование
некорректной статистики содержимого рабатывать эту ситуацию, и поэтому дить постоянно, и лучше в автоматичес-
таблицы. они обычно проявляют себя не в виде ком режиме. Исчерпание пропускной
замедления работы, а в виде частых способности дисков вызывает только
Причина третья. ошибок заданий (jobs) и откатов кли- замедление работы, но зато справить-
Распределённые блокировки ентских транзакций. Появление сооб- ся с нею гораздо сложнее, приходится
Microsoft SQL Server обеспечивает изо- щений о дедлоках означает, что со стра- задуматься о серьёзной реорганизации
ляцию транзакций с помощью блокиро- тегией блокировок не всё в порядке и дискового массива. Проблема с недо-
вок строк, страниц и таблиц базы дан- распределённая блокировка уже где- статком оперативной памяти внешне
ных. При этом если два потока пытают- то рядом. выглядит очень похоже, с единственной
ся установить несовместимые типы разницей, что проблема касается не
блокировок на один и тот же объект, то только SQL-сервера, но и всей опера-
одному из них придётся ждать, пока вто- ционной системы (так как современные
рой не закончит работу с этим объек- компьютеры всегда стараются скомпен-
том. Таким образом замедляется рабо- сировать недостаток памяти за счёт
та как отдельных процессов, так и всей дискового пространства, серьёзно на-
системы. Иногда возникает такая ситу- Ðèñóíîê 2. Deadlock гружая при этом подсистему ввода-вы-
ация, что первый процесс надолго зах- Когда дедлок происходит на двух от- вода). Процессор, как ни странно, очень
ватил объект А, второй захватил B и дельных объектах базы данных из-за редко бывает камнем преткновения в
ждёт, пока освободится А, третий зах- доступа к ним в разном порядке (как работе MS SQL и никогда не приводит
ватил важный для всех объект C и пы- изображено на рис. 2), тогда он весьма к резкому замедлению. Если загрузка
тается обработать B, а еще огромное просто находится и проблема снимает- процессора подскочила до 100% вне-
множество процессов ждёт С, порой ся. Хуже бывает, когда дедлок проис- запно, то это не исчерпание ресурса
захватив еще что-нибудь (рис. 1). ходит внутри одной таблицы – если про- процессора, а появление какого-то не-
цессы сначала работали в разных её ча- корректно работающего приложения.
стях, а потом каждый захотел заглянуть Перед тем как принимать решение
на территорию другого. В этом случае о необходимости масштабного обнов-
дедлок может возникнуть даже без яв- ления, обязательно надо проверить, всё
ной транзакции, во время самого обыч- ли в порядке с тем оборудованием, что
ного обновления большой таблицы. уже есть. Мне известны случаи, когда
случайно отключенный кэш записи на
Причина пятая. контроллере дискового массива приво-
Проблемы с памятью, диском дил к падению скорости работы всей
и процессором системы в четыре раза. И нельзя забы-
Бывает и так, что в базе идеально на- вать, что проблемы на железном уров-
Ðèñóíîê 1. Ðàñïðåäåë¸ííàÿ áëîêèðîâêà строены все индексы, запросы выпол- не могут быть следствием одной из пре-
При этом создаётся впечатление, няются по оптимальным планам, вза- дыдущих причин. Например, непра-
что не работает вообще ничего. Порой имных блокировок процессов нет во- вильный план запроса может создать
не получается даже запустить EM, так обще – а работа всё равно происходит большую нагрузку на жесткий диск, что
как блокировки есть на используемых медленно. Увы, любая система в конце не справится никакой RAID. Поэтому
им системных таблицах. Такую ситуа- концов упирается в «железные» огра- аппаратной частью имеет смысл зани-
цию я называю распределённой блоки- ничения, в размер оперативной памя- маться только в том случае, если исклю-
ровкой, и это одна из очень неприятных ти, в пропускную способность и объём чены все остальные причины.
проблем. В огромной куче заблокиро- жестких дисков, в максимальную про-
вавших друг друга процессов бывает изводительность процессора. Исчерпа- Поиск причин проблемы
довольно сложно найти тот, который во ние любого из этих ресурсов может вы- Итак, давайте вернёмся к исходной си-
всём виноват. А им не всегда является зывать замедление работы. Проще туации. Мы имеем недовольных пользо-
самый первый процесс. В рассмотрен- всего обнаруживается (да, пожалуй, и вателей и сервер, который работает
ной ситуации виноват скорее тот, кто лечится) нехватка места на жёстком очень медленно. С какой стороны на-
захватил С. диске. Причём последствия этой не- чинать? Первое, что надо сделать – это
хватки могут быть просто катастрофи- определить масштабы происшествия
Причина четвертая. ческими. Например, прекращение рабо- (рис. 3). Если пользователи жалуются,
Дедлоки (Deadlocks) ты резервного копирования, остановка что не работает вообще ничего, всё сто-
Особый случай блокировок. Знакомая сервисов, работающих с диском, паде- ит, приложение не запускается, то, ско-
всем ситуация – процесс 1 захватил ние сервиса SQL и наконец аварийная рее всего, мы имеем дело с распреде-
объект А и ждёт доступа к Б, а процесс 2 остановка операционной системы без лённой блокировкой или же с аппарат-
захватил Б и ждёт доступа к А (рис. 2). возможности нормальной загрузки. В ными проблемами (во втором случае
Если бы не система обнаружения дед- результате можно потерять базу данных жалобы будут менее интенсивными,
локов, они бы прождали вечно. К сча- и все последние данные резервного зато гораздо более продолжительными,
стью, MS SQL Server хорошо умеет об- копирования, так что за этим нужно сле- так как распределённая блокировка
Ñêðèïò 1
if ( select object_id( 'tempdb..#LOCK' ) ) ↵
is not null drop table #LOCK
go
-- Â âàøåé âåðñèè SQL Server ôîðìàò âðåìåííîé òàáëèöû
-- ìîæåò áûòü äðóãèì, ïðîâåðüòå âûâîä sp_lock.
create table #LOCK
( spid int
, dbid int
, ObjId int
, IndId int
, Type varchar(4)
, Resource varchar(16)
, Mode varchar(8)
, Status varchar(6)
)
insert into #LOCK
exec sp_lock
-- Êàêèå ïðîöåññû îæèäàþò çàõâàòà êàêèõ ðåñóðñîâ.
select count(*) as LockCnt, left(o.name, 32 ) as ObjectName
, l.Status, l.Type, l.Mode, l.spid
, max(Resource) as SampleResource
, left(max(ss.loginame), 16 ) as loginname
, max(ss.cmd) as cmd
Ðèñóíîê 3. Ïåðâîíà÷àëüíàÿ îöåíêà ñèòóàöèè , max(ss.lastwaittype) as lastwaittype
, left(max(ss.program_name), 32 ) as program_name
обычно когда-нибудь да заканчивается, а вот железные про- , left(max(ss.hostname), 32) as hostname
блемы сами по себе наверняка не пройдут). Значит, в пер- , max(ss.program_name) as full_program_name
from #LOCK l , sysobjects o with (nolock)
вую очередь надо проверить это направление. Совсем дру- , master..sysprocesses ss with (nolock)
гая ситуация возникает, когда жалуются на какой-то конк- where o.id = l.ObjId and l.spid = ss.spid
and l.Status not in ( 'GRANT', 'CNVT')
ретный процесс или запрос. Например, слишком медленно and l.dbid = db_id()
работает тарификация, слишком долго выставляются сче- group by o.name, l.Status, l.Type, l.Mode, l.spid
та, тогда как как всё остальное практически в порядке. В -- Êòî ìåøàåò âûïîëíÿòüñÿ ïðîöåññàì èç ïðåäûäóùåãî
этой ситуации стоит поискать проблемный запрос, работаю- -- çàïðîñà, êòî äåðæèò èõ ðåñóðñû.
select count(*) as LockCnt, left(o.name, 32 ) as ObjectName
щий не с тем индексом или по неудачному плану. , l.Status, l.Type, l.Mode, l.spid
, max(Resource) as SampleResource
, left(max(ss.loginame), 16 ) as loginname
Глобальное замедление работы , max(ss.cmd) as cmd
Давайте рассмотрим различные методы анализа ситуации, , max(ss.lastwaittype) as lastwaittype
, left(max(ss.program_name), 32 ) as program_name
когда замедляется работа всей системы. , left(max(ss.hostname), 32) as hostname
, max(ss.program_name) as full_program_name
from #LOCK l , sysobjects o with (nolock)
Общий анализ блокировок в системе , master..sysprocesses ss with (nolock)
Каждый администратор знает, что блокировки на сервере where o.id = l.ObjId and l.spid = ss.spid
and l.dbid = db_id()
определяются процедурой sp_lock. Но вот скажите честно, and l.Status in ( 'GRANT', 'CNVT')
что можно понять, глядя на выводимый ею результат... and exists ( select *
from #LOCK l2
where l2.Status not in ( 'GRANT', ↵
spid dbid ObjId IndId Type Resource Mode Status 'CNVT')
------ ------ ----------- ------ ---- ---------------- -------- ------ and l2.dbid = db_id()
51 5 0 0 DB S GRANT and l.ObjId = l2.ObjId
53 5 0 0 DB S GRANT and l.Resource = l2.Resource
54 5 0 0 DB S GRANT )
55 5 0 0 DB S GRANT group by o.name, l.Status, l.Type, l.Mode, l.spid
57 5 308912172 0 TAB IS GRANT
.... 375 строк
200 5 64719283 2 PAG 5:1730834 IX GRANT ! Функции left используются для того, чтобы сократить ши-
200 5 0 0 PAG 4:133248 IX GRANT рину вывода (он и так получается очень широкий). При
200 5 475148738 1 PAG 6:122208 SIX GRANT
200 5 571149080 0 TAB IX GRANT
необходимости можно увеличить отображаемую часть
полей.
На её основе можно разве что сформулировать утвержде- ! Функция max() используется для того, чтобы отобразить
ние «блокировки на сервере есть». Если вы регулярно за- поле, не участвующее в group by, но при этом точно
пускаете sp_lock, то вы можете оценить лишь среднее чис- имеющее однозначное значение. Это работает, так как
ло блокировок и убедиться, что сейчас их «больше», «мень- max из списка одинаковых значений равен тому же са-
ше» или «как обычно». Для более серьёзного анализа та- мому значению.
42
администрирование
Как правило, бывает достаточно несколько раз выполнить но, возможно, даже потребуется вынести в отдельное зада-
скрипт 1, чтобы полностью оценить картину – какие про- ние выполнение запросов и сохранение результатов в спе-
цессы блокируют какие ресурсы и кому при этом мешают. циальной таблице, чтобы потом проанализировать статис-
Я не стану приводить полное описание полей запроса, тику и понять, какие процессы чаще всего «цепляются».
так как это простое соединение (join) результата sp_lock с
системными таблицами sysobjects (анализируются только Анализ блокировок отдельного процесса
блокировки на текущей БД) и master..sysprocesses, их поля Тот же метод сохранения блокировок во временной табли-
описаны в BOL (Books Online), да и сами по себе они доволь- це может быть использован и для анализа текущего состо-
но очевидны. Хочу сразу предупредить о возможной пробле- яния отдельного процесса. Конечно, надёжнее всего отсле-
ме. Sp_lock даёт мгновенный снимок ситуации. К тому вре- дить его работу с помощью профайлера. Но бывает так,
мени, когда выполнение добирается до sysobjects и что профайлер не может помочь, ведь он показывает текст
master..sysprocesses, уже может не оказаться тех процессов, запроса только в момент начала или окончания его обра-
что создавали блокировки, зато могут появиться новые про- ботки. А что делать, если начало мы уже пропустили, а ко-
цессы (причём с тем же spid), и запрос даст неправильный нец будет неизвестно когда, так как процесс подвис? Кро-
результат. Особенно это актуально, когда система «живёт», ме того, далеко не всегда есть время (или возможность)
и в ней в каждый момент времени появляется и исчезает запустить и настроить профайлер.
большое число процессов и выполняется много запросов. В этой ситуации может помочь разобраться вот такой
Но в случае распределённой блокировки или же просто слож- скрипт (выполняемый после сохранения блокировок в
ной ситуации нужные вам процессы останутся на месте. Хуже #LOCK):
того, я советую не принимать решений по первому же ре-
зультату. Выполните этот запрос несколько раз, чтобы по- Ñêðèïò 2
нять, какие процессы были заблокированы случайно и нена- select count(*) as LockCnt, left(o.name, 32 ) as ObjectName
долго, а какие стабильно присутствуют и являются основой , l.Status, l.Type, l.Mode, l.spid
, max(Resource) as SampleResource
распределённой блокировки. Тот же самый скрипт 1 помо- , left(max(ss.loginame), 16 ) as loginname
жет разобраться в насыщенной блокировками базе данных , max(ss.cmd) as cmd
, max(ss.lastwaittype) as lastwaittype
даже в отсутствие распределённой блокировки. , left(max(ss.program_name), 32 ) as program_name
Бывает так, что работать с базой можно, но процессы , left(max(ss.hostname), 32) as hostname
, max(ss.program_name) as full_program_name
часто ждут завершения работы друг-друга, и общая ско- from #LOCK l , sysobjects o with (nolock)
рость работы заметно понижается. Этим данная ситуация , master..sysprocesses ss with (nolock)
where o.id = l.ObjId and l.spid = ss.spid
отличается от распределенной блокировки, когда «созда- and l.dbid = db_id()
ётся впечатление, что ничего вообще не работает. Тогда and l.spid = @spid
--and program_name like '%0x08989EF05DAC704E94F6D25A2EB2FB75%'
запрос о картине блокировок приходится делать многократ- group by o.name, l.Status, l.Type, l.Mode, l.spid
Cnt ObjectName Status Type Mode spid SampleResource loginname lastwaittype hostname full_program_name
--- -------------- ------ ---- ---- ----- ---------------- ---------------- ------------ -------- -------------------------------------------------------------------------
1 Calls GRANT TAB X 127 ES\RootUserLogin WRITELOG BUSINESS SQLAgent - TSQL JobStep (Job 0x08989EF05DAC704E94F6D25A2EB2FB75 : Step 1)
1 DCLocks GRANT KEY X 53 (010041dc3da7) ES\Admin PAGELATCH_UP SM2 DeviceManager
1 sp_RunCommands GRANT TAB X 59 [COMPILE] ES\Admin WRITELOG SM2 DeviceManager
44
администрирование
else char( ascii('A') + @byte/16 - 10 ) темные таблицы, он сам попадает в число заблокирован-
end + ных процессов и не способен сообщить вообще ничего
case when @byte%16 < 10
then char( ascii('0') + @byte%16 ) (cкрипты же специально на этот случай обращаются к сис-
else char( ascii('A') + @byte%16 - 10 ) темным таблицам с nolock).
end
select @res = @res + @hex, @i = @i + 1 Еще одна особенность EM по сравнению с приведён-
end ными скриптами – он не ограничен текущей базой данных
return @res и показывает картину процессов всего сервера (сами ре-
end шайте, плюс это минус).
Теперь можно найти нужную задачу напрямую, например, так: Чтобы получить доступ к блокировкам на нескольких
конкретных базах данных сразу, в скрипт достаточно бу-
select name from msdb..sysjobs where ↵ дет добавить несколько разных таблиц sysobjects, но сде-
dbo.uniqueidentifier_to_varchar( job_id ) = ↵
'0x07E7726D989CCA4E9103F874F473C2AF' лать его полностью универсальным можно только с помо-
щью представления (view) или динамического запроса (см.
или так: таблицу).
Òàáëèöà. Ñðàâíåíèå äâóõ ìåòîäîâ àíàëèçà áëîêèðîâîê
select * â ñèñòåìå
from master..sysprocesses with (nolock)
, msdb..sysjobs with (nolock)
where program_name like '%' + ↵
dbo.uniqueidentifier_to_varchar(job_id) + '%'
-- Ýòîò çàïðîñ âîçâðàùàåò âñþ èíôîðìàöèþ î çàïóùåííûõ
-- â äàííûé ìîìåíò çàäàíèÿõ, âêëþ÷àÿ èõ íàçâàíèÿ, sp_id,
-- âðåìÿ çàïóñêà è îñòàëüíóþ èíôîðìàöèþ
-- èç master..sysprocesses è msdb..sysjobs
46
администрирование
МИХАИЛ ПЛАТОВ
Делаем радиостанцию ся файлы в формат .wma с жестко заданным битрейтом (на-
Для нашей радиостанции мы будем использовать набор пример, 32 Кбит). Для решения этой задачи теоретически
файлов, расположенных в определенной папке жесткого можно воспользоваться уже знакомым нам интерфейсом
диска. Несмотря на то что сервер Windows Media позволя- кодировщика Windows Media Encoder, однако на практике
ет организовывать вещание музыкальных файлов, храня- так лучше не делать. Интерфейс не позволяет выбрать для
щихся как в формате .mp3, так и формате wma, предпочти- кодирования сразу несколько файлов (или папок), поэтому
тельным является использование «родного» формата – такой процесс перекодирования может несколько утомить.
wma. Дело в том, что при использовании файлов mp3 ве- Но тот факт, что «интерфейс не позволяет», еще не означа-
щание все равно будет вестись в формате wma, при этом ет, что «кодировщик не умеет». В нашем случае необходи-
сервер «на лету» будет перекодировать поток в wma. Кро- мой функциональностью обладает скрипт WMCmd.vbs, вхо-
ме того, при предоставлении доступа к сервису из Интер- дящий в стандартную поставку кодировщика Windows Media
нета настоятельнол рекомендуется использовать файлы, за- Encoder. Данный скрипт написан на Visual Basic и является
кодированные с одинаковым битрейтом, иначе при пере- не чем иным как «оберткой», использующей те же самые
ключении между композициями битрейт будет «скакать», COM-объекты графического приложения Windows Media
что вряд ли обрадует пользователей, подключенных через Encoder. Файл скрипта располагается в папке установки ко-
низкоскоростное соединение. дировщика (по умолчанию это C:\Program Files\Windows Media
Components\Encoder), а для его запуска используется «кон-
Любителям командной строки посвящается сольный» сервер сценариев WSH (Windows Scripting Host.) –
Надеюсь, я смог убедить вас в том, что для организации ве- cscript. При запуске без параметров (cscript WMCmd.vbs) ко-
щания необходимо заранее перекодировать все имеющие- дировщик сообщит о возможных ключах вызова.
48
администрирование
Полный список ключей очень велик, поэтому позволю editor», в появившемся окне выберем «Create a new playlist»
себе привести пример вызова данного скрипта, при котором и нажмем «OK». Перед нами предстанет окно редактора
кодировщик в два прохода перекодирует содержимое папки списков воспроизведения – Windows Media Playlist Editor. Ин-
c:\music_mp3 к формату .wma с постоянным битрейтом 32К1: терфейс добавления объектов в список воспроизведения
интуитивно понятен, а вот на типах добавляемых объектов
cscript WMCmd.vbs -input "e:\music_mp3" ↵ остановимся более подробно. В редакторе play-листов мож-
-output "e:\music_wma" -a_mode 1 -profile a32
но определить элементы следующих типов:
! Media – основной элемент любого списка воспроизве-
Пишем ноты для оркестра дения. Используется для указания медиа-ресурса (фай-
Таким образом, подготовительная часть закончена, и теперь лы, потоки с кодировщика или медиа-сервера и т. д.),
можно приступить непосредственно к настройке сервера. вещаемого в сеть.
В принципе, для решения поставленной задачи вполне мож- ! Advertisement – позволяет вставить в список реклам-
но обойтись способом вещания всех файлов из папки, рас- ный ролик. Данный пункт особенно интересен, когда в
смотренным в предыдущей статье [1]. Но для разнообра- качестве источника рекламных вставок используется
зия мы рассмотрим другой способ – с использованием сер- ASP- и CGI-скрипт.
верных списков воспроизведения (server-side playlist). В этом ! Sequence – объект-последовательность. Определяет
случае из произвольного набора файлов, папок, потоков с последовательность воспроизведения. Все медиа-источ-
кодировщиков и с других точек распространения можно ники, перечисленные в рамках элемента sequence, бу-
собрать общий список воспроизведения, содержимое ко- дут воспроизводиться в строго указанном порядке.
торого будет «вещаться» в указанном нами режиме (unicast ! Switch – объект-переключатель. Позволяет определить
или multicast) и порядке. Кроме того, вышеперечисленный «альтернативные» медиа-источники, которые будут ис-
контент можно дополнительно «разбавить» с помощью так пользованы в случае, если основной источник будет не-
называемых «рекламных заставок», (например, медиафай- доступен. Данный объект очень полезен при организа-
лы, описывающие нашу радиостанцию, рекламу спонсора ции вещания «живых» источников, например, его мож-
или хостинг-провайдера)2. но использовать для обработки ситуаций, в которых ис-
Итак, откроем уже знакомую нам оснастку сервера точник временно не доступен.
Windows Media и создадим broadcast-точку вещания radio, ! Exclusive – позволяет определить набор медиа-источ-
работающую по списку воспроизведения (см. рис. 1). ников, порядок воспроизведения которых может менять-
ся (например, один медиа-файл может «прерывать» вос-
произведение другого).
! priorityClass – данный параметр определяет, как один
объект прерывает воспроизведение другого. Обычно он
используется совместно с параметром Exclusive.
! clientData – позволит отображать дополнительную ин-
формацию (исполнитель, название альбома и т. д.) о
медиа-источнике во время ее воспроизведения.
1
Для потока, доступного через dial-up рекомендуется кодировать с битрейтом 64 Кбит (ключ -a64).
2
Хотя для вставки «настоящей» рекламы все же лучше использовать вещание на основе скриптов.
3
При желании можно использовать и более сложную структуру списка воспроизведения. Например, с помощью объектов sequence можно
разбить день на несколько отрезков, в рамках которых будет вестись вещание музыки определенного жанра.
4
Доступны в разделе «Properties», когда в дереве навигации (слева) выбран сам сервер.
5
Последние две опции появляются после установки Service Pack 1 для Windows Server 2003.
6
Описание процедуры анонсирования multicast-точки распространения можно найти в [1] или в документации для Winows Media Services 9.
7
Для того чтобы наша радиостанция была реально доступна из Интернета (поток unicast), возможно, потребуется дополнительная настрой-
ка маршрутизаторов и межсетевых экранов (открыть TCP-порты 554 и 1755).
8
Как можно увеличить это число, будет показано позже.
50
администрирование
ние ими может осуществляться либо через встроенный банально не хватить, а внешнего интерфейса питания
веб-сервер, либо при помощи специализированного ПО, на USB-веб-камерах обычно не бывает.
устанавливаемого на компьютер администратора. Не- ! Способ 3. Использование «специализированных» USB-
которые модели имеют возможность записи по сигналу удлинителей. С их помощью можно работать с USB-ус-
от встроенного детектора движения, что является не- тройствами, отдаленными на достаточно большое рас-
маловажным в системах наблюдения. Отличительным стояние (до 500 м) [2]. В состав таких удлинителей вхо-
плюсом камер данного типа является то, что благодаря дят два модуля – локальный (устанавливается в компь-
использованию интерфейса Ethernet, камеру можно «от- ютер) и удаленный (устанавливается поблизости от USB-
нести» от компьютера-кодировщика практически на устройства). Для соединения модулей используется либо
любое расстояние9. Платой за такую «переносимость» обычная витая пара 5-й категории (до 100 м) либо опто-
является цена, которая в среднем превышает значения волокно (до 500 м). Использование такого рода удлини-
для аналогичных USB-собратьев. телей для веб-камер мне кажется несколько сомнитель-
! Беспроводные веб-камеры. Во многом похожи на ка- ным хотя бы потому, что стоимость одного удлинителя
меры второго типа, за исключением того, что вместо скорее всего будет в несколько раз превышать сто-
проводного Ethernet 802.3 беспроводные камеры ис- имость веб-камеры.
пользуют 802.11a/b/g. Соответственно, для них обяза-
тельным условием является наличие отдельного пита- Будем считать, что, используя вышеприведенную инфор-
ния. мацию, мы смогли выбрать и разместить камеры, и теперь
самое время перейти к их настройке, но сначала:
Теоретически в системах вещания на основе Windows
Media можно использовать любые типы веб-камер, главное, «Обучаем» сервер
чтобы на компьютере-кодировщике был установлен соот- При работе с веб-камерами мы будем использовать режим
ветствующий драйвер захвата изображения (если для дан- «push», инициатором передачи в котором выступает сама
ного типа камеры он вообще существует). Если такой драй- машина с веб-камерой. Первое, что нам необходимо сде-
вер для камеры есть, то для просмотра «картинки» можно лать, – создать «шаблон точки распространения», который
использовать не только прилагаемое в комплекте ПО (или будут использовать все кодировщики при создании соб-
встроенный веб-сервер), но и обычный проводник Windows ственных «точек» на медиасервере. Для этого откроем уже
и кодировщик Windows Media. Описываемая далее систе- знакомую нам оснастку «Windows Media Services» и созда-
ма вещания будет создаваться с использованием самых дим точку распространения wc_template:
обычных (и, вероятно, наиболее распространенных) веб-ка-
мер Logitech QuickCam Express с интерфейсом USB.
9
Особенно если попутно использовать модели, поддерживающие Power over Ethernet (PoE).
10
Максимальное «увеличение» длины определяется конкретной связкой chipset, кабель, камера. Надежность работы веб-камеры на задан-
ном расстоянии лучше всего определять «по факту»: если камера с данным набором удлинителей, 30fps и максимальным разрешением
нормально работает в течение нескольких часов, значит, скорее всего, все нормально. Если возникают проблемы, то, вероятно, длину
кабеля следует уменьшить.
11
В этом случае клиенты, которые не смогли подключиться с использованием multicast, будут автоматически подключаться с использовани-
ем unicast.
12
В случае если домена нет, можно попробовать создать на сервере Windows Media и всех машинах-кодировщиках локального пользовате-
ля с одним и тем же именем и паролем.
13
Так как в режиме push кодировщик «помещает» медиапоток на сервер, пользователь, с правами которого запущен кодировщик, должен
иметь соответствующие права на медиасервере. В нашем случае эти права есть у пользователя webcam и всех администраторов домена.
14
По субъективным наблюдениям, «сносное» качество при разрешении 320х240 и кодеке wmv9 начинается с потока 100 Кбит.
52
администрирование
Если же все пройдет успешно, то мы увидим уже знако- Использовать службу достаточно просто. Первое, что
мый нам диалог анонсирования multicast-точек распрост- вам потребуется сделать, – настроить кодирование с тре-
ранения15. Создадим файлы анонса и поместим их на веб- буемыми параметрами с помощью стандартного кодиров-
сервер. При правильных настройках после нажатия кнопки щика Windows Media. Затем необходимо убедиться, что
«Start Encoding» кодировщик примется за работу, на сер- все работает как нужно, и сохранить настройки в файле с
вере Windows Media автоматически активизируется точка расширением .wme. После чего необходимо скомпилиро-
вещания, и поток с камеры «польется» ко всем клиентам вать исполняемый файл службы и зарегистрировать его
(не забываем, что мы используем multicast). в системе с помощью прилагаемой утилиты (попутно ука-
зав имя учетной записи, с правами которой служба будет
Когда возможностей кодировщка работать). Сразу же после этого, если все настройки за-
не хватает даны правильно, служба запустится, создаст все необхо-
Иногда при использовании служб Windows Media возмож- димые файлы анонсов и начнет кодирование. На сервере
ностей стандартного кодировщика оказывается недоста- в это время будет активирована соответствующая точка
точно. Например, при организации вещания с большого вещания, и передаваемый поток станет доступен вам для
количества веб-камер настраивать и запускать кодиров- просмотра:
щик вручную на каждой машине надоедает достаточно
быстро. Кроме того, если для кодирования используются
современные офисные машины (производительности ко-
торых с лихвой хватает для работы офисных приложений),
то работающим за этими машинами людям может не по-
нравиться постоянное присутствие «постороннего прило-
жения».
Еще больше данная ситуация не будет нравиться адми-
нистратору, которому для обеспечения нормальной рабо-
ты камер придется «бороться» с пользователями, закры-
вающими «лишние окна». И хотя попытаться «скрыть» ра-
боту кодировщика можно и с помощью стандартных средств
(например, при помощи описанной выше «VBS-обертки»,
работающей в командной строке), получить стабильно ра-
ботающее решение таким способом вряд ли получится.
В этом случае на помощь приходит пакет Windows Media
Encoder SDK. Как и другие пакеты для разработчиков, дан- Ðèñóíîê 7. Ñèñòåìà âåùàíèÿ ñ âåá-êàìåð
ный SDK содержит все необходимое для создания собствен- Само приложение, а также инструкцию по его сборке и
ных приложений с использованием функциональности ко- установке можно найти на сайте проекта [3].
дировщика Windows Media Encoder. Помимо исчерпываю-
щей документации, описывающей интерфейсы объектов ко- Подводим итоги
дировщика, в состав SDK также входят законченные при- Итак, теперь наш медиасервер способен передавать видео-
ложения и примеры вызовов методов объектов для трех данные с TV-тюнера (часть 1) и веб-камер, предоставлять
языков программирования: C++, C# и Visual Basic. совместный доступ к музыкальным файлам, а также к ма-
С использованием этого богатого инструментария было териалам маленькой видеотеки. Но не следует думать, что
разработано специальное приложение-кодировщик, обла- на этом возможности Windows Media заканчиваются. Вме-
дающее следующими возможностями: сте с технологией DRM (Digital Rights Managment) возмож-
! Работа в качестве системной службы. но создание коммерческих систем17, совместно с Microsoft
! Автоматическое возобновление сессии кодирования Producer for PowerPoint можно с легкостью организовывать
после сбоев (при временном извлечении камеры или вещание презентаций, а благодаря наличию хорошего SDK
потере связи с сервером). ко всем компонентам применение Windows Media ограни-
! Работа со стандартными файлами кодировщика (.wme). чивается только одним – полетом ваших мыслей!
! Автоматическое создание файлов анонсов.
! Возможности журналирования и оперативного оповеще- Литература, ссылки:
ния (системный журнал, e-mail). 1. Платов М. Система вещания на основе Windows Media
! Автоматическая активация драйвера веб-камеры16. Services 9. – Журнал «Системный администратор», №4,
апрель 2005 г. – 28-33 с.
На данный момент приложение распространяется толь- 2. http://www.ihse.de/russian/417-xx.htm.
ко в исходных кодах, для компиляции которых использует- 3. http://sourceforge.net/projects/wcstreaming.
ся среда MS Visual Studio.NET 2003.
15
При использовании режима push анонс делается только на кодировщике.
16
В случае если драйвер отключен и у службы есть соответствующие права.
17
http://www.mtv.com/overdrive.
АВТОМАТИЗАЦИЯ MS WINDOWS,
ИЛИ AUTOIT КАК МЕЧТА ЭНИКЕЙЩИКА
ЧАСТЬ 2
С базовым функционалом AutoIt вы уже познакомились
в первой части статьи и представляете, как использовать
его для автоматизации простейших операций в MS Windows.
Расcмотрим применение AutoIt при решении практических
задач администрирования.
АЛЕКСЕЙ БАРАБАНОВ
Локализации ный перехватчик данных. В версии 3 он называется «AutoIt
v3 Active Window Info». За основу разработки берем любой
Отправляйте срочную почту ЗАГЛАВHЫМИ БУКВАМИ.
из аналогичных текстов, рассмотренных в [1], из которого в
Hаш почтовый сервер ее распознает и отправит быстрее всего!
процессе редактирования выкидываем всё лишнее (не за-
Отдельно рассмотрим вопрос о приложениях с кирилличес- бывайте, добродетель сисадмина – лень). Затем устанав-
кими текстами внутри окон. Проиллюстрируем решение ливаем наше приложение. Дождавшись первого вопроса к
этой проблемы на примере установки русифицированной оператору, анализируем, как можно «поймать» это окно в
программы. Выберем почтовый клиент Mozilla Thunderbird. AutoIt. В отношении кириллических текстов есть такая под-
Как и в первом случае (см. начало статьи [1]), процедура сказка, что надо пользоваться процедурой «cut-and-paste»
разработки заключается в том, что запускается специаль- для получения правильной кодировки. Но, к сожалению, это
54
администрирование
не срабатывает. Как видно на рис. 1, попытка перенести Send ( '{ENTER}' )
текст из «перехватчика» окон в редактор с программой при- MsgBox ( 0, 'AutoIt', 'Done' )
Exit
водит к появлению нечитаемого набора символов. Предпо-
ложение, что так и должно быть, не выдерживает элемен- После запуска эта программа приводит нас к следую-
тарной проверки. щему этапу разработки, смотрите рис. 3. Далее все дела-
ется аналогично тому, как создавалась программа для ус-
тановки AutoIt v3 [1].
Ðèñóíîê 1
Может быть, стоит сменить редактор? Ведь секрет в том,
что надо записать в текст скрипта требуемую фразу в ори- Ðèñóíîê 3
гинальной кодировке. То есть редактор должен позволять Вот что должно получиться в конце концов:
точно указывать кодировку документа при сохранении. Из
находящихся под рукой подходит MS Word. При этом, как и AutoItSetOption ( "WinTitleMatchMode", 2 )
AutoItSetOption ( "WinDetectHiddenText", 1 )
ожидалось, «cut-and-paste» тоже не приводит к появлению ; open free desktop
текста в правильной кодировке. Но текст, введенный «вруч- WinMinimizeAll ( )
Sleep ( 1000 )
ную», можно сохранить в нужной кодировке. В данном слу- Run ( 'Thunderbird_Setup_1.0.exe' )
чае предполагаем, что заголовок окна установщика Mozilla ;Run ( $CmdLine[1] )
Thunderbird написан в cp1251, и поэтому сохраняем текст в WinWait ( 'Mozilla Thunderbird Óñòàíîâêà' )
кириллице (Windows). Все описанное продемонстрировано Send ( '{ENTER}' )
WinWait ( 'Óñòàíîâêà Thunderbird - Ëèöåíçèîííîå ñîãëàøåíèå' )
на рис. 2. Send ( '{TAB}{SPACE}{ENTER}' )
WinWait ( 'Óñòàíîâêà Thunderbird - Òèï óñòàíîâêè' )
Send ( '{ENTER}' )
WinWait ( 'Âûáîð êîìïîíåíòîâ' )
Send ( '{ENTER}' )
; 'Óñòàíîâêà Mozilla Thunderbird- Íà÷àëî óñòàíîâêè'
WinWait ( 'Óñòàíîâêà Mozilla Thunderbird- Çàâåðøåíèå' )
Send ( '{SPACE}{ENTER}' )
;MsgBox ( 0, 'AutoIt', 'Done' )
Exit
# cp setup_pptp.exe.zip ~/bin
56
администрирование
тер, где нужно настроить подключение к офисному VPN. телям по телефону, что и как надо открыть, запустить и
Далее останется лишь запустить разархивированную про- посмотреть. Но ведь можно заранее подготовить програм-
грамму, которая настроит соединение, и при подключении му, которая проделает все манипуляции, проверит ответы
указать логин и пароль из текста письма. После выполне- и напишет резюме. Что нам потребуется, если придется про-
ния всех манипуляций дискету или USB Flash диск придет- вести удаленную диагностику? Правильно – исправность
ся уничтожить... Шутка, конечно, но позаботиться об унич- сети! Именно это и надо проверить автономно и без учас-
тожении информации надо обязательно! тия сисадмина. Далее приведен вариант такой программы:
Поскольку сервер VPN сделан на GNU/Linux, то скрипт,
который настраивает пользовательский логин на сервере, AutoItSetOption ( "WinTitleMatchMode", 2 )
AutoItSetOption ( "WinDetectHiddenText", 1 )
можно написать на языке интерпретатора bash. Например, AutoItSetOption ( "SendAttachMode", 1 )
так: ; open free desktop
WinMinimizeAll ( )
Sleep ( '1000' )
#!/bin/sh ; îáíîâèì dhcp-àäðåñà
FCHAP=/etc/ppp/chap-secrets RunWait ( @ComSpec & " /c ipconfig /renew" )
UNAME=$1 If StringLeft( @IPAddress1, 3 ) == '127' Then
UIP=$2 MsgBox ( 0, 'Network Status', ↵
( [ "$UNAME" != "" ] && [ "$UIP" != "" ] ) || { 'Íåèñïðàâåí ñåòåâîé àäàïòåð èëè êàáåëü ↵
echo "Use as : $SELF <user-name> <ip>"; exit -1 ; } íå ïîäêëþ÷åí', 100 )
D=`cat $FCHAP | grep -e "^$UNAME[[:space:]]"` Else
[ "$D" == "" ] || { If StringLeft( @IPAddress1, 3 ) == '169' Then
echo "User \"$UNAME\" already in database"; exit -1 ; } MsgBox ( 0, 'Network Status', ↵
T=`getent passwd | grep ^$UNAME:` 'Íåäîñòóïåí ñåðâåð èëè íå ïîäêëþ÷åí ↵
[ "$T" != "" ] || { ñåòåâîé êàáåëü', 100 )
echo "Chosed <user-name>=$UNAME not found in passwd"; ↵ Else
exit -1 ; } If StringLeft( @IPAddress1, 10 ) == '192.168.0.' Then
PSW=`pwgen -c -n 9 1` ;------ address OK
H="officepptp" $i = URLDownloadToFile ( 'http://www.localservernet/' , ↵
echo -e "$UNAME\t\"$H\"\t$PSW\t\"$UIP\"" >> $FCHAP @MyDocumentsDir & '\tmp.html' )
SRV=office.enterprice.domain FileDelete ( @MyDocumentsDir & '\tmp.html' )
cat <<EOT | ↵
biabam /root/bin/setup_pptp.exe.zip ↵ If $i == 1 Then
-s "Extern login for pptp vpn access." $UNAME@localhost $j = URLDownloadToFile ( 'http://www.google.com/' , ↵
Dear user. @MyDocumentsDir & '\tmp.html' )
FileDelete ( @MyDocumentsDir & '\tmp.html' )
IT staff has prepared extern login to enterprise network using If $i == 1 Then
PPtP VPN for you personally. Tweak PPtP client on workstation MsgBox ( 0, 'Network Status', 'Ñåðâåð èñïðàâåí. ↵
to connect on extern IP-address or FQDN $SRV. Äîñòóï â Èíòåðíåò ðàçðåøåí', 100 )
You must login as "$UNAME" with passphrase "$PSW". Else
MsgBox ( 0, 'Network Status', 'Ñåðâåð èñïðàâåí. ↵
Dont forget or loss passphrase ! If this case you must inform Èíòåðíåò íåäîñòóïåí', 100 )
IT staff urgently ! After correction we will send new passphrase EndIf
to you by local e-mail. Else
MsgBox ( 0, 'Network Status', 'Ñåðâåð íå îòâå÷àåò', 100 )
IT staff. EndIf
EOT ;------
exit Else
MsgBox ( 0, 'Network Status', ↵
'Íåèçâåñòíûé àäðåñíûé äèàïàçîí', 100 )
Перед вами очень простой скрипт. Он запускается с двумя EndIf
EndIf
параметрами – пользовательский логин и адрес, который EndIf
выделяется для удаленного компьютера при создании крип- Exit
тованного туннеля. Если этот скрипт запускается на компь-
ютере, где создаются VPN-бюджеты для нелокальных Программа заставляет компьютер заново запросить ди-
пользователей, то проверку «getent passwd» надо исклю- намический адрес и по установившемуся значению диагно-
чить. Применение описанной технологии позволяет избе- стирует состояние сети. Здесь предполагается, что правиль-
жать проблем в тех случаях, когда в ответ на радостное ный адрес выдается DHCP из диапазона 192.168.0.0/24. Да-
сообщение сисадмина о выделении пользователю логина лее, если локальная сеть работает, делается попытка под-
VPN следует вопрос, «как это настроить», а визит к пользо- ключиться к тестовому внутреннему http-ресурсу и затем
вателю домой не входит в планы сисадмина. еще к аналогичному внешнему. Так определяется, «жив»
ли внутренний сервер и есть ли доступ к исходящему кана-
Автоматизируем службу поддержки лу в Интернет. Число тестов можно расширить. Например,
если запрос http://domain.name не проходит, но удовлетво-
Если вы столкнулись с сисадмином в выходной день в гастрономе, ряется запрос по IP-адресу, то можно сделать вывод о про-
задайте ему компьютерный вопрос. Мы работаем 24 часа в сутки
7 дней в неделю, даже в гастрономе в выходной день.
блемах с DNS. Для того чтобы воспользоваться приведен-
ной программой, надо скомпилировать ee в исполняемый
Вплотную к вопросам настройки удаленных подключений файл. Затем поместить результат, например, в директорию,
примыкают вопросы, точнее, подозрения пользователей о содержащую общий рабочий стол. Таким образом, она бу-
исправности их рабочих станций. Зачастую, когда эти воп- дет доступна всем пользователям компьютера. Либо мож-
росы на самом деле вызваны какими-то проблемами и у но поместить ее в персональный рабочий стол в профилях
сисадмина совершенно нет возможности провести диагно- прямо на сервере, что приведет к размножению ее копий
стику удаленно, приходится долго втолковывать пользова- по локальным копиям профилей после следующей же пе-
58
администрирование
ЭФФЕКТИВНО УПРАВЛЯЕМ
ПОЛЯМИ ПОЛЬЗОВАТЕЛЕЙ В AD
Предположим, вам необходимо внести ряд однотипных изменений в свойствах всех пользователей
или пользователей в пределах группы в Active Directory. Сделать их в одном поле у 10-20
пользователей не составит труда. А как быть, если количество полей 2-3, а объектов 200-300?
ИВАН КОРОБКО
ля этих целей рекомендуется использовать сцена- Параметры командной строки
рий, с помощью которого можно автоматически вне- Для успешной работы сценария необходимы следующие
сти необходимые изменения в свойства объектов параметры командной строки:
AD, практически исключив влияние человеческого ! Домен. Может быть определен в автоматическом режи-
фактора. О создании такого скрипта и пойдет речь в этой ме. Задавать его в явном виде нет необходимости.
статье. ! Название группы, к членам которой применяется скрипт,
либо наоборот: скрипт будет применен ко всем пользо-
Функционал сценария вателям домена, кроме тех, которые входят в эту груп-
Предлагаемый сценарий обеспечивает следующий функ- пу.
ционал: корректировку профиля, сценария загрузки, кор- ! Название сценария регистрации пользователей в сети.
ректировку домашнего каталога (в случае необходимости ! UNC-путь к профилю.
создание домашнего каталога по указанному шаблону и ! UNC и локальный путь к домашнему каталогу.
его предоставление в общий доступ). Все эти свойства дол-
жны быть применены только для всех пользователей, вхо- Замечание: сценарий должен запускаться только с сер-
дящих в указанную группу, либо для всех пользователей, вера, на котором необходимо корректировать домашние
не входящих в указанную группу. Выполнение одного или каталоги.
второго условия зависит исключительно от трудозатрат на
включения пользователей в группу. Определение имени домена
Имя домена может быть определено с помощью одного из
Язык создания сценария провайдеров доступа к AD: WinNT или LDAP. При выборе
В качестве языка программирования рекомендуется исполь- провайдера необходимо учесть, что WinNT в качестве ре-
зовать VBScript, т.к. он имеет ряд преимуществ перед дру- зультата выдает массив, содержащий не только текущий
гими языками программирования: домен, но и доступные рабочие группы, если таковые име-
! VBScript – встроенный в операционную систему Windows ются. Рабочие группы могут временно появиться при под-
стандартный скриптовой язык. ключении одной из рабочих станций к домену или в случае
! Поддерживает OLE-объекты, что позволяет получить подключения стороннего портативного компьютера к ресур-
доступ к AD. сам сети. Поэтому, несмотря на громоздкий синтаксис, ре-
! В нем реализована поддержка файловых систем FAT и комендуется использовать провайдер LDAP, с помощью ко-
NTFS – можно производить операции с файлами и папка- торого можно определить как длинное имя домена, так и
ми, управлять уровнями доступа к файлам (только NTFS). короткое:
60
администрирование
end if ! сделать необходимые изменения в свойствах учетной
next записи пользователя в AD.
В приведенном примере обрабатываются учетные за-
писи пользователей, не входящих в группу strGroup. Для Создание и удаление папок
того чтобы изменить условие, т.е. производить действия над Создание и удаление каталогов осуществляется с помощью
пользователями, принадлежащими группе, необходимо из- методов CreateFolder(path) и DeleteFolder(path) объекта USER.
менить условие цикла if с «if i=0 then» на «if i=1 then» или «if Параметром каждого из этих методов является путь к ка-
i<>0 then». талогу – path. Применяя эти методы, необходимо проверять
наличие или отсутствие папки перед выполнением опера-
Управление домашним каталогом ции. Приведем два примера: первым из них проиллюстри-
Сценарий должен последовательно выполнять следующие руем процесс создания новой папки C:\TempFolder, исполь-
действия: зуя обработчик ошибок; во втором – удаления папки.
! определить, существует ли у домашнего пользователя Создание папки:
каталог;
! предоставить папку в доступ с правильным именем (сме- path="C:\TempFolder"
Temp=""
на sharename); Set user=WScript.CreateObject("Scripting.FileSystemObject")
! изменить права на файловую структуру NTFS в соот- If user.FolderExists(path)=0 then
user.CreateFolder(path)
ветствии с установленными правилами; Temp= "Folder " + path + " Created "
Òàáëèöà 1. Îïèñàíèå ïàðàìåòðîâ ïîäêëàññà User
62
администрирование
ace2.AccessMask = &h20000000 Òàáëèöà 2. Îïèñàíèå ïàðàìåòðîâ êîíòåéíåðà LanmanServer
ace2.AceType = &h0
ace2.AceFlags = &h3
dacl.AddAce ace2
sd.DiscretionaryAcl = dacl
sec.SetSecurityDescriptor sd
set dacl=nothing
set sec=nothing
64
на правах рекламы
В IEEE 802.1x допускается использование различных ме- рационной системе есть встроенный супликант, а недавно
тодов и алгоритмов аутентификации. Это возможно благо- выпущенный корпорацией Microsoft update добавляет и под-
даря протоколу EAP (Extensible Authentication Protocol), в ко- держку WPA2.
торый «вкладываются» атрибуты, соответствующие тому или
иному методу аутентификации. Поэтому существует много Устанавливаем и настраиваем
разновидностей 802.1x EAP: EAP-MD5, EAP-PEAP, EAP- OpenSSL и FreeRADIUS
LEAP, EAP-SIM и т. д. В данной статье будет описана реали- Предполагается, что в системе FreeBSD 5.3 установлена
зация аутентификации в беспроводной сети на основе циф- одна сетевая карта, обновлена коллекция портов, присут-
ровых сертификатов – 802.1x EAP-TLS. Этот метод наибо- ствует Midnight Commander, а сам компьютер подключён к
лее часто используется в корпоративных беспроводных се- Интернету. В дальнейшем будем предполагать, что беспро-
тях и отличается достаточно высокой степенью защищённо- водная сеть развёртывается в корпоративной сети c мас-
сти. Кроме того, EAP-TLS иногда является одним из основ- кой 192.168.0.0/24.
ных методов защиты в сетях беспроводных провайдеров. Загружаем с ftp://ftp.openssl.org/snapshot последний ста-
бильный «снимок» (snapshot) OpenSSL (я, например, ис-
Аутентификация 802.1x EAP-TLS пользовал openssl-0.9.7-stable-SNAP-20050524.tar.gz ). Рас-
В основе EAP-TLS лежит протокол SSL v3.0, однако в отли- паковываем, конфигурируем, компилируем и инсталлиру-
чие от традиционной аутентификации по протоколу SSL (на- ем его стандартным образом:
пример, при организации защищенного http-соединения –
HTTPS) в EAP-TLS происходит взаимная аутентификация # ./config shared --prefix=/usr/local/openssl
# make
клиента и сервера. Клиент (супликант) и сервер RADIUS # make install
должны поддерживать метод аутентификации EAP-TLS;
точка доступа должна поддерживать аутентификацию В принципе на этом работу с OpenSSL можно и завер-
802.1x/EAP и не обязательно должна знать, какой метод шить. В дальнейшем он потребуется нам для генерации сер-
аутентификации используется в конкретном случае. На тификатов.
рисунке ниже изображён процесс аутентификации в бес- FreeRADIUS – довольно объёмный пакет, поэтому его, в
проводной сети с использованием EAP-TLS. отличие от OpenSSL, мы будем устанавливать из портов,
что обеспечит автоматическое разрешение зависимостей
и установку всех необходимых библиотек и приложений.
Перемещаемся в директорию /usr/ports/net/freeradius/,
затем даём команду make – ничего не выбираем из пред-
ложенных установочным сценарием опций, нажимаем «Ok».
Начинается процесс автоматической инсталляции (загруз-
ка и компиляция необходимых приложений); по ее завер-
шению следует набрать make install.
На этом с установкой FreeRADIUS покончено, можно пе-
реходить к его настройке.
Выбираем директорию FreeRADIUS: /usr/local/etc/raddb/
(все основные действия будут производиться в этом ката-
логе):
! Удаляем всё содержимое папки ./certs.
! Находясь в той же папке (./certs), даём команду:
# openssl gendh > dh
Ðèñóíîê 1. Ïðîöåññ àóòåíòèôèêàöèè 802.1x EAP-TLS
Здесь уместно закончить небольшое лирически-теоре- создаётся файл dh.
тическое отступление, которое необходимо, для того чтобы ! Там же даём команду:
получить примерное представление о том, что кроется в не-
драх безопасной беспроводной сети. Далее будет предло- # dd if=/dev/random of =random count=2
жена практическая реализация описанных выше концепций.
В качестве сервера RADIUS будет использоваться компью- создаётся файл random.
тер под управлением FreeBSD 5.3 c пакетом FreeRADIUS. Для ! Создаём папку raddb/sample и переносим в неё из raddb
организации инфраструктуры PKI (Public Key Infrastructure) все файлы с расширением .sample. Из sample обратно
будет применен пакет OpenSSL. Вся беспроводная сеть бу- в raddb копируем с изменением имени (без расширения
дет строиться на базе недорогого и надёжного беспровод- .sample) файлы: acct_users, clients.conf, dictionary,
ного оборудования D-Link. Предполагается, что на клиент- eap.conf, hints, huntgroups, preproxy_users, proxy.conf,
ских машинах установлена Windows XP SP2, т.к. в этой опе- radiusd.conf, snmp.conf, sql.conf, users1.
1
На самом деле половина из этих файлов не используется, но в radiusd.conf содержатся ссылки на них. Поэтому, чтобы не тратить время на
очистку radiusd.conf и удаление ненужных файлов, можно немного «схитрить».
2
Да и не только на точки доступа, а также на цифровые камеры, коммутаторы и т. д.
66
на правах рекламы
образом, только у них будут другие IP-адреса, каналы (если Копируем CA.all в файл СA_users.all. Затем открываем
они задаются вручную), а также значение поля «Radius последний и оставляем текст с 48 строки по 64-ю, осталь-
Secret». ные строки удаляем – оставшееся – это секция CA.all, в
которой генерируются клиентские сертификаты. Она будет
Создаём сертификаты многократно использоваться, поэтому её удобно выделить
Для начала несколько общих слов о том, что такое PKI. Это в отдельный скрипт. Открываем CA.all , удаляем из него
некая инфраструктура, каждый субъект которой обладает строки с 48 по 64-ю – всё то, что выделили в отдельный
уникальным цифровым сертификатом, удостоверяющим скрипт и сохраняем его.
его личность; помимо прочего, цифровой сертификат со- Примечание: файлы CA.all и CA_users.all – содержат сек-
держит секретный ключ. Закодированные с его помощью ретную фразу-пароль «whatever», которая используется как
сообщения можно расшифровать, зная соответствующий дополнительное средство обеспечения безопасности, при
открытый ключ. И наоборот – сообщения, зашифрованные эмиссии сертификатов и их отзыве. Человек, не знающий
открытым ключом, можно расшифровать только при помо- эту фразу не сможет ни подписать, ни отозвать сертификат.
щи секретного ключа. Каждый субъект PKI обладает откры- В принципе, кроме оператора CA, она больше никому не по-
тым и секретным ключом. надобится. Для повышения безопасности нужно заменить все
Субъектом PKI может быть как пользовательский ком- встречающиеся в скрипте CA.all и CA_users.all слова
пьютер или КПК, так и любой другой элемент сетевой инф- «whatever» на придуманный вами пароль. Его также нужно
раструктуры – маршрутизатор, веб-сервер и даже сервер будет вписать в eap.conf в строку «private_key_password =
RADIUS, что и имеет место в нашем случае. Во главе всей whatever». Далее я предполагаю, что мы оставили везде
этой системы стоит главный орган CA (Certificate Autority), пароль «whatever» без изменений. Его и будем вводить, со-
предполагается, что ему все доверяют и его все знают – он здавая клиентские, серверные сертификаты, а также от-
занимается подписью сертификатов (удостоверяет, что зывая их.
предъявитель сертификата действительно тот, за кого себя
выдаёт). Ему помогают специальные службы по приёму зап- Создаём CA и серверный сертификат
росов на сертификаты и их выдаче; номера всех выданных Запускаем CA.all. Первое, что он генерирует в интерактив-
и отозванных сертификатов хранятся в специальном реес- ном режиме – корневой сертификат CA (cacert.pem), пару
тре. В реальности всё это вроде бы большое хозяйство уме- открытый закрытый ключ (cakey.pem), открытый ключ кор-
щается на одном компьютере, и с ним легко управляется невого сертификата в формате PKCS#12 (root.der), затем
один человек3. серверный сертификат (cert_srv.pem), который мы устано-
Для создания сертификатов мы будем использовать вим на RADIUS. Все перечисленные файлы (и даже некото-
скрипты, которые идут в комплекте с FreeRADIUS. рые не перечисленные) появятся в папке CA.
! Для начала создадим свой CA – для этого надо будет Создаём CA (он будет называться «Administrator»):
сгенерировать цифровую подпись, которой будут под-
Country Name (2 letter code) [AU]:RU
писываться все выданные им сертификаты, а также от- State or Province Name (full name) [Some-State]:Moscow
крытый ключ. Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
! Затем создадим серверный сертификат, установим его Organizational Unit Name (eg, section) []:megacompany.central.office
Common Name (eg, YOUR name) []:Administrator
на RADIUS. Email Address []:admin@megacompany.ru
! И в заключение сгенерируем сертификаты для установ-
ки на клиентские компьютеры. Создаём сертификат для RADIUS:
! в строке 32 исправим путь – она должна выглядеть вот Создаём клиентские сертификаты
так: Для генерации клиентских сертификатов используем наш
сценарий CA_users.all. Для примера создадим сертификат
echo “newreq.pem” | /usr/local/openssl/ssl/misc/CA.pl -newca для пользователя user1:
3
Описанная структура является простейшим вариантом PKI; возможны также более сложные структуры, в которых участвует более одного
CA, между которыми устанавливаются сложные иерархические доверительные отношения.
68
на правах рекламы
«Administrator …. Установить данный сертификат?»
жмём «Да»;
! выдаётся сообщение «Импорт успешно выполнен.», жмём
«ОК» два раза.
Устанавливаем пользовательский сертификат user1.p12.
! Два раза щелкаем мышью по файлу user1.p12, жмём
«Далее» два раза.
Ðèñóíîê 7
Ðèñóíîê 6
! Здесь надо ввести пароль, который мы установили для
сертификата user1. В нашем примере это «user1_pass-
word» (ну или то, что вы придумали), он условно напи-
сан на дискетке с сертификатом. Вводим его и нажима-
ем «Далее».
! Жмём «Далее», затем «Готово» – выдаётся сообщение
«Импорт успешно выполнен», жмём «ОК».
Ðèñóíîê 12
! Нажимаем «Ok», на этом настройка сетевой карты и суп-
ликанта завершена.
и изучаем, кто поставщик сертификата. Удостоверяем- Далее идёт всё, что изображено на рис. 1, в том числе
ся, что это наш корпоративный CA «Administrator», ко- обмен сертификатами.
торый мы создали (рис. 12). Окончание вывода:
70
на правах рекламы
User-Name = "Andrey Ivanov" radius# openssl ca -gencrl -out ca.crl
Finished request 4
Using configuration from /etc/ssl/openssl.cnf
Going to the next request 963:error:0E06D06C:configuration file routines:NCONF_get_string:no value:
Waking up in 6 seconds... /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/conf/conf_lib.c:
--- Walking the entire request list --- 329:group=CA_default name=unique_subject
Cleaning up request 0 ID 0 with timestamp 4294d303 Enter pass phrase for ./demoCA/private/cakey.pem:
Cleaning up request 1 ID 1 with timestamp 4294d303 DEBUG[load_index]: unique_subject = "yes"
Cleaning up request 2 ID 2 with timestamp 4294d303
Cleaning up request 3 ID 3 with timestamp 4294d303 Снова по ходу выполнения команды требуется ввести
Cleaning up request 4 ID 4 with timestamp 4294d303
Nothing to do. Sleeping until we see a request.
секретный пароль «whatever». В результате в директории
/raddb/CA/ появляется файл ca.crl – это и есть список отзы-
Аутентификация прошла успешно, компьютер получает ва. Внутри он похож на шифровку, просмотреть его можно
IP-адрес от DHCP-сервера и теперь может работать в бес- так:
проводной сети. К слову сказать, если на компьютере ус-
тановлено несколько клиентских сертификатов (такое тоже radius# openssl crl -in ca.crl -text -noout
бывает), то супликант предложит выбрать, какой из них Certificate Revocation List (CRL):
использовать для конкретной аутентификации. Version 1 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: /C=RU/ST=Moskow/L=Moskow/O=MegaCompany Co. Ltd./
Отзыв сертификатов OU=megacompany.central.office/CN=Administrator/
Казалось бы, уже всё ясно – защищённая беспроводная сеть emailAddress=admin@megacompany.ru
Last Update: May 27 23:33:19 2005 GMT
уже построена, но на самом деле остался ещё один важный Next Update: Jun 26 23:33:19 2005 GMT
аспект, который мы сейчас рассмотрим. Предположим, что Revoked Certificates:
Serial Number: D734AD0E8047BD8D
надо запретить доступ в беспроводную сеть одному из ком- Revocation Date: May 27 23:13:16 2005 GMT
пьютеров (например, личному ноутбуку одного из сотрудни- Signature Algorithm: md5WithRSAEncryption
ков), на который ранее мы установили сертификат. Причи- d4:22:d6:a3:b7:70:0e:77:cd:d0:e3:73:c6:56:a7:9d:b2:d5:
0a:e1:23:ac:29:5f:52:b0:69:c8:88:2f:98:1c:d6:be:23:b1:
ны могут быть самыми банальными – увольнение сотрудни- b9:ea:5a:a7:9b:fe:d3:f7:2e:a9:a8:bc:32:d5:e9:64:06:c4:
ка, сокращение и т. д. Для решения этой задачи необходимо 91:53:37:97:fa:32:3e:df:1a:5b:e9:fd:95:e0:0d:35:a7:ac:
11:c2:fe:32:4e:1b:29:c2:1b:21:f8:99:cd:4b:9f:f5:8a:71:
пометить в реестре (/usr/local/etc/raddb/CA/demoCA/index.txt), b8:c9:02:df:50:e6:c1:ef:6b:e4:dc:f7:68:da:ce:8e:1d:60:
в котором хранится список всех подписанных сертификатов, 69:48:ad:
сертификат пользователя, которому мы хотим запретить
доступ в сеть, как отозванный. После этого необходимо со- Видим в нём один отозванный сертификат с серийным
здать (или обновить, если он уже есть) список отзыва серти- номером D734AD0E8047BD8D (он же user2, он же Mikhail
фикатов (CRL – Certificate Revocation List). А затем настро- Ivanov).
ить RADIUS таким образом, чтобы при аутентификации Обратите внимание, важным свойством CRL является
пользователей он обращался к этому списку и проверял, не срок его действия. Он должен быть обновлён не позднее
состоит ли в нём предъявляемый клиентский сертификат. его истечения (Update: Jun 26 23:33:19 2005 GMT). Срок дей-
В ходе наших предыдущих экспериментов мы создали ствия CRL можно задать в файле openssl.cnf (у нас был
два сертификата для user1 (Andrey Ivanov) и user2 (Mikhail default_crl_days = 30).
Ivanov). Для примера запретим доступ в беспроводную сеть
последнему. Проделаем следующие три шага. Шаг 3
Подключаем список отзыва к FreeRADIUS:
Шаг 1 ! копируем файл /raddb/CA/ca.crl в /raddb/certs/ (поверх
Помечаем в реестре сертификат user2 как отозванный: старого ca.crl, если он там есть);
находясь в /usr/local/etc/raddb/CA даём команду: ! заходим в /raddb/certs/ и приклеиваем ca.crl к файлу
cacert.pem:
radius# openssl ca -revoke user2.pem
Using configuration from /etc/ssl/openssl.cnf cat cacert.pem ca.crl > ca.pem
943:error:0E06D06C:configuration file routines:NCONF_get_string:no value:
/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/conf/conf_lib.c:
329:group=CA_default name=unique_subject
Enter pass phrase for ./demoCA/private/cakey.pem:
! вносим небольшие изменения в секцию TLS-файла
DEBUG[load_index]: unique_subject = "yes" /raddb/eap.conf
Revoking Certificate D734AD0E8047BD8F.
OpenSSL ругается, но делает то, что нам нужно. В ходе вы- # çäåñü ìû èçìåíèëè cacert.pem íà ca.pem
CA_file = ${raddbdir}/certs/ca.pem
полнения команды необходимо ввести секретную фразу-па- CA_path = ${raddbdir}/certs #äîáàâëÿåì ýòó ñòðîêó
роль («whatever»). При этом в /raddb/CA/demoCA/index.txt check_crl = yes # è ýòó ñòðîêó
сертификат будет помечен как отозванный, в чём мы можем
убедиться, просмотрев данный файл. Напротив записи, со- Попробуем аутентифицировать в сети компьютер с сер-
ответствующей отозванному сертификату, стоит буква «R». тификатом user2. Аутентификация не проходит, а user1 –
беспрепятственно входит в беспроводную сеть, что и тре-
Шаг 2 бовалось доказать.
Создаём список отзыва (CRL). Если он уже есть, то он об- Вот теперь защищённую беспроводную сеть можно счи-
новится. Находясь в /usr/local/etc/raddb/CA, даём команду: тать построенной.
УСТАНАВЛИВАЕМ
SYMANTEC ANTIVIRUS 9.0
В КОРПОРАТИВНОЙ СЕТИ
Symantec Antivirus CE 9.0 – продукт
корпоративного уровня, который позволяет
развернуть и сконфигурировать весь
комплекс удаленно и автоматически
в Windows-сетях любого масштаба.
Его несомненными преимуществами являются
полная автоматизация процесса установки
и настройки, возможность мгновенного
отражения изменений конфигурации
на всех необходимых клиентах, а также
грамотная защита от несанкционированного
вмешательства в работу антивирусного
монитора.
РОМАН МАРКОВ
сли вы используете в сети компьютеры с NT-система- ! Server Program;
ми, то для установки и конфигурирования антивирус- ! Alert Management System.
ной защиты на всех компьютерах вам не придется от-
ходить от своего компьютера – гибкие возможности удален- Разумеется, что Server Program выбираем при первона-
ной установки и настройки помогают сделать это быстро и чальной установке в любом случае, а вот Alert Management
непринужденно. При корректном выполнении всех инструк- Console – только по желанию. Данный компонент позволя-
ций процесс займет не более часа, даже если количество ет рассылать уведомления об обнаружении вируса – по
компьютеров измеряется сотнями. Среди возможностей кли- почте, в виде PopUp-сообщений и пр. При установке ком-
ентской части имеются стандартные для антивирусов функ- поненты «Alert Management Console» в меню пуск появится
ции сканера, мониторинга в режиме реального времени, а одноименный ярлык. Настройка рассылки таких оповеще-
также дополнительные возможности: онлайн-сканирование ний интуитивно понятна и не нуждается в дополнительном
POP3/IMAP/SMTP трафика, работа с Exchange- и Lotus описании. Общее количество случаев нейтрализации опас-
Domino-клиентами. Консоль администрирования выполнена ных и подозрительных файлов даже в средних сетях очень
в виде стандартной mmc. Недостатком продукта является велико, так как очень многие веб-ресурсы содержат такие
отсутствие механизмов защиты от Ad-software, проявляюще- объекты. Поэтому я удалил функцию Pop-Up оповещения
го в последнее время все большую активность. Продукт об- уже через неделю после начала использования продукта.
ладает множеством настроек, а его установка и первоначаль- Мое сугубо субъективное мнение – данный компонент аб-
ное конфигурирование не совсем тривиальный процесс, по- солютно не нужен.
этому читателю будет полезно ознакомиться с подробным В следующем окне выбираем, на какой компьютер в сети
описанием процесса настройки. необходимо установить сервер антивируса. Если вы обла-
даете правами администратора на требуемый компьютер,
Установка то установку можно произвести по сети. То есть необяза-
Сначала устанавливаем сервер антивируса (их может быть тельно осуществлять локальный вход на целевой компью-
несколько – для получения отказоустойчивости). Далее опи- тер – установку можно произвести удаленно с любой NT-
сывается установка с фирменного дистрибутивного диска, системы (используется RPC). Нажимаем «Next», при необ-
включающего помощник установки компонентов. Если не ходимости меняем путь установки (по умолчанию – Program
сработал автозапуск, открываем файл Setup.exe, находящий- Files\SAV).
ся в корне дистрибутивного диска. В открывшемся меню вы- Задаем имя группы антивируса. Если в сети использу-
бираем «Install Symantec Antivirus → Deploy Antivirus Server». ется несколько разных серверов SAV, с различными на-
Указываем вариант установки – новая или обновление пре- стройками, то имена их групп также должны отличаться.
дыдущей версии, а также устанавливаемые компоненты: Если несколько серверов антивируса используется для по-
72
безопасность
лучения отказоустойчивости, то имя их группы должно быть то в консоли отобразятся все найденные. Иначе кликаем
одним и тем же. При обнаружении в сети уже существую- правой клавишей мыши по значку «System Hierarchy», из
щих серверов SAV, имена их групп появятся в списке, и для контекстного меню выбираем «New → Server Group» и вво-
присоединения нового сервера к ним достаточно кликнуть дим имя созданной нами группы, а также ее пароль.
по имени группы. При запросе пароля придумываем новый Будьте внимательны при конфигурировании целевой
пароль администратора группы серверов антивируса, либо группы. Кликаем по требуемой группе правой клавишей и
вводим пароль существующей группы, если мы присоеди- выбираем «Unlock Server Group». Потребуется ввести па-
няем дополнительный сервер к уже существующей группе. роль. Если не хочется вводить его в будущем – установите
Далее выбираем тип запуска. Лучше, конечно, устано- флажок «Save this Password». В открывшемся иерархичес-
вить «Automatic Startup». Пропускаем информационные со- ком списке прежде всего кликаем по значку нашего сервера
общения в следующих окнах и начинаем установку. В про- и в появившемся контекстном меню выбираем «Make Server
цессе инсталляции будут выведены сообщения об ошиб- a Primary Server» и подтверждаем смену роли. Если серве-
ках (если они будут), и при нормальном завершении статус ров антивируса несколько, то один из них будет Primary, а
изменится на Finished, а в поле «Action» появится сообще- остальные – резервными для отказоустойчивости.
ние о необходимости перезагрузить целевой компьютер. Изменения конфигурации как самого сервера, так и кли-
Как правило, на корректно настроенной системе ошибок ентов производятся путем вызова соответствующих консо-
не бывает (во всяком случае, я ни разу не сталкивался с лей настройки. Все они сгруппированы в контекстное меню,
этим). Если же ошибка все-таки появилась, то ее подроб- вызываемое правой клавишей мыши – «All Tasks». В даль-
ное описание можно найти здесь же, в дополнительном окне нейшем описании словосочетание «кликните правой кла-
описания ошибки. вишей по объекту и выберите «All Tasks → Symantec
После перезагрузки устанавливаем консоль админист- Antivirus» по умолчанию опускается – будут указываться
рирования (Symantec System Center – далее SSC). Ее так- только пункты в этом меню. Все настройки в открываемых
же можно инсталлировать на любой компьютер сети. Ис- консолях относятся к тому объекту, по которому вы кликну-
ключение составляют сервера в режиме сервера приложе- ли при выборе требуемой опции, поэтому клик правой кла-
ний (терминалов) – на них установить консоль админист- вишей мыши для вызова меню необходимо производить
рирования не удастся – сначала необходимо удалить служ- именно на указанном объекте.
бу сервера терминалов, затем добавить консоль, и только Настраиваем наш основной сервер антивируса.
после этого восстановить службы терминалов. На сайте
технической поддержки Symantec данная несовместимость Управляем обновлениями:
объясняется (по мнению специалистов компании) тем, что Virus Definition Manager
установка консоли администрирования на сервер приложе- Настраиваем порядок и расписание получения обновлений
ний представляет потенциальную опасность из-за возмож- нашим сервером. Выбираем «Update the Primary Server of
ности получения удаленным пользователем контроля над this Server Group only» и нажимаем «Configure». При такой
приложением. Помимо этого возможны конфликты и отсут- настройке только Primary Server будет получать обновле-
ствие полноценного управления даже администратором ния из Интернета, а все остальные сервера получат их от
системы из-за ограниченности работы в режиме удаленно- него. Таким образом мы экономим внешний трафик. Для
го рабочего стола с ID0. Я не могу претендовать на получе- получения обновлений сервер антивируса должен иметь
ние статуса эксперта в области взаимодействия SSC и ОС, доступ к веб-ресурсам Symantec Corporation по портам HTTP
поэтому позволю себе воздержаться от комментариев. Про- (80) и FTP (20,21), либо необходимо настроить подключение
ще всего добавить консоль администрирования на компь- через прокси-сервер, нажав кнопку «Source». Для автома-
ютер администратора, так как это всего лишь средство для тического обновления устанавливаем флажок «Schedule for
конфигурирования удаленного сервера. Для установки за- automatic updates» и, нажав справа кнопку «Schedule», за-
ново запускаем Setup.exe в корне дистрибутивного диска, даем расписание проверки обновлений. Устанавливаем
выбираем «Install Administrator Tools → Install Symantec «Daily → At <требуемое время>» и в «Advanced» указыва-
System Center» (для работы SSC требуется Internet Explorer ем время, через которое необходимо повторять неудачные
5.5 и выше). Отмечаем необходимые компоненты. Если на попытки обновления (Handle missed events within), а также
предыдущем шаге мы отказались от Alert Management период случайного смещения расписания обновления
System, то и Alert Management System Console устанавли- («Randomization Options → Perform Update within plus or
вать не нужно. Оставляем все остальные компоненты – их minus»). Выходим в меню «Virus Definition Manager».
назначение опишем позже. После завершения инсталля- Задаем способ получения обновлений клиентами. Вы-
ции необходимо снова перезагрузить компьютер. бираем «Update virus definitions from parent server» и, нажав
На этом установка сервера завершена. Приступаем к «Settings», задаем период проверки клиентами обновлений
конфигурированию сервера и созданию конфигурационных на сервере. Значение 60 минут является гарантией того,
шаблонов для клиентов. что клиенты будут проверять наличие обновлений ежечас-
но. Поскольку при такой настройке клиенты проверяют об-
Настраиваем сервер новления только на указанном внутреннем сервере, ника-
Запускаем SSC. Раскрываем в левой части консоли кого трафика на внешнем канале они не создадут. Если в
«Symantec System Center → System Hierarchy». Должны по- сети все компьютеры локальные, то устанавливаем фла-
явиться имена обнаруженных групп. Если их несколько – жок «Do not allow client to manually launch LiveUpdate», что-
74
безопасность
телей, которые будут со страхом сообщать, что у них «об-
наружен вирус!». Здесь же задаются типы и расположение
файлов, которые проверять не нужно. При возможном силь-
ном торможении исключите из проверки файлы, которые
скорее всего не будут содержать вирусов, но постоянно ис-
пользуются. Например, файлы БД. В противном случае вы
получите резкое замедление работы в этих базах. Поэтому
например при использовании систем «1С:Предприятие»
файловых версий не забудьте исключить из проверки фай-
лы следующих типов: dbf, cdx, md, dd, ert, log, mlg. То же
касается работы дизайнеров (файлы tiff, cdr, psd и другие),
архитекторов, инженеров видеомонтажа и пр. В противном
случае вам гарантированы жалобы на «торможение систе-
мы», так как постоянный мониторинг, например, несколь-
ких гигабайтных AVI-файлов почти завесит систему.
Однако в последнее время обнаруживаются совершен-
но непредсказуемые уязвимости при обработке вроде бы
«безвредных» файлов (например последние уязвимости,
связанные с переполнением буфера в GDI с помощью бе-
зобидного JPG-файла). Поэтому говорить о том, что в ка-
ком-то конкретном формате файла вирусы жить не могут,
мы не имеем права. Можно лишь надеяться, что не будет Ðèñóíîê 1. Ïàðàìåòðû online-ìîíèòîðèíãà êëèåíòîâ
найдено новых ошибок в обработке этих «безопасных» рыто». Закрывая замочек около конкретной настройки, вы
форматов. Здесь необходимо руководствоваться отноше- тем самым запрещаете пользователям изменять их. По
нием показателя надежности к получаемому быстродей- умолчанию все замочки открыты, однако рекомендуется зак-
ствию. рыть хотя бы критически важные – отключение защиты, из-
В опции «Drive types» снимите все галки, так как ни про- менение типов файлов, действие, производимое над обна-
верка сетевых дисков, ни сканирование CD не даст вам ни- руженными вирусами и пр.
чего, кроме значительного замедления работы системы. Ак- В идеале лучше всего запретить пользователю любые
центирую внимание, что отключение такой проверки абсо- изменения. Таким образом управлять настройками будет
лютно безопасно, если вы проверяете файлы при любом только Администратор, что является обязательным для кор-
обращении к ним – при попытке скопировать или запустить поративной системы защиты.
такой файл он будет заблокирован. Таким образом опти- Итак, настраиваем защиту файловой системы аналогич-
мальное быстродействие достигается за счет фоновой про- но серверной, запрещаем изменения настроек, при жела-
верки только тех файлов, к которым осуществляется обра- нии отключаем оповещение пользователя о найденном ви-
щение. русе и переходим на следующую закладку – Internet E-mail.
На этом конфигурирование антивирусного монитора Разрешаем защиту и в отличие от файловой системы вы-
сервера завершено и можно переходить к настройке кли- бираем файлы всех типов – мало ли что пользователю
ентов. Конфигурация защиты клиентов аналогична сервер- пришлют по почте. Добавляем действия, производимые при
ной, за некоторыми исключениями и дополнительными воз- обнаружении файла (лучше удалять), а также настраиваем
можностями, о которых будет особо сказано далее. оповещение пользователя об обнаруженном вирусе (здесь
его можно и включить, чтобы не было вопросов в стиле «Где
Настраиваем параметры мой файл?»). Также имеется возможность изменять тему
антивирусного монитора клиентов: сообщения, в котором был обнаружен запрещенный объект,
Client Auto-Protect Options вставлять в текст письма предупреждение, отправлять пре-
В этом окне настраивается антивирусный online-мониторинг дупредительные письма отправителю и получателю. Помни-
на клиентах. Суть настроек аналогична вышеописанным для те, что посылать предупреждение отправителю не привет-
сервера, однако присутствуют и новые опции (см. рис. 1). ствуется, так как очень часто при рассылке вирусов исполь-
Например, для клиентов помимо стандартной можно на- зуется подстановка чужих адресов.
страивать различные виды защиты для систем документо- Помимо этого, нажав на кнопку «Advanced», настраи-
оборота и почты: Internet E-mail (перехват и сканирование ваем дополнительные параметры (см. рис. 2).
трафика POP3/SMTP), Lotus Notes и Microsoft Exchange. При ! «Scan files inside compressed files» – проверять файлы
перехвате POP3-сессии клиент просто не получит письмо с внутри архивов, а также архивы внутри на указанную
зараженным файлом. Насколько это будет незаметно для глубину (по умолчанию – 3) . К сожалению, о том, какие
пользователя – решать вам, включая или отключая опове- типы архивов поддерживаются, ни в документации, ни
щение о вирусе, удаляя письмо вообще или вырезая из него на сайте производителя ничего не сказано.
только инфицированные вложения. ! «Server port numbers» – порты, по которым происходит
Практически у каждой опции присутствует пиктограмма обмен почтой. Обычно они стандартны – 25 и 110, но
«замочка», который имеет два положения – «открыто» и «зак- при необходимости можно изменить.
76
безопасность
Сегодня для полноценной защиты сети уже недостаточно тандема «межсетевой экран +
система обнаружения атак». Для всестороннего контроля и анализа ситуации необходимо
задействовать разные инструменты. Но только в том случае, когда возможно собрать все
данные в одном месте, можно получить действительно полную информацию о событиях,
происходящих в сети. Разработчики системы OSSIM (Open Source Security Information
Management) предоставили системным администраторам такую возможность.
СЕРГЕЙ ЯРЕМЧУК
тандартом де-факто для обеспечения безопаснос- tcptrack, способен рассказать о проблемах сети гораздо
ти сети считается использование систем обнаруже- больше. Кроме того, внушительный объем выдаваемой СОА
ния атак. В мире открытого кода несомненным ли- информации и ошибки в определении событий приводят к
дером среди такого рода продуктов является Snort. Это тому, что администратор получает большое количество
весьма функциональный и понятный инструмент, который ложных тревог. Поэтому приходится использовать и дру-
может очень многое рассказать о происходящем в подкон- гие утилиты, помогающие получить более ясное представ-
трольной сети. Но все же несмотря на достоинства систем ление о событии.
обнаружения атак, они не всегда могут дать полную карти- С другой стороны, практически все основные утилиты и
ну происходящего. Довольно часто такой инструмент, как Snort в том числе предназначены для сбора данных. Их ана-
78
безопасность
лиз лежит полностью на плечах исследователя. Поэтому настоящее время в OSSIM интегрировано большое
вполне естественно появились разработки, которые при- количество разнообразных свободных инструментов:
водят полученные данные в удобный для анализа вид. Snort, Nessus, Acid, Ntop, Nmap, P0f, Arpwatch,
Другая категория проектов своей основной задачей ста- oinkmaster, pads, tcptrack, tcpdump и некоторые другие. До-
вит интеграцию как можно большего числа приложений и полнительно возможен анализ данных, поставляемых дру-
предоставляет инструменты для анализа собранных дан- гими приложениями (например, preludeIDS, Osiris, NTsyslog,
ных. К примеру, sguil (http://sguil.sourceforge.net). Его глав- Snare, Cisco Secure IDS), которые могут быть доставлены
ной особенностью (помимо интеграции различных инстру- при помощи разных способов: syslog, snmp, сокетов и пр.
ментов), является вывод информации пользователю в ре- Открытая архитектура позволяет добавить новый датчик в
альном времени. течение нескольких часов.
Разработчики решения OSSIM основной упор делают не
на развитие новых возможностей имеющихся утилит, а На более высоком уровне система имеет монитор, на-
именно на максимальную интеграцию имеющихся прило- званный riskmeter, оценивающий риск, накопленный в те-
жений, создаваемых программистами всего мира. Для это- чение определенного промежутка времени для сети или
го их объединяют в пределах единой открытой архитекту- группы машин. Модель корреляции позволяет создавать как
ры, способной сохранить возможности и путем слияния и образцы, позволяющие определять известные и обнаружи-
поиска взаимосвязей в собранной информации получить ваемые атаки, так и образцы, определяющие неизвестные
более точный результат. Кроме обнаружения, OSSIM осу- и не обнаруживаемые ранее угрозы, строить более слож-
ществляет сопоставление сетевых событий, отсеивая часть ные модели, а также связать детекторы (обеспечивающие
ложных оповещений, и предлагает высокоуровневые инди- индикаторы) и мониторы (обеспечивающие предупрежде-
каторы, позволяющие производить инспекцию и оценивать ния) рекурсивно. Для этого применяется два принципа:
ситуацию в сети. ! Корреляция, основанная на последовательности собы-
В качестве детекторов может выступать любая програм- тий, построенных на известных уязвимостях, связыва-
ма, которая способна производить обработку информации ющая известные образцы и поведение, определяющее
(сетевой или системной) в реальном времени, все равно нападение, с помощью правил, осуществляемых стати-
каким способом: сравнением с образцом или определени- ческим аппаратом. Например, если происходит собы-
ем аномалий и выдачей предупреждения, когда такое со- тие А, затем Б, необходимо выполнить действие В.
бытие происходит. Сложность состоит в составлении правил, способных
В процессе обнаружения используются все три возмож- анализировать события абстрактно.
ные фазы: ! Корреляция, использующая эвристические алгоритмы,
! предварительная обработка; накопление по событиям и времени, что делает возмож-
! коллекционирование данных; ным обнаружение неизвестных вариантов атак и обес-
! последующая централизованная обработка информации. печивает более глобальный обзор ситуации. Для этих
целей используется накопление событий (как для всей
Если первые две фазы можно считать традиционными, сети, так и отдельных машин) с целью получения ново-
то последующая обработка собранной информации явля- го индикатора или моментальный снимок безопасного
ется центральным звеном всей системы OSSIM. Ведь имен- состояния сети. В результате создается так называемый
но на этой стадии возможно применение механизмов, по- накопленный риск, который может быть использован для
зволяющих улучшить чувствительность к обнаружению раз- оценки критических ситуаций посредством алгоритма
личных событий, в том числе и достаточно сложных, на- CALM (Compromise and Attack Level Monitor). На его вхо-
пример распределенных или растянутых по времени атак. де размещается множество событий, а на выходе – ин-
Для этого на последней стадии события располагаются по дикатор безопасного состояния сети.
приоритетам, производится оценка риска и сопоставление
с целью выявления взаимосвязи. Для оценки приоритета После такой обработки предупреждения (alerts), собран-
события используется несколько составляющих. Так, если ные детекторами и достойные внимания, будут выданы уже
происходит нападение на сервер из внешней сети и к тому как тревоги (alarms).
же сканер nessus показывает наличие уязвимости на сер- Кроме того, в OSSIM уделено внимание детальному кон-
висе, используемом нападающим, то такому событию при- тролю за каждой машиной, для чего используются три типа
сваивается более высокий приоритет, чем событию, в ко- мониторинга. Каждый из этих типов существенен для сис-
тором пользователь внутренний сети не может подключить- темы безопасности, и без них администратор фактически
ся к принтеру. Если нападение направлено на сервис, не слеп и не может отличить нормальную деятельность от ано-
используемый в данной сети, то такое событие вообще мальной:
может быть отброшено для уменьшения объема выводи- ! мониторинг использования, который обеспечивает об-
мой информации. щую информацию о машине, например среднее число
Оценка риска происходит по трем факторам: данных, передаваемых за день;
! данные, на основании которых выработано предупреж- ! мониторинг профиля обеспечивает информацию об ак-
дение; тивности пользователя, позволяя вывести характер де-
! угрозы, которые представляет событие; ятельности, например, «POP3-почта, http и ftp» – нор-
! вероятности успешного осуществления атаки. мальный режим работы пользователя;
80
безопасность
Для установки из исходных текстов вам понадобятся: Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
# cd $OSSIM_PATH/db
# cat create_mysql.sql | mysql -u root ossim -p
# cat ossim_data.sql snort_nessus.sql realsecure.sql | ↵
mysql -u root ossim -p
# mkdir /etc/ossim/
# cp $OSSIM_PATH/contrib/debian/framework/ossim.conf ↵
/etc/ossim/
#################################################
# OSSIM db configuration
#################################################
ossim_type=mysql
ossim_base=ossim
и другие приложения, необходимые для построения датчи- ossim_user=root
ков и удовлетворения зависимостей. ossim_pass=root_passwd
ossim_host=localhost
При установке использовался дистрибутив ALTLinux 2.4 ossim_port=3306
Master, на дисках которого можно найти подавляющее чис-
ло необходимых компонентов. В крайнем случае их можно Как видите, для доступа к базе данных используется
доустановить при помощи apt-get. пользователь root, имеющий максимальные права. С точки
зрения безопасности, такой подход не совсем правилен. Это
Создаем базы данных и таблицы упрощение сделано, чтобы минимизировать объем инфор-
Итак, начинаем с создания баз данных, необходимых для мации. К тому же из-за большого количества элементов на
хранения информации. Распакуем архив, далее для крат- этапе настройки, скорее всего, возникнут проблемы (осо-
кости этот каталог будем обозначать как $OSSIM_PATH. бенно при первой попытке). Благодаря пользователю root
Запускаем MySQL: можно быть спокойным хотя бы за этот участок работы.
После отладки, уже в рабочей системе, лучше избегать та-
# /etc/init.d/mysqld start кого подхода и создать для каждого случая своего пользо-
Starting safe_mysqld service: [ DONE ] вателя с минимально необходимыми правами, частично
пример такого подхода вы найдете в конце статьи.
Устанавливаем пароль, если до этого MySQL не исполь- Далее для создания таблиц нам потребуются исходные
зовался. тексты в Snort и Acid. Если же их планируется использо-
вать как датчики на этом же компьютере, то устанавлива-
# mysqladmin -u root password root_password ем и настраиваем, как описано в документации.
Создаем базы данных для snort.
Создаем две базы данных ossim и snort (эта база дан-
ных используется при построении датчика Snort). # tar –xzvf snort-2.3.2.tar.gz
# cd snort 2.3.2
# cat ./schemas/create_mysql | mysql -u root -p snort
# mysql -u root -p
82
безопасность
наченный для журнала, а исполняемый файл ossim-server Копируем шаблон конфигурации веб-сервера.
нужно переместить в /usr/local/bin/. Проверьте их наличие,
если чего-то нет – скопируйте или создайте вручную. # cp $OSSIM_PATH/etc/httpd/ossim.conf /etc/httpd/conf/
На следующем шаге необходимо отредактировать файл
/etc/ossim/server/config.xml. Структура его проста и понят- И проверяем правильность путей внутри него:
на, в нем содержатся данные для доступа к базам ossim и
snort, IP-адрес (не используйте 127.0.0.1, иначе не сможете <IfModule mod_alias.c>
Alias /ossim "/var/www/ossim"
подключиться к серверу) и интерфейс, на котором сервер </IfModule>
будет слушать подключение агентов и консоли, e-mail, на
<Directory /var/www/ossim>
который будут отсылаться предупреждения. Дополнитель- <IfModule mod_php4.c>
но могут указываться IP-адреса дублирующих (replication) php_value include_path .:/usr/share/ossim/php/
</IfModule>
серверов в случае совместной работы нескольких серве- </Directory>
ров OSSIM.
<Directory /var/www/phpgacl>
Здесь становится очевидно одно из неудобств настрой- AuthType Basic
ки OSSIM: для всех компонентов используются свои кон- AuthName OSSIM
AuthUserFile /var/www/ossim-users
фигурационные файлы, информация в некоторых из них Require valid-user
(например, параметры доступа к БД) дублируются, что при- AllowOverride None
</Directory>
водит к увеличению объема работ, а также путанице и
ошибкам. Как видите, для доступа необходимо завести пользова-
Когда все готово, сервер можно запускать. теля ossim и задать пароль:
New password:
При этом не должно быть выдано никаких ошибок, а в Re-type new password:
Adding password for user ossim
журнале должна появиться запись:
Теперь рассмотрим конфигурационный файл Apache
# cat /var/log/ossim/server.log httpd.conf и проверим загрузку модулей mod_php4 и mod_ssl,
OSSIM-Message: sim_thread_scheduler а также подключим при помощи параметра Include файл
OSSIM-Message: sim_thread_organizer /etc/httpd/conf/ossim.conf. Перезапускаем веб-сервер и вво-
OSSIM-Message: sim_thread_server
OSSIM-Message: Waiting for connections...
дим в браузере http://localhost/phpgacl/setup.php, для на-
стройки phpgacl. Теперь, когда phpgacl установлен, необ-
Сервер готов принимать подключения. ходимо перейти к странице http://localhost/ossim/setup/
ossim_acl.php, что приведет к автоматическому заполнению
Приступаем к настройке консоли базы данных с заданными по умолчанию параметрами дос-
Все настройки производятся в конфигурационном файле тупа (пользователь admin пароль admin, который необходи-
/etc/ossim/framework/ossim.conf, который мы использовали мо затем обязательно изменить, используя «Сonfiguration →
ранее. Кроме параметров доступа к базам ossim и snort, Main»).
требуется указать пути к некоторым приложениям. Установка RRDTool проста, скачиваем последнюю вер-
сию с http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
################### download.html и устанавливаем обычным образом. После
# Base dir
################### чего указываем в файле /etc/ossim/framework/ossim.conf ме-
data_dir=/opt/ossim стонахождение исполняемых файлов и библиотек.
base_dir=/var/www/ossim
# ÿ ïåðåìåñòèë ïîäêàòàëîã www ïîáëèæå ê îñòàëüíûì ôàéëàì
# âåá-ñåðâåðà rrdtool_path=/usr/bin/
ossim_interface=eth0 rrdtool_lib_path=/usr/lib/perl5/
ossim_link=/ossim/
adodb_path=/usr/share/adodb/ Следующим шагом идет настройка mrtg, здесь работы
phpgacl_path=/var/www/phpgacl/
немного больше. Скачиваем с http://people.ee.ethz.ch/
И в самом конце файла: ~oetiker/webtools/mrtg/pub, накладываем патчи:
И в файле /etc/httpd/conf/ossim.conf редактируем пере- В указанном каталоге находятся патчи для нескольких
менные: версий ntop. Далее все проходит,как описано в документа-
ции. Если все прошло нормально, на результат можно по-
mrtg_rrd_files_path=/var/www/mrtg смотреть, набрав http://localhost:3000, активируем rrdPlugin
rrdpath_host=/var/www/mrtg/host_qualification/
rrdpath_net=/var/www/mrtg/net_qualification/ зайдя в «Admin → plugins».
rrdpath_global=/var/www/mrtg/global_qualification/ Редактируем файл ossim.conf:
font_path=/opt/ossim/contrib/fonts
Ставим ntop. При построении OSSIM он может быть раз- Настраиваем работу с агентами
мещен в принципе на любом компьютере, хотя в докумен- И наконец, настройка работы с агентами. Установка управ-
тации описана установка на компьютер, выполняющий роль ляющего скрипта (написанного на Python), при помощи ко-
84
безопасность
торого осуществляется контроль над агентами, несколь- /usr/bin/tcptrack -i eth0 -P 40003 -F 10 –D
ко отличается в версиях 0.9.7 и 0.9.8. Ранее необходимо
было просто скопировать файлы на свое место, теперь этим Записываем в файл /etc/services следующие строки:
руководит отдельный сценарий. При этом если просто ско-
пировать скрипт в каталог, перечисленный в переменной ossim-agent 40001/tcp #ossim-agent
ossim-agent 40001/udp #ossim-agent
PATH, то при работе выдается множество ошибок, лучше
всего создать ссылку: Теперь можно запускать в боевом режиме:
Копируем конфигурационный файл на свое место: C точки зрения безопасности агентам лучше дать ми-
нимальные права для работы с базой данных:
# mkdir /etc/ossim/agent
# cp $OSSIM_PATH/etc/agent/config.xml /etc/ossim/agent # mysql -u root -p
и запускаем, проверяя на наличие ошибок: mysql> GRANT INSERT, SELECT on snort.* to root@sensor_ip
IDENTIFIED BY 'mysql_password';
# ossim-agent -v mysql> GRANT INSERT, SELECT on ossim.* to root@sensor_ip
IDENTIFIED BY 'mysql_password';
mysql> exit;
Если агент запустился без проблем и жалуется на отсут-
ствие датчиков, то все нормально и можно открывать кон- хотя на этапе настройки это можно пропустить.
фигурационный файл для редактирования. Файл config.xml
имеет простую и понятную структуру, поэтому особых слож-
ностей не предвидится.
В самом начале идет описание сервера:
<!-- Ip and port number where the ossim server is listening -->
<serverip>192.168.0.10 </serverip>
<serverport>40001</serverport>
<watchdog enable="yes" interval="30"/>
<logdir> /var/log/ossim</logdir>
СЕРГЕЙ ЯРЕМЧУК
тклики, пришедшие на мой адрес после публика- может быть адаптирован для различных школьных программ,
ций материала об ATutor [1] и OpenAdmin [2], сви- задано любое количество семестров или учебных периодов.
детельствуют об имеющемся спросе на приложе- Кроме того, для Centre разрабатываются дополнения, спо-
ния, которые ориентированы на сферу образования. Дей- собные расширить его возможности.
ствительно, сегодня в большинстве школ учет персональ- Главный недостаток Centre состоит в отсутствии русско-
ных данных ведется на бумаге либо в документах MS Word язычной локализации. Ознакомиться с работой Centre мож-
(Excel), что не только неудобно, но и малоэффективно. По- но, зайдя по адресу http://demo.miller-group.net, используя для
иск и отбор необходимой информации в таком случае силь- доступа имена пользователей admin, teacher, parent, student
но затруднен и часто происходит не без ошибок и казусов, с таким же паролем (admin-admin, teacher-teacher и т. п.).
даже для небольшой справки задействуются лишние ре-
сурсы, которые могли бы быть использованы более рацио- Установка сервера Centre
нально. Особенно большой интерес среди таких приложе- Сервер Centre построен с применением свободных компо-
ний вызывают открытые продукты. нентов. Так, для хранения информации используется база
Свободная студенческая информационная система данных PostgreSQL (кроме неё поддерживается Oracle, дру-
(Student Information System) Centre проектировалась так, что- гие сервера не поддерживаются), весь код написан на PHP,
бы обеспечить все нужды преподавателей, родителей, сту- в качестве веб-сервера используется Apache. Такие ком-
дентов, школьников, администраторов, и представляет со- поненты позволяют использовать в качестве операционной
бой эффективное средство сбора информации, которое мо- системы Linux, FreeBSD и многие другие UNIX-подобные ОС,
жет быть использовано в учебных заведениях разного уров- а также Windows и Mac OS X. Кроме того, для генерации
ня: от начальных школ до вузов. Гибкость Centre позволяет отчетов в формате PDF необходим HTMLdoc (http://www.
применять один сервер для хранения информации любого easysw.com/htmldoc). Во время написания статьи исполь-
количества учебных заведений с разграничением полномо- зовался дистрибутив ALTLinux 2.4 Master.
чий как во внутренних сетях, так и в Интернете. Применение Регистрируемся на сайте, скачиваем архив сервера и
веб-технологий упрощает клиентскую часть и позволяет распаковываем его в каталог с документами веб-сервера
пользователям получать доступ к необходимой информации Apache /var/www/html (или /srv/www в SuSE). Для удобства
с любого компьютера, имеющего выход в Интернет. На мо- работы переименовываем каталог.
мент написания статьи актуальной была версия 1.5, кото-
рую можно бесплатно получить с сайта поддержки проекта # mv /var/www/html/Centre-v.1.4 /var/www/html/centre
http://www.miller-group.net, для чего необходимо первоначаль-
но зарегистрироваться. Centre распространяется под лицен- Устанавливаем, настраиваем и запускаем PostgreSQL:
зией GPL. В базу данных может быть внесена практически
любая информация об учащихся, персональные данные, в # /etc/init.d/postgresql restart
том числе и медицинская информация, посещаемость, ус- Service postmaster is not running. [PASSED]
певаемость и прочее. В Centre особое внимание уделено Creating default database: [ DONE ]
Starting postmaster service: [ DONE ]
удобству поиска и генерации различного вида отчетов по его Link postgresql socket: [ DONE ]
результатам. Так, кроме выдачи информации в браузер, от-
четы могут быть сохранены в файле формата PDF, что удоб- Теперь соединяемся с PostgreSQL и создаем базу дан-
но для последующей печати. На основании данных о место- ных, необходимую для работы (см. рис. 1) .
жительстве учащихся могут быть заполнены адреса на кон-
вертах, это позволит организовать рассылку различного рода # psql -U postgres template1
информации (табелей успеваемости, посещаемости, спис-
ков и пр.). Различного рода планировщики помогают эффек- Далее создаем таблицы, используя готовый шаблон:
тивно распоряжаться временем учебных групп или отдель-
ных учащихся, организовывать курсы, инструктажи. Плани- # psql -U postgres centre ↵
< /var/www/html/centre/centre.sql > centre.log
руемые события можно просмотреть через календарь. Сentre
86
образование
Добро пожаловать в psql 7.4.3 - Интерактивный Терминал PostgreSQL. Далее создаем новых пользователей, вводим информа-
цию о школе и прочие данные, необходимые для работы.
Наберите: \copyright для условий распространения
\h для подсказки по SQL-командам Администраторы, учителя, родители могут самостоятель-
\? для подсказки по внутренним slash-командам (\команда) но создавать учетные записи. Для этого на главной стра-
\g или ";" для завершения и выполнения запроса
\q для выхода нице необходимо нажать «Create Account», после чего в по-
явившемся окне заполнить свои данные, указав действую-
template1=# CREATE DATABASE centre;
CREATEDATABASE щий почтовый адрес, на который будет затем отослано со-
общение об активации входа. Администратор может выб-
template-# \q
рать фильтр No Access на странице Users в строке поиска
Ðèñóíîê 1. Ñîçäàåì áàçó äàííûõ пользователей Profile, и в результате им будет получен спи-
При этом в ходе выполнения команды могут быть полу- сок пользователей, не имеющих допуска (рис. 3).
чены сообщения, начинающиеся с «NOTICE: ALTER TABLE /
ADD PRIMARY KEY will create implicit index», которые можно
проигнорировать. Далее нужно разрешить TCP/IP-соедине-
ния с localhost в файле настройки pg_hba.conf. И чтобы сер-
вер мог их обслуживать, добавьте ключ -i в строку запуска
postmaster в файле /etc/init.d/postgresql.
Для настройки доступа к базе данных сервером Centre
используется файл config.inc, в который необходимо вне-
сти изменения, подправив следующие строки:
// Database Setup
$DatabaseType="postgres"; // oracle, postgres
$DatabaseANSI=true; // ANSI compliant flag.
$DatabaseServer="127.0.0.1"; // postgres = host,
// oracle=SID
$DatabaseUsername="postgres";
$DatabasePassword="password";
$DatabaseName="centre";
$DatabasePort="5432"; Ðèñóíîê 3. Ïîíÿòíîå ìåíþ, ïîçâîëÿåò áûñòðî íàéòè
ïîëüçîâàòåëÿ ïî çàäàííûì êðèòåðèÿì
Далее необходимо ввести полный путь к файлам сер- Чтобы разрешить пользователю вход, измените параметр
вера и каталогу, в котором будут храниться фотографии «User Profile» на необходимый, т.е. Administrator, Teacher,
студентов, и изменить название школы, которое будет вы- Parent, N/A (остальные), и не забудьте указать в параметре
водиться в заголовке. «School», к данным какой из школ он получит допуск. Пункт
«Associate Students» позволяет указать на родителей сту-
// Server Names and Paths дента. После чего на заявленный при регистрации почто-
$CentrePath="/var/www/html/ñentre/";
$StudentPicturesPath = ="/var/www/html/ñentre/pictures"; вый ящик уйдет сообщение об успешной активации пользо-
$CentreTitle = 'Centre School Information System'; вательского входа. Для добавления в базу учащихся при-
меняется вкладка «Students», где, выбрав «Add a Student»,
Набираем в строке браузера http://your_domain.com/ необходимо ввести соответствующую информацию. В даль-
сentre/index.php и попадаем на заглавную страницу, где ре- нейшей работе можно разобраться самостоятельно, к тому
гистрируемся с именем пользователя admin и паролем же в каталоге Doc архива имеется документация на анг-
admin (по умолчанию в системе заведены и другие тесто- лийском языке, которая может помочь в освоении Centre.
вые пользователи, о которых говорилось в начале статьи, Как говорилось выше, локализацию Centre можно осу-
в целях безопасности их желательно отключить или изме- ществить своими силами (рис. 3) по мере ввода сервера в
нить пароль). В результате будет выведено поздравление с эксплуатацию. К сожалению, отсутствие шаблонов, собран-
успешной установкой. В случае неудачи появится диагнос- ных в одном месте, несколько затрудняет работу.
тическое сообщение (рис. 2): В первую очередь следует заглянуть в файлы: Menu.php;
Help.php; functions/ErrorMessage.fnc.php; modules/Students/
includes/General_Info.inc.php; modules/Students/Student.php;
modules/Students/Search.php. И в некоторые другие, в ос-
новном находящиеся в каталогах modules/Scheduling/ и
modules/Reports/.
С остальными настройками вы сможете разобраться в
процессе работы. Успехов!
Литература:
1. Яремчук С. Обучение при помощи Atutor. – Журнал «Си-
стемный администратор», № 1, январь 2005 г. – 84-87 с.
2. Яремчук С. Сервер для школ. – Журнал «Системный
Ðèñóíîê 2. Äèàãíîñòè÷åñêèå ñîîáùåíèÿ ïîçâîëÿþò âûÿâèòü
ïðîáëåìó администратор», № 4, апрель 2005 г. – 88-91 с.
БАЗОВАЯ HTTP-АВТОРИЗАЦИЯ –
ЗАЩИТА ОТ ЧЕСТНЫХ ЛЮДЕЙ
АЛЕКСЕЙ МИЧУРИН
Basic Authorization под микроскопом HTTP/1.1 401 Authorization Required
За работу механизма так называемой базовой авториза- Date: Tue, 01 Mar 2005 11:30:10 GMT
Server: Apache/1.3.33 (Unix)
ции (далее просто BA – Basic Authorization) на стороне сер- WWW-Authenticate: Basic realm="How about authorization?"
вера отвечает не какое-то специфическое ПО, а сам сер- Connection: close
вер. Content-Type: text/html; charset=iso-8859-1
Давайте рассмотрим диалог клиента и сервера при по- Необычным в нём является статус (первая строка), ко-
пытке получить доступ к конфиденциальной информации. торый равен не 200, как при «нормальном» ответе, а 401.
Когда пользователь впервые пытается получить защи- Также в нём имеется поле WWW-Authenticate, сообщающее
щённый документ, щёлкнув мышкой по ссылке, по кнопке браузеру детали: авторизация будет проходить по Basic-сце-
в форме или просто набрав URL, браузер (клиент) посыла- нарию, пользователю рекомендуется сообщить указанную
ет на сервер самый обычный запрос. Это неудивительно – фразу.
браузер пока не знает, что доступ к этому документу огра- Вслед за этими заголовками передаётся тело докумен-
ничен. Заголовки HTTP-запроса могут выглядеть прибли- та, которое браузер пока не отображает, а выдаёт диало-
зительно так: говое окно с просьбой ввести имя и пароль.
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7)
Gecko/20041016 Firefox/0.9.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.7,ru;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
88
web
Очень широко распространено заблуждение, что в от- роли на жёстком диске. Если ваш браузер запомнил ваш
вет на отказ от ввода пароля (или после ввода неверного пароль неделю назад, то сегодня он может избавить вас и
имени/пароля) сервер высылает документ с сообщением сервер от утомительной процедуры авторизации. Читатель,
об ошибке 401. Это не так! Сервер высылает сообщение я думаю, осознаёт всю сомнительность такой «услуги» бра-
401 всегда, когда запрашивает пароль. Когда пользователь узера, ведь всю неделю пароль был подвергнут серьёзной
нажимает «Отмена», браузер вообще не обращается к сер- опасности.
веру1 – необходимый документ уже загружен, его осталось
только показать пользователю. Два слова о настройке
Если пользователь ввёл имя и пароль, то сразу после Basic Authorization
нажатия кнопки «ОК» браузер отправляет эту информацию «Минусы» BA рассмотрим чуть позже, а сперва оценим глав-
на сервер в новом запросе, заголовок которого будет при- ный её «плюс» – простоту настройки.
мерно таким: Сегодня уже трудно найти host-провайдеров, у которых
в списке предоставляемых возможностей не значилось бы
GET /paper/1.html HTTP/1.1
Host: localhost:8080 «пароллирование директорий». Воспользоваться этой воз-
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7) можностью совсем несложно. Если вы захотели ограничить
Gecko/20041016 Firefox/0.9.3
доступ к определённой директории (и всем вложенным в
Accept: text/xml,application/xml,application/xhtml+xml,text/html;
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 неё), достаточно разместить в ней файл .htacess примерно
Accept-Language: en-us,en;q=0.7,ru;q=0.3 следующего содержания:
Accept-Encoding: gzip,deflate
Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300 AuthName "How about authorization?"
Connection: keep-alive AuthType Basic
Authorization: Basic MTox
Require valid-user
AuthUserFile /ïóòü/ê/ôàéëó/.htpasswd
Как видите, это снова обычный GET-запрос, но теперь
сервер получил информацию о пароле и имени пользова- или добавить подобные команды в имеющийся .htaccess.
теля в строке Authorization. Секретная информация не за- Смысл и назначение этих директив достаточно очевидны.
щищена, а просто закодирована методом base64 (RFC AuthName задаёт строку, которую браузер должен показать
2045). Если декодировать строку MTox, то вы получите имя пользователю при запросе имени и пароля. AuthType зада-
и пароль, разделённые двоеточием. То есть никакой сек- ёт тип авторизации (Basic). Директива Require способна вы-
ретностью тут и не пахнет. полнять различные проверки легальности доступа Здесь
Если имя и пароль удовлетворят сервер, то пользова- вы видите её элементарное применение: мы потребовали,
тель получит требуемый документ. Набор заголовков отве- чтобы посетитель был зарегистрированным пользователем.
та будет выглядеть как обычно: Точнее, мы потребовали, чтобы посетитель получил дос-
туп к файлам только в том случае, если он успешно про-
HTTP/1.1 200 OK
Date: Tue, 01 Mar 2005 11:41:36 GMT
шёл процедуру авторизации. Директивой AuthUserFile ука-
Server: Apache/1.3.33 (Unix) зываем файл с паролями.
Last-Modified: Tue, 01 Mar 2005 11:22:32 GMT Файл с паролями .htpasswd2 создаётся и дополняется
ETag: "4e598b-33-42245078"
Accept-Ranges: bytes утилитой htpasswd, входящей в дистрибутив Apache. Рас-
Content-Length: 51 полагать его безопаснее вне дерева каталогов, доступных
Connection: close
Content-Type: text/html; charset=koi8-r
по HTTP.
Я не сказал ещё про одну Auth-директиву – это Auth-
Если пара имя/пароль не верна, то сервер просто снова GroupFile. С её помощью можно задать файл, описываю-
выдаст документ-запрос 401, повторно инициируя диалог щий группы пользователей. К сожалению, информация о
браузера с пользователем. группе пользователя может быть использована только в ди-
После первой авторизации браузер запоминает имя и рективе Require. Поэтому разбиение пользователей на груп-
пароль и сообщает серверу эту информацию при всех пос- пы практически ничем не расширяет возможности админи-
ледующих обращениях. Сервер больше не будет обраба- стратора и используется редко.
тывать ошибку 401, а от пользователя не потребуется по- Защитить паролем можно директорию и с HTML-доку-
вторного ввода пароля. Процесс авторизации прошёл ус- ментами, и с CGI-скриптами, и даже с графикой. Одним
пешно, но обратите внимание на то, что в результате не словом, абсолютно любую директорию, доступную через
была открыта сессия. Иллюзию непрерывной сессии созда- Web.
ёт браузер, который фактически авторизуется при каждом Есть ещё одна инструкция, к которой мы сегодня обра-
запросе. К этому существенному недостатку BA мы ещё тимся, хотя она и не относится напрямую к авторизации.
вернёмся. Если добавить в .htaccess строку:
Кроме того, практически все современные браузеры ос-
нащены менеджерами паролей и способны сохранять па- ErrorDocument 401 /ïóòü/äîêóìåíò_èëè_ñöåíàðèé
1
Строго говоря, браузер может обратиться к серверу за графикой и другими элементами, необходимыми для отображения страницы с
сообщение 401.
2
Совсем не обязательно называть его именно так.
3
Или, если его браузер не поддерживает авторизацию, что практически невероятно.
4
Строго говоря, вы можете защитить пароль, реализовав обмен по протоколу SSL и, защитив всю передаваемую информацию.
5
Конечно, это справедливо, даже если на стороне клиента используется не обычный браузер, а некое специальное средство для взлома,
имитирующее работу браузера.
90
web
ром. Если пользователь успешно авторизовался с первого организуются на любом языке программирования и не зас-
раза, то в протоколе останется только запись о «nouser». В луживают пристального внимания. Во всех последующих
«боевых условиях» такие записи не представляют большой примерах я, для компактности, не буду их делать, предпо-
ценности, но при отладке они могут быть весьма полезны. лагая, что вы при необходимости добавите соответствую-
Во-вторых (и это, конечно, недоработка), обратите вни- щий код.
мание на то, что мы в сценарии не проанализировали при- Приводя соображения о возможности подмены стату-
чину его вызова. Кроме того, мы не позаботились о стату- са, я хотел подвести вас к следующему вопросу: что про-
се, который возвращает наш сценарий. Если скрипт будет изойдёт, если обработчик ошибки 401 вернёт не код 401?
вызван в результате действия нашей директивы Error- Вот пример такого обработчика:
Document, то код ответа сохранится без изменений – 401.
Но никто не мешает запустить этот сценарий не как обра- #!/bin/sh
ботчик ошибки, а напрямую, просто по его непосредствен- cat <<'TEXT'
ному адресу (например, http://host/cgi-bin/401.cgi). Тогда Status: 200
Content-Type: text/html
клиенту будет возвращён тот же документ с обычным ко-
дом 200. Обратите внимание, тот же сценарий, что возвра- <html>
<head><title></title></head>
щал ошибку-запрос с кодом 401, теперь вернул код 200. <body><h1>âû íå àâòîðèçîâàëèñü è
Это произошло потому, что сам сценарий никак не влияет íå àâòîðèçóåòåñü</h1></body>
</html>
на возвращаемый код, и сервер выставляет код ответа на TEXT
своё усмотрение. Такие вызовы будут ошибочно зарегист-
рированы в протоколе. Озадачены? В общем-то, не произойдёт ничего неожидан-
Конечно, в реальных условиях наш сценарий должен ного. Давайте проследим всю цепочку событий. Когда не-
был бы проанализировать обстоятельства вызова. При пер- авторизованный пользователь обратится к серверу, про-
вом обращении, без сообщения Authorization-информации, изойдёт ошибка 401. Следуя инструкции ErrorDocument,
скрипт получает в своё распоряжение обычный набор сервер вызовет наш сценарий, который подменит код 401
REDIRECT-переменных: REDIRECT_REQUEST_METHOD, на код 200 и выдаст обычный документ. Браузер получит
REDIRECT_STATUS, REDIRECT_URL, говорящие о том, что его и отобразит, оставаясь в полном неведении, что про-
скрипт вызван не напрямую. При повторном вызове, в слу- изошло на самом деле на сервере. Пользователю не удас-
чае провала предыдущей попытки авторизоваться, скрипт тся получить доступ к засекреченной области, но и диало-
получает вдобавок к упомянутым ещё две переменные: га для ввода пароля он не получит. Обращаясь к любому
AUTH_TYPE, которая, конечно, равна «Basic», и REMOTE_ документу, пользователь будет получать только результат
USER с именем «неудачника». работы вашего скрипта (который в свою очередь тоже мо-
При простом, непосредственном, вызове сценария все жет организовать перенаправление). Мы заблокировали
перечисленные переменные просто не будут созданы. для пользователя возможность авторизации.
Приведу пример shell-скрипта, анализирующего эти си- Этот короткий скрипт может пока послужить только для
туации: весьма сомнительной защиты. Использовать его можно
только как-нибудь так: сперва защитить директорию; по-
#!/bin/sh том авторизоваться, указав браузеру запомнить имя и па-
if [ ${REDIRECT_STATUS:-)} = 401 ] роль; и подключить в качестве обработчика ошибки 401 наш
then скрипт. Всё! Больше диалога для ввода пароля никто не
echo $REMOTE_ADDR ${REMOTE_USER:-nouser} `date` >>401.log
if [ ${REMOTE_USER:-D} != D ] увидит, и только вы сможете пользоваться ресурсом, так
then как вам вводить имя и пароль больше не потребуется (пока
mess='×òî-òî âû çà÷àñòèëè íåóäà÷íî àâòîðèçîâàòüñÿ!'
else ваш браузер их помнит). Такой подход хоть и имеет право
mess='Îøèáêà! (ïåðâàÿ)' на существование, но смотрится диковато. Тем более что
fi
else правильнее было бы сказать не «вы имеете доступ к ре-
mess='Òàê ýòîò ñêðèïò âûçûâàòü íåëüçÿ' сурсу», а «любой человек, воспользовавшийся вашим «за-
fi
говорённым» браузером, имеет доступ к ресурсу». Это, как
echo "Content-Type: text/html вы понимаете, не одно и то же.
<html> Тем не менее все высказанные идеи можно объединить
<head><title>$mess</title></head> и развить, придав им более «товарный вид».
<body><h1>$mess</h1></body>
</html>" Следующий сценарий также является обработчиком
ошибки 401. Он разрешает авторизацию не чаще, чем раз
Как видите, теперь мы различаем три случая: в десять секунд. Он уже написан на Perl, и является гибри-
! первая попытка авторизоваться; дом двух предыдущих shell-скриптов.
! не первая попытка авторизоваться;
! вызов скрипта напрямую, вернее, вызов не для обра- #!/usr/bin/perl
ботки ошибки 401. use strict;
my $LOGFILE='401.log';
my $lastlog = $^T-(stat $LOGFILE)[9];
Но давайте не будем увлекаться. Подобные проверки
необходимы, забывать про них нельзя, но они элементарно if ($lastlog > 10) {
6
Конечно, это далеко не лучший способ; здесь он используется только благодаря своей предельной простоте.
92
книжная полка
Windows server. Qt
Трюки профессиональное
Митч Таллоч программирование
Перед вами перевод книги из- на C++
дательства O'Reilly «Windows Макс Шлее
server hacks». Материал изло- Книга является подробнейшим
жен в небольших статьях, руководством к кроссплатфор-
объединенных в тематичес- менной библиотеке Qt. В ней
кие группы. Основные темы автор показывает, что с помо-
книги: общее администриро- щью Qt можно создавать как
вание, Acvtive Directory, уп- графические интерфейсы, так
равление пользователями, и писать достаточно сложные
сетевые службы файлы и программы. Подробно рас-
принтеры, ISS, установка си- смотрены вопросы программи-
стемы, безопасность, управление обновлениями, резерв- рования графики (растровые изображения, анимация, шриф-
ное копирование и восстановление. После прочтения кни- ты, OpenGL), звука, таймера, многопоточности, XML. Отдель-
ги вы сможете эффективно иcпользовать AD для упроще- ные главы посвящены написанию приложений для баз дан-
ния своей работы, управлять сетевыми ресурсами и таки- ных и сетей. И, конечно же, рассматриваются вопросы со-
ми службами, как DHCP, DNS, WINS. А также удаленно раз- здания различных интерфейсов. Затронут вопрос разработ-
вертывать ОС на компьютерах в рамках локальной сети с ки собственных элементов управления. Книгу можно поре-
помощью RIS и Sysrep, результативно использовать ASR комендовать широкому кругу читателей – повествование
для создания резервных копий и восстановления всей сис- начинается с азов (с «Hello, world!»), поэтому даже «нович-
темы. Кроме этого в книге описаны методы упрощения по- ки» смогут быстро освоиться. Большое количество приме-
вседневной работы администратора при помощи сценари- ров поможет наилучшим образом усвоить материал. На при-
ев и средств автоматизации. Книгу можно порекомендовать лагаемом диске вы найдете исходные коды примеров из кни-
администраторам Windows. ги и библиотеку Qt для ОС Windows и Linux.
Издательство «Питер», 2005 г. – 318 стр. ISBN5-469-00288-8 Издательство «БХВ-Петербург», 2005 г. – 544 стр.
(ориг. ISBN 0-596-00647-0). ISBN 5-94157-566-1.
94
подписка на II полугодие 2005
Российская Федерация ! Казахстан – по каталогу «Российская Пресса» через
! Подписной индекс: 81655 ОАО «Казпочта» и ЗАО «Евразия пресс»
Каталог агентства «Роспечать» ! Беларусь – по каталогу изданий стран СНГ через РГО
! Подписной индекс: 87836 «Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)
Объединенный каталог «Пресса России» ! Узбекистан – по каталогу «Davriy nashrlar» российские
Адресный каталог «Подписка за рабочим столом» издания через агентство по распространению печати
Адресный каталог «Библиотечный каталог» «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,
! Альтернативные подписные агентства: 5/3, офис 33)
Агентство «Интер-Почта» (095) 500-00-60, курьерская ! Армения – по списку номенклатуры «АРЗИ» через ГЗАО
доставка по Москве «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)
Агентство «Вся Пресса» (095) 787-34-47 и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарья-
Агентство «Курьер-Прессервис» на, 22)
Агентство «ООО Урал-Пресс» (343) 375-62-74 ! Грузия – по списку номенклатуры «АРЗИ» через АО
! Подписка On-line «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29)
http://www.arzy.ru и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru ! Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-3300,
СНГ г.Тирасполь, ул.Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номенкла- (2012, г.Кишинев, бул. Штефан чел Маре, 134)
туры АРЗИ: ! Подписка для Украины:
! Азербайджан – по объединенному каталогу российских Киевский главпочтамп
изданий через предприятие по распространению печа- Подписное агентство «KSS»
ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Телефон/факс (044)464-0220
Подписные
индексы:
81655
по каталогу
агентства
«Роспечать»
87836
по каталогу
агентства
«Пресса
России»
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редакторы Asterisk и Linux: свободное время и желание зарабаты-
Андрей Бешков миссия IP-телефония вать больше. Однако смена работы в
Валентин Синицын В прошлый раз мы познакомились с те- ближайшие планы не входит, а рабо-
Алексей Барабанов оретическими основами IP-телефонии. тодатель не в состоянии увеличить
Михаил Платов Теперь самое время заняться вещами зарплату. Лучший вариант в этой си-
более «приземленными», а именно – туации – искать дополнительные ис-
РЕКЛАМНАЯ СЛУЖБА практическим изучением возможнос- точники дохода. Как найти еще одну
тел./факс: (095) 928-8253 тей одного из cамых популярных Open работу по специальности со свобод-
Константин Меделян Source продуктов IP-телефонии – ным графиком? Как результативно
reсlama@samag.ru Asterisk PBX. Мы рассмотрим архитек- провести переговоры с потенциальным
туру системы, основные файлы конфи- заказчиком? Как достичь того, чтобы
Верстка и оформление гурации и несколько полезных приме- работодатели находили вас сами? Сво-
maker_up@samag.ru ров определения номерного плана. В им практическим опытом делится ав-
Дизайн обложки процессе изучения преимущественно тор статьи.
Николай Петрочук будут использоваться Open Source и
Freeware программные продукты. Используем пакет
По вопросам распространения ImageMagick
обращайтесь по телефону: Взлом без проводов в веб-разработке
(095) 928-8253 (доб. 120) Беспроводные сети активно проника- Работа с готовыми изображениями – за-
ют в нашу жизнь, принося с собой не дача достаточно распространенная в
107045, г. Москва, только удобство, но и проблемы безо- веб-программировании. Построение
Ананьевский переулок, дом 4/2 стр. 1 пасности. Интенсивность взломов ра- обычной веб-галереи требует создания
тел./факс: (095) 928-8253 стет с каждым днем, но технические уменьшенных копий картинок, компрес-
Сайт журнала: www.samag.ru подробности остаются за кадром и не сии, конвертации формата, возможно,
разглашаются. Хотите знать, как хаке- и некоторых других действий по их об-
РУКОВОДИТЕЛЬ ПРОЕКТА ры проникают в беспроводные сети и работке. Для подобных задач широко
Петр Положевец как этому противостоять? Главным об- применяется библиотека GD, имеющая
УЧРЕДИТЕЛИ разом мы будем говорить о семействе в арсенале своей второй версии GD2
Владимир Положевец протоколов IEEE 802.11b/g (более из- довольно внушительный список функ-
Александр Михалев вестном как WLAN). Статья ориенти- ций. Она имеет широкие возможности,
ИЗДАТЕЛЬ рована на кодокопателей, имеющих но качество результирующих изображе-
ЗАО «Издательский дом опыт программирования в LINUX и уме- ний часто оставляет желать лучшего.
«Учительская газета» ющих держать паяльник в руках. Кроме того, с такими задачами, как из-
менение пропорций, «обрезка» изобра-
Отпечатано типографией Системный администратор – жения, манипуляции с цветами, встав-
ГП «Московская Типография №13» ищем дополнительные ка другого рисунка, работать хоть и воз-
Тираж 8400 экз. источники дохода можно, но крайне неудобно. Для подоб-
Ваша сеть отлажена и работает как ных действий идеально подходит пакет
Журнал зарегистрирован швейцарские часы. У вас появилось ImageMagick.
в Министерстве РФ по делам печати,
телерадиовещания и средств мас- Уважаемые читатели!
совых коммуникаций (свидетельство
ПИ № 77-12542 от 24 апреля 2002 г.) Спешите оформить подписку
на второе полугодие 2005 года!
За содержание статьи ответствен-
ность несет автор. За содержание рек- Приобрести новые и старые номера журнала
ламного обьявления ответственность вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
несет рекламодатель. Все права на
опубликованные материалы защище- Доставка почтой в любую точку России.
ны.
96