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

№9(46) сентябрь 2006

подписной индекс 20780


www.samag.ru

№9(46) сентябрь 2006


Семь веб-интерфейсов
к электронной почте
Выберите лучший!
Zlock: контролируйте доступ
к USB-устройствам
Обзор систем
резервного копирования
Как обнаружить
malware-программы?
Ajax: новый канал
общения клиента и сервера
Развиваем модуль DBI
В поисках профессиональной
этики сисадминов
Кевин Митник
защищает компании
от былых коллег
Так видит журнал читатель, который забыл оформить подписку:
№5(30) май 2005
подписной индекс 81655

СЬ
www.samag.ru

ЛИ
Почему MS SQL медленно работает?
Ищем причины
ЛИ
ТЯ Е

Ж ПИ
Строим защищенную беспроводную сеть:
ЗА ДНИ

WPA-Enterprise, 802.1x EAP-TLS


НУ

РА КУ
Настраиваем UPS под Linux
ЛЫ ГО

ТИ РАС
Как восстановить
удаленные файлы под BSD
К У ВО

Что важно знать об IP-телефонии

О
танавливаем Symantec Antivirus 9.0
НИ НО

ТР
в корпоративной сети
Эффективно управляем

С
полями пользователей в AD

БЫ
Контролируем безопасность сети
с помощью OSSIM
КА

Интервью с Ларри Уоллом –


создателем языка Perl

И
ЬГ
ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

КО НЕО
АВ СЛ
Л

Л
ХА

ПО
УЕ

ЗА
Так видит журнал читатель, оформивший подписку:
№5(30) май 2005
подписной индекс 81655
www.samag.ru

Почему MS SQL медленно работает?


Ищем причины
Строим защищенную беспроводную сеть:
WPA-Enterprise, 802.1x EAP-TLS
Настраиваем UPS под Linux
Как восстановить
удаленные файлы под BSD
Что важно знать об IP-телефонии
танавливаем Symantec Antivirus 9.0
в корпоративной сети
Эффективно управляем
полями пользователей в AD
Контролируем безопасность сети
с помощью OSSIM
Интервью с Ларри Уоллом –
создателем языка Perl

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!
Роспечать – 20780, 81655
Пресса России – 87836
Интер-почта – тел. (495) 500-00-60
в номере
5 ТЕНДЕНЦИИ 48 Как обнаружить malware-программы?
Универсальный метод.
РЕПОРТАЖ Крис Касперски
kk@sendmail.ru
6 Берегись, «мышь» полетела!
Состоялся Первый Всероссийский слет сисадминов. ЧЕЛОВЕК НОМЕРА
Репортаж с места событий.
Оксана Родионова 56 Пират виртуального мира
rodion@dol.ru «Перевоспитавшийся» хакер Кевин Митник решает
новые головоломки. Теперь он защищает компании
от былых коллег.
АДМИНИСТРИРОВАНИЕ Оксана Родионова
rodion@dol.ru
10 Семь веб-интерфейсов к электронной
почте. Выберите лучший! WEB
Требования мобильности и доступности электронной
почты в любых условиях делают использование про- 60 Ajax: новый канал общения клиента
токолов POP3/IMAP не всегда удобным. На помощь и сервера
приходят системы, обеспечивающие веб-интерфейс После того, как Ajax взяли на вооружение такие веб-ги-
к почтовым ящикам. ганты, как google и gmail, технологией стали интересо-
Сергей Супрунов ваться все: от руководителей крупных проектов до на-
amsand@rambler.ru чинающих веб-мастеров. Алексей Мичурин
alexey@michurin.com.ru
20 Полезные советы: FreeBSD
Сергей Супрунов 66 Устанавливаем DACS
amsand@rambler.ru Установим систему контроля доступа к веб-ресурсам
DACS в минимальной конфигурации, а заодно посмот-
21 Полезные советы: Apache рим на нее в работе. Сергей Яремчук
Сергей Супрунов grinder@ua.fm
amsand@rambler.ru
ПРОГРАММИРОВАНИЕ
22 Обзор систем резервного копирования
Не секрет, что информационные ресурсы любой ком- 72 Развиваем модуль DBI
пании представляют ценность. В сборе, анализе и ис- DBI, Perl-модуль для взаимодействия с базами данных,
пользовании информации задействованы практически используется в доброй половине всех существующих
все сотрудники. Но как ее тяжело добыть, так же лег- Perl-программ. Как его усовершенствовать?
ко ее подчас потерять. Алексей Мичурин
Сергей Яремчук alexey@michurin.com.ru
grinder@ua.fm
IMHO
30 Упаковщики исполняемых файлов
в Linux/BSD 78 В поисках профессиональной этики
Коммерческие продукты с закрытым кодом зачастую сисадминов
распространяются в упакованном виде, что препятс- В Интернете и печатных изданиях встречаются разные
твует анализу, снижает производительность и ухудша- представления о принципах системного администриро-
ет совместимость с UNIX-клонами. Как можно освобо- вания. Попробуем найти в этих вариантах общие черты
диться от упаковщиков? и определить направление совершенствования.
Крис Касперски Алексей Барабанов
kk@sendmail.ru alekseybb@mail.ru

БЕЗОПАСНОСТЬ РЕТРОСПЕКТИВА
40 Zlock: контролируйте доступ 86 Суровая правда, скрытая за «розовыми
к USB-устройствам очками»: история компании Transmeta
У конкурентов оказалась база данных ваших клиен- Компания Transmeta принесла практически совершен-
тов? Сотрудники используют рабочее место для об- ные процессоры в массы, но собственноручно допу-
работки и записи гигабайт личных фотографий с циф- щенные ошибки, жестокая конкуренция и приверед-
ровой камеры на CD? Без надежной системы контро- ливые пользователи не позволили ей завоевать мес-
ля доступа к мобильным устройствам вряд удастся из- то под солнцем. Дмитрий Мороз
бежать подобное. akuji@list.ru
Андрей Гущин
info@securit.ru КНИЖНАЯ ПОЛКА
44 Защищаемся от malware с помощью 92 Обзор книжных новинок
BufferZone Александр Байрак
Обзор проекта BufferZone. x01mer@pisem.net
Сергей Яремчук
grinder@ua.fm 59, 91, 94 BUGTRAQ

Открыта подписка на 2007 год. Спешите оформить!


№9, сентябрь 2006 1
26.09–29.09 2006 г. в Москве на ВВЦ в павильоне № 69
состоится 17-я ежегодная выставка информационных
Softool 2006
технологий SOFTOOL. Выставка включена в планы
официальных мероприятий Федерального агентства
по информационным технологиям, Правительства
Москвы, Российской Академии наук. Поддержку
выставке оказывает Министерство экономического
развития и торговли РФ. Организатор выставки –
компания ИТ-ЭКСПО.

В Организационный комитет выставки входят


руководители Федеральных органов власти,
действительные члены и члены-корреспонденты
Российской Академии наук, представители
научно-технической общественности. Председателем
Оргкомитета выставки является видный ученый,
академик РАН, член Президиума РАН Ю.В. Гуляев.

Площадь выставки составляет 8,5 тысяч кв. м., количество


участников более 300. Количество посетителей более
48 тысяч.

SofTool отражает состояние российского рынка


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

Ежегодно около трехсот ИТ-компаний представляют


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

В рамках SofTool’а проводится выставка САПР’экспо.


Это расширенная экспозиция компаний, занимающих
лидирующие позиции на мировом рынке систем
автоматизации проектирования. С прошлого года
спонсором САПР’экспо является компания AUTODESK.

3-й год подряд на выставке выделена экспозиция


LinuxLand, на которой представлены ведущие мировые
и российские Linux-компании. В рамках LinuxLand
внимание посетителей привлекут международная
конференция и ряд мастер-классов по всему спектру
Linux-решений. Организатор LinuxLand – компания
LinuxCenter.

В этом году впервые организован объединенный


стенд Российской Академии наук, который представит
достижения российских ученых из специализированных
НИИ РАН.

Итогами выставки ежегодно становятся многочисленные


контракты, широкий обмен опытом,
а также новые плодотворные идеи, которые реально
содействуют подъему российской экономики
и дальнейшему развитию отечественной компьютерной
индустрии.
LinuxLand 2006 Компании ИТ-Экспо и Линуксцентр приглашают
вас принять участие в выставке информационных
Компании ИТ-Экспо и Линуксцентр приглашают Вас посетить выставку- технологий SofTool’2006 (26-29 сентября 2006 года),
конференцию LinuxLand, которая пройдет в рамках SofTool-2006. На где планируется собрать ведущие российские
LinuxLand представлен весь спектр доступных в России Linux-решений. В
течение всей выставки будут проходить мастер-классы с демонстрацией Linux-компании в одном секторе выставочной площади
практической работы Linux-технологий. 26 сентября приглашаем Вас на LinuxLand.
конференцию “ИТО-2006: Технологии Linux и Open Source” .
LinuxLand – единственное мероприятие,
Ждем Вас на LinuxLand !
где Linux-компании получат возможность представить
свои продукты конечным пользователям
и корпоративным клиентам одновременно.
Организатор

LinuxLand будет местом, в котором соберутся


поставщики Linux и различных решений для этой ОС:
Mandriva, IBM, Novell, R-Style, HP, Oracle, ASPLinux,
Linux-Online (разработчик Linux XP), НПО "Сеть"
(разработчик MOPSLinux), Bitrix, ПРОМТ, Etersoft
Платиновый спонсор

и Linuxcenter.ru, журнал Linux Format, образовательный


центр Lynx Education Center и другие. Помимо
выставочных стендов, на экспозиции традиционно
будет расположена демо-зона, где посетители LinuxLand
смогут вживую познакомиться с предлагаемыми
продуктами.
Золотой спонсор

В этом году в рамках LinuxLand состоится


международная конференция "ИТО-2006: Технологии
Linux и Open Source", первый день будет посвящен
обсуждению программ ЮНЕСКО внедрения
Open Source в образование, докладам и презентациям
Серебряный спонсор

лидеров Linux-индустрии и Linux-образования.


В остальные дни пройдут мастер-классы и тренинги
по технологиям Linux и Open Source.

Участники конференции получают кейсы


со сборниками трудов, учебными пособиями
и дистрибутивами Linux и Open Source.
26 сентября - 29 сентября 2006 года Москва, ВВЦ, павильон №69

Для получения материалов необходима регистрация.

Программа конференции

26.09. Технологии Linux и Open Source – лекции, доклады


Linux и Open Source в образовании – доклады
27.09. Технологии Linux – презентации, мастер-классы
Технологии Open Source – презентации, тренинги
28.09. Тренинги технологий Linux – мастер-классы
29.09 Вручение Сертификатов ЮНЕСКО / WDU
28.09. Тренинги технологий Linux - мастер-классы
27.09. Технологии Linux - презентации, мастер-классы
26.09. мастер-классы IBM
Стенд D16, зал мастер-классов LinuxLand
26.09. Технологии Linux и Open Source в образовании
Большой конференц зал
ИТО-2006: Технологии Linux и Open Source

Тренинги Open Source – лекции, тренинги


29.09 Вручение Сертификатов ЮНЕСКО / WDU

Зарегистрироваться для участия в конференции


в качестве слушателя можно по адресу:
PCnews.ru, Lenta.ru, Linuxcenter.ru, Linux.ru, LinuxRSP.ru, OpenNet.ru
журнал “Системный администратор”, IXBT.ru, 3DNews.ru,
издательство “Открытые системы”, издательство “СК Пресс”,

http://www.linuxland.ru/conf.phtml
Информационная поддержка

Регистрация докладчиков производится на сайте МПГУ


по адресу: http://linux.mpgu.ru/registration.shtml

Приглашаем вас принять участие в выставке


LinuxLand / SofTool’2006

Контакты:
e-mail: info@linuxcenter.ru
Телефон: (812) 929-09-07
тенденции
IBM не считает OpenSolaris рабочей станции под управлением GNU/Linux. Вместе с тем
проектом Open Source Lenovo будет предоставлять техническую поддержку по Linux
По мнению представителей IBM, проект OpenSolaris нельзя для своих лаптопов – это касается драйверов и технологий
по-настоящему отнести к Open Source, потому что его автор, ThinkVantage. Одной из причин, открывших перспективы по-
компания Sun Microsystems, не желает делиться управлени- лученному союзу, как считает Билл Йори (Bill Iori), ответс-
ем OpenSolaris со сторонними разработчиками. твенный за ThinkPad T Series в Lenovo, является тот факт,
«Sun держит все за огненной стеной. Сообщество не мо- что Linux-ядро теперь обладает лучшей поддержкой таких
жет ничего увидеть, – заявил Дэн Фрай (Dan Frye), вице-пре- используемых в ноутбуках технологий, как спящий режим.
зидент из IBM, ответственный за технологический Linux-центр
в компании, на LinuxWorld Conference and Expo. – Это только HP предоставит поддержку
видимость. Куча маркетинга и никакого сообщества». для Debian GNU/Linux
Фрай отметил, что если Sun хочет превратить OpenSolaris Компания Hewlett-Packard решила расширить круг GNU/
в настоящий продукт сообщества, необходимо перенести Linux-дистрибутивов, по которым она предоставляет тех-
все обсуждение проекта в публичные форумы, чтобы все ническую поддержку, добавив к продукции Red Hat и Novell
желающие видели, что происходит. разрабатываемый сообществом Debian GNU/Linux. Как по-
Джим Грисанзо (Jim Grisanzio) из Sun ответил на эти яснил Джеффри Вейд (Jeffrey Wade), менеджер по мировым
заявления непониманием, почему IBM атакует сообщест- продажам в Open Source и Linux-подразделении HP, у ком-
во OpenSolaris, заметив, что Sun 16 раз представляла ре- пании большое число заказчиков, заинтересованных в ра-
лизы ПО с открытым кодом, а с момента запуска проекта боте с Debian на серверах HP. HP будет оказывать услуги
(что произошло чуть более года назад) сторонними разра- по установке и настройке некоммерческого дистрибути-
ботчиками было внесено 116 добавлений. ва на протяжении времени поддержки серверов. Несмот-
ря на это известие, Red Hat и Novell останутся ключевыми
NetBSD 3.1 готовится к выходу мировыми Linux-партнерами HP. Кроме того, HP не будет
Команда разработчиков свободной ОС NetBSD в рассылке продвигать Debian, и заказчикам придется самостоятель-
netbsd-announce обнародовала план выпуска следующего но скачивать эту систему со всем нужным ПО. HP не наме-
стабильного релиза – 3.1. В соответствии с опубликованной рена формально сертифицировать Debian для своих серве-
информацией первый кандидат в релиз (NetBSD 3.1_RC1) ров, предоставлять для этого дистрибутива предложения
появился 21 августа, второй (3.1_RC2) – через две недели, от таких своих партнеров, как BEA Systems и Oracle.
4 сентября. Финальный релиз 3.1 запланирован на 18 сен-
тября (если не возникнет никаких серьезных проблем с вы- Составил Дмитрий Шурупов
по материалам www.nixp.ru
пущенными RC – в противном случае будет представлен
еще один кандидат в релиз, а релиз отложат еще на 2 не-
дели). В NetBSD 3.1 по сравнению с предыдущим релизом –
3.0 – представлены такие новшества, как поддержка domU
для Xen 3, значительные улучшения в стабильности LFS,
множество других улучшений, исправлений и дополнений.

OpenOffice.org портирован на OpenBSD


Стало известно о запуске популярного свободного офис-
ного пакета OpenOffice.org в среде открытой операцион-
ной системы OpenBSD. В первой версии порта пока дейс-
твуют ограничения (так, например, нет Java, из-за чего от-
сутствует поддержка некоторого импорта/экспорта и дру-
гих функций). OOo в OpenBSD работает на архитектурах
386 и amd64. На данный момент пакет распространяется
в несобранном виде (сообщается, что его компиляция за-
нимает порядка 6 часов).

Lenovo начинает поставку


Linux-ноутбуков
Компании Novell и Lenovo заключили договор, по которому от-
ныне будет предустанавливаться дистрибутив первой (SUSE
Linux) на ноутбуки последней (ThinkPad T60p). Об этом ста-
ло известно на прошедшей конференции LinuxWorld в Сан-
Франциско. Из множества редакций SUSE Linux для ноут-
буков Lenovo была выбрана корпоративная десктоп-версия
SLED 10. По словам представителей Lenovo, эти компьюте-
ры предназначены для инженеров и других продвинутых
пользователей, заинтересованных в получении мобильной

№9, сентябрь 2006 5


репортаж

Берегись, «мышь» полетела!

На Первом Всероссийском слете сисадмины вышли из Интернета, чтобы посидеть у костра.

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

6
репортаж
– Хорошая идея! По какому по-
воду собираться, не важно. Просто Подведены итоги конкурсов! ния Дня Сисадмина-2006 на сайте http://
на природу выехать, лапшички сва- Накануне Дня Сисадмина-2006 на сисад- sysadmin.mail.ru проходил конкурс сисад-
рить на костре. минском сайте был проведен конкурс «Сис- минских репортажей. Сисадмины из раз-
админские рекорды». Каждый сисадмин ных регионов рассказывали о том, как они
Глюк №2: мог предоставить на суд пользователей встретили праздник. Победителями стали
Девушка-сисадмин сайта свой рекорд – личный или профес- три системных администратора, которые
На другом конце поляны расположи- синальный. Победители определялись го- по-разному, но очень увлеченно описали
лась Вологда. Подхожу. Теперь уже лосованием. свой отдых на Первом Всероссийском слё-
не я, а меня спрашивают: Главные призы получили Дмитрий Лу- те Сисадминов: Голыженков Алексей, Бе-
– А вы системный администратор? говой – за рекорд о самом большом числе лякова Светлана и Бринько Сергей.
С глубоким изумлением отвечаю, способов передачи данных, Наталья Бак- Все победители получают в качестве
что нет. Ребята огорчены: ланова с зажигательным списком ежеднев- подарка уникальные сисадминские фут-
– А мы уже думали, что встретили! ных рекордов и побед в их организации болки, пакет лицензионного ПО от мага-
По легенде, бывают девушки – систем- и Сергей Заворыкин, описавший рекорд зина Allsoft.ru, обучение в Учебном Цент-
ные администраторы. по самым частым пересадкам. ре Softline и подписку на журнал «Систем-
– И здесь есть? В течение 10 дней после празднова- ный администратор».
– Говорят, вчера была, танцевала
хорошо. ку, до нашей команды заглушки не сни- кера бутылки, висящие на веревочке.
– А системные администраторы хо- мать! Они находятся здесь для безо- Увлеклась зрелищем.
рошо танцуют? пасности, чтобы случайно не сделать – Вы его жена? – раздалось сбоку.
– А чего нет! выстрел. Самое главное – не снимать Ну чем не театр абсурда? Я не жена
– А о чем здесь разговоры идут? – маску во время игры. Если увидите ко- сисадмина, я не сисадминка! А кто я?..
интересуюсь. го-то без маски, по этим людям стре- Не помню.
– О работе… и обо всем осталь- лять не надо. Если гражданский появ-
ном. ляется на поле, опять-таки не стреля- Глюк №3:
– Зачем о работе? ем. У каждого свои дела могут быть Бурные аплодисменты
– Сисадмины – такие люди, что где в этом лесу... Из задумчивости меня вывел звонкий
угодно будут о работе говорить. Организаторы игры помогли на- голос, усиленный динамиками, напом-
Потом я все-таки увидела девуш- деть маски бойцам и на прощание нивший, что это все же турслет адми-
ку сисадмина из Учкудука и поняла, спросили: нистраторов, а не второй сон Веры
что это не миф, а правда. Девушка – Здоровые все? Никому плохо Павловны:
была обаятельна и весела – она пони- не станет? – Все, кто приехал, подойдите
мала, какая роль ей досталась. Гово- Нервно отсмеявшись, мужчины уш- в штаб. Штаб – это синяя палатка. Там
рят, на поляне можно было найти да- ли в лес играть в войнушку. бегает и ждет вас Полкошки, у которой
же несколько системных администра- А я осталась наблюдать, как сисад- вы зарегистрируетесь. Там же вы мо-
торов женского пола – этакий слет си- мин из Вологды расстреливает из мар- жете приобрести футболочки и банда-
садминок.
Однако развлечения на слете были
явно рассчитаны на мужчин. Вот пейнт-
бол, например, – типично мужское за-
нятие. Все серьезно – оружие, маски,
инструктаж…
– Сейчас будем играть в пейнтбол.
Две команды по пять человек, одна
с одной, другая с другой стороны. Цель
игры – захватить флаг и принести его
на базу противника. Как только флаг
принесли, игра закончена. Флаг нахо-
дится в центре. Задача игроков – от-
стоять свой флаг.
Комментарий участника игры:
Убей его, пока он не убил тебя.
– Бойцы, смотрите! Будете играть
такими маркерами, – инструктор пока-
зал оружие. – Сюда насыпаются шары,
здесь находится воздух, отсюда выле-
тает шарик. На маркере находится за-
глушка. До выхода на игровую площад- География слета

№9, сентябрь 2006 7


репортаж
не с сисадмином, с директором Цен-
тра новых информационных техно-
логий Калужского госпедуниверсите-
та им. К.Э.Циолковского Вадимом Ви-
ноградским. Ученый человек, кандидат
наук, доцент говорил о слете в востор-
женных тонах:
– Работники информационной сфе-
ры, IT-специалисты общаются толь-
ко в он-лайн режиме, через компью-
тер. А ведь живое человеческое об-
щение нельзя заменить ни компьюте-
ром, ни чем другим. Как видите, это
подтверждается. Потеря живого об-
щения, на мой взгляд и на взгляд на-
ших коллег, приводит к тому, что лю-
ди замыкаются в своем мире и не ви-
дят, что происходит в мире на самом
Праздник удался на славу
деле, а видят только виртуальный мир,
ны с символикой слета. Там вам все га, Ростова-на-Дону, Тамбова, Белго- который далек от жизни.
продадут… с радостью. Есть куча дров рода и даже Красноярска, Екатерин- Опять Зазеркалье – оказывается,
для общего пользования. В оргкомите- бурга, Усолья-Сибирского, Иркутска в организации турслета сисадминов
те вам помогут их распилить. «Скорая и Ташкента! Ничего себе, за полторы принимает участие педуниверситет.
помощь» опять-таки для общего поль- тысячи километров съездить на уикэнд Удивленно спрашиваю:
зования. На территории дежурит ми- отдохнуть… Может, сисадмины зна- – Как связан педагогический уни-
лиция, так что не переживайте, ниче- ют, как перемещать по сетям не толь- верситет и системные администра-
го не случится. Работают две палат- ко тексты и фотки, но и бренные те- торы?
ки, где вы можете приобрести ватруш- ла? Явно! – Наш университет чем хорош?
ки, минералочку и так далее. В штабе П ол и н а Тр о я н о в с к а я, о н а же Это единственный собственный уни-
можно купить пиво. В желтой бочке во- Рolkoshka очень душевно всех при- верситет нашего города. Остальные –
да. Все для вас, уважаемые системные ветствовала: «В этом году нам много филиалы. У нас учатся ребята, кото-
администраторы! звонили и говорили, что День сисад- рые по каким-то причинам не подошли
Реальность вернулась на место. мина празднуют по всем городам, что для всего мира, а подходят для нашей
Тем более что впереди было подня- это стало очень популярным. Я вас поз- жизни. Университет гуманитарный по
тие флага. Народ начал подтягивать- дравляю! Пусть ваши юзеры всегда бу- своей сути. А для гуманитариев самое
ся к центру поляны. Полились благо- дут с вами, умными и понимающими». важное в жизни – душа. Наша земля
дарности. Сайту «Сисадмин тоже чело- калужская – святая земля. И на этой
век», совместному проекту компаний Глюк №4: святой земле есть университет. Мис-
«Softline» и «Mail.ru»! Аплодисменты. Братья-педагоги сия нашего университета – соединять
Городской управе города Калуги в ли- Над поляной полилась магнитофонная людей. Естественно, что мы поддержи-
це Максима Алексеевича Акимова! Ап- запись. Ну вот, никакого абсурда, пес- ваем все мероприятия, которые связа-
лодисменты. Генеральному партнеру ня знакомая и милая, авторская – «Ат- ны с общением людей, соединением
слета – Калужской пивоваренной ком- ланты держат небо». Ой, нет, слова ка- людей в единое общество.
пании! Бурные аплодисменты. Партне- кие-то не такие: Ни много ни мало.
рам слета: учебному центру «Softline» …Где без питья и хлеба, Я задумалась. И поняла, что на-
и интернет-магазину софта Allsoft.ru! Забытые в веках, до прекратить искать мистику на Пер-
Аплодисменты не смолкали. Админы сервер держат вом Всероссийском слете сисадминов.
Ну а когда начались благодарнос- В слабеющих руках. А принимать как должное и конкурс
ти инициаторам слета, хлопающие ла- А что, неплохо у них получилось. на самое быстрое, экономное, элеган-
дошки сисадминов выдали просто-та- И главное – в тему! тное обжимание проводов, и выстав-
ки овацию. Браво Полине Трояновской! Но, однако, мистика мистикой, ку оружия на пригорке. А также раз-
Браво Дмитрию Луговому! а подошло время обеда. Меня потя- горевшийся при моем появлении кос-
Потом началась перекличка горо- нуло в сторону штаба и корпоратив- тер около одной из палаток. Пусть бу-
дов. И тут опять пошла мистика: ну как ного костра, где маняще чернел бока- дут глюки. Праздник все-таки. Раз в го-
на обычную зеленую поляну под Калу- ми закопченный чайник. Мне галан- ду – можно!
гой попали люди не только из Моск- тно налили чаю и предложили заку-
вы и Подмосковья, но и Питера, Брян- сить: все-таки голодный журналист – Оксана Родионова,
ска, Нижнего Новгорода, Воронежа, злой журналист… фотографии предоставлены
организаторами слета
Ярославля, Альметьевска, Таганро- За чаем разговорилась… нет,

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

Семь веб-интерфейсов
к электронной почте
Выберите лучший!

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

Требования мобильности и доступности электронной почты в любых условиях


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

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

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


Мы рассмотрели основные характеристи- и в этих условиях. путём усреднения субъективных мнений
ки наиболее популярных из существующих автора и «независимых экспертов», завер-
веб-интерфейсов к почтовым системам, Претенденты на звание лучшего бованных из числа сотрудников редакции
чтобы выбрать наилучший из них. В обзоре принимали участие только сво- журнала. Мнение автора имело определяю-
бодные системы, доступные в коллекции щий вес. Для каждого пакета внимание об-
На чем проводилось тестирование портов: ращалось на следующие особенности:
Для тестирования использовалась машина,  Ilohamail  RoundCube  Возможность работы по протоколам
работающая под управлением операцион-  UebiMiau  ISMail POP3 и IMAP.
ной системы FreeBSD 6.1. Версии остально-  OpenWebMail  NoCC  Возможность и удобство работы с вло-
го программного обеспечения, которое ис-  SquirrelMail жениями.
пользовалось для тестирования:  Возможность поиска и сортировки со-
 Apache 1.3.36 Установка выполнялась исключитель- общений.
 Sendmail 8.13.6 но из портов в конфигурации, заданной  Качество русификации и корректность
 Popa3d 1.0.2_1 по умолчанию. Замечу, что многие из рас- работы с различными кодировками.
 Dovecot 1.0 rc2 смотренных пакетов доступны и для дру-  Наличие «сервисных» функций (таких
 PHP 4.4.2 гих систем, в частности, для Linux. Все, как адресная книга и т. д.).
 Perl 5.8.8 за исключением OpenWebMail, разработа-  Наличие дополнительных возможнос-
 PostgreSQL 8.1.3 ны на «чистом» PHP, так что проблем с пе- тей (работа по защищённому протоко-
реносимостью быть не должно. Представ- лу, использование СУБД и т. д.).
Указанные версии не следует рассмат- ленные здесь веб-интерфейсы рассматри-  Наличие и качество документации.
ривать как какие-то зависимости – боль- вались как с точки зрения администрато-  Требования к клиенту (поддержка
шинство тестируемых пакетов хорошо ра- ра (простота и понятность установки и пер- JavaScript и т. п.).
ботают с любыми SMTP/POP3/IMAP-сер- воначальной настройки, вопросы безопас-
верами, в том числе и удалёнными. Про- ности), так и с точки зрения пользователя Также обязательно проверялась «ис-
верка на Linux-машине с установленным (функциональные возможности, удобство, тория безопас нос ти» рас с матривае -
Apache 2.0.55 и PHP 5.1.2 (для пакетов, внешний вид). Оценка качественных ха- мых интерфейсов по базе данных сайта
разработанных на этом языке) показала рактеристик, таких как удобство и привле- www.securitylab.ru.

Слово – претендентам ментированы достаточно хорошо и работа пакета предель-


Приступим к «смотру» основных претендентов. Обратите но прозрачна, сложно представить, что какие-то проблемы
внимание на пункт «Демо-версия» – по этому адресу вы могут возникнуть.
сможете попробовать тот или иной пакет в действии. Ну и, Настройка выполняется путём редактирования фай-
конечно же, представлены снимки экранов. лов conf/login.inc и conf/conf.inc, а также других inc-фай-
Итак, знакомьтесь! лов (если потребуется что-то нестандартное). Как мини-
мум, нужно указать параметры SMTP-сервера, которые
Ilohamail будут использоваться для отправки сообщений. Также на-
 Тестируемая версия: ilohamail-0.8.13_1. стоятельно рекомендуется в параметре $default_host жёс-
 Порт: /usr/ports/mail/ilohamail. тко ограничить список POP3- и IMAP-серверов, с которы-
 Язык разработки: PHP. ми пользователям будет позволено работать.
 Официальный сайт: http://ilohamail.org. Взаимодействие с почтовыми системами осуществляет-
 Демо-версия: http://ilohamail.org/main.php?page=demo. ся по протоколам SMTP и POP3/IMAP (используются функ-
ции собственной разработки), то есть пакет совершенно
Пакет уже рассматривался на страницах журнала автономен и никак не зависит от версий и режимов рабо-
(№1 за 2006 г.). Установка не вызывает никаких сложностей – ты ваших серверов входящей и исходящей почты. Ilohamail
все необходимые для работы файлы помещаются по умол- вполне может быть запущен на отдельном хосте, хотя в це-
чанию в каталог /usr/local/www/ilohamail. Для начала рабо- лях минимизации сетевого трафика рекомендуется всё же
ты этот каталог нужно либо перенести в дерево вашего веб- устанавливать его на той же машине, где работает ваш
сайта, при необходимости переименовав его, либо создать POP3/IMAP-сервер. (Естественно, эта рекомендация боль-
на него ссылку в конфигурации Apache, например, так: ше подходит для небольших серверов с умеренной загруз-
кой. Для систем, работающих на пределе своих возможнос-
Alias /mail/ /usr/local/www/ilohamail/ тей, размещение здесь же сервера Apache может оказаться
не самой лучшей идеей.) Имеется поддержка SSL.
Документация, представленная на сайте, не слишком По умолчанию пакет позволяет пользователю самостоя-
подробная (просто перечислены имеющиеся функции), тельно указывать сервер входящих сообщений и протокол,
зато есть почтовый список рассылки и форум, где в слу- по которому будет выполняться работа. Это хорошая воз-
чае проблем можно будет получить ответ на свой вопрос. можность, если вы создаёте универсальный сервер, поз-
Правда, учитывая, что конфигурационные файлы проком- воляющий вашим клиентам работать со своими почтовы-

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


администрирование
сутствии cookies пакет в состоянии ис-
пользовать другие способы поддержа-
ния сессии).
Из уязвимостей упоминаются лишь
возможность получения доступа к кон-
фигурации и пользовательским дан-
ным (о чём мы упоминали) и недоста-
точная обработка входных данных, поз-
воляющая выполнить XSS-нападение.
Обе уязвимости датированы 18.04.2005
года со степенью угрозы «низкая».
В общем и целом пакет произвёл
очень хорошее впечатление своей про-
стотой, понятностью и нетребователь-
Рисунок 1. IlohaMail настолько просто выполнен, что будет работать даже в links ностью. Думаю, он будет неплохим вы-
ми ящиками, где бы те ни были зарегистрированы. То есть бором для систем, где «ехать» важнее, чем «шашечки».
можно сказать, что Ilohamail – это веб-аналог обычного поч-
тового клиента. UebiMiau
Однако такая «вольность» таит в себе определённые  Тестируемая версия: uebimiau-2.7.10.
проблемы безопасности, и потому я рекомендую всё же за-  Порт: /usr/ports/mail/uebimiau.
ранее указать список допустимых серверов.  Язык разработки: PHP.
Вся пользовательская информация (индивидуальные  Официальный сайт: http://www.uebimiau.org.
настройки, отправленные сообщения, список контактов)  Демо-версия: http://uebimiau.org/demo.php.
размещается по умолчанию в каталоге data. Поскольку
некоторая небрежность с расширениями файлов и отсутс- Пакет UebiMiau во многом напоминает Ilohamail. По умол-
твием индексов может привести к неавторизованному до- чанию также создаётся каталог в /usr/local/www, который
ступу к конфиденциальным данным, настоятельно реко- нужно либо перенести в дерево веб-сайта, либо сконфигу-
мендуется этот каталог перенести за пределы дерева веб- рировать как псевдоним. Также желательно вынести ката-
сайта, благо такая возможность предусмотрена в файле лог database за пределы каталога, доступного веб-серверу.
конфигурации. Настройки выполняются правкой файла inc/config.php.
Ilohamail переведён на десятки языков, среди которых Документация на сайте находится в стадии разработ-
есть и русский (поддержка языков реализована через под- ки, так что надеяться приходится только на комментарии
ключение соответствующих inc-файлов). Русификация вы- в конфигурационных файлах. Впрочем, они предельно по-
полнена на очень хорошем уровне, не считая нескольких нятны, так что сложностей с пониманием работы пакета
опечаток в интерфейсе. Сообщения в различной кодиров- возникнуть не должно.
ке Ilohamail отображает корректно, разве что «споткнулся» Поддерживается работа как по IMAP, так и по POP3 (мо-
об UTF-8 в имени отправителя. жет использоваться прямое обращение к sendmail, php-фун-
Достаточно аскетичный и в то же время удобный интер- кция mail() либо работа по протоколу SMTP с любым удалён-
фейс позволяет легко ориентироваться в возможностях па- ным сервером), но в настройках можно задать только один
кета. Помимо естественной возможности отправлять поч- из этих протоколов. SSL не поддерживается. Права само-
ту и просматривать входящую (если в php.ini не запрещена стоятельно указывать сервер пользователи также не полу-
загрузка файлов параметром «file_uploads = Off», то и с от- чают – подключаться можно только к серверам, явно ука-
правкой вложений никаких сложностей не возникнет), к ва- занным в конфигурации (массив $mail_servers[] в файле
шим услугам календарь (правда, без возможности делать inc/config.php).
какие-то заметки), список контактов, за-
кладки (здесь вы можете хранить инте-
ресные вам интернет-ссылки).
Самостоятельно пользователь мо-
жет изменить кодировку, язык, часовой
пояс, правила сортировки, некоторые
цвета интерфейса. Поддержка браузе-
ром JavaScript не требуется, хотя его ис-
пользование позволит получить некото-
рые дополнительные удобства.
Не является обязательной также
и поддержка cookies-файлов (автори-
зация, как и в большинстве рассмотрен-
ных пакетов, обеспечивается механиз-
мом сессий языка PHP, так что при от- Рисунок 2. Всё бы было хорошо, если бы кодировка не сломалась...

12
администрирование
Хранение пользовательских дан-
ных, как и в случае с Ilohamail, осущест-
вляется в текстовых файлах, размеща-
емых в каталоге database, так что ника-
ких особых прав доступа для этого ката-
лога не требуется, и вся работа ведётся
исключительно с правами пользователя,
от имени которого работает Apache.
Есть возможность выбрать язык ин-
терфейса из очень большого числа ва-
риантов. Русский среди них присутству-
ет, и к качеству перевода никаких на-
реканий нет. Правда, впечатление не-
сколько подпортила некорректная рабо-
та с кодировкой входящих сообщений –
UebiMiau не сумел правильно выбрать
Рисунок 3. Здесь есть почти всё, о чём только можно мечтать
кодировку даже для сообщения, которое
через него же и отправлялось.
Интерфейс организован очень удоб-
но и интуитивно понятен. При первом
входе в систему вас переправят на стра-
ницу настроек. При желании можно из-
менить часовой пояс, режимы управле-
ния корзиной (куда будут помещаться
удаляемые сообщения), задать личную
подпись. Из дополнительных возмож-
ностей – работа с папками, поиск (по от-
правителю, теме, телу сообщения), ад-
ресная книга.
Поддержка браузером скриптов на
JavaScript обязательна – иначе не будет
работать даже меню. Также обязательна
и поддержка cookies (хотя в настройках
это требование можно отключить, тог-
да UebiMiau будет использовать другие
способы поддержания сессий).
Проблем с безопасностью зарегис-
трировано три, все помечены низким Рисунок 4. Веб-диск позволит вам копаться в своём домашнем каталоге, даже если
злой админ не открыл FTP-доступ
уровнем опасности. Последняя из них
(межсайтовый скриптинг) датирована 3 июля этого года. фильтрацию спама (за это отвечает SpamAssassin), прове-
Несмотря на предельную простоту и не столь большое рять правописание (подключается ispell) и так далее.
число функций, этот веб-интерфейс будет прекрасным вы- Установка выполняется по умолчанию в /usr/local/www/
бором в том случае, если вам просто нужно обеспечить cgi-bin/openwebmail. Для начала работы нужно указывать
«запасный выход» для некоторых своих клиентов (или да- в адресной строке полный путь к файлу: mysite.ru/cgi-bin/
же только для себя), чтобы иметь возможность просмот- openwebmail/openwebmail.pl. В принципе можно попробо-
реть свою почту из любого интернет-кафе. Впрочем, не- вать сделать более «красивый» путь с помощью псевдони-
корректная работа с кодировками может несколько под- мов, но в процессе работы особой необходимости в этом
портить впечатление. не возникает.
Все конфигурационные файлы размещаются здесь же,
OpenWebMail в каталоге cgi-bin/openwebmail/etc. Доступ к ним регулиру-
 Тестируемая версия: openwebmail-2.52_1. ется с помощью прав на исполнение, так что особое внима-
 Порт: /usr/ports/mail/openwebmail. ние нужно уделять грамотной настройке доступа к cgi-ката-
 Язык разработки: Perl. логу (в частности, нельзя допускать, чтобы он был доступен
 Официальный сайт: http://turtle.ee.ncku.edu.tw/ в корне веб-сайта по прямой ссылке, в обход ScriptAlias). До-
openwebmail. кументация на сайте включает файлы README, FAQ и дру-
 Демо-версия: http://www.postman.net. гие, которые в ряде случаев могут оказаться полезны.
Поскольку пользовательские данные OpenWebMail хра-
При установке можно задать ряд параметров, в том чис- нит в домашних каталогах пользователей (то есть пакет
ле подключить проверку на вирусы (с помощью ClamAV), «завязан» на учётные записи и требует, в частности, что-

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


администрирование
мирующие о наступлении того или ино-
го события, например, получении ново-
го сообщения.
Использование JavaScript не обяза-
тельно, но вот для поддержания сеанса
работы поддержка cookies обязательно
должна быть включена.
Нужно заметить, что, по сравне-
нию с «легковесами», разработанными
на PHP, OpenWebMail заметно приторма-
живает, задумываясь на секунду-другую,
прежде чем обновить экран. В принци-
пе ожидать иного от «чистого» CGI-ин-
терфейса и не приходится, а для работы
в mod_perl пакет не предназначен (в пер-
вую очередь из-за «бинарных» вставок).
Отдавая должное огромной работе, про-
деланной разработчиками, следует ска-
зать, что пакет OpenWebMail – очень
Рисунок 5. В SquirrelMail можно найти и довольно гармоничные темы
мощное и эффективное решение, осо-
бы каждый пользователь имел реально существующий до- бенно если веб-интерфейс является для вас и ваших кли-
машний каталог), то для ряда операций используются дво- ентов основным способом работы с электронной почтой.
ичные файлы с установленным suid-битом, то есть рабо- Но, с другой стороны, невысокая скорость работы и потен-
та выполняется фактически с правами пользователя root. циальные проблемы с безопасностью делают его не слиш-
С одной стороны, размещение данных в домашних катало- ком пригодным для работы в «большом Интернете».
гах гарантирует, что они не будут доступны другим пользо-
вателям, а также позволяет реализовать ряд интересных SquirrelMail
сервисных функций, таких как «веб-диск» (об этом – чуть  Тестируемая версия: squirrelmail-1.4.7.
позже). Если учесть, что за OpenWebMail тянется довольно  Порт: /usr/ports/mail/squirrelmail.
длинный шлейф уязвимостей (я насчитал восемь, но, к чес-  Язык разработки: PHP.
ти разработчиков, замечу, что они, по большей части, оха-  Официальный сайт: http://www.squirrelmail.org.
рактеризованы как имеющие низкую степень опасности),  Демо-версия: не обнаружена.
то всё это вместе отнюдь не добавляет спокойствия и уве-
ренности в завтрашнем дне вашего сервера. Как и в случае большинства рассмотренных здесь па-
Пользовательский интерфейс прямо с экрана авториза- кетов, всё, что требуется для работы, при инсталляции по-
ции поразил стильностью и качеством проработки деталей. мещается в /usr/local/www/squirrelmail. Здесь же, в катало-
Русский язык был выставлен автоматически, без необхо- ге config, можно найти файл конфигурации, где нужно бу-
димости что-либо править (при желании, в настройках вы дет указать параметры SMTP- и IMAP-серверов.
сможете выбрать другой из множества доступных). В насто- В поставке имеется и Perl-скрипт под именем conf.pl,
ящее время переведено примерно 90% надписей (в част- который поможет вам выполнить настройку интерактивно
ности, эта радость пока не постигла адресную книгу). Авто-
матическое распознавание кодировки сообщения выполня-
ется на уровне – все тестовые сообщения были отображе-
ны правильно, включая отправителя, тему и само сообще-
ние. Правда, OpenWebMail споткнулся (как и все остальные,
впрочем) на кириллическом имени вложения (отправлялся
созданный в Windows файл с именем «тест.txt»).
Пиктограммы панели инструментов достаточно удобны
в работе, не загромождая экран и позволяя интуитивно ори-
ентироваться в доступных функциях. Хотя их маленький раз-
мер для утомлённого годами терминальной работы админс-
кого глаза показался поначалу не слишком комфортным.
Помимо функций работы с электронной почтой к вашим
услугам – адресная книга, календарь, где можно отмечать
важные события, фильтр входящих сообщений, расширен-
ная форма поиска, веб-диск, с помощью которого вы сможе-
те хранить на сервере свои файлы, без необходимости при-
бегать к услугам FTP-сервера и даже интерфейс ssh-тер-
минала. Также реализованы всплывающие окна, инфор- Рисунок 6. Интерактивная конфигурация – к вашим услугам

14
администрирование
(запускается он из командной строки).
Если вам доводилось заниматься на-
стройкой различного сетевого обору-
дования, то интерфейс покажется вам
знакомым (см. рис. 6).
Документация на сайте весьма под-
робная, коротко, но ясно описывающая
буквально каждый шаг. Есть большое
число дополнений, которые можно ус-
тановить из коллекции портов (напри-
мер, вы можете автоматически добав-
лять к каждому письму «нижний колон-
титул» с помощью плагина squirrelmail-
email_footer-plugin или выполнять с по-
Рисунок 7. Наверное, именно так и должно выглядеть совершенство
мощью squirrelmail-login_auth-plugin ав-
томатическую HTTP-аутентификацию).
Язык по умолчанию предлагается
английский, но может быть переопре-
делён в настройках («Options → Display
Preferences»), где среди множества
представленных вы наверняка найдё-
те тот, который вам нужен. Русский там,
естественно, присутствует. Качество пе-
ревода никаких нареканий не вызвало,
«белых пятен» также в ходе тестирова-
ния не обнаружилось.
Там же, в настройках, помимо всего
прочего, можно изменить и цветовую
гамму интерфейса. Выбор заложенных
в поставку тем огромен – от приятных
и гармоничных (например, Bluesome),
до режущих глаз ядовито-зелёных.
Впрочем, на вкус и цвет, как известно,
товарищей нет.
Обрадовало наличие подробной
справочной информации, доступной
здесь же, через веб-интерфейс. Так что
особо непонятливых пользователей, ко- Рисунок 8. Крепость так и не сдалась...
торые умудрятся заблудиться в столь по-
нятном и простом интерфейсе, можно будет отсылать к ней, именно то оформление, которое сделает приятным даже
а не «куда-нибудь подальше». получение письма от начальства, что срочно нужно подго-
Отправка-чтение работают «на ура», включая вложения товить отчёт, срок сдачи – «вчера»...
(за исключением русских имён файлов) и автораспознава-
ние кодировки. Из «сервисных функций» – адресная кни- RoundCube
га, работа с папками, поиск и справка. Ряд дополнитель-  Тестируемая версия: roundcube-0.1.20060518.
ный функций можно установить из плагинов.  Порт: /usr/ports/mail/roundcube.
А вот что касается безопасности, то первое, что прихо-  Язык разработки: PHP.
дит в голову при просмотре списка уязвимостей, это сло-  Официальный сайт: http://www.roundcube.net.
во «решето»... 22 штуки, включая «средние» и «критичес-  Демо-версия: http://demo.roundcube.net.
кие», позволяющие получить доступ к системной инфор-
мации и даже выполнение произвольного кода с правами Для хранения пользовательских данных использует
веб-сервера – это уже не шутки. Правда, последнее вре- СУБД – при инсталляции предлагается на выбор MySQL
мя «поток уязвимостей» несколько стабилизировался, так или PostgreSQL. После сборки размещается в /usr/local/
что можно надеяться, что сейчас использование пакета не www/roundcube.
представляет такой уж серьёзной опасности. Перед началом работы требуется сформировать нуж-
Так что, если «паранойя» – не ваш диагноз, то SquirrelMail ную базу данных и настроить параметры подключения к ней
обеспечит вашим пользователям удобный и прекрасно ло- в конфигурации (файл config/db.inc.php). Прочие настрой-
кализованный веб-интерфейс для работы с электронной ки, такие как параметры почтовых серверов, указываются
почтой, к тому же позволяющий выбрать из множества тем в config/main.inc.php.

№9, сентябрь 2006 15


администрирование
ки «Отправить» в форме создания но-
вого сообщения, может сбить с толку –
не сразу догадываешься, что для отправ-
ки сообщения нужно щёлкнуть на пиктог-
рамму, больше похожую на изображе-
ние принтера. Так же не совсем привыч-
но, что, например, для просмотра какого-
то сообщения открывать его нужно двой-
ным, а не одинарным щелчком.
Поддержка различных кодировок
выполнена на высоком уровне («зюки»
вместо имени вложения мы уже не рас-
сматриваем – эту проверку не прошёл
ни один из кандидатов). Из дополнитель-
ных функций – лишь список контактов.
Информацию об известных уязви-
мостях обнаружить не удалось, так что
если вы фанат самых продвинутых тех-
Рисунок 9. Эх, если бы не загромождённость поля «От» да лишнее поле «Кому»... нологий или хотите доставить своим
Если что-то будет работать не так, то первое место, ку- пользователям эстетическое удовольствие от прикоснове-
да следует обратиться за разъяснениями, – лог-файлы ния к столь тонко проработанному дизайну, то RoundCube
в roundcube/logs. Первая ошибка, с которой мне пришлось будет для вас хорошим выбором – задачу «кубатуры кру-
столкнуться, – это сообщение, что отсутствует функция га» разработчики решили превосходно.
session_start(). Для её устранения пришлось в php.ini уста-
новить следующий параметр: ISMail
 Тестируемая версия: ismail-2.0.
; Initialize session on request startup  Порт: /usr/ports/www/ismail.
session.auto_start = 1
 Язык разработки: PHP.
Кстати сказать, ещё одна переменная – register_globals,  Официальный сайт: http://www.insidesystems.net/
которая раньше также создавала много проблем, для рас- projects/project.php?projectid=4.
сматриваемых пакетов не критична, так что можно вполне  Демо-версия: не обнаружена.
оставить значение по умолчанию (обычно по соображени-
ям безопасности это «Off»). Для хранения пользовательской информации может ис-
Для нормальной работы обязательно требуется доступ- пользоваться domxml (по умолчанию), MySQL или PostgreSQL.
ный IMAP-сервер – работа по POP3, похоже, не поддержива- Примеры настройки на работу с той или иной базой данных
ется. Для работы с IMAP-серверами может использоваться можно найти в /usr/local/share/examples/ismail. Кстати, рас-
либо функция mail(), либо код, разработанный для Ilohamail. ширение PHP – domxml как зависимость почему-то не уста-
Поддержка безопасных SSL-соединений реализована. новилось, так что пришлось доустанавливать его вручную
В общем, установка и настройка особых сложностей из порта php4-extensions.
не вызовут, хотя некоторые тонкие моменты можно было бы и Документация на сайте довольно удобна, для сообще-
более подробно осветить в документации, представленной на ний об ошибках (Bug Reports) предусмотрено использова-
сайте. К слову, документация оформлена в виде wiki, что все- ние электронной почты.
ляет надежду на её быстрое наполнение.
Пользователю для полноценной работы
потребуется браузер, в полном объёме
поддерживающий CSS2, XHTML, объек-
тную модель JavaScript и XMLHttpRequest.
Впрочем, это умеют практически все сов-
ременные браузеры. Также обязательной
является и поддержка cookies.
Среди переводов есть и русский язык.
Включить его можно в настройках. Там
же доступны вкладки для работы с пап-
ками и своим профилем. Интерфейс
очень интересный. Особенно поразили
полупрозрачные диагностические со-
общения, выводимые поверх основной
страницы. Некоторая непривычность ин-
терфейса, в частности, отсутствие кноп- Рисунок 10. А это уже другая тема. Тоже, впрочем, неплохо

16
администрирование
Установка выполняется в /usr/local/www/data/ismail, После этого форма стала открываться. Кнопки «Отпра-
так что если data в вашем случае является символьной вить» и здесь нет (видимо, разработчики решили во всём
ссылкой на корень веб-сайта, то будьте готовы к тому, следовать интерфейсу «оффлайновых» клиентов), так что
что ISMail сразу станет доступен вашим пользователям. пришлось предварительно поводить мышкой по иконкам,
Так же, как и для RoundCube, необходимо в php.ini раз- разбираясь, что же они означают.
решить автоматическую инициализацию сессий: Если вы не большой поклонник коричневого, то внешний
вид можно подправить в include/istheme.conf.
; Initialize session on request startup С языком – хуже. Среди настроек русский не отыскал-
session.auto_start = 1
ся. Тем не менее определённую надежду вселило нали-
Конфигурационные файлы размещаются в каталоге чие каталога locale, где можно найти mo- и po-файлы для
include. Для того чтобы веб-интерфейс заработал, нужно пе- итальянского, чешского, датского и английского, но поче-
реименовать файлы ismail.conf.sample и istheme.conf.sample му-то выбор любого из этих языков в настройках на языке
в ismail.conf и istheme.conf соответственно. Ну и, естествен- интерфейса никак не отражался. Разве что «зюки» стано-
но, внести в них необходимые изменения. В частности, обя- вились другими. Создание «по образу и подобию» катало-
зательно нужно прописать секцию своего домена (пример га с русской локалью (пришлось повспоминать азы gettext)
того, как это сделать, можно посмотреть в секции default). не привело к появлению родного языка среди доступных.
И не забудьте убрать секцию example.net, иначе она тоже Пришлось править исходники.
будет предлагаться на выбор при входе в систему. В частности, русский язык был добавлен в список до-
Для отправки сообщения вы должны задать переменную ступных в массив $defaultsettings["locale"]["values"] (файл
mailprogram в конфигурационном файле, которая бы указы- include/globals.php). Но на переключение языка интерфейса
вала на вашу локальную программу отправки почты. В нем эта опция упорно влиять не желала. Так что, не мудрствуя
по умолчанию есть примеры для использования sendmail лукаво, в include/globals.php был жёстко прописан для ва-
и exim. Если через /bin/sendmail, то и постфикс имеет такой рианта по умолчанию «ru_RU», и там же (строка 204) явно
враппер – конкретно используется команда: указана кодировка, так как из файла локалей её разработ-
чики решили не вытаскивать, ограничившись жёсткой при-
/usr/libexec/sendmail/sendmail -oi -t вязкой к iso-8859-2:

но, поскольку эта команда задаётся прямо в конфигура- function PageHeader($echo=1, $frame=0) {
$header = "";
ционном файле, то в принципе можно указать любой вы- if ($_SESSION["locale"] == "ru_RU") {
зов, лишь бы он поддерживал нужный режим работы. Из- $header = "<?xml version=\"1.0\" ↵
encoding=\"koi8-r\"?>\n";
менил предыдущее предложение... Использовать любой } else {
SMTP-сервер вы не сможете. $header = "<?xml version=\"1.0\" ↵
encoding=\"iso-8859-1\"?>\n";
Интерфейс буквально поразил своей красотой в стиле }
Ubuntu. Но ещё больше «поразил» нечитаемыми символами,
выводимыми вместо русских букв в именах отправителей и Вся эта «хирургия» позволила наконец-то увидеть рус-
темах сообщений. Удручила и невнятная панель инструмен- ские надписи в элементах интерфейса, и koi8-r стал отоб-
тов, о назначении иконок на которой можно узнать, только ражаться нормально и в сообщениях.
подведя к ней мышку (возможно, со временем, когда работа А вот письмам в других кодировках так и не повезло –
дойдёт до автоматизма, это будет и удобно, что ничего лиш- они по-прежнему сохранили свою «нечитаемость». Похо-
него, но при первом знакомстве с таким интерфейсом просто же, пакет не предусматривает, что у кого-то может быть
теряешься). Зато по расположению фреймов очень напоми- несколько кодовых таблиц и что все их хорошо бы обраба-
нает привычные многим «оффлайновые» почтовые клиен- тывать по-своему.
ты типа Outlook Express, что можно считать довольно хоро- Из дополнительных функций – лишь адресная книга,
шим начинанием (особенно это поможет низкоквалифици- так что даже если абстрагироваться от проблем с коди-
рованным пользователям). Для работы требуются JavaScript ровками, пакет всё равно оставляет чувство какой-то не-
и поддержка cookies. При попытке открыть форму редакти- доработанности.
рования нового сообщения меня встретил чистый экран. По- Небольшим утешением можно считать отсутствие из-
искав в логах, я обнаружил сообщение об ошибке: вестных уязвимостей. Тем не менее ISMail можно пореко-
мендовать разве что любителям копаться в исходниках
[error] PHP Parse error: syntax error, unexpected ';'
in /var/www/webmailtesting/ismail/sendmail.php on line 167
и править локали. Ну а я с грустью констатирую, что мне
«взять Измаил» сходу не удалось, а к длительной осаде
Пришлось в указанном файле заменить строчку: я сейчас не предрасположен.

$addedentry = $AddressBook->AddEntry ↵ NoCC


($headerinfo->(ISDecode(fromaddress));
 Тестируемая версия: nocc-1.2.
на:  Порт: /usr/ports/mail/nocc.
 Язык разработки: PHP.
$addedentry = $AddressBook->AddEntry ↵  Официальный сайт: http://nocc.sourceforge.net.
(ISDecode($headerinfo->fromaddress);
 Демо-версия: не обнаружена.

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


администрирование
Сравниваем веб-интерфейсы к электронной почте
Веб-интерфейс Ilohamail UebiMiau OpenWebMail SquirrelMail RoundCube ISMail NoCC
Версия 0.8.13_1 2.7.10 2.52_1 1.4.7 0.1 2.0 1.2
Поддержка POP3 + + n/a**** - - + +
Поддержка IMAP + + n/a**** + + + +
Метод отправки* SMTP SMTP собственная SMTP SMTP MSA SMTP
Поддержка SSL + - n/a - + - +
Автораспознавание кодировки +/- ***** - + +/- ***** +/- ***** - +
Работа с вложениями + + + + + + +
Русский интерфейс 4 4 4,5 5 4,5 1 4
Темы интерфейса + +
Обязательная поддержка JavaScript нет да нет нет да да нет
Функция поиска сообщений - + + + - - -
Функция сортировки + + + + + + +
Внешние фильтры - - + - - - -
Адресная книга + + + + + + -
Календарь + - + - - - -
Прочие сервисные функции веб-диск, ssh-терминал плагины
Количество уязвимостей 2 3 8 22 - - 2
Простота установки и настройки** 4,5 5 5 5 4 1 5
Удобство работы*** 4,5 4 4 5 5 4 3,5
Внешний вид*** 3,5 3,5 4 4,5 5 3,5 3,5
Примечания:
* SMTP – отправка сообщений по протоколу SMTP; MSA – использование почтового агента напрямую (например, sendmail); собственная – собственная
реализация функции отправки.
** простота установки и настройки дана как интегральный субъективный показатель (от 1 до 5), учитывающий «прозрачность» пакета, комментарии
в конфигурационных файлах, качество документации, а также необходимость «доводки напильником».
*** усреднённая оценка удобства и внешнего вида указана как средняя оценка (от 1 до 5), присвоенная интерфейсу редакцией.
**** OpenWebMail работает напрямую с хранилищами, автоматически определяя их тип.
***** отметка «+/-» означает, что пакет не смог корректно отобразить Unicode в поле «Отправитель».

Установка выполняется в /usr/local/www/nocc. Перед на- на это, пакет вполне можно считать достаточно неплохим
чалом работы следует внести нужные изменения в конфи- выбором для использования на промышленных серверах,
гурационный файл (conf.php), к слову, очень подробно про- особенно если вы не планируете баловать своих пользова-
комментированный. Обязательно нужно установить зна- телей различными «излишествами».
чение переменной $tmpdir. Пришлось также доустановить
из php4-extensions расширение Iconv (как зависимость оно Подводим итоги
не установилось). Не забывайте перезапускать Apache пос- Для того чтобы было проще охватить сразу все рассмат-
ле добавления расширений. риваемые пакеты, наиболее важные особенности сведе-
В отличие от RoundCube и ISMail, здесь для нормальной ны в таблицу.
работы, наоборот, нужно отключить автоматическую ини- Довольно сложно вынести вердикт, что «этот пакет
циализацию сессий: хорош, а этот плох». За исключением ISMail, который
так и не удалось заставить полноценно работать, не гово-
; Initialize session on request startup ря уже о работе «из коробки» (впрочем, никто поддержку
session.auto_start = 0
русского языка здесь и не обещал), каждый из оставшихся
В противном случае получите ошибку «Невозможно вправе претендовать на вашу благосклонность.
подключиться к серверу». Cookies для поддержания сес- Если вам нужно лёгкое и нетребовательное реше-
сии не требуются. Имеется поддержка SSL. ние, то хорошими кандидатами являются Ilohamail, NoCC
Русский язык был предложен по умолчанию. или UebiMiau (последний – если для вас не слишком кри-
Интерфейс довольно милый (хотя и несколько гро- тична корректная работа с различными кодировками).
моздкий), с корректным отображением кириллицы. Ни- Для «гурманов» прекрасным выбором будет блистательный
чего лишнего (даже настроек, не говоря уже об адресных RoundCube (если не обращать внимания на не очень бога-
книгах и т. д.). Есть по умолчанию три цветовые темы (вы- тый фунционал). Если вам нужна непревзойдённая функ-
брать одну из них можно при входе, на экране ввода логи- циональность, даже ценой снижения безопасности сервера,
на и пароля). то обратите внимание на OpenWebMail или SquirrelMail.
Уязвимостей было обнаружено две (последняя из них В общем, выбирать есть из чего, и окончательное ре-
в феврале этого года – с уровнем «средний»). Несмотря шение мы оставляем за вами.

18
полезные советы FreeBSD

Как не «проморгать» нужную строку жмёте <Enter>, если удалить – вводите <d> и потом <Enter>.
Вы, думаю, помните, сколько всего выводится на экран Понятно, что если какой-то из удаляемых пакетов «держит»
при сборке ядра или какого-нибудь большого пакета. Пос- другие в качестве зависимости, то эти другие сами станут
тоянно наблюдать за выводом довольно скучно, а экранный «листовыми». Поскольку запускать «pkg_cutleaves -x» рекур-
буфер не всегда позволяет «отмотать» вывод до интересу- сивно, пока не останутся только нужные пакеты, – не самое
ющего вас момента. Можно, конечно, перенаправить вывод весёлое занятие, разработчики предусмотрели ещё один
в файл и потом изучать его сколько угодно, но в этом слу- ключ: -R. Команда «pkg_cutleaves -R» работает аналогично
чае вы теряете возможность «мониторить» процесс в ре- приведённому выше, за тем исключением, что если в сис-
жиме реального времени. Проблема легко решается с по- теме есть пакеты, от которых зависит только удаляемый,
мощью утилиты script: то они будут удалены автоматически и рекурсивно, без до-
полнительных вопросов. Как обычно в таких случаях, на-
# script /var/log/build.log
стоятельно рекомендую ознакомиться с man pkg_cutleaves
Script started, output file is /var/log/build.log и внимательно отвечать на каждый вопрос программы.
# make buildworld
<. . . отображение процесса сборки . . .>
О пользе обратных кавычек
# exit Свойство оболочки исполнять выражение в обратных ка-
exit
вычках (`команда`) и подставлять результат в исполняемую
Script done, output file is /var/log/build.log командную строку, предоставляет широчайшие возможнос-
ти для автоматизации. Например, следующая команда вы-
То есть вы всё видите на экране, но при этом весь вывод, ведет на экран конфигурационный файл текущего ядра, не-
равно как и ввод, дублируются в указанном файле. Глав- зависимо от платформы и имени этого файла:
ное, чтобы места на диске хватило. Только не забывайте,
$ cat /usr/src/sys/`uname -p`/conf/`uname -i`
что в этот же файл попадут и управляющие символы, так что
этот метод не слишком подходит для «логирования» интен- Ещё один пример:
сивной интерактивной работы, особенно если вам часто
$ touch arch`date "+%Y-%m-%d"`
приходится использовать Backspace.
В итоге вы получите файл с именем вида arch2006-07-21,
зависящим от даты исполнения команды. При необходимос-
Удалите из системы всё лишнее ти можно создавать и вложенные конструкции, например:
При интенсивной работе с пакетами программ в систе-
$ echo a`echo b\`echo c\\\`echo d\\\`c\`b`a
ме со временем накапливается много лишнего, например,
пакеты, которые устанавливались как зависимости к уже abcdcba
удалённым или обновлённым приложениям. Для их удале-
ния в «полуавтоматическом» режиме служит очень удоб- Обратите внимание на то, как приходится экранировать
ная утилита: pkg_cutleaves (установить её можно из пор- служебные символы для того, чтобы они «срабатывали»
тов: sysutils/pkg_cutleaves). Поскольку она использует воз- на нужном уровне вложенности (сам слэш тоже нуждает-
можности portupgrade, то эта программа также должна быть ся в экранировании, поэтому на «уровне d» мы вынуждены
у вас установлена. Если говорить точнее, то pkg_cutleaves использовать целых три символа «\»). Наибольшую пользу
работает с так называемыми листовыми пакетами, т.е. с та- обратные кавычки приносят при использовании в скриптах,
кими, которые не являются зависимостями для других, ус- автоматизирующих те или иные действия.
тановленных в системе. Например, команда «pkg_cutleaves
-lc» выведет (с краткими комментариями) список паке-
тов-кандидатов на удаление, среди которых будут и bash, Обновляйте коллекцию портов
без которой вы жить не можете, и какой-нибудь gmake, кото- без усилий
рый был нужен для установки приложения, уже давно «по- В FreeBSD 6.x появилась удобная утилита для обновления
чившего в бозе». Поэтому её работа в любом случае тре- портов: portsnap. Теперь не обязательно устанавливать и на-
бует вашего пристального внимания: страивать cvsup, обновление дерева очень легко выполня-
ется системными средствами:
# /usr/local/sbin/pkg_cutleaves -x
# portsnap fetch && portsnap update
Package 1 of 38:
autoconf-2.59_2 - Automatically <...> Un*x platforms (2.59)
autoconf-2.59_2 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort?
При первом запуске между этими командами понадобит-
** Keeping autoconf-2.59_2. ся ещё одна: «portsnap extract». Для автоматического скачи-
вания обновлений (например, по расписанию cron) вместо
Package 2 of 38:
bash-2.05b.007_5 - The GNU Bourne Again Shell portsnap fetch следует использовать portsnap cron.
bash-2.05b.007_5 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort?
Сергей Супрунов
И так по всем пакетам: если хотите оставить – просто

20
полезные советы

Не нагружайте Apache лишней работой


Если вы не предоставляете своим клиентам услуги хос-
тинга с возможностью самостоятельно вносить изменения
в .htaccess и если вам не требуется «на лету» менять пара-
метры каких-либо каталогов – отключите вообще исполь- Не обижайте клиентов
зование этих файлов с помощью директивы AllowOverride Предположим, у вас есть каталог http://yourdomain.ru/project/.
None. Вы же не хотите потерять клиентов, которые будут пытать-
Любые специфические для каталога настройки мож- ся по ошибке зайти в каталог proect? Конечно, можно на-
но указать в соответствующей секции <Directory>. Конеч- писать красивую и грамотную «страницу 404», которая бу-
но, в этом случае после каждого изменения конфигура- дет возвращаться клиенту в ответ на запрос несуществу-
ции придётся перезапускать веб-сервер, но это, как прави- ющего ресурса и всё ему объяснять. Но проблема в том,
ло, лучше, чем заставлять Apache при обработке каждого что «клиент всегда прав», и он обижается, если ему ска-
запроса просматривать каждый каталог от корня файло- зать, что он ошибся. Для домашней странички это не кри-
вой системы (даже не сайта!!!) до текущего файла в поис- тично, но для интернет-магазина обиженный клиент – на-
ках файла .htaccess. стоящая трагедия.
А если вы «додумались» задать для этих файлов сра- Apache позволяет очень легко решить эту проблему:
зу несколько имён (с помощью директивы AccessFileName), просто создайте псевдоним для часто «ошибаемого» ад-
то работы у Apache прибавится пропорционально числу воз- реса:
можных вариантов. Никогда так не делайте, если в этом нет
Alias /proect/ /usr/local/www/htdocs/project/
абсолютной необходимости. И даже если есть – всё равно
не делайте. Не забывайте только, что первым параметром указыва-
Примечание: если для какого-то каталога вам всё-та- ется путь от корня веб-сайта, а вторым – от корня файло-
ки нужен .htaccess-файл, разрешите его обработку только вой системы. Ещё один вариант решения задачи – создать
для этого каталога – в секции <Directory>: символьную ссылку (см. также предыдущий совет, касаю-
щийся символьных ссылок).
AllowOverride None
<Directory /specclient> Но Apache был бы не Apache, если бы не предложил ещё
AllowOverride All более элегантное решение – модуль mod_speling. (Одна «l» –
</Directory>
это не опечатка! Вопреки всем правилам английской грам-
матики название модуля пишется именно так). Здесь всё
просто: убедитесь, что этот модуль подключается, и вне-
сите небольшую корректировку в конфигурацию, добавив
Внимательней относитесь к ссылкам в секции, которые должны охватываться действием этого
Ещё один способ упростить жизнь серверу Apache – разрешить модуля, одну директиву:
символьные ссылки директивой Options+FollowSymLinks. Да-
Checkspelling on
да, именно разрешить! Дело в том, что если они запреще-
ны, то при обработке каждого запроса Apache должен будет На этот раз нужны обе буквы «l». Теперь Apache, по-
проверить каждый подкаталог в пути и сам файл на пред- лучив запрос несуществующего ресурса, самостоятель-
мет того, не является ли он символьной ссылкой. Если же но попытается найти среди имеющихся наиболее похожий
ссылки разрешены, то веб-сервер будет просто открывать и вернёт его клиенту. Правда, проверяется расхождение
запрошенный файл, не задумываясь о его природе. всего на один символ в элементе (под элементом здесь
Естественно, нельзя забывать здесь об аспекте безо- понимается имя файла или имя любого каталога в пути
пасности – если кто-то ещё, кроме вас, имеет право созда- к файлу; т.е. mod_speling сможет распознать ошибку типа
вать файлы в корневом каталоге веб-сервера, то кто зна- nevs/totay/inex.html, но споткнётся на news/tudey/index.html),
ет, какие ссылки там могут появиться? но в большинстве случаев это позволит отдать клиенту то,
Нужно предостеречь, что попытка решить проблемы что он хочет. Даже если он и сам не до конца понимает, че-
безопасности с помощью опции SymLinksIfOwnerMatch, го же хочет...
которая позволяет Apache обрабатывать ссылку только
в том случае, если она принадлежит тому же пользовате- Сергей Супрунов
лю, который является владельцем самого файла, добавит
для Apache даже больше работы, чем при полностью за-
прещённых ссылках. Ведь мало того что придётся прове-
рять, ссылка это или нет, так нужно будет ещё и владель-
цев контролировать! В общем, пользуйтесь этими возмож-
ностями с умом и осторожностью.

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


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

Обзор систем резервного копирования

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

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

С
амым распространенным спо- пространять и продавать при условии,
собом сохранения информа- что авторство будет сохранено.
ции в любой ситуации является AMANDA является надстройкой к
ее дублирование. Резервная копия, со- стандартным программам dump/restore,
храненная на другом источнике, стри- GNU tar и многим другим.
мере, жестком диске, DVD/CD, в слу- Построен по клиент-серверной схе-
чае выхода из строя основной систе- ме, причем клиент может быть уста-
мы позволит восстановить необходи- новлен на одном компьютере с сер-
мое практически с нуля. вером либо клиенты могут быть уста-
Решение задачи построения сис- новлены на всех компьютерах, кото-
тем резервного копирования и хране- рым требуется архивация.
ния данных зависит от инфраструкту- Для передачи информации исполь-
ры предприятия, ценности информа- зуется свой протокол, работающий по-
ции и требований к степени готовнос- верх UDP или TCP. Последние версии
ти такой системы. AMANDA могут взаимодействовать
Рисунок 1. Менеджер управления Arkeia
Поэтому, несмотря на кажущуюся с компьютерами Windows посредством
простоту, выбрать необходимое реше- SAMBA, либо как вариант можно ис- поненты написаны на Java и доступны
ние удается не сразу. Схожие на пер- пользовать клиента, скомпилирован- для большого числа платформ. Лока-
вый взгляд проекты не сразу раскры- ного под cygwin. лизованного интерфейса, к сожале-
вают все свои возможности, и, что- Поддерживается шифрование ин- нию, нет. Клиент в принципе не привя-
бы их выявить, иногда приходится ус- формации как на клиенте, так и на сер- зан к конкретному серверу, можно раз-
танавливать систему и пробовать ее вере, для этих целей используется не- вернуть несколько серверов и для ре-
в работе. Учитывая, что в каждой кон- симметричный GPG и симметричный зервирования выбрать любой из до-
кретной ситуации (сервер, небольшая amcrypt-алгоритм, хотя легко можно ступных, если администратор разре-
сеть, гетерогенная сеть и пр.) необхо- добавить и любой другой. Аналогично шил к нему доступ.
димо персонально подходить к реше- можно настроить и сжатие данных. Ес- Пользователи могут быть раз-
нию задачи копирования, решено бы- ли сжимать информацию на клиенте, делены на роли (ADMINISTRATOR,
ло протестировать ряд проектов, ре- это уменьшит нагрузку на сеть, если OPERATOR, USER) со своими права-
зультат в виде 17 систем различно- на сервере, то снизит нагрузку на мало- ми в системе.
го назначения представлен в итого- мощную машину клиента. При наличии Разработаны также дополнитель-
вой таблице. нескольких средств архивации на од- ные модули, позволяющие резерви-
Системные требования участни- ном сервере можно использовать не- ровать данные отдельных приложений
ков тестирования существенно раз- сколько независимых конфигураций. без их остановки.
нятся, так, если для работы сервера AMANDA оптимизирована для ра- В настоящее время доступны такие
afbackup подойдет компьютер пяти- боты со стримерами, но никто не за- модули для Lotus, Open-Xchange, LDAP,
летней давности, то для Time Navigator прещает использовать CD и DVD. MS Exchange, и баз данных Oracle,
и Arkeia Network Backup они на поря- Процессом резервирования можно mySQL, PostgreSQL, DB2, и MS SQL
док выше. руководить как вручную, так и запус- Server.
К сожалению, объемы статьи не поз- кать при помощи cron. Стоит также отметить и функцию
воляют включить в итог все существую- Disaster Recovery, появившуюся в про-
щие решения. Но главная цель статьи – Arkeia дуктах Arkeia начиная с версии 5.3.12.
не показать победителя, а помочь со- Компания выпускает два продук- С ее помощью можно восстановить
риентироваться при выборе и опреде- та – Arkeia Network Backup и Arkeia данные на компьютере под управлени-
литься с критериями. Smart Backup. Первый предназначен ем Linux или Windows всего за несколь-
для больших и средних сетей, второй – ко шагов, даже если исходный компью-
AMANDA для небольших растущих сетей, отли- тер потерян или вышел из строя.
Проект AMANDA (Advanced Maryland чаются ценой. Так, Smart Backup для Поддерживается протокол NDMP
Automatic Network Disk Archiver), нача- пользователей Linux бесплатен и ог- версии 3, позволяющий управлять дан-
тый в 1998 году в департаменте ком- раничен 50 Гб архивируемой инфор- ными на носителях. Его применение
пьютерных технологий университе- мации. Стоимость лицензии Network дает выигрыш по времени в операциях
та Maryland США, постепенно утра- Backup может колебаться от 3 000 резервирования и восстановления.
тил поддержку в родных стенах, и ис- до 15 000 у.е. Возможно несколько вариантов
ходные тексты были перемещены Построен по клиент-серверной дублирования резервной информации:
на Sourceforge. схеме. Имеются перекомпилирован- восстановление с переадресацией
В настоящее время разрабатыва- ные пакеты для большинства систем. данных, выполнение команд до и пос-
ется многими добровольцами, и, хотя Для управления процессом архиви- ле резервирования.
не заявлена лицензия GNU GPL, лю- рования используется Arkeia Manager, Удобный планировщик календар-
бой желающий может модифициро- а на клиентских машинах устанавли- ного типа позволяет выполнить все не-
вать код по своему усмотрению, рас- ваются программы-клиенты. Эти ком- обходимые операции: полную, инкре-

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


администрирование
Дополнительно хочется отметить
наличие большого числа дополнитель-
ных программ и утилит, например, мо-
дуля к Webmin (http://sourceforge.net/
projects/afbackup-webmin) и скрипта
remote-afbackup, позволяющего запус-
кать операцию создания резервной ко-
пии удаленно.

Bacula
Модульная архитектура этого мощно-
го средства для создания, управления
и восстановления информации поз-
воляет использовать его как в малых,
так и больших сетях. Работает по кли-
ент-серверной схеме. Относительно
прост в настройках и обладает боль-
шим количеством продвинутых воз-
можностей, позволяющих с легкостью
находить и восстанавливать утрачен-
ные или поврежденные файлы. Воз-
можно, указать индивидуальные па-
раметры для различных типов фай-
лов. Например, текстовые сжимать,
а архивы, исполняемые файлы пере-
давать без сжатия.
Центральным элементом Bacula
является Director, который отвечает
за хранение и запуск заданий, ведение
Рисунок 2. Bеб-интерфейс управления BackupPC журнала. Для хранения журналов ар-
хивных копий используется база дан-
ментную, дифференциальную копии, Чтобы знать, какие файлы уже бы- ных. В настоящее время поддержива-
восстановление и прочее. ли резервированы, клиент ведет спе- ются PostgreSQL, MySQL или SQLite,
Общее впечатление портит толь- циальный список, удаление которого хотя, если нет проблем с лицензиро-
ко передача логина/пароля в откры- приведет к тому, что повторно будет ванием, можно использовать еще око-
том виде, что при возможностях Arkeia произведено полное резервирование. ло 10 других СУБД.
может привести к утечке информации, Аналогично, так как резервная копия На компьютерах клиентов устанав-
ведь восстановить файл можно в про- привязана к имени узла, при его из- ливается File Daemon, который соби-
извольное место в сети. менении будет создана полная копия. рает данные для архивирования. Уп-
Для уменьшения нагрузки на сеть фай- равление осуществляется посредс-
Afbackup лы сжимаются индивидуально на сто- твом Bacula Console. Последние два
Построен по клиент-серверной схеме. роне клиента. компонента существуют для различ-
Сервер отвечает за работу с различ- Сервер может работать в одном ных платформ, что позволяет без про-
ными устройствами хранения инфор- из двух режимов: однопоточном, под- блем использовать Bacula в гетероген-
мации, отслеживает их состояние, ко- ходящем для полного резервирования, ных сетях.
личество. Все остальное лежит на кли- и многопоточном, для инкрементного. Также стоит отметить весьма удач-
енте. Клиент знает, какие файлы, ката- В последнем случае для каждого со- ный планировщик и систему приорите-
логи подлежат резервированию, на ка- единения открывается новый порт. та выполнения заданий.
кую кассету на стримере должна быть Все используемые кассеты получа-
записана информация. ют специальную метку, к которой при- BackupPC
На стороне клиента задействуют- вязывается записанная информация, Высокопроизводительное решение
ся три утилиты. Утилита afclient отве- поэтому желательно эту метку нанес- уровня предприятия, позволяющее
чает за связь с сервером и осущест- ти на коробку, чтобы не путать. Для ра- резервировать данные компьютеров,
вляет распаковку и упаковку файлов, боты с одним клиентом может быть на- работающих под управлением UNIX/
afrestore – за восстановление инфор- строено несколько серверов. Предус- Linux, MacOS X и Windows разных вер-
мации, а afclient выполняет контро- мотрено дублирование архива. сий. Прост в настройке и поддержке.
лирующие и управляющие функции. Восстановлением информации мо- Не требует клиентского ПО.
Для последних двух утилит имеются жет руководить как пользователь, так и Для резервирования данных
фронт-енды xafrestore и xclientconfig. централизованно администратор. Windows-систем, используется про-

24
администрирование
токол smb (или rsync работающий че- Для верифика-
рез cygwin), UNIX и Linux – rsync или tar ции записанной ин-
(над ssh/rsh/nfs). формации исполь-
Для экономии ресурсов одинако- зуется MD5, опцио-
вые файлы с одного и даже несколь- нально архив мож-
ких компьютеров загружаются только но зашифровать
один раз, затем для привязки к конк- с помощью GnuPG.
ретной системе используются жест-
кие ссылки, если на одной из систем Backupninja
такой файл изменился, то он будет пе- Большинство сво-
резаписан. бодных скриптов
Для управления процессом резер- и программ пред-
вирования и восстановления инфор- назначенных для
мации, просмотра журналов и файлов создания резерв-
в архиве, настройки, используется веб- ных копий имеют
интерфейс (т.е. придется ставить еще неудобный файл
и веб-сервер), который, к сожалению конфигурации или
не локализован. Выбранный для вос- вообще обходятся Рисунок 3. Мультиплатформенный интерфейс к Box Backup - Boxi
становления файл может быть скопи- без такового. Це-
рован на любой ресурс. лью проекта backupninja как раз и яв- клиента bbackupd, задача которого
Следует также отметить поддержку ляется повышение удобства при ис- контролировать изменения и загру-
резервирования систем, подключаю- пользовании таких программ, путем жать их на сервер и bbackupquery, инс-
щихся к сети периодически без пос- создания набора конфигурационных трумента, предназначенного для со-
тоянного IP-адреса и работающих че- файлов расположенных в etc/backup.d/, здания запросов и восстановления
рез медленные каналы. Резервирова- имеющих единую, простую и понят- информации.
ния можно настроить как персонально, ную структуру. И попутно объедине- Особое внимание уделено воп-
так и указать параметры, зависящие ние возможностей нескольких про- росам безопасности данных. Так, со-
от операционной системы клиента. Оп- грамм. Псевдографическая консоль единение между клиентом и серве-
ределить различные задачи для пол- ninjahelper упрощает создание конфи- ром по умолчанию происходит по за-
ных и инкрементных копий. Если ин- гурационных файлов и кроме того вы- шифрованному каналу, для генериро-
формация с компьютера некоторое дает подсказки по проведению некото- вания и управления ключей, необходи-
время не резервировалась, то поль- рых операций. мых при аутентификации, в комплекте
зователю будет послано предупреж- Поддерживается создание копий имеются скрипты. Кроме того, резер-
дение посредством электронной поч- с удаленных ресурсов (посредством вируемые файлы на клиенте шифру-
ты. Работает с архивами, созданными rdiff-backup), создание зашифрован- ются при помощи AES, а метаданные
AMANDA (т.е. практически может слу- ных GnuPG-образов (duplicity), резер- Blowfish. Поэтому даже если сервер
жить к нему интерфейсом). вирование Linux-Vserver, баз данных компрометирован, данные все равно
MySQL и РostgreSQL, содержимого остаются в безопасности. Резервиро-
Backup Manager 0.7.4 OpenLDAP, SVN-репозитариев, выда- вание происходит в режиме «snapshot».
Представляет собой инструмент, уп- ча информации по системе и аппарат- После первого копирования в дальней-
рощающий процесс создания резер- ному составу. Информация по работе шем для обновления резервной копии
вных копий, как полных, так и инкре- может отправляться на указанный поч- используется rsync, поэтому в дальней-
ментных. Для восстановления инфор- товый адрес. шем трафик может быть относительно
мации Backup Manager не использу- небольшой. Старые версии не заменя-
ется. Но зато с его помощью очень Box Backup ются новыми, а удаляются только когда
просто организовать копирование ло- Система резервирования Box Backup остется мало свободного места.
кальных каталогов, баз данных MySQL принадлежит к так называемым on-line. По умолчанию в комплекте идут
и SVN-репозитариев в архивы несколь- Разработчики считают, что в некото- только утилиты командной строки,
ких видов, на CD/DVD-диски, а также рых случаях дешевле вместо одно- но отдельно разработан графический
на удаленные ресурсы. го весьма дорогого стримера приоб- клиент Boxi (http://boxi.sourceforge.net),
В качестве протоколов последних рести обычный сервер с нескольки- использующий мультиплатформенную
поддерживаются FTP, SSH, RSYNC ми дисками. У такой системы есть од- библиотеку wxWidgets. С его помощью
и Amazon S3 (Simple Storage Service, но, но очень ценное достоинство: все довольно просто настроить опции ко-
http://aws.amazon.com). Кроме то- данные пользователю доступны по пирования и восстановления файлов.
го, есть возможность выполнения первому требованию, ведь все хра-
pre и post-скриптов, что позволяет, нится на сервере, и нет необходимос- BRU Server
например, автоматически монтиро- ти в смене кассет. Построен по клиент- Простая в установке и использова-
вать и размонтировать SMB, NFS- серверной схеме. И состоит из трех нии система, подходящая для созда-
ресурсы. элементов: сервера bbstored, бэкап- ния резервных копий индивидуальным 
№9, сентябрь 2006 25
администрирование
Свободная характеристика систем резервного копирования

Название Версия Сайт Лицензия Платформы Работа по расписанию

Solaris, OpenBSD, FreeBSD, Ultrix, HP/UX,


http://www.amanda.org, IRIX, Linux, Digital UNIX, SCO, AIX, Mac OS X,
AMANDA 2.5.1b1 Cвободная cron
http://sourceforge.net/projects/amanda возможна работа в Windows посредством
cygwin

Сервер – Linux, Solaris, SGI, AIX, HP-UX,


SCO, Tru64, Irix. Клиенты – дополнительно Внутренний
Arkeia 5.3.12 http://www.arkeia.com Коммерческая
Windows 2000/XP/2003, Windows 95/98, Novell, планировщик
VMS, ICL, MacOSX, Open/Net/FreeBSD

Сервер – Linux, AIX, IRIX, FreeBSD, Digital Cron на клиенте


Afbackup 3.4 http://sourceforge.net/projects/afbackup GNU GPL Unix (OSF1), Solaris и HP-UX. Клиенты или дистанционно
протестированы на SunOS и OpenBSD с сервера

Backupninja 0.9.3 http://dev.riseup.net/backupninja GNU GPL POSIX-системы, Linux cron

Сервер и клиент – Solaris, Linux, FreeBSD,


http://www.bacula.org, Tru64, MacOS X. Есть клиенты и консоль Внутренний
Bacula 1.38.11 GNU GPL
http://sourceforge.net/projects/bacula для Windows (NT, 2000, XP, 2003, 98/Me), планировщик
OpenBSD, Irix

Сервер *BSD, Linux, Solaris, MacOS X.


Внутренний
BackupPC 3.0.0beta http://backuppc.sourceforge.net GNU GPL Архивирование плюс Windows
планировщик
(NT, 2000, XP, 2003, 98/Me)

Backup
0.7.4 http://www.backup-manager.org GNU GPL GNU/Linux cron
Manager

Open/Net/FreeBSD,Linux, Solaris. Плюс клиент Внутренний


Box Backup 0.10 http://www.fluffy.co.uk/boxbackup BSD
Windows/cygwin планировщик или cron

Сервер Linux, MacOS X, Solaris, IRIX.


Клиенты – плюс Free/OpenBSD, SCO Внутренний
BRU Server 1.2.0 http://www.tolisgroup.com Коммерческая
OpenServer/UnixWare, AIX, UnixWare и все планировщик
Windows от 98 до 2003

Duplicity 0.4.2 http://www.nongnu.org/duplicity GNU GPL Linux и другие POSIX-системы cron

Команда auto_check,
http://web.mit.edu/~emin/www/
сохраняющая данные
DIBS 0.9.2 source_code/dibs/index.html, GNU GPL Linux и другие POSIX-системы, Windows
в определенных
http://dibs.sourceforge.net
каталогах

POSIX-системы, Linux или Mac OS X, есть


rdiff-backup 1.0.4 http://www.nongnu.org/rdiff-backup GNU GPL сron
материал по использованию на Windows

Сервер, устройства хранения и клиенты


доступны практически для всех весрий UNIX,
Time Внутренний
4.0 http://www.atempo.com Коммерческая Linux, MAC OS и Windows. Есть модули для
Navigator планировщик
Oracle, Microsoft Exchange/SQL/Sharepoint,
Lotus, Sybase, Informix, DB2, SAP
Официально поддерживаются только
http://www.initzero.it/portal/en/ GNU/Linux Red Hat и Fedora Core, но
synbak 1.0.6 GNU GPL сron
products/opensource/synbak/overview возможна работа и с другими UNIX/Linux
системами, использующими UTF-8
Предназначен
Mondo для интерактивной
2.09 http://www.mondorescue.org GNU GPL Linux
Rescue работы, но возможно
использование cron

Hdup2 2.0.14 http://miek.nl/projects/hdup2/hdup.html GNU GPL Linux и другие POSIX-системы cron

Внутренний
Hydra 0.3.1 http://www.cprogrammer.org/trac/hydra GNU GPL UNIX-подобные
планировщик

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

Защищенность Защищенное Стратегия


Аутентификация Стратегия архивирования Компрессия данных
копии соединение восстановления
Клиент/сервер,
Kerberos 4/5, amcrypt/GPG. Полное
Полное/выборочное/
OpenSSH, Возможно OpenSSL Инкрементное Клиент/сервер
другая система
rsh, пароль добавление другого Выборочное
алгоритма
Полное
Логин/пароль Нет, данные Полное/выборочное/
Инкрементное
(передается Клиент шифруются перед Есть другая система/
Дифференциальное
в открытом виде) передачей клонирование
Выборочное
Полное
Клиент, Инкрементное Полное/выборочное/
DES OpenSSL
MD5-сигнатура OpenSSL Выборочное На стороне клиента другая система/
(128 бит)
файла Сохранение «сырых» клонирование
разделов
Полное
Пароль, OpenSSH, GnuPG Полное/выборочное/
OpenSSH или rsh Инкрементное gzip
rsh (с помощью duplicity) другая система
Выборочное
Полное
Пароль CRAM-MD5, Нет, только SHA1 Возможно соединение
Инкрементное Полное/выборочное/
ключи OpenSSH, или MD5-сигнатура через SSH-тунель Клиент gzip
Дифференциальное другая система
OpenSSL файла или OpenSSL
Выборочное
Нет, MD5 сигнатура Полное
Пароль, OpenSSH, используется Инкрементное Полное/выборочное/
OpenSSH или rsh Сервер gzip/bzip2
rsh только для быстрого Частичное другая система
поиска Выборочное
GnuPG Полное
Пароль, OpenSSH,
(только архивов tar, OpenSSH или rsh Инкрементное gzip/bzip2/zip Только резервирование
rsh
tar.gz, tar.bz2) Выборочное
Клиент – AES
Полное
Сертификаты для данных Полное/выборочное/
TLS/SSL Инкрементное Средствами OpenSSL
OpenSSL и Blowfish другая система
Выборочное
для метаданных
Полное
Инкрементное
Полное/выборочное/
Пароль, возможна Данные шифруются Дифференциальное
Клиент Есть другая система/
работа через ssh перед передачей Выборочное
клонирование
Сохранение «сырых»
разделов
Полное
OpenSSH, данные Инкрементное
Пароль, ssh, ftp GnuPG шифруются перед Выборочное gzip Полное/выборочное
передачей Не поддерживает жестких
ссылок

Нет, данные
Полное
GPG-ключ GnuPG шифруются перед Нет Полное/выборочное
Инкрементное
передачей

Полное Сервер, возможности


Полное/выборочное/
Пароль, OpenSSH Нет OpenSSH Инкрементное ssh и опционально
другая система
Выборочное gzip

Клиент, кроме
Есть, кроме того Полное
Пароль, Active того информация Полное/выборочное/
данные шифруются Инкрементное Есть
Directory подписывается другая система
перед передачей Выборочное
хэшем

Полное
Полное/выборочное/
Пароль Нет OpenSSH Инкрементное gzip/bzip2
другая система
Выборочное

Полное Полное/выборочное/
Локальный
Нет Нет Сохранение «сырых» gzip/bzip2 другая система/
пользователь
разделов клонирование

Полное
Данные шифруются Полное/выборочное/
Пароль mcrypt или GnuPG Инкрементное gzip/bzip2/lzop
перед передачей другая система
Выборочное
Полное Полное/выборочное/
Пароль Нет Нет bzip
Только каталоги другая система

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


администрирование
пользователям и предприятиям, с до- зы данных. Кроме BRU Server TOLIS веряет данные в каталоге ~/.dibs/
вольно гибкой лицензией (например, Group представляет еще целый ряд autoBackup, и если будут изменивши-
дополнительные серверы рассматри- продуктов предназначенных для ре- еся файлы, то они будут скопированы
ваются как клиенты). Работает по кли- зервирования информации. на удаленный компьютер. Все катало-
ент-серверной схеме и включает три ги, информацию в которых необходи-
составляющих: сервер, клиент и кон- Duplicity мо резервировать, должны содержать
соль управления. Систему отличает Несмотря на небольшой размер, здесь символические ссылки.
возможность проверки правильнос- duplicity является довольно мощной Для поиска подходящих для хране-
ти записанных данных на ленту дан- системой резервного копирования ин- ния резервных копий систем исполь-
ных без связи с клиентом. Данные мо- формации. Его использование позво- зуется специальный сервис. При на-
гут быть записаны напрямую на стри- ляет резервировать информацию с ло- стройке своего сервиса может указы-
мер, либо использовано промежуточ- кальной системы, хотя его легко мож- ваться дисковая квота, при превыше-
ное хранение на диске. Последнее поз- но заставить получать информацию нии которой прием файлов прекра-
воляет затем более компактно распо- с удаленных систем по ssh. Представ- щается.
ложить на одном носителе информа- ляет собой набор скриптов, написан- Сервис может быть настроен в ак-
цию с одного компьютера, параллель- ных на языке Python. Данные могут тивном и пассивном режиме, который
но резервировать данные с нескольких быть сохранены как в другом разделе, используется в том случае, когда ком-
клиентов, при наличии одного стри- так и на удаленную систему. Подде- пьютер находится за межсетевым эк-
мера и проверять правильность запи- рживаются ftp-серверы, ssh/scp, rsync. раном.
си на ленту. Использование librsync позволяет ко-
Также стоит отметить возможность пировать только изменившиеся дан- rdiff-backup
восстановления части информации ные. Для работы требует наличия rdiff- Весьма популярная разработка Стен-
при ошибках считывания с ленты или backup о котором пойдет речь ниже. фордского университета, относитель-
диска. Информация может быть вос- По умолчанию вся информация шиф- но недавно изменившая прописку.
становлена не только в целевую, но руется с помощью GnuPG. За 5 лет было выпущено более 60 ре-
и в другую систему или каталог. Фир- лизов. Представляет собой скрипт, на-
менная технология QFA (Quick File DIBS писанный на Python. Позволяет произ-
Access) позволяет быстро получить Distributed Internet Backup System – водить резервное копирование одно-
доступ к данным на ленте. Управле- весьма интересная система, написан- го каталога в другой. Конечный ката-
ние может осуществляться не только ная на Python, «выпадает» из общего лог содержит копию исходного катало-
через графическую консоль, но есть плана. Суть ее работы состоит в том, га, плюс в отдельном каталоге хранят-
и командная строка, поддерживаю- что создается сеть участников, кото- ся все описания различий копий в diff-
щая скрипты. рые обмениваются между собой дан- формате, поэтому возможно восста-
Возможно выполнение на клиен- ными, то есть работает такая сеть на- новление давно утерянных файлов и их
те pre и post-скриптов, позволяющая, подобие Р2Р вроде Napster, Gnutella, версий. Невероятно прост в использо-
например, заморозить состояние ба- Kazaa. Вся информация перед пере- вании. Возможно совместное исполь-
дачей шифруется с зование с SSH, позволяющее произво-
помощью GnuGPG, дить безопасное копирование.
поэтому пользова- Функциональность и удобство rdiff-
тель на другом ком- backup могут добавить интерфейсы,
пьютере не сможет разработанные под него. Так, в насто-
при всем своем же- ящее время известны веб-интерфей-
лании ее прочесть. сы rdiffWeb (http://www.rdiffweb.org), на-
По с ет и п е р е д а - писанный на Python, и rdiff-backup-web
ются только изме- (http://rdiffbackupweb.sourceforge.net),
нившиеся файлы. предс тавляющий собой скрипты
Для повышения на- на PHP. Последний хотя и находится
дежности исполь- в состоянии альфы, но его уже можно
зуется код Рида- рекомендовать к применению. И раз-
Соломона. работанный в рамках Google Summer
Система DIBS of Code 2005 pyBackPack (http://projects.
очень проста в ус- sucs.org/projects/pybackpack), исполь-
тановке и настрой- зующий GTK+ библиотеки. К сожале-
ке. После первона- нию, ни один из них не локализован.
чальной настрой-
ки демон, рабо- Synbak
тающий на систе- Основную цель, которую пытались до-
мах, через опреде- стичь разработчики этого проекта, –
Рисунок 4. Один из веб-интерфейсов к rdiff-backup ленное время про- объединение нескольких методов со-

28
администрирование
здания резервных копий. Как и боль- тов, то он имеет специальную струк- зервирования. Всю работу выполняет
шинство проектов synbak является туру Security and Compliance Manager сервер, результат сохраняется в ката-
удобным интерфейсом для существу- (SCM), управляющую ключами и сер- лог ftp-сервера. К сожалению, Hydra
ющих программ. Используется простой тификатами. Вся информация разби- умеет создавать только полные копии
и понятный файл конфигурации. Под- та на классы, к которым используют- и только локальных каталогов, если
держивается создание резервных ко- ся разные правила защиты, это позво- нужны инкрементные и дифференци-
пий, в том числе и с удаленных ресур- ляет более гибко использовать ресур- альные, то этот проект не для вас. Ка-
сов с использованием rsync (ssh, rsync, сы без ущерба безопасности. Для кон- талоги можно копировать ежедневно,
SMB/CIFS), баз данных MySQL и Oracle, троля безопасности ведутся журна- еженедельно или ежемесячно.
каталогов LDAP, на архивы tar (tar, tar. лы аудита, в которых заносится вся Файл конфигурации не использует-
gz и tar.bz2), стримеры и CDR/CD-RW/ информация о деятельности поль- ся, вместо этого все введенные адми-
DVR/DVD-RW. Ресурсы cifs/smb при не- зователя. Система генерации отче- нистратором параметры сохраняются
обходимости могут быть монтированы тов ReporterTM, собирающая данные в файл /var/lib/hydra/targets_dump.
и размонтированы автоматически. Ло- со всех ресурсов, позволит получить В комплекте с системой поставля-
кальные базы MySQL могут быть со- практически всю необходимую при ад- ется как клиент командной строки, поз-
хранены в разных архивах, удаленные министрировании информацию, опре- воляющий управлять процессом уда-
только в одном архиве. Любой удален- делить слабые места и выработать оп- ленно, так и графический PyQT-кли-
ный ресурс может быть указан в стан- тимальную стратегию резервного ко- ент. Клиенты могут использоваться
дарте URI, то есть протокол://пользо- пирования. для администрирования процессов ре-
ватель:пароль@узел/рeсурс. Система зервного копирования на любом сер-
отчетов также стоит внимания, подде- Mondo Rescue вере Hydra в сети, для доступа исполь-
рживается вывод на консоль, отправ- Представляет собой набор утилит, ус- зуется пароль, хеш которого сохраня-
ка электронной почты, RSS-сообще- танавливающихся в систему, либо за- ется в ~/.hydra, позволяя в последую-
ний, а также генерация html-файла. гружаемых с CD. Он предназначен для щем не вводить его при подключении
При этом synbak имеет модульную ар- создания резервной копии любой ло- к серверу.
хитектуру, позволяющую легко адапти- кальной области системы и записи их
ровать для любой другой задачи, до- затем на CD/DVD, стример, жесткий Hdup2
бавлен как новый метод резервирова- диск или NFS-сетевой ресурс. В слу- Небольшая по размеру, простая в на-
ния, так и любые формы отчетов. чае краха можно будет очень легко стройках, но в то же время доволь-
восстановить, и в том числе и с ну- но мощная утилита резервного копи-
Time Navigator ля, не только сохраненную информа- рования. Поддерживаются все при-
Очень мощная, легко расширяемая цию, но и систему. Поэтому Mondo мо- сущие большинству подобных ути-
коммерческая разработка компании жет пригодиться не только в аварий- лит возможности: include/exclude спи-
Atempo, предназначенная в первую ных случаях, но и при переразбиении сок, резервирования с удаленных ис-
очередь для больших предприятий, ра- дискового пространства или, напри- точников, шифрование архива. Кроме
ботающих в гетерогенной среде. Адми- мер, при переходе на RAID. того, возможно разбиение резервной
нистрация упрощена благодаря проду- Также этот пакет весьма удобен для копии на файлы установленного раз-
манному унифицированному интер- клонирования системы на несколько мера, для того чтобы записать их за-
фейсу, позволяющему без проблем компьютеров с одинаковой конфигура- тем на CD/DVD-диск, отдельные под-
управлять несколькими серверами. цией. Для создания ежедневных резер- каталоги можно исключить при помо-
При этом хранение информации про- вных копий он не удобен. Mondo Rescue щи .nobackup-файлов.
зрачно для пользователя, хотя копии поддерживает почти все файловые
различного назначения могут хранить- системы, о которых знает ядро Linux Как видите, выбирать есть из че-
ся на разных ресурсах с разным време- ext2/3, JFS, XFS, ReiserFS, VFAT, а так- го, и я надеюсь, статья поможет вам
нем доступа (месяц – стример, день – же LVM и RAID. Возможность клониро- в этом. Успехов.
диск и пр.). Поддерживается работа вания позволяет использовать Mondo
с протоколом NDMP. Rescue и для резервирования не-Linux 1. Яремчук С. Cпасем пингвина: Mindi
Применение Virtual Library System файловых систем, например NTFS. Linux и Mondo Rescue.//«Системный ад-
(VLS) позволяет эмулировать стример В работе помогает понятная curses- министратор», № 2, 2004 г. – С. 14-17.
на жестком диске. Вся информация пе- консоль, позволяющая руководить 2. Маркелов А. Linux на страже Windows.
ред передачей шифруется, кроме то- процессом сохранения и восстанов- Обзор и установка системы резервного
го, возможно создание защищенных ления информации. Кстати, Mondo копирования BackupPC.//«Системный
туннелей, для проверки оригиналь- Rescue используют такие компании, администратор», № 9, 2004 г. – С. 2-7.
ности создается хеш. После передачи как Siemens, HP, IBM, NASA. 3. Гринько А. Архивируем данные с помо-
на сервер данные повторно проверя- щью Bacula.//«Системный администра-
ются путем сравнения хэшей, вырабо- Hydra Backup System тор», № 4, 2005 г. – С. 42-47.
танных клиентом и сервером. Так как Клиент-серверная система, в которой 4. Коршунов А. Box Backup – горячие ре-
Time Navigator предназначен для ра- клиент используется администрато- зервные копии.//«Системный админис-
боты с большим количеством клиен- ром для настройки параметров ре- тратор», № 5, 2006 г. – С. 6-11.

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


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

Упаковщики исполняемых
файлов в Linux/BSD

Крис Касперски
Большинство UNIX-программ распространяются в исходных текстах, но количество
коммерческих продуктов с закрытым кодом неуклонно растет. Зачастую они распространяются
в упакованном виде, что не только препятствует анализу, но снижает производительность
и ухудшает совместимость с UNIX-клонами. Покажем на примере ELFCrypt, UPX, Burneye и Shiva,
как можно освободиться от упаковщиков.

В
Windows упаковщики исполня- ках уже есть (и многие коммерческие и погубило. На всех Linux/BSD-сис-
емых файлов получили очень фирмы хотели бы выпустить закрытые темах, до которых я только смог до-
б ол ь ш о е р а с п р о с т р а н е н и е порты своих продуктов под UNIX, ос- тянуться, Shiva падает с сообщением
и сформировали обширную рыноч- новательно их защитив), но рынок про- «Segmentation fault». Какое же это счас-
ную нишу, переваривающую огром- текторов еще не успел сформировать- тье Windows-программистам иметь од-
ные деньги, питающие целые фирмы ся, а потому разработкой упаковщиков ну, ну пусть две (с учетом 9x) ОС, прак-
и привлекающие высококвалифици- занимается от силы десяток энтузиас- тически полностью совместимые меж-
рованных специалистов, создающих тов, повторяющих трюки времен ран- ду собой даже на уровне недокументи-
нехилые защитные механизмы, борь- ней молодости MS-DOS, и только Shiva рованных возможностей!
ба с которыми требует консолидации попытался предпринять качественный Создание надежной защиты, запус-
всего хакерского сообщества. рывок вперед, вплотную приблизив- кающейся более чем на одной версии
Под UNIX ситуация обстоит прибли- шись к протектору Software Passport Linux, – практически безнадежное де-
зительно так: потребность в упаковщи- (бывший Armadillo), однако, это его ло, а если вспомнить про BSD и экс-

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

Упаковщики ма уже не может «выкинуть» принадлежа- полностью утратила смысл и стала толь-
и производительность щие ему страницы, ведь возможности пов- ко вредить (она хорошо работала в эпоху
При запуске файла с дискеты или CD-ROM торно загрузить их с диска уже нет и при- господства MS-DOS, но те времена дав-
упаковка действительно ускоряет загрузку, ходится заниматься вытеснением в swap. но прошли). Теперь упаковывать (а точ-
поскольку физически передается сущест- При однократном запуске программы это нее, зашифровывать) файл стоит только
венно меньший объем данных, а скорость еще не так заметно, но многократный за- ради того, чтобы затруднить его анализ,
этих устройств несопоставима со скоро- пуск упакованного файла приводит к су- да и то… стоит ли? Хакеры все равно взло-
стью процессора, поэтому временем рас- щественному замедлению загрузки (ведь, мают (ни один из существующих протекто-
паковки можно полностью пренебречь и по- вместо того, чтобы обратиться к уже загру- ров не избежал этой участи), а вот у легаль-
лученный выигрыш численно равен степе- женным страницам, операционной системе ных пользователей снижается производи-
ни упаковки. приходится заниматься распаковкой каж- тельность и появляются проблемы совмес-
При запуске с жесткого диска все про- дый раз). По той же причине растут потреб- тимости, тем более, что будущее все рав-
исходит с точностью до наоборот. Неупако- ности в оперативной памяти – несколько но за открытым программным обеспече-
ванный elf проецируется непосредственно экземпляров упакованной программы не нием. Как показывает практика, по мере
в оперативную память и в swap вытесня- могут совместно использовать общие стра- взросления любая отрасль неизбежно при-
ются только модифицированные страни- ницы физической памяти. В довершение ходит к открытым стандартам – взять хотя
цы секции данных. При запуске несколь- ко всему большинство упаковщиков тре- бы автомобилестроение или электрони-
ких экземпляров неупакованного elf-фай- буют дополнительной памяти для склады- ку. Лет тридцать назад японцы (в то вре-
ла выделения новых страниц физической вания промежуточных результатов распа- мя лидеры в этой области) закладывали
памяти практически не происходит, вместо ковки. На утилитах, запускаемых огромное в свои радиоприемники/магнитофоны ам-
этого операционная система просто отоб- количество раз (например, make), разница пулы с кислотой, чтобы при вскрытии кор-
ражает на адресное пространство процес- между упакованным и неупакованным фай- пуса все разъедало. Чуть позже для этой
са ранее загруженные страницы. лом просто колоссальна! же цели стали применять эпоксидную смо-
Если же файл упаковать, то при запус- Отсюда вывод: с появлением жест- лу, а сейчас… принципиальные схемы раз-
ке он модифицирует всю свою проекцию ких дисков и многозадачных операцион- даются всем сервисным центрам или отда-
целиком, а это значит, что при нехватке ных систем со страничной организаци- ются под чисто формальное соглашение
физической памяти операционная систе- ей памяти упаковка исполняемых файлов о неразглашении.

периментальные ядра типа Hurd, то к программированию Достаточно просто установить точку сразу же за кон-
можно даже не приступать. В то же время, слабость защит- цом расшифровщика (в данном случае она расположена по
ных механизмов компенсируется отсутствием достойного адресу 80495F9h), после чего в нашем распоряжении ока-
хакерского инструментария, поэтому даже простейшая за- жется расшифрованный elf, с которого можно снять дамп.
щита представляет собой большую проблему, превращая В случае с gdb последовательность команд будет выгля-
распаковку программ в довольно нетривиальную задачу! деть приблизительно так (см. листинг 2).
Но мы ее решим! Начиная с самых простых упаковщиков Кстати говоря, последние версии IDA Pro, портирован-
и приобретая в сражении тактические навыки и необходи- ные под Linux, содержат интерактивный отладчик в стиле
мый инструментарий, в конечном счете, мы сможем сра- Turbo-Debugger, работающий через prtace() и позволяющий
зиться с кем угодно! делать такие вещи прямо в дизассемблере! Но специально
на этот случай JunkCode подложил хакерам большую сви-
ELF-Crypt нью, сбивающую IDA Pro с толку.
Простейший шифровщик (не упаковщик!) elf-файлов, со- Изменив точку входа в elf-файл (entrypoint) путем пере-
зданный индийским студентом по прозвищу JunkCode направления ее на тело своего расшифровщика, он «забыл»
(junkcode@yahoo.com) и распространяющийся в исходных тек- скорректировать символьную метку _start, продолжающую
стах: http://www.infogreg.com/
source-code/public-domain/ Листинг 1. Дизассемблерный листинг расшифровщика, внедряемого ELFCrypt в файл
(как он выглядит в hiew)
elfcrypt-v1.0.html.
Он шифрует кодовую :entrypoint
.080495DC: EB02 jmps .0080495E0 ; переходим на расшифровщик
секцию (которой, как пра- .080495DE: 06 push es ; \ мусор, оставленный...
вило, является секция .text) .080495DF: C6 ??? ; / ...транслятором ассемблера
.080495E0: 60 pushad ; сохраняем все регистры в стеке
и встраивает в elf-файл кро- .080495E1: 9C pushfd ; сохраняем флаги в стеке
хотный расшифровщик, .080495E2: BEC0820408 mov esi, 0080482C0 ; начало расшифровываемого фрагмента
.080495E7: 8BFE mov edi, esi ; EDI := EDI (расшифровка на месте)
возвращающий ее в ис- .080495E9: B978000000 mov ecx, 000000078 ; количество двойных слов для расшифровки
ходный вид. Не содержит .080495EE: BBBD03CC09 mov ebx, 009CC03BD ; ключ расшифровки
.080495F3: AD lodsd ; читаем очередной двойное слово <-----+
никаких антиотладочных .080495F4: 33C3 xor eax,ebx ; расшифровываем через xor |
приемов и замечательно .080495F6: AB stosd ; записываем результат на место |
.080495F7: E2FA loop .0080495F3 ; мотаем цикл -------------------------+
распаковывается любым .080495F9: 9D popfd ; восстанавливаем флаги из стека
отладчиком, в том числе .080495FA: 61 popad ; восстанавливаем все регистры
.080495FB: BDC0820408 mov ebp, 0080482C0 ; адрес оригинальной точки входа (OEP)
и gdb/ald (см. листинг 1). .08049600: FFE5 jmp ebp ; передаем управление расшифрован. коду

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


администрирование
Листинг 2. Быстрая расшифровка elf-файла в отладчике gdb указывать на оригинальную точку входа (в настоящий мо-
; определяем точку входа в файл мент зашифрованную!), в результате чего IDA Pro показы-
root@5[elf_crypt]#objdump -f elfcrypt-demo вает нечто совершенно бессмысленное:
elfcrypt-demo: формат файла elf32-i386
архитектура: i386, флаги 0x00000112: Листинг 3. Нет, это не хитрый антиотладочный код,
EXEC_P, HAS_SYMS, D_PAGED это просто оригинальная точка входа в программу,
начальный адрес 0x080495dc
еще не расшифрованная расшифровщиком

root@5[elf_crypt]# gdb elfcrypt-demo .text:080482C0 _start proc near


; ставим точку останова на точку входа .text:080482C0 8C EE mov esi, gs
(gdb) b *0x80495DC .text:080482C2 92 xchg eax, edx
.text:080482C3 80 5C 80 28 F9 sbb byte ptr ↵
Breakpoint 1 at 0x80495dc [eax+eax*4+28h], 0F9h
.text:080482C8 ED in eax, dx
; пускаем программу .text:080482C9 57 push edi
(gdb) r .text:080482CA 9E sahf
.text:080482CB 61 popa
Starting program: /home/elf_crypt/elfcrypt-demo .text:080482CC AD lodsd
.text:080482CD 87 C8 xchg ecx, eax
; сработала точка останова .text:080482CF 01 D5 add ebp, edx
.text:080482D1 B3 4F mov bl, 4Fh
Breakpoint 1, 0x080495dc in ?? () .text:080482D3 0D B5 52 9A 61 or eax, 619A52B5h
.text:080482D8 2D 80 C8 01 55 sub eax, 5501C880h
; говорим отображать команды Ассемблера ; Trap to Debugger
(gdb) display/i $pc .text:080482DD CC int 3
.text:080482DE 33 F6 xor esi, esi
1: x/i $pc 0x80495dc: jmp 0x80495e0 .text:080482E0 42 inc edx
.text:080482E1 F7 5C 99 E8 neg dword ptr ↵
; начинаем трассировать программу [ecx+ebx*4-18h]
(gdb) si .text:080482E1 _start endp

0x080495e0 in ?? () Кстати говоря, если установить точку останова на _start


; продолжаем трассировать и дать отладчику немного поработать, мы попадем в са-
мое начало расшифрованной программы, после чего ее
1: x/i $pc 0x80495e0: pusha
... будет можно анализировать в обычным режиме или снять
0x080495f7 in ?? () дамп. Только это должна быть именно аппаратная (коман-
; видим цикл да «hbreak _start» в gdb), а не программная («b _start») точ-
ка останова, иначе все рухнет (программная точка внед-
1: x/i $pc 0x80495f7: loop 0x80495f3
ряет в расшифровываемую программу код CCh, который
; ставим точку останова за его концом после расшифровки превращается совсем не в то, что бы-
(gdb) b *0x80495F9
ло до нее).
Breakpoint 2 at 0x80495f9 Это очевидный просчет создателя шифратора. Вот если
; запускаем программу «вживую» бы он перенаправил _start в какое-нибудь интересное мес-
(gdb) c то, вот тогда бы хакерам пришлось попыхтеть, а так… «за-
щита» снимается в считанные секунды безо всякого тру-
Continuing.
да, однако представляет интерес посмотреть, как выгля-
; точка останова достигнута
дит код расшифровщика в IDA Pro, точка входа в который,
Breakpoint 2, 0x080495f9 in ?? () как мы помним, равна 80495DCh:
; программа расшифрована!
Листинг 4. Дизассемблерный листинг расшифровщика,
1: x/i $pc 0x80495f9: popf внедряемого ELFCrypt в файл (как он выглядит в IDA Pro)

extern:80495DC 7F 01 00 00 extrn puts@@GLIBC_2_0:near


extern:80495E0 FA 00 00 00 extrn ↵
__libc_start_main@@GLIBC_2_0:near
; CODE XREF: .plt:_puts↑j
extern:80495E4 7F 01 00 00 extrn puts:near
; DATA XREF: .got:off_80495CC↑o
extern:80495E4
extern:80495E8 FA 00 00 00 extrn ↵
__libc_start_main:near
; CODE XREF: ___libc_start_main↑j
extern:80495E8
; DATA XREF: .got:off_80495D0↑o
extern:80495E8
; weak
extern:80495EC 00 extrn _Jv_RegisterClasses
; weak
extern:80495F0 00 extrn __gmon_start__
; DATA XREF: .got:080495D4↑o
extern:80495F0

Что за чертовщина?! Каким образом расшифровщик


может существовать в extern, когда здесь прямым текстом
Рисунок 1. Домашняя страница создания JunkCode –
создателя шифровщика ELFCrypt прописаны фактические адреса динамически загружаемых

32
администрирование
функций! Но тот факт, что файл все-таки работает, убеж- ; ничего! Отладчик же показывает код, засылающий в стек
; смещение первого (считая от нуля) элемента таблицы .got
дает нас, что да – может! Просто IDA Pro в попытке «эму- ; и передающего управление по адресу, записанному во втором
ляции» загрузки elf-файла помещает в extern то, чего там ; элементе таблицы .got. Как следует из спецификации
; elf-формата, первые три элемента секции .got зарезервированы
на стадии загрузки файла еще нет. ; для служебных целей и вторая из них хранит адрес функции
Здесь мы подходим к одной из самых любопытных ; _dl_map_object_deps, которая, получив в качестве аргумента
; адрес начала .got, читает его содержимое
особенностей строения elf-файлов. В отличие от Windows, ; (а содержатся там ссылки на библиотечные функции)
где заполнение extern происходит на стадии загрузки ; и заполняет extern фактическими адресами
файла в память, в UNIX это делает стартовый код, при- 0x4000bbd0 in _dl_map_object_deps () from /lib/ld-linux.so.2
чем делает он это очень хитрым способом. Ниже пока- 1: x/i $pc 0x4000bbd0 <_dl_map_object_deps+4384>: push %eax

зан протокол трассировки программы под отладчиком ; ага! Вот эта функция, расположенная на моей машине
с моими комментариями, отмеченными знаком «;» и со- ; по адресу 4000BBD0h, принадлежащему библиотеке libc.so.6
; (на других машинах этот адрес может быть иным)
держимым дизассемблерного листинга IDA Pro, отме- ; она-то и выполняет всю работу по инициализации extern,
ченным знаком «#». Как говорится – сравните и почувс- ; в котором находится наш расшифровщик, уже расшифровавший
; программу, а затем вызывает __libc_start_main,
твуйте разницу! ; так что загрузка динамической библиотеки происходит
Для облегчения понимания возьмем незашифрованную ; совершенно прозрачно
программу, необработанную ELFCrypt:
Вот такая, оказывается, она IDA Pro! Чтобы скрыть код
Листинг 5. Протокол отладки, иллюстрирующий ход от глаз исследователя, достаточно разместить его в extern.
динамической загрузки
Для вирусов, червей и прочего malware это очень даже акту-
; устанавливаем точку останова на начало стартового кода ально (особенно в свете того факта, что IDA Pro уже давно
(gdb) b _start
стала дизассемблером де-факто). На самом деле, IDA Pro
Breakpoint 1 at 0x80482c0: file ../sysdeps/i386/elf/start.S, line 47. (а точнее, elf-загрузчик) тут совсем не причем, «просто мы
; запускаем программу на выполнение не умеем его готовить» . Чтобы все заработало правильно,
(gdb) r необходимо при загрузке файла взвести флажок «Manual
Breakpoint 1, _start () at ../sysdeps/i386/elf/start.S:47 Load» и в появившемся диалоговом окне «Loading options»
выбрать «Force using of PHT instead of SHT» (см. рис. 2).
; ок, мы в точке входа. Смотрим на extern
(gdb) x 0x80495DC Теперь и точка входа отображается нормально и файл
можно расшифровать прямо встроенным в IDA Pro расшиф-
# extern:80495DC 7F 01 00 00 extern puts@@GLIBC_2_0:near
0x80495dc: 0x00000000 ровщиком (см. рис. 3), после чего продолжить дизассемб-
лирование или снять готовый дамп.
; IDA Pro нас уверяет, что extern содержит адрес 0000017Fh,
; но в действительности область extern на момент запуска Тот факт, что функция _dl_map_object_deps() вызыва-
; файла девственно чиста и забита нулями ется из стартового кода, дает в наши руки универсальный
#.text:080482C0 _start proc near способ распаковки elf-файлов, упакованных практически
#.text:080482C0 31 ED xor ebp, ebp любым упаковщиком, за исключением тех случаев, когда
1: x/i $pc 0x80482c0 <_start>: xor %ebp,%ebp
файл слинкован со всеми используемыми библиотеками
; незначащие машинные инструкции пропущены статическим образом (то есть действует по принципу «все
#.text:080482D7 68 90 83 04 08 push offset main свое всегда ношу с собой»), но такие файлы встречают-
1: x/i $pc 0x80482d7 <_start+23>: push $0x8048390
#.text:080482DC E8 CF FF FF FF call ___libc_start_main
ся достаточно редко. Если только упаковщик не сопротив-
1: x/i $pc 0x80482dc <_start+28>: call 0x80482b0 <_init+56> ляется отладчику, достаточно всего лишь установить точ-
ку останова на _dl_map_object_deps() и... дождаться, ког-
; но вот стартовый код вызывает библиотечную функцию
; ___libc_start_main, поскольку компилятор еще не знает да она сработает. Тут же в стеке по адресу [ESP+08h] бу-
; ее фактического адреса, он вставляет переходник к секции дет адрес возврата из CALL __libc_start_main, а по адресу
; .plt, содержащей переходники к секции .got,
; заполняемой динамическим загрузчиком
#.plt:080482B0 ___libc_start_main proc near
#.plt:080482B0 FF 25 D0 95 04 08 jmp ds:off_80495D0
1: x/i $pc 0x80482b0 <_init+56>: jmp *0x80495d0

; IDA Pro корректно отобразила plt-переходник, вызывающий


; функцию, указатель на которую расположен в двойном слове
; по адресу 80495D0h
#.got:080495D0 E8 95 04 08 off_80495D0 dd offset __libc_start_main
1: x/i $pc 0x80482b6 <_init+62>: push $0x8
1: x/i $pc 0x80482bb <_init+67>: jmp 0x8048290 <_init+24>

; а вот тут уже начались расхождения...


; IDA Pro уверяет, что здесь расположено смещение функции
; __libc_start_main, в то время как отладчик показывает,
; что здесь находится специальный код push 08h/jmp 8048290h.
; Посмотрим, что покажет IDA Pro по адресу 8048290h
# .plt:08048290 ?? ?? ?? ?? ?? ?? dd 4 dup(?)
1: x/i $pc 0x8048290 <_init+24>: pushl 0x80495c4
1: x/i $pc 0x8048296 <_init+30>: jmp *0x80495c8
Рисунок 2. Выбор альтернативного метода загрузки elf-файлов
; парад различий продолжается! IDA Pro вообще не показывает в IDA Pro

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


администрирование
0xbffffb00: 0x08048390

; судя по адресу это так и есть

; проверяем наше предположение


(gdb) disassemble 0x80482e1
Dump of assembler code for function _start:
0x080482c0 <_start+0>: xor %ebp,%ebp
0x080482c2 <_start+2>: pop %esi
0x080482c3 <_start+3>: mov %esp,%ecx
0x080482c5 <_start+5>: and $0xfffffff0,%esp
0x080482c8 <_start+8>: push %eax
0x080482c9 <_start+9>: push %esp
0x080482ca <_start+10>: push %edx
0x080482cb <_start+11>: push $0x8048410
0x080482d0 <_start+16>: push $0x80483b0
0x080482d5 <_start+21>: push %ecx
0x080482d6 <_start+22>: push %esi
0x080482d7 <_start+23>: push $0x8048390
0x080482dc <_start+28>: call 0x80482b0 <_init+56>
0x080482e1 <_start+33>: hlt
End of assembler dump.

Рисунок 3. Расшифровка файла непосредственно в IDA Pro ; дизассемблер показывает типичный стартовый код,
; значит, приложение уже распаковано!
[ESP+0Ch] указатель непосредственно на саму main. Ес-
ли, конечно, нам повезет… Проблемы начинаются с того, Как вариант, изучив код распаковщика, можно напи-
что gdb с большой неохотой устанавливает точки остано- сать скрипт для IDA Pro, выполняющий распаковку само-
ва на shared-функции и потому точка останова обязатель- стоятельно. Это хорошо работает с несложными расшиф-
но должна быть аппаратной, причем срабатывать она мо- ровщиками/распаковщиками, и в данном случае листинг
жет несколько раз. Левые, срабатывая, распознаются лег- укладывается всего в несколько строк:
ко. Если по [ESP+08h] и [ESP+0Ch] лежит совсем не то, что
ожидалось (а это легко определить по диапазону адресов), Листинг 7. Скрипт для IDA Pro, расшифровывающий программу
пропускаем текущее срабатывание точки останова и про- auto a,x;
должаем выполнение программы командой «c». for(a=0x80482C0;a<0x8048338;)
{
Примерный сеанс работы с отладчиком может выгля- x=Dword(a);
деть так: x = x ^ 0x9CC03BD;
PatchDword(a,x);
a = a + 4;
Листинг 6. Распаковка программы путем установки точки }
останова на _dl_map_object_deps

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


root@5[elf_crypt]# gdb elfcrypt-demo
; ставим brkpnt на _dl_map_object_deps знать, откуда и докуда шифровать, а также ключ шифров-
(gdb) hbreak *0x4000BBD0 ки, для чего необходимо проанализировать алгоритм рас-
Hardware assisted breakpoint 1 at 0x4000bbd0 шифровщика (см. листинг 1).
Кстати говоря, IDA Pro не обновляет модифицируемый
; запускаем программу
(gdb) r код в окне дизассемблера (точнее обновляет, но делает
это как-то странно), поэтому нам необходимо нажать <U>,
Breakpoint 1, 0x4000bbd0 in _dl_map_object_deps () from /lib/ld-linux.so.2
разрушая ранее дизассемблированные инструкции в по-
; первое всплытие установленной точки останова ток байт, а затем <C> для превращения их в дизассемб-
; сейчас будем проверять - «наше» ли оно или нет
лерный код.
; смотрим стек Другой способ противодействия упаковщикам заклю-
(gdb) x $esp+8
чается в подключении (attach) к уже запущенному процес-
0xbffffa6c: 0x40100498
су (задолго после того, как упаковщик все уже распако-
; адрес указывает на libc.so.6 вал). В gdb за это делается так: «gdb --pid=<PID>», где PID –
; это «левое» всплытие, идем дальше идентификатор исследуемого процесса, который мож-
(gdb) c
но узнать с помощью команды «ps -a». Однако это не са-
Continuing. мый лучший путь, поскольку мы вторгаемся в программу
Breakpoint 1, 0x4000bbd0 in _dl_map_object_deps () from /lib/ld-linux.so.2 уже после инициализации кучи структур данных и снятый
дамп может оказаться неработоспособным. К тому же из-
; второе всплытие установленной точки останова
; проверяем - «наше» ли оно или нет за игр с extern и несоответствия _start реальной точке вхо-
да, существующие UNIX-дамперы не могут реконструиро-
; должен быть ret из call main
(gdb) x $esp+8 вать elf-файл, получая Segmentation fault. Правда, можно
воспользоваться утилитой PD (более подробно она рас-
0xbffffafc: 0x080482e1
сматривается в разделе, посвященном упаковщику UPX),
; судя по адресу, это возможно так и есть указав «волшебный» ключик -l, предписывающий не тро-
; должен быть указатель на main гать секцию .got, тогда Segmentation fault станет вызывать
(gdb) x $esp+0xC сдампленный файл, но зато он будет полностью расшиф-

34
администрирование
рован, что (теоретически) должно существенно упростить Листинг 10. Затертая сигнатура
дизассемблирование, но практически из-за отсутствия сим- 000013B390: 92 24 FF 00 55 50 58 21 │ 0D 0C 08 07 8F F1 E8 8C Т$ 6669♪♀◘•ПёшМ
вольных имен библиотечных функций анализ рискует пре- 000013B3A0: 05 97 B4 63 8C 6F 43 00 │ 19 EC 0D 00 00 41 52 00 ♣Ч┤cМoC ↓ь♪ AR
000013B3B0: 49 14 00 37 80 00 00 00 │ I 7А
вратиться в пытку.
Если же снимать дамп необязательно и достаточно Файл запускается так же, как и раньше, но теперь UPX
просто «посмотреть», что делает упакованная программа, наотрез отказывается его распаковывать:
можно использовать утилиту ltrace, сеанс работы с кото-
рой показан ниже. Как видно, ELFCrypt совсем не пытает- Листинг 11. Встроенный распаковщик UPX не смог распаковать
файл с затертой сигнатурой
ся ей противостоять.
root@5[upx-2.01-i386_linux]# ./upx -d elinks
Листинг 8. Результат работы ltrace Ultimate Packer for eXecutables
Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006
__libc_start_main(0x80483c4, 1, 0xbffffb34, 0x8048410, 0x8048470 <unfinished ...> UPX 2.01 Markus Oberhumer, Laszlo Molnar & John Reiser Jun 06th 2006
printf(0xbffffac0, 0x40017a50, 0xbffffad8, 0x804842b, 0x6c6c6568) = 13
hello, world! File size Ratio Format Name
gets(0xbffffac0, 0x40017a50, 0xbffffad8, 0x804842b, 0x6c6c6568) = 0xbffffac0 -------------------- ------ ----------- -----------
+++ exited (status 192) +++ upx: elinks_2: NotPackedException: not packed by UPX
Unpacked 0 files.

Помимо самых вызываемых функций, ltrace также от-


ражает и адреса возврата (в листинге они выделены полу- Поскольку UPX не использует libc и работает через ин-
жирным), что позволяет нам, устанавливая на них аппарат- терфейс системных вызовов, то динамические библиоте-
ные точки останова, врываться в любое место уже распа- ки подключаются только после того, как распаковка будет
кованной программы! В общем, не жизнь, а красота! Од- завершена. А это значит, что, установив точку останова на
нако не будем забывать, что ELFCrypt это даже не упаков- функцию _dl_map_object_deps(), мы сорвем банк, ворвав-
щик, а экспериментальная студенческая поделка. Но спра- шись в уже распакованную программу.
вившись с ним, мы сможем справиться и с гораздо более Так же сработает подключение отладчика к активному
сложными программами… процессу. При желании можно получить не только сырой дамп,
но и готовый к работе elf-файл. К сожалению, прямых анало-
UPX гов знаменитого proc-dump под UNIX нет (команда «generate-
Это один из наиболее древних упаковщиков, созданный core-file» отладчика gdb создает файл, пригодный для дизас-
тройкой магов Markus F.X.J. Oberhumer, Laszlo Molnar и John семблирования, но, увы, не запуска), но некоторые действия
F. Reiser, поддерживающий рекордное количество форма- в этом направлении уже наблюдаются. Утилита PD, исходный
тов файлов (от Amiga до UNIX) и расшифровывающий свою код которой (с объяснением принципов его работы) опубли-
аббревиатуру как the «Ultimate Packer for eXecutables». Све- кован в 63 номере журнала «PHRAK» (www.phrack.org/phrack/
жую версию вместе с исходными текстами можно бесплат- 63/p63-0x0c_Process_Dump_and_Binary_Reconstruction.txt),
но скачать с «родного» сайта проекта: http://www.upx.org легко дампит большинство простых файлов, но со сложным
или с «кузни»: http://upx.sourceforge.net. пока еще не справляется (однако оставляет шанс доработать
UPX не имеет никакого защитного кода, никак не про- их руками). Самое печальное, что PD не может снимать дам-
тиводействуя ни отладке, ни дизассемблированию, более пы программ, исполняющихся под отладчиком (а ведь в ми-
того, он даже содержит встроенный распаковщик, за кото- ре Windows хакеры поступают именно так – находят ориги-
рый «отвечает» ключ командной строки -d. нальную точку входа отладчиком, после чего зовут proc-dump
С коммерческой точки зрения UPX выгоден тем, что упа- или его более современный аналог PE-TOOLS). Однако су-
кованные им файлы работают практически на всем спектре ществует возможность отсоединиться от процесса коман-
UNIX-подобных систем, однако наличие встроенного упа-
ковщика делает его совершенно бесполезным для защи-
ты программ. Но это еще как посмотреть! Доступность ис-
ходных текстов позволяет слегка модифицировать струк-
туру упаковываемого файла так, что родной распаковщик
уже не сможет с ней работать.
Самое простое, что можно сделать – это затереть сиг-
натуру «UPX!», расположенную в конце файла, тогда UPX
не сможет распознать упакованный файл, и встроенный
распаковщик откажется с ним работать:

Листинг 9. Сигнатура «UPX!», расположенная в конце


упакованных файлов
000013B390: 92 24 FF 00 55 50 58 21 │ 0D 0C 08 07 8F F1 E8 8C Т$ UPX!♪♀◘•ПёшМ
000013B3A0: 05 97 B4 63 8C 6F 43 00 │ 19 EC 0D 00 00 41 52 00 ♣Ч┤cМoC ↓ь♪ AR
000013B3B0: 49 14 00 37 80 00 00 00 │ I 7А

Проведем небольшой эксперимент. Откроем упакован-


ный файл в любом hex-редакторе и запишем поверх «UPX!»
что-то свое, например: «6669». Рисунок 4. Авторская страница упаковщика UPX

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


администрирование
Burneye
Первый UNIX-упаковщик с претензией на протектор, со-
зданный молодым 25-летним хакером по кличке Scut
(scut@segfault.net), он же «The Tower», живущим в Западной
Германии и входящим в группу TESO, в настоящее время
работающей над linice – аналогом soft-ice под UNIX.
Burneye – это экспериментальный протектор, распро-
страняющийся на бесплатной основе. Сначала его исход-
ные тексты были недоступны, но затем (под напором об-
щественности) выложено ~30% от общего объема кода,
а затем и весь проект целиком. Все это добро можно ска-
чать с packetstorm.
Архив packetstorm.linuxsecurity.com /groups /teso /
burneye-1.0-linux-static.tar.gz содержит откомпилированную
версию, работающую под LINUX и частично под BSD («час-
Рисунок 5. Сайт группы TESO тично» потому, что иногда падает), в packetstorm.linuxsecurity.
com/groups/teso/burneye-stripped.tar.gz лежит 30% исход-
дой «detach», и до выхода из отладчика он будет находить- ных текстов и несколько статей с новыми, но так и не реа-
ся в «замороженном» состоянии, что позволяет беспрепятс- лизованными идеями по усилению защиты, а packetstorm.
твенно снять с него дамп. linuxsecurity.com/groups/teso/burneye-1.0.1-src.tar.bz2 вклю-
Там же в статье присутствует ссылка на базовый сайт чает в себя все исходные тексты.
проекта (http://www.reversing.org), но никаких новых версий Протектор умеет шифровать файлы по алгоритмам
там нет, так что будем пользоваться тем, что дают. Ниже по- SHA1 и RC4, требуя от пользователя пароль при запуске.
казан сеанс работы с утилитой PD: Теоретически взломать программу можно и без знания па-
роля (криптография не стоит на месте, и подходящий пе-
Листинг 12. Снятие дампа с последующей реконструкцией реборщик можно найти на http://byterage.hackaholic.org/
elf-файла
source/UNFburninhell1.0c.tar.gz), но в практическом плане
; запускаем упакованный процесс на выполнение гораздо проще купить одну-единственную лицензионную
root@5[src]# ./demo
; определяем его pid копию, а потом выложить ключ на всеобщее обозрение.
root@5[src]# ps -a Чтобы этого не произошло, в протектор заложена возмож-
PID TTY TIME CMD ность «привязки» к оборудованию пользователя (так назы-
9771 pts/7 00:00:00 demo ваемый fingerprint). Это довольно интересная тема, но луч-
9779 pts/5 00:00:00 ps
ше оставим ее на потом, сосредоточившись исключитель-
; дампим процесс в файл но на распаковке.
root@5[src]# ./pd -o dumped 9771
Burneye состоит из множества вложенных друг в дру-
pd V1.0 POF <ilo@reversing.org>
download last version from: http://www.reversing.org га расшифровщиков, генерируемых произвольным обра-
source distribution for testing purposes.. зом, что, впрочем, не сильно препятствует его трассиров-
ке, поскольку расшифровщики реализованы как процеду-
performing search..
only PAGESZ method implemented in this version ры. (Имеющиеся антидизассемблерные приемы сводят-
AT_PAGESZ located at: 0xbffffbc8 ся к прыжку в середину команды и легко обходятся как
gather process information and rebuild:
в IDA Pro, так и в hiew).
-loadable program segments, elf header and minimal size.. Во всем протекторе содержится всего один антиотла-
дочный прием, препятствующий трассировке под gdb и от-
analyzing dynamic segment..
ладчиком, интегрированным в IDA Pro.
Agressive fixing Global Object Table..
vaddr: 0x8049620 daddr: 0x8049000 foffset: 0x620 Листинг 13. Дизассемблерный листинг единственного
* plt unresolved!!! антиотладочного приема в Burneye

section headers rebuild LOAD:053714A7 mov ebx, 5 ; SIGTRAP


this distribution does not rebuild section headers ; обработчик
LOAD:053714AC mov ecx, offset anti_handler
saving file: dumped LOAD:053714B1 mov edx, 30h ; signal
LOAD:053714B6 mov eax, edx
Finished. ; signal(SIGTRAP, anti_handler);
LOAD:053714B8 int 80h
; утилита PD окончила процесс дампинга LOAD:053714BA add esi, offset word_5375A00
; запускаем полученный процесс на выполнение LOAD:053714C0 mov [ebp-2DCh], esi
root@5[src]# ./dumped LOAD:053714C6 int 3 ; Trap to Debugger
; если ноль, мы под отладчиком
LOAD:053714C7 cmp anti_debug, 0
А вот ltrace работать не будет, поскольку она нуждает- LOAD:053714CE jnz short debugger_not_present
...
ся в секциях .dynsym или .dynstr, которых в файлах, упако- ; обработчик сигнала SIGTRAP (получает управление только
ванных UPX, нет! Тем не менее, как было показано выше, ; при запуске без отладчика)
LOAD:05371A0C anti_handler:
это все равно не спасает его от взлома. LOAD:05371A0C push ebp

36
администрирование
LOAD:05371A0D mov ebp, esp Листинг 15. Фрагмент файла, упакованного протектором Burneye
; увеличиваем секретную переменную
LOAD:05371A0F inc anti_debug .05371035: FF3508103705 push d,[05371008]
LOAD:05371A15 leave .0537103B: 9C pushfd
.0537103C: 60 pushad
LOAD:05371A16 retn ; выходим из обработчика .0537103D: 8B0D00103705 mov ecx,[05371000]
.05371043: E93A000000 jmp .005371082 ---↓ (1)
Программа устанавливает свой собственный обработ-
чик (в приведенном выше листинге он обозначен как anti_ После запуска упакованного файла на диске автома-
handler), ожидающий прихода сигналов типа SIGTRAP, а за- тически образуется распакованный ./burnout, который уже
тем вызывает прерывание INT 03h. При нормальном разви- не привязывается к машине и который можно свободно от-
тии событий управление получает anti_handler, увеличиваю- лаживать или дизассемблировать в свое удовольствие.
щий значение переменной anti_debug, которая тут же про- Выгрузка резидентного модуля из памяти осуществля-
веряется со своим первоначальным значением. При рабо- ется командой «rmmod burndump», но не спешите с ним
те под отладчиком сигнал SIGTRAP «поглощается» отлад- расставаться! Слегка доработав исходный текст, мы смо-
чиком, и anti_handler управления не получает. жем распаковывать и другие протекторы (когда они появят-
Основная проблема протектора в том, что переменная ся), а не только один лишь Burneye. Дампер уровня ядра –
anti_debug проверяется в одном-единственном месте, один- это вещь! Это настоящее оружие, с которым очень трудно
единственный раз! Чтобы обойти защиту, можно либо за- справиться на прикладном уровне! (Впрочем, Burneye с лег-
писать в переменную anti_debug любое значение, отличное костью снимается и PD). Короче, победу над Burneye мож-
от нуля, либо трассировать программу вплоть до достиже- но считать полной и окончательной.
ния INT 03h, после чего «вручную» изменить значение ре-
гистра $pc на anti_debug и спокойно продолжить отладку. Shiva
Так же можно заменить инструкцию «cmp anti_debug, 0» Весьма амбициозный протектор, созданный двумя гуру Neel
на «cmp anti_debug, 1» (но это только в том случае, если Mehta и Shaun Clowes (Email: shiva@securereality.com.au)
в программе нет проверки целостности собственного ко- и представленный ими на конференции Black Hat, прохо-
да). Короче, вариантов много, но все они требуют участия дившей в Азии в 2003 году.
человека, что напрягает.
Когда борьба с Byrneye всех хакеров окончательно до-
стала, некто по имени ByteRage (byterage@yahoo.com) на-
писал автоматический распаковщик – burneye unwrapper,
по обыкновению бесплатно распространяемый в исходных
текстах. Впрочем, называть «исходными текстами» крошеч-
ную C-программу, представляющую собой загружаемый мо-
дуль ядра, можно только с большой натяжкой.
К ач а е м h t t p : / / b y t e r a g e . h a c k a h o l i c . o r g / s o u r c e /
burndump.c, компилируем своим любимым компилятором
«gcc c burndump.c» (на некоторых системах необходимо яв-
но указать включаемые файлы «gcc c I/usr/src/linux/include
burndump.c») и загружаем внутрь ядра «insmod burndump»
(естественно, для этого необходимо иметь права root). Те-
перь burndump будет сидеть резидентно в памяти и перехва-
тывать системный вызов brk(), который нужен упаковщику
для расширения сегментов elf-файла в памяти. К момен- Рисунок 6. Обход антиотладочного приема в отладчике,
интегрированном в IDA Pro
ту вызова этой функции файл уже распакован – остается
только снять с него дамп и записать на диск. Чтобы не пи-
сать все подряд, необходимо как-то отождествить упаков-
щик. В burndump за это отвечает следующая малопонят-
ная конструкция:

Листинг 14. Фрагмент burndump, отождествляющий упаковщик


по «сигнатуре»

codeptr = current->mm->start_code + 1;
/* caller == burneye ??? */
if ((codeptr >> 16) == 0x0537)
printk("<1> 7350 signature 0x0537 found!\n");

Но все сразу же становится ясным, если взглянуть


на файл, обработанный протектором Burnyey: как видно,
протектор располагает себя по довольно нехарактерным
адресам, и дампер просто сравнивает 16 старших байт ад-
реса, вызывающего функцию brk(). Рисунок 7. Сайт создателя утилиты ByteRage

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


администрирование
шинство остальных отладчиков (отладчик, интегрирован-
ный в IDA Pro, ALD – Assembly Language Debugger и т. д.).
Собака зарыта в том, что механизм ptrace нерентабелен,
то есть программу, уже находящую под отладкой, отла-
живать нельзя! Shiva воспользовался этим фактом, поро-
див дочерний процесс, отлаживающий сам себя (ну все,
как у Armadillo!), чем надежно защитился как от трасси-
ровки, так и от вызова PTRACE_ATTACH, поскольку он то-
же работает через ptrace!
Найти же удобоваримый отладчик, работающий в обход
ptrace, оказалось, на удивление, сложной задачей (тем бо-
лее что в дополнение к этому Shiva распознает TRAP-флаг,
анализируя бит трассировки в регистре EFLAGS процессо-
ра и выполняет контроль таймингов). Поиск обнаруживает
только кладбища заброшенных проектов.
Рисунок 8. Неизменный Segmentation fault при попытке Заброшенный, заново воскрешенный и снова забро-
запустить протектор shiva, возникающий на всех доступных шенный ядерный отладчик The-DUDE (http://the-dude.
мне ядрах/машинах
sourceforge.net), другой ядерный отладчик – privateICE
(http://pice.sourceforge.net) – поддерживает лишь фиксиро-
ванный набор ядер, среди которых нет ни одного «моего».
Из всех отладчиков удалось запустить лишь linice (http://
www.linice.com), да и то в VGA-режиме.
Морской волк Chris Eagle (cseagle@nps.navy.mil) пошел
другим путем и на той же самой конференции продемонс-
трировал автоматический депротектор. Вместо поиска от-
ладчиков, работающих в обход ptrace, он разработал отлад-
чик-эмулятор x86-процессора, выполненный в виде под-
ключаемого модуля для IDA Pro и бесплатно распростра-
няемый в исходных текстах: http://sourceforge.net/projects/
ida-x86emu, однако имейте в виду, что для его компиляции
Рисунок 9. Внешний вид ядерного отладчика linice,
своеобразного аналога soft-ice для Linux требуется IDA SDK, который есть не у всех.
Текст мультимедийной презентации с описанием мето-
Исходные тексты не разглашаются (как будто там дики взлома лежит на Black Hat: http://www.blackhat.com/
есть что скрывать!), а сам бинарник можно скачать presentations/bh-federal-03/bh-federal-03-eagle/bh-fed-03-
как с сайта разработчиков www.securereality.com.au/ eagle.pdf, а набор утилит для взлома (включающий в се-
archives/shiva-0.95.tar.gz, так и с сервера Black Hat: бя автоматический распаковщик и несколько полезных
blackhat.com/presentations/bh-usa-03/bh-us-03-mehta/ скриптов для IDA Pro, упрощающих расшифровку), нахо-
bh-us-03-shiva-0.96.tar, причем версия с Black Hat посве- дится в соседнем файле: www.blackhat.com/presentations/
жее будет, что наводит на определенные размышления. bh-federal-03/bh-federal-03-eagle/bh-federal-03-eagle.zip.
Там же, на Black Hat, можно найти тексты мультимедий- Теперь что касается расшифровки. Чтобы противостоять
ной презентации от обоих разработчиков и в pdf. Первый: дампу даже на уровне ядра, Shiva использует динамичес-
www.blackhat.com/presentations/bh-usa-03/bh-us-03-mehta/ кую расшифровку по требованию (on demand). Неисполь-
bh-us-03-mehta.pdf и второй: http://www.blackhat.com/ зуемые в данный момент страницы заполняются байтами
presentations/bh-asia-03/bh-asia-03-halvar.pdf. CCh, представляющими собой инструкцию INT 03h, переда-
Разработчики реализовали мощную антиотладку, мно- ющую управление материнскому процессу-отладчику при
гоуровневую динамическую шифровку, эмуляцию некото- попытке их выполнения, что сигнализирует о необходимос-
рых процессорных инструкций… в общем получился поч- ти их расшифровки, которая осуществляется «подкачкой»
ти что Armadillo, только под Linux. Но если Armadillo хоть недостающих байтов из «резервного» хранилища (Armadillo,
как-то работает, то Shiva на всех доступных мне системах помнится, менял атрибуты доступа страниц). Разумеет-
выпадет в Segmentation fault. Конкретно тестировались: ся, этот трюк ра-
KNOPPIX с ядрами 2.6.7/4.2.7 и SUSE c ядром 2.6.8, пуска- ботает только с ко-
емых как под VMWare, так и на «живой» машине с процес- дом, но не с данны-
сором AMD Athlon-1700. ми, и их приходится
Поэтому вся информация, приведенная ниже, получе- расшифровывать
на исключительно путем дизассемблирования и отладки статическим рас-
протектора. шифровщиком.
Начнем с отладки, так как под Linux это самый боль- В дополнение
ной вопрос. Операционная система предоставляет меха- к этому Shiva заме-
Рисунок 10. Структура файла,
низм ptrace, которым пользуется gdb и подавляющее боль- няет в расшифро- зашифрованного Shiva

38
администрирование
ванных блоках инструкции PUSH, JMP и CALL на INT 03h Основные характеристики наиболее популярных UNIX-упаковщиков
(неблагоприятные для хакеров свойства затемнены)
и эмулирует их выполнение. Все очень просто. Shiva держит
в памяти специальную таблицу с адресами замещенных Характеристика ELF-Crypt UPX Byrneye Shiva
инструкций, и если TRAP по выполнению INT 03 приходит anti-debug нет нет да да
по одному из этих адресов – задействуется механизм эму- anti-dissembler есть нет да да
ляции. В практическом плане это означает, что даже рас-
anti-ltrace нет да да да
шифровав все зашифрованные блоки, мы все равно не смо-
allow to attach да да да нет
жем избавиться от Siva RTL (среды исполнения) и будем
вынуждены «тащить» протектор за собой, если, конечно, anti «procdump» да нет нет да
не декодируем эту таблицу адресов и не восстановим «ук- интерфейс libc syscall syscall syscall
раденные» команды. содержит распаковщик нет да нет нет
Для противодействия дизассемблеру Shiva генери- взломан да да да да
рует большое количество полиморфного кода и постоян-
но совершает прыжки в середину инструкций, что ужас- ки, упаковщики исполняемых файлов, возможно, начнут
но напрягает. играть существенную роль, но пока же они годятся раз-
Короче говоря, Shiva – это кривая калька с Armadillo ве что для забавы и… подготовки к схватке с по-насто-
и к тому же неработающая. В то время как под Windows ящему серьезным противником.
протектор Armadillo уже давно не является чудом инже- Хакерские утилиты под UNIX уже пишутся, и к тому
нерной мысли, ситуация в мире UNIX напоминает СССР моменту, когда защитные механизмы выйдут на арену,
в эпоху «персональных компьютеров коллективного ис- разработчики с удивлением обнаружат, что ситуация
пользования». уже совсем не та, что пару лет назад, и теперь им про-
тивостоят не пионеры, ковыряющие внутренности UNIX
Заключение в свободное время от основных дел, а хорошо подго-
Через несколько лет, когда рынок закрытого програм- товленные специалисты, которых никаким протектором
много обеспечения под UNIX достигнет критической точ- не напугаешь.

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


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

Zlock: контролируйте доступ


к USB-устройствам

Андрей Гущин
Вы в очередной раз не можете понять, откуда у конкурентов база данных ваших клиентов?
Или кто из сотрудников периодически использует рабочее место для перекачки, обработки
и записи гигабайтов личных фотографий с цифровой камеры на CD? Без надежной системы
контроля доступа к мобильным устройствам вряд ли удастся избежать подобных ситуаций.

Что мы имеем сегодня? изменениями политик в данном случае и работы защищенных от копирова-
Проблема контроля над нелегальной затруднительно. ния коммерческих программ. Возмож-
миграцией данных за пределы орга- ность ведения журнала операций чте-
низации с использованием перенос- Есть ли варианты? ния-записи позволяет создать систе-
ных устройств (flash-накопители, пе- Несколько месяцев назад компания му безопасности, основанную не толь-
реносные HDD, PCMCIA-карты, КПК SecurIT (http://www.securit.ru), разработ-
ко на превентивном предотвращении
и пр.) давно актуальна для многих ком- чик популярных систем защиты инфор- доступа, но и на анализе тех операций,
паний. Но до сих пор ее решение сво- мации при ее хранении на дисках и лен- которые должны выполняться по долгу
дится к созданию нетривиальных поли- тах, анонсировала новый продукт – службы. Таким образом, в ситуациях,
тик безопасности. Однако такие реше- систему Zlock, основное назначение когда из-за специфики работы нельзя
ния, во-первых, сложны и нестандар- которой – разграничение прав поль- полностью запретить запись информа-
тны, во-вторых – в большинстве реа- зователей на использование внешних ции на переносные носители (напри-
лизаций не позволяют проводить цент- устройств, например USB-flash-дисков мер, IT-компании), созданная система
рализованный аудит событий, связан- и пр. В статье речь пойдет о последней безопасности будет вести журнал всех
ных с копированием данных на съем- версии продукта – Zlock 1.2. операций и шанс найти источник утеч-
ные устройства. Помимо этого, при со- Для каждого типа устройств Zlock ки все равно останется.
здании жесткой политики безопаснос- предполагает возможность гибкой на-
ти системному администратору бывает стройки прав доступа на основе спис- Тестируем Zlock
трудно решить проблему предоставле- ков контроля доступа (ACL). Для каж- Протестировать этот продукт было
ния выборочного доступа к таким уст- дого физического или логического ус- весьма интересно, поскольку имен-
ройствам, а уж про прямые и нагляд- тройства и для каждого пользователя но такие решения редко используют-
ные разрешения типа ACL – вообще или группы пользователей из Active ся в большинстве сетей, хотя мысли
говорить не приходится. Directory можно разрешить либо пол- о возможности подобного контроля на-
Как итог – большинство систем- ный доступ, либо чтение, либо вообще верняка возникали у каждого систем-
ных администраторов либо смирилось доступ запретить. Подключаемые уст- ного администратора. Однако при вы-
с проблемой утечки информации через ройства могут идентифицироваться по боре любых систем корпоративного
мобильные устройства, либо скрупу- любым признакам, таким как класс ус- уровня для внедрения в своей локаль-
лезно пытаются создавать политики тройства, код производителя, код уст- ной сети, а также в сетях наших клиен-
безопасности, способные решить за- ройства, серийный номер и т. д. Это да- тов (я работаю в IT-фирме и любое рас-
дачу предотвращения доступа к таким ет возможность назначать разные пра- сматриваемое решение «примеряется»
устройствам. Себя я отношу к первой ва доступа к устройствам одного клас- на потенциальную возможность реали-
категории, так как управлять сетью са, например, запретить использова- зовать это у заказчиков) основным кри-
IT-компании и пытаться запретить ко- ние USB-flash-дисков, но при этом раз- терием, помимо самого функционала,
пировать что-либо на съемные носи- решить использование USB-ключей для нас является эта самая «корпора-
тели почти невозможно, а управление для аутентификации пользователей тивная направленность» продукта.

40
безопасность
Главными предполагаемыми пре-
имуществами системы, наряду с ос-  Продукт: Zlock.  Централизованная установка и уп-
новными функциональными харак-  Производитель: SecurIT. равление.
теристиками, должны быть простота  Сайт производителя: www.securit.ru.  Мониторинг клиентских рабочих
внедрения и интуитивная понятность  Назначение: контроль доступа к вне- станций для оперативного реагиро-
действий по ее настройке и конфигу- шним устройствам в масштабе пред- вания на попытки несанкциониро-
рированию. приятия. ванного отключения или изменения
После изучения руководства ад-  Основные возможности: настроек клиентского модуля Zlock.
министратора я приступил к установ-  Управление доступом к устройс-  Запись событий в локальный или
ке на сервер управляющей консоли твам на базе политик доступа. централизованный журнал в фор-
и клиентской части программы. Про-  Идентификация устройств по 16 матах TXT, XML и EventLog.
цесс инсталляции прошел успешно. признакам.  Встроенные средства анализа ло-
Правда, после установки вручную при-  Ведение каталога устройств. гов.
шлось обновить драйверы ключа за-
щиты – по указанию «найти автома- «получения навыков администрирова- равления также необходимо подклю-
тически» ключ стал работать штат- ния» путем постоянной беготни между чить. Думаю, что авторы программы
но. Никаких конфликтов с двумя со- компьютерами пользователей, а посе- прислушаются к таким «косметичес-
седними HASP-ключами от систем му предпочитают использовать такие ким» замечаниям и в следующей вер-
1С:Предприятие не произошло. Пер- технологии, которые позволяют вооб- сии поправят это. Хотя про следующую
вая же проверка на соответствие мо- ще не покидать своего кабинета для версию я напишу отдельно.
им задачам («Помощь → О програм- решения любых системно-админис- Учитывая, что при установке кли-
ме») показала, что я стал обладате- тративных задач (понятно, что физи- ентской части автоматически бу-
лем версии системы на 10 пользовате- ческие поломки устраняют специалис- дут приняты определенные настрой-
лей. Продолжать установку я не стал, ты технического отдела). ки «по умолчанию», разумно создать
так как сеть нашей компании включа- Выяснилось, что возможностей их заранее и сохранить в виде файла
ет в себя около 150 рабочих мест. Свя- для удаленной установки клиентской default.zcfg в папку, откуда будет про-
завшись с техническим отделом разра- части у Zlock как минимум две: при по- изводиться установка. Данную пап-
ботчика, я пояснил, что для полноцен- мощи стандартного распространения ку предоставим в общий доступ для
ного тестирования потребуется внед- установочного msi-файла политиками возможности установки программы
рить систему во всей работоспособ- AD и с использованием службы уда- с наследованием настроек по сети,
ной локальной сети, а не на искусст- ленной установки, имеющейся в кон- чем всегда смогут воспользоваться
венном полигоне из 10 рабочих стан- соли управления. Эта служба, кстати, специалисты технического отдела, ко-
ций, после чего количество лицензий позволяет таким образом запустить торые подключают пользователям но-
увеличили до 150. на клиентском компьютере любой ус- вые рабочие станции, а также прово-
Апгрейд был произведен удаленно, тановочный дистрибутив любого дру- дят профилактические работы с ними
по системе «запрос-ответ», с инструк- гого продукта. То есть вместе с ос- (например, переустановка ОС). Это то-
цией, как добавить полученные лицен- новным продуктом вы заодно получи- же понравилось, так как направлено
зии в ключ защиты, что является не- те приятную «добавку», упрощающую на реализацию той самой «корпора-
сомненным преимуществом при мас- удаленную установку программ на ра- тивности продукта» и освобождения
штабировании сети компании, так как бочие станции в локальной сети. главного специалиста от необходимос-
не придется останавливать работу После тестовой проверки на не- ти постоянного вмешательства в рабо-
всей системы, отсылать разработчи- скольких рабочих станциях и убежде- ту helpdesk-специалистов.
ку старый ключ защиты и ждать но- ния в том, что продукт не валит сразу Для своей сети я сразу воспользо-
вый, как бы оперативно не работали систему в BSOD, следующим тестом вался общепринятым принципом пос-
службы почтовой доставки. «права на жизнь» стала попытка уста- троения практически любых систем
новить клиентскую часть на все ком- защиты: «что не разрешено – то за-
Инсталлируем везде. пьютеры локальной сети. Процесс уда- прещено» и в политике по умолчанию
Автоматически ленной установки, на мой взгляд, слег- запретил запись на все съемные но-
Итак, установив консоль управления, ка усложнен необходимостью сначала сители для всех пользователей, кро-
я попробовал разобраться в том, ка- создать службу удаленного управле- ме Администраторов Домена. При со-
кие же возможности она представля- ния, затем «подключиться» к группе здании такой политики безопасности
ет мне как системному администрато- компьютеров и только затем запустить «по умолчанию» очень внимательно
ру и какими функциями я смогу при ее групповую инсталляцию. На самом де- отнеситесь к разрешениям на локаль-
помощи манипулировать. Первый и са- ле проще было бы эти 3 шага объеди- ные жесткие диски (Zlock позволяет за-
мый главный вопрос, который навер- нить в одном действии: «Установить блокировать доступ и к ним). Если вы
няка волнует многих из вас, – имеет- программу», так как логично предпо- случайно создадите неверную полити-
ся ли возможность дистанционной ус- ложить, что если вы хотите что-то уда- ку и запретите любой доступ к дискам
тановки клиентской части. Сисадми- ленно установить на клиентский ком- с ОС – то компьютеры просто не загру-
ны давно не являются энтузиастами пьютер, то и программу удаленного уп- зятся. Также не забывайте про обяза-

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


безопасность
После выбора рабочих станций
вам предложат указать, откуда необ-
ходимо запускать дистрибутив уста-
новщика. Именно эта функция и дает
возможность таким образом устанав-
ливать и другие программы, не сходя
с рабочего места. Будьте вниматель-
ны при выборе варианта установки –
Рисунок 1. Политика доступа по умолчанию
«С перезагрузкой» или «Требуется пе-
резагрузка». В случае если вы выбе-
тельное предоставление доступа для ке закончена. В продукте импониру- рете «С перезагрузкой» – после за-
учетной записи SYSTEM, от имени ко- ет простота создания политик, свя- вершения установки клиентские ра-
торой запущено большинство систем- занная с применением стандартного бочие станции перезагрузятся авто-
ных процессов (см. рис. 1). принципа создания прав пользовате- матически, не спрашивая подтверж-
После необходимо продумать поли- лей типа ACL. дения пользователя.
тики доступа к самой службе Zlock, ко- Для установки на все компьюте- На этом первоначальная установ-
торая также распространится при уста- ры пользователям было отправлено ка закончена, и после перезагрузки
новке на клиентские места. Отредак- pop-up-сообщение с просьбой вклю- клиентская часть Zlock начнет испол-
тируйте политику доступа к настрой- чить все рабочие станции сети, нахо- нять предписанную политику безо-
кам клиентской части программы, раз- дящиеся рядом, но не используемые пасности. При этом в трее появляется
решив или запретив пользователям в данный момент. Выбрав из списка значок службы Zlock, предоставляю-
видеть значок и получать предупреж- компьютеров для подключения все ра- щий пользователям возможность со-
дения об изменении политики доступа. бочие станции сети (вернее, выбрав все здавать запросы на предоставление
С одной стороны – данные предупреж- и затем исключив серверы), я запустил доступа, а также самостоятельно ре-
дения являются удобными, так как, от- процесс подключения для дальнейшей дактировать политики, если, конечно,
правив администратору заявку на по- установки клиентской части. Подклю- это было им разрешено созданной на-
лучение доступа, пользователь будет чение к такому количеству компьюте- ми политикой по умолчанию.
оповещен, если измененная политика ров (150), конечно, заняло относитель-
будет применена к его рабочей стан- но продолжительное время, так как Стремясь к полной
ции. С другой стороны – часто систем- осуществляется последовательно, конфиденциальности…
ные администраторы предпочитают не а если компьютер выключен – то проис- После этого, собственно говоря, и на-
предоставлять пользователям лишние ходит ожидание тайм-аута по подклю- чинается тонкая настройка системы
визуальные подтверждения работа- чению. Однако процедуру придется вы- Zlock. Если в вашей компании сотруд-
ющих на рабочей станции защитных полнить только при первоначальной ус- никам часто необходимо что-то сохра-
служб (см. рис. 2). тановке, дальше политики будут конт- нять на съемных носителях, а политику
Затем созданная политика (в дан- ролироваться на основе персональных безопасности хотелось бы поддержи-
ном случае она пока остается локаль- потребностей пользователей. При по- вать на самом строгом уровне, то ско-
ной для консольной рабочей станции) пытке «разом» установить клиентскую ординируйте свой рабочий график так,
сохраняется в виде файла с именем часть на все 150 компьютеров локаль- чтобы иметь возможность в следую-
default.zcfg в папку с дистрибутивом ной сети я столкнулся с незначитель- щую за установкой неделю как можно
клиентской части. ными проблемами на нескольких ра- чаще присутствовать на рабочем мес-
Все. На этом глобальная подго- бочих станциях, однако на большинс- те. Для поддержания максимальной
товка системы к массовой установ- тво компьютеров система установи- строгости политики доступа рекомен-
лась автоматически. Проблема в уста- дуется создавать правила для конкрет-
новке, собственно была одна – несов- ных съемных устройств, так как Zlock
местимость Zlock с устаревшими вер- позволяет предоставлять доступ к ус-
сиями драйвера защиты CD-дисков – тройствам даже на основе его полных
StarForce. Для корректного взаимо- характеристик, таких, как марка, мо-
действия необходимо обновить драй- дель, серийный номер и т. п. Сложнее
вер StarForce, скачав его с сайта произ- обстоит дело в IT-фирмах, так как со-
водителя. Это было также сделано уда- трудникам постоянно приходится за-
ленно, при помощи службы удаленной писывать всевозможную информацию
установки. Объяснение причины этой на диски CD/DVD-R/RW. В данном слу-
несовместимости, на мой взгляд, име- чае можно порекомендовать исполь-
ет право на жизнь – ведь Zlock взаимо- зовать выделенные рабочие станции
действует с подсистемой ввода-выво- с записывающими приводами, на кото-
да на более низком уровне, нежели при- рых системными политиками безопас-
кладные функции ОС, – так же, как за- ности будут созданы правила, не поз-
Рисунок 2. Разрешения на управление
Zlock щита от копирования CD. воляющие получить с этих компьюте-

42
безопасность
ров доступ в сеть. Однако такие тон- прос содержит всю информацию об ус- Последний вариант, очевидно, лучше,
кости выходят за рамки статьи, посвя- тройстве, включая производителя, мо- поскольку у пользователя отсутству-
щенной Zlock. дель, серийный номер и т. д., а систе- ет даже гипотетическая возможность
ма Zlock позволяет создавать любые внесения в него изменений. В журнал
Как это работает политики на основании этих данных. записываются события подключения
на практике? Таким образом мы получаем возмож- и отключения устройств, как разре-
Теперь посмотрим, как это все выгля- ность предоставить право записи кон- шенных, так и запрещенных. Кроме
дит в работе. Напоминаю, что создан- кретному пользователю на указанное этого, для отдельных устройств можно
ная мной политика доступа позволяет устройство, при необходимости ве- установить запись в журнал всех опе-
пользователям производить чтение дя журнал всех файловых операций раций с файлами – создание, чтение,
со всех съемных устройств и запреща- (см. рис. 4). запись, переименование и удаление.
ет запись на них. Сотрудник отдела об- Таким образом процесс создания
служивания приходит в офис для того, дополнительных разрешающих по- Анализ журнала
чтобы сдать отчеты и записать зада- литик облегчен для администрато- В принципе для анализа логов сущест-
ния на диск. При подключении съем- ра до предела и сводится к принципу вует множество различных средств,
ного устройства система ограничива- Check&Click, что, несомненно, радует. и включать такое средство в продукт
ет доступ и выдает соответствующее особого смысла нет. Тем не менее
предупреждение (см. рис. 3). Что еще? в состав Zlock входит консоль отче-
Сотрудник считывает с него при- Очевидно, «закон 80-20» справедлив тов, которая реализует все необходи-
несенную информацию, после чего и для Zlock, поэтому в данной статье мые функции. Встроенный конструк-
безуспешно пытается записать по- удалось подробно рассмотреть толь- тор запросов, просмотр информации
лученные от руководителя задания. ко 20% возможностей продукта, кото- из нескольких файлов в одном окне
При необходимости получить доступ рые, тем не менее, должны удовлет- и сохранение результатов запросов
он либо связывается с администра- ворить 80% клиентов. Для того что- в табличном формате HTML – в качес-
тором по телефону, либо формиру- бы соблюсти историческую справед- тве базового функционала этого впол-
ет автоматический запрос при помо- ливость, приведем краткий обзор не- не хватает.
щи Zlock Tray Applet с указанием уст- охваченных возможностей.
ройства, к которому он хотел бы полу- Чего ожидать в будущем?
чить доступ, называет свою учетную Мониторинг Возвращаясь к обещанному анонсу но-
запись и мотивирует необходимость Данная функция обеспечивает пери- вой версии, могу сказать, что в неофи-
такого доступа. одический опрос клиентских рабочих циальной беседе с одним из разработ-
Администратор, получив такой за- станций на предмет несанкциониро- чиков эта тема обсуждалась с непод-
прос, принимает решение о предостав- ванного отключения или изменения дельным интересом, так как именно
лении/не предоставлении такого до- настроек клиентских модулей Zlock. в ней планируется ввести полноцен-
ступа и при положительном решении Для уведомления компетентных лиц ное понятие «сервер Zlock», который
изменяет политику для данной рабо- о такой «неавторизованной» актив- полностью возьмет на себя все взаи-
чей станции. При этом созданный за- ности пользователей может приме- модействия с клиентами. В настоящий
няться как запись информации о со- момент централизованное управление
бытии в журнал, так и любое дейс- осуществляется при помощи консоли
твие, выполняемое с помощью скрип- Zlock. Введение сервера упразднит не-
тов VBscript или Jscript, например, от- обходимость описанного выше после-
правка сообщения по электронной поч- довательного подключения к каждому
Рисунок 3. Предупреждение те, SMS и т. д. Это может стать сущест- клиенту и сделает еще более удобным
об ограничении доступа венным подспорьем в деле выявления распространение настроек. Сервер
особо талантливых и любознательных будет осуществлять централизован-
сотрудников и своевременного направ- ное управление клиентскими частя-
ления их способностей в более продук- ми – мониторинг, применение политик
тивное русло. и конфигураций, а также все осталь-
ные функции, необходимые для пол-
Журналирование ноценного администрирования систе-
О возможности ведения журнала мы. Если все это окажется полноцен-
уже шла речь, однако стоит написать но реализованным, то продукт станет
об этом более подробно, посколь- еще более удобным помощником для
ку анализ логов – один из основных, системного администратора. Хотя уже
а иногда и единственный инструмент сейчас Zlock успешно внедрен в нашей
для выявления инсайдеров. Журнал компании и стабильно работает на 150
может вестись в формате TXT, XML рабочих станциях.
и Windows EventLog, как на локальной
Рисунок 4. Создание политики
на основании запроса пользователя рабочей станции, так и на сервере. На правах рекламы

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


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

Защищаемся от malware
с помощью BufferZone

Сергей Яремчук
Борьба с злонамеренными программами является частью обязанностей администратора.
Но, учитывая, что ежедневно обнаруживается около 50 новых вирусов и других подобных
программ, это становится непростым делом.

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

О
бнаружить попытку внедрения тя такой подход и позволяет обнару-
практически любой злонаме- жить и остановить практически лю-
ренной программы можно тре- бую угрозу, тем не менее многим про-
мя способами: опираясь на базу зна- граммам требуется доступ в систем-
ний, пытаясь предугадать действия ную область, возможность записи и из-
и контролируя работу и целостность менения файлов. Распознать вред-
системы. ные действия подчас довольно слож-
Сегодня самым популярным явля- но, поэтому всегда есть вероятность
ется первый, самый простой в реали- ошибки, как запрет легального дейст-
зации вариант, заключающийся в том, вия, так и, наоборот, разрешение не-
что на основе известного вируса со- правильного. Пользователю придется
здается его описание (сигнатура), ко- выбирать между максимальной защи-
торое заносится в базу. Проблем здесь той, а значит, постоянными запросами,
несколько. Неизвестные вирусы та- либо меньшей защитой, с возможнос-
ким способом обнаружить невозмож- тью спокойно работать. Поэтому такие
но, а занесение новой сигнатуры тре- «песочницы» должны использоваться
бует некоторого времени (по данным в паре с антивирусом. Рисунок 1. Главное окно программы
лаборатории Касперского, от 30 ми- Из всего сказанного можно сделать
нут до полутора часов). Но очень час- вывод, что всегда приходится выби- И, наоборот, доверенные процессы мо-
то пользователи игнорируют обновле- рать между удобством и уровнем безо- гут видеть все ресурсы (принцип про-
ния. Некоторые обновляют антивирус- пасности, а беззаботный или невнима- зрачности) или не иметь доступа к та-
ную базу раз в неделю, другие раз ме- тельный пользователь может свести на ким ресурсам.
сяц, не говоря о том, что на некоторых нет все старания по защите сети. Любая доверенная программа мо-
компьютерах часто антивирус вообще В журнале уже рассказывалось жет изменить статус в том случае, ког-
не установлен. о различных решениях, позволяю- да работает с недоверенным источни-
Изучая действия различных ти- щих защитить компьютер без исполь- ком. Например, при помощи MS Word
пов malware (термин malware про- зования антивируса CORE FORCE [2] пользователь открывает документ, по-
изошел от слов malicious и software. и Prevx1 [3], сегодня познакомим- лученный через Интернет. Таким об-
Под malware понимают все програм- ся еще с одним из них. разом, ненадежные программы всег-
мы, которые могут нанести какой-ли- да создают недоверенные ресурсы,
бо ущерб, включая вирусы, троян- Подход BufferZone а надежный процесс всегда произво-
цы, сетевых и почтовых червей, а так- Разработчики израильской компании дит доверенный ресурс.
же рекламное (adware) и шпионское Trustware Inc., образованной в 2003 го- Надежный процесс может полу-
(spyware) программное обеспечение.) ду, предлагают иной подход, позволя- чить доступ к непроверенному ресур-
можно попытаться описать их при по- ющий активно защищать операцион- су, полученному результату система
мощи правил. Если программа нару- ную систему Windows против злона- защиты также не будет доверять. Если
шит одно из правил, то ее можно счи- меренного программного обеспече- файл, либо реестр изменен доверен-
тать подозрительной. У злоумышлен- ния и компьютерных атак. Без каж- ной программой, то программа, поме-
ника всегда будет возможность изу- додневных обновлений, с максималь- ченная как недоверенная, увидит это
чить работу такой системы защиты ной защитой при минимальном учас- изменение. А если наоборот? Недо-
и вероятно найдется вариант, позво- тии пользователя. веренная программа, работая с копи-
ляющий ее обойти. К тому же под опи- Суть технологии Virtualization, ис- ей, будет уверена, что изменила тре-
сание могут попасть и некоторые ле- пользуемой в продукте, имеющем на- буемый ресурс, остальных это измене-
гальные программы, пользователь бу- звание BufferZone, заключается в том, ние не коснется.
дет сбит с толку и может принять не- что непроверенная программа поме- Таким образом любой троянец, да-
верное решение, блокирующее рабо- щается в виртуальную среду, наподо- же проникнув в систему, не сможет
ту легальной утилиты. бие sanbox. Но с некоторым отличием. полноценно работать, так как вся ин-
Немного другой подход реализуют Такие программы могут видеть файлы формация о его автозагрузке будет на-
различные механизмы, опирающиеся на жестком диске, но не могут их изме- ходиться в подставном ресурсе.
на регистрацию аномалий, но, к сожа- нить. Если же программе потребуется Кроме того, дисплей и клавиатура
лению, сегодня это в большинстве сво- изменение, например параметра реес- для доверенных и недоверенных про-
ем лишь теоретические разработки. тра, то в виртуальном пространстве бу- цессов как бы разделены, поэтому да-
В стороне стоят системы, зада- дет создана копия и программа будет же если троянцу и удастся в последую-
ча которых ограничение деятельнос- в дальнейшем работать с ней, не тро- щем запуститься, то считать с них ин-
ти не доверенных программ. Запус- гая оригинал. формацию он не сможет.
кая программу в ограниченной среде Для того чтобы избежать утечки ин-
«песочнице» (sandbox) они позволяют формации, непроверенные программы Варианты BufferZone
предохранить систему от подозритель- могут вообще не иметь доступа к оп- В настоящее время доступны четыре
ных или неразрешенных действий. Хо- ределенным (confidential) ресурсам. варианта продукта: Home, Corporate,

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


безопасность
CSP (Critical Systems Protection) памяти и установленная ОС Windows  Summary – выводит список запу-
и freeware. Каждый из них обеспечи- 2000/XP/2003. щенных на компьютере (см. рис. 2)
вает защиту на одном из трех уров- и помещенных в BufferZone про-
ней: отдельное приложение, компью- Тестируем работу грамм. Здесь же можно просмот-
тер или корпоративная сеть. BufferZone Home реть, сохранить и распечатать жур-
Так вариант Corporate позволяет В настоящее время на сайте про- налы событий, редактировать спи-
администратору осуществлять пол- екта можно скачать триал-версию сок запрещенных, конфиденциаль-
ный и принудительный контроль над BufferZone Home, сохраняющую рабо- ных файлов, а также распределить
всеми устройствами, устанавливае- тоспособность без регистрации в тече- программы по зонам. Также отсю-
мыми и работающими приложения- ние 60 дней и все freeware-утилиты. да можно запустить небольшой тур
ми, централизованное управление на- Установка варианта Home стандар- на Flash, рассказывающий о воз-
стройками и правилами. Централизо- тная, после чего потребуется перезаг- можностях BufferZone.
ванная сертификация устанавливае- рузка системы. На установку и запуск  Po l i cy – н ас т р о й к а «Ac t i vate
мых программ может осуществлять- новой программы отреагировал бранд- Application Control», т.е. действия
ся как локально, так и через сеть (на- мауер Jetico Personal Firewall, сообщив- программы при появлении ново-
пример LDAP). ший, что приложение пытается «Event го процесса и сообщение выводи-
В каждой версии ведется подроб- attacker injects own code into application» мого при этом пользователю. Так-
ный журнал работы, поэтому всегда и «Event attacker writes to application’s же в этом пункте определяются зо-
можно узнать о происходящем в систе- memory» и так для всех процессов, ны (none, BufferZone, Confidential,
ме. Свободная версия программы за- автоматически запускающихся вмес- Forbidden) для внешних и сетевых
щищает только отдельное приложение, те с системой. Кроме того, программа устройств, а также реакция систе-
не затрагивая сменные носители. WinPatrol сообщила о добавлении кли- мы на запуск неизвестных, но под-
В настоящее время обеспечивает- ента BufferZone в автозапуск и появле- писанных программ.
ся защита 13 утилит: нии нового сервиса ClntSvc.exe.  Firewall – содержит настройки меж-
 клиенты обмена сообщениями – После загрузки системы на ра- сетевого экрана для приложений,
MSN Messenger, Yahoo Messenger, бочем столе появились новые папки работающих в двух зонах Trusted
I C Q , AO L I n s t a n t M e s s e n g e r, My Confidential Documents, C:\Virtual и BufferZone. В качестве парамет-
GoogleTalk и Skype. и в трее новый значок, щелчок по ко- ров принимается имя приложе-
 P2P-приложения – Limewire, Kazaa, торому вызовет появление окна на- ния (возможно с указанием пол-
Emule. стройки (см. рис. 1). ного пути), сетевой адрес, порт
 веб-браузеры и менеджеры за- После установки все файлы из пап- и действие (Allow, Deny). По умол-
качек – Internet Explorer, FireFox, ки Program Files будут перенесены чанию запрещен доступ по 25 пор-
Download Accelerator Plus. в Virtual и помечены как Untrusted. ту для всех приложений, находя-
На старом месте останутся только яр- щихся в BufferZone, остальные со-
Минимальные требования к кли- лыки, указывающие на файлы в Virtual. единения разрешены.
ентскому компьютеру: процессор клас- Главное окно программы состоит  Setting – здесь также две вкладки.
са Pentium III с 128 Мб оперативной из 4 вкладок: В «General» установки администра-
торского пароля, рисунков статуса
на файлах и папках, вывод иконки
в трее, оповещение о появлении
новой версии программы, действие
по-умолчанию в том случае, когда
доверенная программа открывает
недоверенный ресурс (спросить,
запретить, открыть в BufferZone,
разрешить). В «Maintenance» мож-
но установить очистку виртуальных
файлов в BufferZone.

Обозначения файлов и каталогов


при использовании BufferZone помеча-
ются специальной маркировкой. Дове-
ренные файлы не маркируются, недо-
веренные получают красную окантовку
вокруг значка. Значки программ, кото-
рые могут работать как в том, так и дру-
гом режиме, кроме красной окантовки,
дополнительно перечеркиваются крас-
Рисунок 2. Вывод списка процессов ной полосой. Файлы, помеченные поль-

46
безопасность
зователем как confidential, дополнитель- Таблица сравнения версий программы BufferZone
но маркируются замком, а forbidden – Возможности версии Free Home Laptop CSP Server Corporate
запрещающим знаком (см. рис. 3). Эле- Защита от вирусов, червей и троянов из Интернета + + + + + +
менты экранного интерфейса, запу- Защита от вирусов, червей и троянов из внешнего
щенные в BufferZone, также получают – + + + + +
источника (дискета, компакт-диск, USB-устройства)
красную окантовку по контуру окна. Защита файлов, регистра, выполняющихся
+ + + + + +
В контекстном меню, вызываемом прикладных программ и объектов Windows

по щелчку правой кнопкой, появились Интеграция со сторонними сертификатами кода + + + + + +


дополнительные опции (см. рис. 4), поз- Возможность полного запрещения инсталляции
воляющие перемещать файл или ката- программного обеспечения из любого внешнего – – + + + +
источника
лог в/из BufferZone, запускать прило-
Для изменения уровня безопасности требуется
жение в BufferZone, установить атри- пароль администратора
– – + + + +
бут Confidential и Forbidden. Пользова- Политики на рабочих станциях сети – – – – – +
телю доступны два виртуальных рабо-
Централизованные параметры настройки
чих стола: Desktop и Security, сменить – – – – – +
и правила политики
их можно при помощи пункта меню, вы- Централизованное развертывание новых ревизий – – – – – +
зываемого при помощи значка в трее. Детализированный файл регистрации событий
+ + + + + +
Первый же час работы выявил и не- безопасности от всех рабочих станций
которые недостатки, которые, прав- Поддержка Windows 2000, XP и 2003 Server + + + + + +
да, устраняются настройкой. Напри-
мер, 700 Мб свободного места на дис- доверенном режиме вручную. центной защиты, но они показывают,
ке C:\\ были быстро забиты работаю- Для тестирования работы систе- что у технологии BufferZone есть все
щими приложениями, ведь для каждо- мы защиты я запустил файл, содержа- возможности противостоять угрозе.
го все настройки создавались факти- щий вирус I-Worm/Netsky.B. В режиме Пользователь должен немного
чески повторно. Открытие документов Security при запуске вируса было отка- привыкнуть к работе с таким типом
в Microsoft Word в первые несколько зано, система сослалась на то, что бы- программ, хотя в некоторых случаях
запусков после активации BufferZone ла предпринята попытка записи в ох- система сама его подстраховывает
постоянно сопровождалось доуста- раняемую системную область. Тогда я и лишних вопросов не задает. Кроме
новкой каких-то компонентов. Поэто- обозначил архиватор WinRaR как до- того, еще сказывается инерция мыш-
му при установке необходимо плани- веренную программу и попробовал за- ления, мы все хорошо знаем о рабо-
ровать и некоторый запас дискового пустить файл с вирусом, содержащим- те антивирусов, межсетевых экранов,
пространства (хотя бы двойной). ся в архиве. Сразу же выскочило сооб- а вот работая с одним BufferZone все-
После активации BufferZone стоит щение (см. рис.5), говорящее о том, что таки чувствуешь себя несколько не-
просмотреть установленные програм- на диске была создана новая програм- уверенно.
мы и неопасные сразу же перевести ма, которая на всякий случай будет за- Но нельзя не обратить внимание
в нормальный режим работы, исполь- пущена в BufferZone. И опять вирус был на наметившуюся активность в раз-
зуя пункт контекстного меню «Move out остановлен. Удалось запустить вирус работке альтернативных приложений,
of BufferZone», выбрав нужную папку только в режиме Desktop. Но если в сис- предназначенных для защиты персо-
в C:\Virtual\Untrusted\C_\Program Files. теме без работающего BufferZone ра- нальных систем, без использования
В случае надобности любую програм- бота вируса не была заметна, то после базы знаний. Это может свидетельс-
му всегда можно будет запустить в не- «заражения» компьютера с активиро- твовать только о том, что вполне ве-
ванным BufferZone сразу стало понятно, роятно в будущем такие системы ста-
что что-то не так. Загрузка процессора нут более распространенными.
подскочила до 70-80 % и начал актив- Кроме того, BufferZone является от-
но работать жесткий диск. После пере- личным инструментом, позволяющим
Рисунок 3. Маркировка файлов загрузки компьютера в списке процес- запускать неизвестные программы без
при использовании BufferZone
сов уже отсутствовал service.exe, рабо- боязни нанести ущерб работе операци-
тающий с папки Windows, а в виртуаль- онной системы.
ной папке было обнаружено несколь-
ко созданных копий вируса с разными 1. Сайт проекта Trusware – http://www.
названиями, что характерно для этого trustware.com.
Рисунок 4. Новые опции в контекстном
меню вируса. Если выставить автоматичес- 2. Яремчук С. Защита Windows-систем
кую очистку виртуальной папки в кон- при помощи CORE FORCE. //«Сис-
це рабочего дня, то о вирусе можно во- темный администратор», №1, 2006 г. –
обще не узнать. С. 54-59.
3. Яремчук С. Чем уникальна обществен-
Что имеем? ная система предотвращения атак
Эксперименты с несколькими виру- Prevx1. //«Системный администратор»,
Рисунок 5. Сообщение о запуске
неизвестного файла сами не могут дать гарантию стопро- №2, 2006 г. – С. 56-59.

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


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

Как обнаружить malware-программы?


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

Крис Касперски
В Windows постоянно обнаруживаются новые дыры, через которые лезет malware,
создающая новые процессы или внедряющаяся в уже существующие. Предлагаем вам
универсальный метод обнаружения malware, основанный на определении подлинного
стартового адреса потока, чего другие приложения (включая могучий отладчик soft-ice)
делать не в состоянии.

А
нтивирусы, брандмауэры и про- написанные индивидуально для каж- но творить все что угодно, в том числе
чие системы защиты хорошо дой конкретной атаки, а потому су- и принимать/отправлять пакеты в об-
справляются с вирусами и чер- ществующие в единственном экземп- ход брандмауэра.
вями, но в борьбе с malware они бес- ляре. При условии, что они не распоз- Тем не менее обнаружить присутс-
сильны. Чтобы не утонуть в термино- наются эвристическим анализатором твие malware на компьютере все-таки
логической путанице, здесь и далее (а обмануть эвристический анализа- возможно. Я проанализировал мно-
по тексту, под malware-программами тор очень легко), антивирус ни за что жество зловредных программ и об-
будут подразумеваться программы, не поймает их, поскольку таких сигна- наружил их слабые места, выдающие
скрытно проникающие на удаленный тур еще нет в его базе, да и откуда бы факт внедрения с головой.
компьютер и устанавливающие там они там взялись?!
back-door или ворующие секретную Персональный брандмауэр тоже Как malware внедряется
информацию. не слишком надежная защита. Мно- в компьютер
В первую очередь нас будут инте- жество дыр дают злоумышленнику Наиболее примитивные экземпля-
ресовать malware-программы, не спо- привилегии SYSTEM (что повыше ад- ры malware-программ создают но-
собные к размножению и зачастую министратора будет), с которыми мож- вый процесс, который вниматель-

48
безопасность
ный пользователь легко обнаружит
в «диспетчере задач». Конечно, для
этого необходимо знать, какие процес-
сы присутствуют в «стерильной» сис-
теме и где располагаются их файлы.
В частности, explorer.exe, расположен-
ный не в WINNT, а в WINNT\System32,
это уже никакой не explorer, а самая
настоящая malware-программа!
Впрочем, «диспетчер задач» край-
не уязвимая штука, и malware-програм-
мы без труда скрывают свое присутс-
твие от его взора. То же самое отно-
сится к FAR, Process Explorer, tlist и дру-
Рисунок 1. Зловредный процесс sysrtl замаскировал свое присутствие
гим системным утилитам, основанным от «диспетчера задач», но не смог справиться с soft-ice
на недокументированной API-функции
NtQuerySystemInformation(), экспорти-  получив идентификатор процес- дача решается «серединным» вы-
руемой динамической библиотекой са-жертвы (что можно сделать, на- зовом API-функции OpenProcress()
NTDLL.DLL и потому очень легко пе- пример, через семейство процедур путем передачи управления по сме-
рехватываемой с прикладного уровня, TOOLHELP32), malware-програм- щению 24h от ее начала и расшиф-
без обращения к ядру и даже без ад- ма «скармливает» его API-функ- ровкой идентификатора операцией
министраторских привилегий. ции OpenProcess(), возвращающей XOR со специальным «магическим»
Отладчик soft-ice – единственный дескриптор процесса (или ошибку, словом;
известный мне инструмент, не исполь- если у malware-программы недо-  добытый дескриптор потока переда-
зующий NtQuerySystemInformation() статочно прав); ется API-функции SuspendThread(),
и разбирающий структуры ядра «вруч-  возвращенный дескриптор про- останавливающей его выполне-
ную». Спрятаться от него на порядок цесса передается API-функции ние;
сложнее, и в «живой природе» такие VirtualAllocEx(), выделяющей в ад-  содержимое контекста останов-
malware-программы пока не замечены ресном пространстве процесса-жер- ленного потока читается API-фун-
(а лабораторные экземпляры нежиз- твы блок памяти требуемых разме- кцией GetThreadContext() с флагом
неспособны и могут обманывать толь- ров с атрибутами PAGE_READWRITE CONTEXT_CONTROL, в результате
ко известные им версии отладчика), или PAGE_READ (но тогда все опе- чего в структуре CONTEXT оказы-
так что на soft-ice вполне можно поло- ративные данные придется хранить вается значение регистра EIP, ука-
житься. Для просмотра списка процес- в стеке); зывающего на текущую машинную
сов достаточно дать команду «PROC»  поверх выделенного блока ко- инструкцию;
и проанализировать результат. пируется зловредный код (кото-  запомнив полученный EIP, malware-
Кстати, malware-программы, скры- рый должен быть полностью пе- программа тут же корректирует его
вающиеся от «диспетчера задач», не- ремещаемым, т.е. сохранять свою с таким расчетом, чтобы он указы-
медленно выдают свое присутствие работоспособность независимо вал на точку входа в ранее скопиро-
путем сличения «показаний» soft-ice от базового адреса загрузки), что ванный зловредный код, и вызыва-
с «диспетчером задач». Один из таких осуществляется API-функцией ет API-функцию SetThreadContext(),
случаев продемонстрирован на рис. 1. WriteProcessMemory(), которую на- чтобы изменения EIP вступили в си-
Смотрите, soft-ice отображает процесс личие атрибута PAGE_READ ничуть лу, после чего «размораживает»
sysrtl, но в «диспетчере задач» он… не смущает, поскольку она нали- остановленный поток посредством
отсутствует! Следовательно, это ли- чие атрибута PAGE_WRITE никак ResumeThread();
бо malware-программа, либо какой- не проверяет;  во избежание утечки ресурсов де-
нибудь хитроумный защитный меха-  с помощью все тех же процедур скрипторы процесса и потока за-
низм, построенный по root-kit-техноло- TOOLHELP32 malware-программа крываются – больше они не по-
гии. В общем – нехорошая программа, находит главный поток процесса, надобятся (хотя далеко не всякая
от которой можно ждать все что угод- получает его идентификатор, кото- malware-программа заботится о та-
но и желательно избавиться как мож- рый тут же преобразует в дескрип- ких мелочах);
но быстрее! тор. В Windows 2000 (и ее благо-  получив управление, зловредный
Д ля до с ти же ния наи больш ей родных потомках) это осуществля- код создает новый поток вызовом
скрытности malware-программа долж- ется API-функцией OpenThread(), CreateThread() и восстанавливает
на не создавать новый процесс, а внед- а в более ранних версиях прихо- исходное значение регистра EIP.
ряться в один из уже существующих, дилось прибегать к вызову недоку-
что она с успехом и делает. Класси- ментированной native-API-функции Примечание: до появления процес-
ческий алгоритм внедрения реализу- NtOpenThread(), экспортируемой соров, поддерживающих биты NX/XD,
ется так: библиотекой NTDLL.DLL. Под 9x за- предотвращающих выполнение кода в

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


безопасность
 получив идентификатор процесса жертвы, malware-про-
грамма «скармливает» его API-функции OpenProcess(),
возвращающей дескриптор процесса (или ошибку, ес-
ли у malware недостаточно прав);
 возвращенный дескриптор процесса передается
API-функции VirtualAllocEx(), выделяющей внутри про-
цесса-жертвы блок памяти требуемых размеров с атри-
бутами PAGE_EXECUTE;
 поверх выделенного блока копируется зловредный код
(который так же, как и в предыдущем случае, должен
быть полностью перемещаемым), что осуществляется
API-функцией WriteProcessMemory();
 malware-программа вызывает API-функцию
CreateRemoteThread(), передавая ей дескриптор процес-
са и указатель на стартовый адрес потока, находящий-
ся внутри блока памяти, выделенного VirtualAllocEx();
 дескриптор процесса и дескриптор удаленного пото-
ка, возвращенный CreateRemoteThread(), закрывают-
ся, а зловредный код тем временем делает все, что ему
вздумается.

Единственный недостаток, присущий последнему спо-


собу внедрения, – это требование перемещаемости кода,
Рисунок 2. Отладчик soft-ice, пытающийся определить
стартовые адреса потоков, но возвращающий вместо этого означающее, что его придется писать на Ассемблере, ис-
нечто необъяснимое пользуя только относительную адресацию, что весьма за-
труднительно.
Усовершенствованный алгоритм внедрения позволя-
ет загружать внутрь чужого процесса свою собственную
динамическую библиотеку, для чего достаточно передать
функции CreateRemoreThread() в качестве стартового ад-
реса удаленного потока адрес API-функции LoadLibraryA()
или LoadLibraryW(), а вместо указателя на аргументы –
указатель на имя загружаемой библиотеки. API-функция
CreateRemoreThread() вызовет LoadLibraryA/LoadLibraryW
вместе с именем библиотеки, в результате чего библио-
тека загрузится в память, а управление получит проце-
дура DllMain(). Зловредная динамическая библиотека мо-
жет быть написана на любом языке – хоть на C/C++, хоть
на DELPHI, хоть… на Visual Basic, что значительно расши-
ряет круг потенциальных malware-писателей, поскольку Ас-
семблер знают немногие.
Вся беда в том, что имя библиотеки должно находить-
ся в контексте удаленного процесса, а как оно там ока-
Рисунок 3. Process explorer успешно определил стартовые жется?! Существует два пути: самое простое, но не самое
адреса двух «честных» потоков, но споткнулся
о «нечестный» поток умное, это выделить блок памяти вызовом VirtualAllocEx()
и скопировать туда имя через WriteProcessMemory(), но для
стеке и куче, malware-программы обычно выделяли в целевом этого процесс должен быть открыт с флагом «виртуальные
процессе регион памяти с атрибутами PAGE_READWRITE, а операции» (PROCESS_VM_OPERATION), прав на которые
теперь – PAGE_EXECUTE_READWRITE, что, впрочем, слиш- у malware-программы может и не быть.
ком заметно, поэтому грамотные malware-писатели выде- Выручает тот фак т, что библиотеки NTDLL.DLL
ляют блок с атрибутами PAGE_EXECUTE, что никак не пре- и KERNEL32.DLL во всех процессах проецируются по оди-
пятствует функции WriteProcessMemory() записывать туда наковым адресам. Получив базовый адрес загрузки
зловредный код. NTDLL.DLL или KERNEL32.DLL с помощью LoadLibrary(),
Описанный алгоритм работает на всем зоопарке опера- malware-программа сканирует свое собственное адресное
ционных систем, но довольно громоздок и сложен в реали- пространство на предмет наличия ASCIIZ-строки, совершен-
зации, поэтому malware-программы, ориентированные толь- но уверенная в том, что в удаленном процессе эта строка
ко на поражение NT, предпочитают создавать удаленный окажется расположенной по тому же самому адресу. Оста-
поток API-функции CreateRemoteThread(), при этом после- ется только переименовать зловредную динамическую биб-
довательность выполняемых ею действий выглядит так: лиотеку в эту самую строку. Кстати, приятным побочным

50
безопасность
эффектом такого алгоритма становится
автоматическая генерация псевдослу-
чайных имен (если, конечно, malware-
программа не будет использовать пер-
вую попавшуюся ASCIIZ-строку).
Обобщив сказанное, мы получаем
следующий план:
 выбрав идентификатор процес-
са-жертвы, malware-программа
«скармливает» его API-функции
OpenProcess(), возвращающей де-
скриптор процесса (или ошибку, ес-
ли у malware-программы недостаточ-
но прав);
 определив базовый адрес загруз-
ки NTDLL.DLL или KERNEL32.DLL,
malware-программа ищет подходя-
щую ASCIIZ-строку, переименовы-
вая свою, заранее созданную, дина-
мическую библиотеку;
 определив а дрес API-функ-
Рисунок 4. Определение стартового адреса потока с помощью отладчика OllyDbg
ции LoadLibrar yA / LoadLibrar yW,
malware -программа перед ает его API - функции LoadLibraryA()/LoadLibraryW() – этот поток создан malware-
CreateRemoteThread() вместе с указателем на имя биб- программой или чем-то сильно на нее похожим. Вот тут-
лиотеки, которую необходимо загрузить внутрь целево- то и начинается самое интересное! Ни soft-ice, ни process
го процесса; explorer Марка Руссиновича определять стартовые адре-
 дескриптор процесса и дескриптор удаленного пото- са не умеют (хоть и пытаются). Они очень часто ошибают-
ка, возвращенный CreateRemoteThread(), закрываются, ся, особенно при работе с потоками, созданными malware-
а зловредный код, расположенный в DllMain(), делает программами.
все что ему вздумается. Давайте напишем «макетную» программку, создаю-
щую поток тем же самым методом, что и malware-програм-
Вот три основных алгоритма внедрения в атакуемый мы, и попробуем обнаружить факт «вторжения» при помо-
процесс, которыми пользуется порядка 90% всех malware- щи подручных утилит. Предельно упрощенный исходный
программ. текст «макетника» выглядит так:

По следам malware, Листинг 1. «Макетная» программа va_thread.c,


создающая поток тем же самым методом, что и malware
или Как обнаружить внедрение
Если количество процессов в системе вполне предсказуе- // код потока, который ничего не делает, а только мотает цикл
thread(){while(1);}
мо, то потоки многократно создаются/уничтожаются в ходе
выполнения легальных программ, и вопрос «сколько пото- main()
{
ков должна иметь «стерильная» программа» лишен смысла. void *p; // переменная многоцелевого использования
Достаточно открыть «диспетчер задач» и, некоторое вре-
// создаем «честный» поток
мя понаблюдав за колонкой «потоки», прийти в полное от- CreateThread(0,0,(void*)&thread,0x999,0,&p);
чаяние. Но… если присмотреться повнимательнее, можно
// создаем «нечестный» поток так, как это делает malware
обнаружить, что потоки, созданные malware-программами, // выделяем блок памяти из кучи, копируем туда
значительно отличаются от всех остальных. // код потока и вызываем CreateThread
p = VirtualAlloc(0, 0x1000, MEM_COMMIT, ↵
При внедрении malware-программы по двум первым PAGE_EXECUTE_READWRITE);
сценариям зловредный код располагается в блоках памяти, memcpy(p,thread,0x1000);CreateThread(0,0,p,0x666,0,&p);
выделенных VirtualAllocEx() и имеющих тип MEM_PRIVATE,
в то время как нормальные исполняемые файлы и дина- // ждем нажатия на любую клавишу
getchar();
мические библиотеки загружаются в блоки памяти типа }
MEM_IMAGE. При внедрении по третьему сценарию зло-
вредный код как раз и попадает в такой блок, но стар- Компилируем с настройками по умолчанию. В случае
товый адрес его потока совпадает с адресом функции MS VC++ командная строка выглядит так:
LoadLibraryA() или LoadLibrayW(), а указатель на аргумен-
ты содержит имя зловредной библиотеки. cl.exe va_thread.c
Таким образом, алгоритм обнаружения вторжения сво-
дится к определению стартовых адресов всех потоков, и ес- и запускаем. Загрузка процессора (даже на двухпроцессор-
ли он лежит внутри MEM_PRIVATE или совпадает с адресом ной машине!) сразу подпрыгивает до 100%, но так и долж-

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


безопасность
но быть, поскольку мы создаем два потока, мотающих бес- нечто очень интересное (см. рис. 4), а именно – два двой-
конечный цикл, один из которых «честный», а другой «зло- ных слова: 666h и 520000h. Первое из них напоминает ар-
вредный» (имитирующий malware-программу). Плюс глав- гумент, переданный «нечестному» потоку (см. листинг 1),
ный поток приложения, ожидающий нажатия на клави- а по второму расположена функция, мотающая бесконеч-
шу, по которой происходит завершение программы. Ито- ный цикл, весьма напоминающая нашу функцию thread().
го три потока. Обратившись к карте памяти («View → Memory»), мы убе-
Загружаем soft-ice и нажимаем <CTRL-D>, дожидаясь димся, что этот адрес принадлежит региону MEM_PRIVATE,
его вызова, после чего даем команду: выделенному VirtualAlloc(). Аналогичным образом опреде-
ляются стартовые адреса и двух других потоков.
THREAD x va_thread Свершилось! Мы научились определять подлинные
стартовые адреса «честных» и «нечестных» потоков вмес-
для отображения детальной информации о потоках и смот- те с переданным им указателем на аргументы. Однако ис-
рим на полученный результат (см. рис. 2). Да! Тут есть пользовать для этих целей OllyDbg не слишком удобно. По-
на что посмотреть! токов в системе много, и пока их все вручную переберешь…
Стартовый адрес первого потока (Start EIP) определен рабочий день давно закончится и солнце зайдет за гори-
как KERNEL32!SetUnhandledExceptionFilter+001 (77E878C1h), зонт. Вообще-то можно написать простой скрипт (OllyDbg
а двух остальных – KERNEL32!CreateFileA+00C3 (77E92C50h), поддерживает скрипты), но при этом отладчик придется
что вообще ни в какие ворота не лезет. всюду таскать за собой, что напрягает. Лучше (и правиль-
Отбросив бесполезный soft-ice в сторону, обратимся нее!) создать свой собственный сканер, тем более что он
к process explorer. Щелкнув правой клавишей мыши по про- легко укладывается в сотню строк и на его разработку уй-
цессу «va_thread» (или нажав <SHIFT-F10>, если мыши дет совсем немного времени.
под рукой нет), идем в «Properties» и открываем вкладку Полный исходный текст содержится в файле ProcList.c,
«Threads». Что мы видим? Process explorer корректно опре- находящемся на сайте журнала www.samag.ru в разделе
делил адреса двух потоков (см. рис. 3): va_thread+0x1405 «Исходный код», а здесь для экономии места приводятся
(основной системный поток – если заглянуть дизассемб- лишь ключевые фрагменты.
лером по этому адресу, мы обнаружим точку входа в файл Но прежде чем углубляться в теоретическую дискуссию,
va_thread.exe) и va_thread+0x1000 («честный» поток, создан-проверим сканер в работе. Наберем в командой строке:
ный вызовом CreateThread(0,0,(void*)&thread,0x999,0,&p) –
это следует из того, что по адресу va_thread+0x1000 рас- proclist.exe > out
положена процедура thread). Но вот вместо стартового ад-
реса третьего, «нечестного» потока, process explorer вы- и загрузим образовавшийся файл out в любой тексто-
дал какую-то ерунду, «засунув» его внутрь KERNEL32.DLL, вой редактор (например, встроенный в FAR). Нажмем
а точнее – KERNEL32.DLL + B700h, где его заведомо не мо- <F7> (search) и введем имя интересующего нас процесса
жет быть. («va_thead.exe»). Запомним его идентификатор (в данном
Если бы process explorer ошибался только на «нечес- случае равный 578h) и, снова нажав <F7>, введем его
тных» потоках, он вполне бы сгодился для определения для поиска принадлежащих ему потоков. Вот они, пере-
malware-программ, но, увы, он ошибается слишком часто, численные в листинге 2, находятся рядом.
в том числе и на легальных потоках, созданных операци-
онной системой или ее компонентами. Листинг 2. Фрагмент отчета сканера proclist.exe,
определяющего стартовые адреса всех потоков вместе
Исследования, проведенные мной, показали, что истин- с типами блоков памяти
ный стартовый адрес потока лежит на дне пользователь-
LoadLibraryA at : 79450221h
ского стека во втором или третьем двойном слове (счи- LoadLibraryW at : 794502D2h
тая от единицы), а следом на ним идет указатель на аргу- -----------------------------------------------------
szExeFile : va_thread.exe
менты, в чем легко удостовериться с помощью отладчи- cntUsage : 0h
ка OllyDbg. th32ProcessID : 578h
Запустив отладчик, в меню «File» выбираем «Attach» …
--thr------------------------------------------------
и подключаемся к процессу «va_thread.exe», после чего th32ThreadID : 5E0h
открываем окно «Threads» (в меню «View») и видим не три, th32OwnerProcessID : 578h

а целых четыре потока! Все правильно – четвертый поток handle : 3D8h
создан отладчиком для своих нужд. Это единственный по- ESP : 0012FD30h
ток, чье поле entry (точка входа) не равно нулю. Старто- start address : 00401595h
point to args : 00000000h
вые адреса трех остальных потоков OllyDbg определить type : MEM_IMAGE
не смог, предоставив нам возможность сделать это само- [0012FFF0h: 00000000 00000000 00401595 00000000]
--thr------------------------------------------------
стоятельно.
th32ThreadID : 608h
Дважды щелкнув мышью по любому из потоков, мы th32OwnerProcessID : 578h
попадаем внутрь его «закромов». Отладчик обновляет со- …
handle : 3D8h
держимое регистров, окно CPU, дамп памяти и окно сте- ESP : 0051FFB4h
ка, которое нас интересует больше всего. Прокручиваем start address : 00401000h
мышью ползунок до самого конца и обнаруживаем на дне point to args : 00000999h

52
безопасность
type : MEM_IMAGE ти говоря, считывать контекст можно и без остановки пото-
[0051FFF0h: 00000000 00401000 00000999 00000000] ка. На Windows 2000 (и ее потомках) это делается так (более
--thr------------------------------------------------
th32ThreadID : 5C8h ранние версии требуют использования native-API-функции
th32OwnerProcessID : 578h NtOpenThread() и, поскольку доля таких систем сравнитель-

handle : 3D8h
ного невелика, здесь они не рассматриваются):
ESP : 0062FFB4h
start address : 00520000h Листинг 4. Фрагмент кода, считывающего значение ESP
point to args : 00000666h потока с идентификатором thr.th32ThreadID
type : MEM_PRIVATE
[0062FFF0h: 00000000 00520000 00000666 00000000] HANDLE ht;
CONTEXT context;
context.ContextFlags = CONTEXT_CONTROL;
Первые два потока находятся внутри блоков MEM_IMAGE,
// преобразуем идентификатор потока в дескриптор
и ни у одного из них стартовые адреса не совпадают с адре- ht = OpenThread(THREAD_GET_CONTEXT, 0, thr.th32ThreadID);
сами функций LoadLibraryA()/LoadLibraryW(), следовательно,
// считываем регистровый контекст
это «честные» потоки, созданные легальным путем. А вот GetThreadContext(ht,&context);
третий поток лежит внутри региона MEM_PRIVATE, выде-
// закрываем дескриптор
ленного API-функцией VirtualAlloc(). Значит, это «нечест- CloseHandle(ht);
ный» поток, и мы не бьем тревогу только потому, что сами
же его и создали. Заметим, что API-функция OpenThread() не входит
Теперь, как было обещано, обсудим технические детали. ни в заголовочные файлы, ни в библиотеку KERNEL32.LIB,
Прежде всего нам потребуется получить список потоков, поставляемую вместе с компилятором Microsoft Visual C++
имеющихся в системе. Это можно сделать как документиро- 6.0, поэтому, необходимо либо скачать свежий Platform SDK
ванными средствами через TOOLHELP32, так и недокумен- (а это очень-очень много мегабайт), либо загружать ее ди-
тированной native-API-функций NtQuerySystemInformation(), намически через GetProcAddress(), либо преобразовать
на которой TOOLHELP32, собственно говоря, и осно- KERNEL32.DLL в KERNEL32.LIB (линкер unilink от Юрия Ха-
ван. Конечно, если она перехвачена malware-программой, рона это сделает автоматически).
мы никогда не увидим зловредных потоков, но техника Зная идентификатор процесса, владеющий данным по-
обнаружения/снятия перехвата – это тема отдельной ста- током (thr.th32OwnerProcessID), мы можем открыть его API-
тьи, пока же придется ограничиться тем, что есть (на вся- функцией OpenProcerss(), получив доступ к его адресному
кий случай сравните показания TOOLHELP32 c командой пространству (если, конечно, у нас на это есть права). Откры-
«THREAD» отладчика soft-ice, вдруг обнаружатся какие-то вать мы будем с флагами PROCESS_QUERY_INFORMATION
различия). (просмотр виртуальной памяти) и PROCESS_VM_READ
Короче, список потоков в простейшем случае получа- (чтение содержимого виртуальной памяти).
ется так: Следующий шаг – определение дна пользовательско-
го стека. Передав API-функции VirtualQueryEx() значение
Листинг 3. Фрагмент кода, ответственный за перечисление ESP, полученное из регистрового контекста, мы узнаем
всех имеющихся потоков
базовый адрес выделенного блока (mbi.BaseAddress) и его
#include <stdio.h> размер в байтах (mbi.RegionSize). Путем алгебраического
#include <windows.h>
#include <tlhelp32.h> сложения базового адреса с его длиной мы получим ука-
затель на первый байт памяти, лежащий за концом стека.
print_thr(THREADENTRY32 thr)
{ Отступив на несколько двойных слов назад (например, на
printf("cntUsage : %Xh\n",thr.cntUsage); четыре), нам остается только прочитать его содержимое
printf("th32ThreadID : %Xh\n",thr.th32ThreadID);
printf("th32OwnerProcessID : ↵ API-функцией ReadProcessMemory().
%Xh\n",thr.th32OwnerProcessID);
printf("tpBasePri : %Xh\n",thr.tpBasePri); Листинг 5. Фрагмент кода, определяющий положение
printf("tpDeltaPri : %Xh\n",thr.tpDeltaPri); дна стека и считывающий байт GET_FZ с его конца
printf("dwFlags : %Xh\n",thr.dwFlags); (в которых хранится стартовый адрес потока)
}
#define GET_FZ 4 // на сколько двойных слов отступать
main() DWORD buf[GET_FZ];
{ DWORD x; HANDLE hp;
HANDLE h; THREADENTRY32 thr; int a; MEMORY_BASIC_INFORMATION mbi;
// создаем «слепок» потоков // открываем процесс, владеющий данным потоком
h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); hp = OpenProcess(PROCESS_VM_READ| ↵
PROCESS_QUERY_INFORMATION,0,thr.th32OwnerProcessID);
// перебираем все потоки один за другим
thr.dwSize = sizeof(THREADENTRY32); ↵ // определяем параметры блока памяти, на который
a = Thread32First(h, &thr); // указывает регистр ESP
if (a && print_thr(thr)) ↵ VirtualQueryEx(hp, (void*)context.Esp, &mbi, sizeof(mbi));
while(Thread32Next(h, &thr)) print_thr(thr);
} // вычисляем положение дна стека
x = (DWORD) mbi.BaseAddress + mbi.RegionSize;
Теперь нам необходимо прочесть контекст каждого // читаем GET_FZ слов со дна стека в буфер buf
из потоков, получив значение регистра ESP, указывающего ReadProcessMemory(hp,(char*)x-GET_FZ*sizeof(DWORD), ↵
buf,GET_FZ*sizeof(DWORD),&a);
куда-то внутрь стека (конкретно куда, не суть важно). Кста-

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


безопасность
// закрываем дескриптор процесса еще можно хоть как-то бороться, например, просканиро-
CloseHandle(hp);
вать все MEM_PRIVATE-блоки и попытаться найти в них
Ввиду того, что положение стартового адреса относи- машинный код, поискать в стеке адреса возврата, смот-
тельно дна стека непостоянно, применяется следующий эв- рящие в MEM_PRIVATE, и т. д., гораздо хуже, что сущест-
ристический алгоритм: если третье двойное слово со дна вует возможность внедрения в атакуемый процесс без со-
стека равно нулю, то стартовый адрес потока находится здания нового потока!
во втором двойном слове, а указатель на аргументы – в пер- Самое простое, что только приходит в голову, – прочи-
вом, в противном случае стартовый адрес находится в тре- тать текущий EIP одного из потоков атакуемого процесса,
тьем двойном слове, а указатель на аргументы – во втором. сохранить лежащие под ним машинные команды, после чего
Конечно, предложенная схема не очень надежна: в некото- записать крохотный код, вызывающий LoadLibrary() для за-
рых случаях стартовый адрес находится в первом двойном грузки зловредной библиотеки в текущий контекст и уста-
слове, а бывает (хоть и редко), что на дне стека его вооб- навливающий таймер API-функций SetTimer() для переда-
ще нет. В общем, этот вопрос еще требует дальнейших ис- чи зловредному коду управления через регулярные проме-
следований и тщательной проработки, а пока воспользу- жутки времени. Сделав это, malware-программа восстанав-
емся тем, что дают: ливает оригинальные машинные команды, и процесс про-
должает выполняться как ни в чем не бывало.
Листинг 6. Декодирование содержимого буфера buf и определение При желании можно обойтись и без таймера. Доста-
стартового адреса потока эвристическим методом
точно воспользоваться асинхронными сокетами. В отли-
DWORD st_adr; чие от синхронных, они не блокируют выполнение теку-
// определяем стартовый адрес потока щего потока, а немедленно отдают управление, вызывая
st_adr = ((buf[GET_FZ-3])?buf[GET_FZ-3]:buf[GET_FZ-2]); call-back-процедуру при наступлении определенного собы-
// выводим стартовый адрес на экран или DEADBEEF, тия (например, при подключении удаленного пользователя
// если стартовый адрес определить не удалось по back-door-порту, открытого malware-программой).
printf("start address : ↵
%08Xh\n",st_adr?st_adr:0xDEADBEEF); Также malware-программа может внедриться в проце-
дуру диспетчеризации сообщений или подменить адрес
// определяем указатель на аргументы потока
// и выводим его на экран оконной процедуры для главного окна GUI-приложения.
printf("point to args : ↵ Во всех этих случаях зловредный код будет выполняться
%08Xh\n", ↵
((buf[GET_FZ-3])?buf[GET_FZ-2]:buf[GET_FZ-1])); в контексте уже существующего потока, и malware-програм-
ма сможет обойтись без создания нового. Такие способы
Остается последнее – «скормить» полученный старто- внедрения предложенный сканер не обнаруживает. Прав-
вый адрес потока API-функции VirtualQueryEx() и опреде- да, это не сильно ему мешает, поскольку в живой природе
лить тип региона, к которому он принадлежит (MEM_IMAGE, подобных malware-программ до сих пор замечено не было.
MEM_PRIVATE или MEM_MAPPED): Универсальных способов борьбы против них нет. Единс-
твенное, что можно предложить, – периодически выводить
Листинг 7. Фрагмент кода, определяющий тип блока памяти, список динамических библиотек, и если вдруг среди них по-
к которому принадлежит стартовый адрес потока
явилась новая – это сигнал! Но если malware-программа от-
// определение типа региона памяти, кажется от загрузки DLL, размещая свой код в свободном
// к которому принадлежит стартовый адрес
VirtualQueryEx(hp, (void*)st_adr, &mbi, sizeof(mbi)); месте (например, в конце кодовой секции), мы опять про-
играем войну.
// декодирование полученного результата
// и вывод его на экран Впрочем, не стоит пытаться решить проблемы задол-
printf("type : %s\n", го до их появления. Возможно, завтра случится глобаль-
(mbi.Type==MEM_IMAGE)?"MEM_IMAGE":
(mbi.Type==MEM_MAPPED)?"MEM_MAPPED": ное оледенение (землетрясение, наводнение), мы все ум-
(mbi.Type==MEM_PRIVATE)?"MEM_PRIVATE":"UNKNOWN"); рем, и бороться с malware-программами станет некому
и незачем.
Объединив все фрагменты мозаики воедино, мы полу-
чим вполне работоспособный сканер, показавший при тес- 1. OllyDbg – замечательный и абсолютно бесплатный отладчик,
тировании на большой коллекции malware-программ впол- собравший вокруг себя целое сообщество поклонников: http://
не удовлетворительный результат – ни одного ложного сра- www.ollydbg.de;
батывания и до 90% обнаруженной «заразы» (естествен- 2. soft-ice – 3 апреля 2006 Compuware прекратила продажу
но, речь идет только о malware-программах, внедряющихся DriverStudio, похоронив soft-ice и отрезав все пути его легаль-
в уже существующие процессы, а не создающих новый). ного приобретения, тем не менее прежние версии до сих пор
можно найти в Сети, в том числе и в магазинах, торгующих
Заключение лицензионными дисками, завалявшимися на складе.
Описанный метод выявления вторжения обладает рядом 3. process explorer – в июне 2006 года фирма Марка Руссино-
существенных недостатков, которые я даже и не пытаюсь вича была куплена Microsoft и хотя Марк обещает, что его
скрывать. Первое и самое неприятное – стартовый адрес утилиты останутся бесплатными, скорее всего они будут
потока попадает на дно пользовательского стека лишь бесплатны только для легальных пользователей Windows,
по «недоразумению». Никому он там не нужен, и всякий так что спешите скачивать: http://www.sysinternals.com/Utilities/
поток может смело его обнулить или подделать. Но с этим ProcessExplorer.html.

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

Пират виртуального мира


«Перевоспитавшийся» хакер Кевин Митник решает новые головоломки. Теперь он защищает
компании от былых коллег.
в кино суперхакер действительно сни-
мался, когда вышел из тюрьмы после
пятилетней отсидки и должен был вы-
полнять жестокое предписание влас-
тей – не пользоваться компьютером, не
работать техническим консультантом и
даже не писать о компьютерных техно-
логиях без специального разрешения.
Похоже, что о прошлом Кевин Митник
не слишком сожалеет. Впрочем, он рас-
сказывает о нем так, словно взломы
самых известных компаний совершал
не он, а скажем, его младший братик
– хулиган, но такой милашка: «Я когда-
то был шутником, любил разыгрывать,
любил проделки. Я помню случай, ког-
да я получил доступ к компьютеру те-
лефонной компании. Я нашел возмож-
ность проникнуть в телефонный спра-
вочник Род-Айленда. И когда кто-то за-
прашивал информацию, они выходили
на меня. Представляете? Мне 17 лет
всего было. Мне понравилась эту шут-
ка. Но самый лучший розыгрыш по-
лучился с Макдональдсом. Я связал-
ся с частотой, на которой переговари-
вались водители, и ловил все их сооб-
щения. Представляете, звонил и гово-
рил: «Такой-то клиент просит доставить
обед…». Много шутил, в общем».
Одну историю из своей буйной мо-
лодости 43-летний Митник рассказал
подробно, но не потому, что хотел пох-
вастаться своей ловкостью, а в назида-
ние тем, кто может попасться на удоч-
ку его коллег-хакеров: «Еще в 1992 го-
ду я скрывался от ФБР, от правитель-

К
огда-нибудь историю жизни Ке- гим Сильвером или капитаном Воро- ства и от прочих правоохранительных
вина Митника превратят в ки- бьем. Такой необыкновенный случай органов США. Я работал в Денвере
носценарий. Не знаю, как назо- представился участникам конгресса в юридической компании под именем
вут фильм, но жанр будет, конечно, де- Interop Moscow, который этим летом Эрик Вайс. Почему Эрик Вайс? Пото-
тектив. Что-то вроде «Пиратов Кариб- впервые прошел в России. Его выступ- му что это реальное имя Гарри Гудини.
ского моря». Только вместо «сундука ление слушали затаив дыхание и за- Мой друг занимался телефонами «Мо-
мертвеца» – промышленные секреты держали дорогого московского гостя торола», и я как хакер хотел узнать, что
и счета в банках, а вместо каравелл на целый час. А мне к тому же повез- там за технология. Я решил, что это
под черными парусами – сверхмощ- ло взять у знаменитого хакера неболь- очень передовая технология. Это бы-
ные компьютеры с выходом в глобаль- шое интервью. ло 15 лет назад, не забывайте. Однаж-
ную Сеть. Хакеры – герои нашего вре- ды я пораньше ушел из офиса и поз-
мени, овеянные романтикой не мень- Милый лжец вонил в «Моторолу» по телефону бес-
ше, чем морские разбойники прошло- На лекцию господин Митник вышел платной информации. Я сказал: «При-
го. Увидеть живьем Кевина Митника – так, как выходит к публике актер, уве- вет, я Эрик. Мне нужен менеджер про-
все равно что пообщаться с одноно- ренный в своей популярности. Кстати, екта по продаже сотовых телефонов».

56
человек номера
Мне ответили: «Этим занимается та- считают: со мной это не случится, я не шей же компании и хочет создать ва-
кой-то отдел в Иллинойсе». Я попро- такой дурак, чтобы выдавать пароль! шу учетную запись! Бойтесь, вы полу-
сил: «Дайте мне телефон этого отде- Я не буду пристегиваться в машине, чили по электронной почте сообщение
ла». Позвонил туда, опять объяснил: потому что я хороший водитель. Ава- с приложением якобы от Windows, вам
«Я Эрик, мне нужен менеджер проек- рии случается только с другими!». предлагается это приложение устано-
та по распространению мобильных те- вить. Как только ваши данные входят
лефонов». Меня отфутболивали к раз- Добрый советчик в систему, вы уже раскрыли свои ко-
ным сотрудникам раз восемь и в кон- Собственно, лекции Кевин Митник чи- ординаты! Бойтесь и такой «шутки»:
це концов направили к нужному чело- тает с одной целью – предупредить лю- «Вы можете также получить е-mail с ги-
веку. Но менеджер оказалась в отпуске, дей об опасности и вооружить знания- перссылкой на сайт какой-то компании,
мне вежливо рассказали: «Она вернет- ми против мошенников. Звучит стран- в услугах которой, как известно хакеру,
ся через две недели, но если вы хотите, но, ведь мы знаем, что сам лектор не- вы нуждаетесь. Стоит нажать на ссы-
чтобы вам помогли, звоните Алише». давно был «в стане врага». Но с другой лочку – и специальная программа свя-
Конечно, я позвонил Алише! И сказал: стороны, все логично: никто не станет зывает вас с атакующим».
«Я Эрик из Департамента по распро- сомневаться в компетентности главы Вот какой мудрый совет дает Ке-
странению телефонов. Такая-то уеха- Mitnick Security Consulting. вин Митник бизнесменам, которые хо-
ла в отпуск?» – «Да, уехала». «Какая Похоже, Кевина просто шокирует тят избежать взлома: «Я бы рекомен-
жалость! Прежде чем уезжать, она мне доверчивость его сограждан: «Как ду- довал следующее. Компании по-раз-
должна была выслать код источника». – маете, сколько людей согласились от- ному разрабатывают свою политику
«И как, выслала?» – «Нет, она мне ни- дать свой пароль после телефонно- безопасности. Одни создают ее с по-
чего не выслала, может быть, вы мне го звонка якобы от Налоговой служ- мощью своих сотрудников, другие на-
поможете?» – «Да, а какая версия нуж- бы США? 25 из ста. На рождество сис- нимают кого-то со стороны. Во втором
на?» – «Я говорю: давайте новую вер- темные администраторы, пользовате- случае есть опасность, что у людей не
сию». «Хорошо, сейчас гляну в систе- ли, сотрудники компании выдали свои будет мотивации следовать правилам.
му». Я помог Алише разобраться с сис- пароли за мелкие сувениры. Из 10 че- Если же сотрудники компании будут
темой, дал ей свой IP-адрес и сказал: ловек семь отдали свои пароли. Вы мо- сами разрабатывать правила безопас-
«Попытайтесь связаться с ним». Она жете создавать систему безопаснос- ности, то они начнут более тщательно
связалась два или три раза, но что-то ти, и ничего не помогает. Люди сов- их выполнять. Они будут думать так:
не срабатывало. Алиша забеспокои- сем не чувствуют опасности! Социаль- «Раз я участвовал в этом деле, то дол-
лась: «Эрик, здесь что-то с безопаснос- ная инженерия проще, чем несанкци- жен это как-то применять в своей рабо-
тью. Я сейчас поговорю с нашим совет- онированные попытки доступа. Обыч- те». Таким образом, вы сможете изме-
ником по безопасности». Она выясни- но преступник находит кого-то из ком- нить вашу корпоративную культуру и
ла, что надо использовать определен- пании, побуждает его войти в систе- мотивировать ваш персонал. Подумай-
ный прокси-сервер. Я сказал: «Хоро- му и проникает туда же вслед за об- те об этом. Это ведь важно для вашей
шо, давайте». И прежде чем я дошел манутым сотрудником. И хакер поч- компании, правда? Если вы наказы-
до дома, у меня уже был на компьютере ти ничем не рискует, он даже не пла- ваете своих сотрудников за невыпол-
код исходника и все остальное, просто тит за связь. Глупость и доверчивость – нение правил, это, конечно, тоже спо-
благодаря тому, что я сделал несколько качества, которыми страдают многие соб, но это не так показательно. Нуж-
звонков. Как видите, достаточно найти сотрудники компаний. Социальный ин- но, чтобы люди видели, что их работа
человека, у которого есть информация, женеринг – это самая большая пробле- приносит реальную пользу. И тогда ре-
и раскрутить его». ма в нашем гиперпространстве. Необ- зультат будет намного лучше».
К чести Кевина Митника, он тут же ходимы какие-то технологии, которые
признался, что и сам бывает обманут. защищают все звенья цепи». Этичный хакер
Последний такой случай произошел Митник рассказал о наиболее рас- Мне почему-то казалось, что Митник
с ним буквально накануне лекции, ког- пространенных способах атаки и даже не захочет давать мне интервью. Вот
да хакер возвращался из Петербурга, продемонстрировал опыт с сотовым те- если бы со мной был оператор с каме-
где тоже читал лекцию в рамках свое- лефоном. Оказывается, наши мобиль- рой… Но он посмотрел мне в глаза, ми-
го нынешнего визита в Россию. Ке- ники совершенно беззащитны перед нуту поразмышлял и сказал, что пого-
вин и его сотрудница наняли носиль- настоящим специалистом своего де- ворит, вот только минут пять побеседу-
щика, чтобы перенести вещи. У поез- ла. Похоже, американские власти были ет по телефону. Пять минут преврати-
да парень сгрузил чемоданы и подбе- правы, когда не позволяли Кевину Мит- лись в час, но неважно, потому что вот
жал к иностранцу с вопросом: «Где де- нику в тюрьме пользоваться даже не- он, Кевин Митник, и я задаю ему пер-
ньги?». Митник спросил: «Вам еще не винным лэптопом без модемной связи. вый вопрос:
заплатили?» – «Нет». Носильщик по- А если разрешали поработать на ком- – Почему вы выбрали эту профес-
лучил свои 500 рублей, исчез. И тут пьютере, сразу его уничтожали. сию?
же выяснилось, что коллега Митника Разнообразные виды социальной – Я начал изучать эту сферу мно-
уже заплатила пройдохе такую же сум- инженерии – конек Митника. Он приво- го лет назад в качестве фрикера (те-
му». Вот потому знаменитый америка- дит примеры один за другим. Бойтесь, лефонного хулигана. – О.Р.) и хакера.
нец и повторяет назидательно: «Люди если вам звонит якобы сотрудник ва- Я действовал в одиночку, мне было ин-

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


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

Кевин Митник с выступлением на конференции Interop Moscow 2006

тересно совершенствовать свою тех- определять наличие слабых мест рожными… Неосторожными! Люди
нику, воруя различные секреты, взла- в системе компьютерной безопаснос- не глупы, они беспечны.
мывая барьеры безопасности. Сей- ти. Да, это образ мышления. – Наш мир опасен – войны, конф-
час мне, как профессионалу в этой об- – Хакер – это человек, который лю- ликты, терроризм и тому подобное.
ласти, нравится помогать моим клиен- бит риск, опасность? И сфера IT – лишь отражение того,
там из сферы бизнеса, университетам, – Да, взлом – это риск, это своего что происходит в обществе. Это зер-
правительственным организациям за- рода приключение, и опасность вполне кало, вы не находите?
щищать себя от компьютерного взло- реальна. Это – добровольное принятие – Ну, в чем-то да…Что-то вроде по-
ма, потому что я действительно специ- вызова, здесь есть интрига… Да. ля боя, где надо отстреливаться. Здесь
алист, я знаю, как используются техно- – Что вам нравится в этом деле – тоже нет никаких правил. Это как «Ди-
логии взлома, как работают взломщи- уход от скучной действительности?.. кий Дикий Запад» в американской ис-
ки. Между прочим, многие люди, рабо- – Ну да, конечно! Это волнующе, тории… Это опасная работа, это опас-
тающие сегодня в области компьютер- интересно и развлекательно... Одна- ная сфера деятельности, где вы долж-
ной безопасности, по своей сути яв- ко в последнее время хакерство имеет ны защищать себя, чтобы не стать
ляются «этичными хакерами», то есть тенденцию становиться все более уг- жертвой.
используют свои «преступные» навы- рожающим для общества. Кстати, не- – Так, может быть, людям не на-
ки, чтобы зарабатывать деньги впол- давно я был в Боготе, это Колумбия, до пользоваться Интернетом, вообще
не честным способом, который одоб- и зашел на пару минут в магазин, тор- компьютерами, раз это так опасно?
ряет общество. гующий компьютерами. Там я увидел – Я так не думаю. Вы знаете, масса
– Как вы думаете, чтобы стать спе- эту женщину (Митник показал на мо- людей на рубеже 21 века не делали по-
циалистом по информационным техно- ниторе своего лэптопа фотографию), купок – потому что боялись. Феномен
логиям, нужно иметь какие-то особые у которой на шее была вот эта штука. Миллениума, знаете ли… Я не боюсь,
черты характера, таланты? Вот вам и представление людей о бе- поскольку я человек квалифицирован-
– Да нет, особый характер не тре- зопасности. Знаете, что это такое? ный и знаю как справиться с компью-
буется, ведь существует масса различ- – Нет. терными мошенниками. И могу другим
ных отраслей компьютерной безопас- – Это телефон, на дисплее которого предложить мою помощь…
ности – дизайн, инфраструктура, оцен- высвечивается пароль доступа в тече- Я открыла рот, чтобы задать следу-
ка надежности систем безопасности. ние 60 секунд. Любой может его уви- ющий вопрос. Но у Кевина заверещал
Востребованы самые различные на- деть и узнать пароль, ведь телефон ви- телефон. «СМСка пришла, – виновато
выки в конкретных вопросах. Если вы сит у нее на шее и дисплей прекрасно сообщил он мне. – Вы простите, но мне
любите компьютеры, то сами приоб- всем виден. Ну, не глупо ли? надо идти». И ушел со свежим номе-
ретаете различные навыки, повыша- – Да уж… Это опасно. ром «Системного администратора»
ете свою квалификацию. – Разумеется. Как можно выжить под мышкой. Вдруг пригодится?
– Так требуется талант или навы- в этом мире при таком легкомыслен-
ки? ном отношении? Оксана Родионова,
– И то и другое. При этом хакинг – – Вы считаете людей глупыми? фотографии предоставленны
организаторами Interop Moscow
это образ мышления, это способность – Нет, просто недостаточно осто-

58
bugtraq

Множественные уязвимости может выполнить произвольный код на целевой системе.


в Mozilla Firefox 12. Уязвимость существует из-за ошибки при обработ-
Программа: Mozilla Firefox версии до 1.5.0.5, Mozilla ке chrome: URI, которые могут ссылаться на произвольные
SeaMonkey версии до 1.0.3, Mozilla Thunderbird версии файлы и запускать их с повышенными привилегиями.
до 1.5.0.5. URL производителя: www.mozilla.com.
Опасность: Критическая. Решение: Установите последнюю версию с сайта произ-
Описание: 1. Уязвимость существует из-за ошибки при об- водителя.
работке очистки JavaScrip-ссылок на фрейм или окно. Уда-
ленный пользователь может выполнить произвольный Выполнение произвольного кода
JavaScript-код в браузере жертвы. при обработке DNS-расширений
2. Уязвимость существует из-за ошибки при обработ- в Microsoft Windows
ке очистки JavaScrip-ссылок на свойства объекта window. Программа: Windows 2000, Windows XP, Windows 2003.
navigator. Удаленный пользователь может выполнить про- Опасность: Критическая.
извольный код, если страница заменяет navigator до за- Описание: 1. Уязвимость существует из-за ошибки в про-
пуска Java. верке границ данных в Winsock API при обработке имен
3. Повреждение памяти обнаружено при обработке од- хостов. Злоумышленник может обманом заставить поль-
новременных XPCOM-событий во время использования зователя посетить злонамеренный сайт и выполнить про-
удаленного объекта таймера. Удаленный пользователь мо- извольный код на целевой системе.
жет выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки проверки гра-
4. Уязвимость существует из-за недостаточной про- ниц данных в службе DNS Client при обработке ответов от
верки прав доступа к стандартным DOM-методам объек- DNS-сервера. Удаленный пользователь может с помощью
та верхнего уровня (например, document.getElementById()). специально сформированного DNS-ответа выполнить про-
Удаленный пользователь может выполнить произвольный извольный код на целевой системе.
код сценария в браузере жертвы в контексте безопаснос- URL производителя: www.microsoft.com.
ти произвольного сайта. Решение: Установите исправление с сайта производите-
5. Уязвимость состояния операции существует при уда- ля.
лении временных JavaScript-файлов, если они используют-
ся в это время для создания нового объекта Function. Уда- Переполнение буфера
ленный пользователь может выполнить произвольный код в Microsoft Visual Basic for Applications
на целевой системе. Программа: Microsoft Works Suite 2006, Microsoft Works
6. Уязвимость существует из-за большого количества Suite 2005, Microsoft Works Suite 2004, Microsoft Visual
ошибок в JavaScript engine в механизме garbage collection Basic for Applications SDK 6.x, Microsoft Visio 2002, Microsoft
при обработке длинных строк, передаваемых методом Project 2002, Microsoft Project 2000, Microsoft Office XP,
toSource(). Удаленный пользователь может выполнить про- Microsoft Office 2000, Microsoft Access 2000.
извольный код на целевой системе. Опасность: Критическая.
7. Уязвимость существует в JavaScript-функциях, у кото- Описание: Уязвимость существует из-за ошибки проверки
рых родительский объект создан с помощью стандартного границ данных при обработке свойств документа. Удален-
конструктора Object(), который может быть переопределен ный пользователь может с помощью специально сформи-
в сценарии. Удаленный пользователь может выполнить код рованного документа вызвать переполнение буфера и вы-
с повышенными привилегиями, если конструктор Object() полнить произвольный код на целевой системе.
возвращает ссылку на привилегированный объект. URL производителя: www.microsoft.com.
8. Уязвимость существует из-за ошибки при обработке Решение: Установите исправление с сайта производите-
PAC (Proxy AutoConfig) сценария. Злонамеренный PAC прок- ля.
си сервер может выполнить произвольный сценарий в бра-
узере жертвы с повышенными привилегиями. Переполнение буфера в службе Server
9. Уязвимость существует из-за ошибки в сценариях, в Microsoft Windows
наделенных привилегиями UniversalBrowserRead. Удален- Программа: Windows 2000, Windows XP, Windows 2003.
ный пользователь может повысить свои привилегии на Опасность: Критическая.
системе. Описание: Уязвимость существует из-за ошибки провер-
10. Уязвимость существует из-за ошибки в конструк- ки границ данных при обработке RPC-трафика. Удаленный
ции XPCNativeWrapper(window).Function(...). Удаленный пользователь может послать специально сформированный
пользователь может выполнить произвольный код сцена- пакет на порт 139/TCP или 445/TCP и выполнить произволь-
рия на целевой системе в контексте безопасности произ- ный код на целевой системе.
вольного сайта. URL производителя: www.microsoft.com.
11. Повреждение памяти обнаружено при вызове функ- Решение: Установите исправление с сайта производите-
ции nsListControlFrame::FireMenuItemActiveEvent(); обнару- ля.
жено также несколько потенциальных переполнений буфе-
ра и ошибок повреждения памяти. Удаленный пользователь Составил Александр Антипов

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


web

Ajax. Новое слово в разговоре


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

Алексей Мичурин
Разговоры о новой веб-технологии Ajax начались в кругах специалистов примерно год назад,
хотя ждали её уже давно. А после того, как Ajax взяли на вооружение такие веб-гиганты,
как google и gmail, технологией стали интересоваться практически все: от руководителей
крупных проектов до начинающих веб-мастеров.

М
ожно ли описать целую техно-  DOM (Document Object Model) – Это в корне меняет дело. DHTML
логию в журнальной статье? формальное представление HTML- способен «оживить» страницу, но он
Наверно, нет. Но нам повез- или XML-документа, позволяющее может оперировать только с теми дан-
ло, ведь... управлять его элементами: созда- ными, которые были загружены вмес-
вать, удалять, изменять свойства. те со страницей. Ajax позволяет раз-
...Ajax – это не технология  JavaScript – язык – двигатель пер- работчику обратиться к серверу, по-
Удивлены? Давайте разберёмся, из че- вых двух технологий. лучить новые данные и, пользуясь
го же складывается Ajax. уже существующими возможностями
Это смесь технологий, которые уже Знакомое сочетание? Конечно! DHTML, интерпретировать эти данные
всем хорошо знакомы: Это пресловутый DHTML. Ajax допол- и изменить страницу. При этом пере-
 CSS (Cascading Style Sheets) – на- няет DHTML всего одной возможнос- загрузки страницы не происходит, но-
бор средств для описания внешне- тью – обращаться к серверу по HTTP вые данные «подкачиваются» на уже
го вида HTML-конструкций. и обрабатывать полученный запрос. открытую страницу.

60
web
Эту новую возможность должно отражать и само на- Результат разбора ответа:<br>
время: <b id='time'>null</b><br>
звание Ajax – сокращение от Asynchronous JavaScript строка запроса: <b id='qstring'>null</b><br>
and XML. x-квадрат: <b id='xsq'>null</b>
</form>
Описать CSS, DOM и JavaScript в одной статье, ко- </body>
нечно, невозможно, но вот рассмотреть то, что отлича- </html>
ет DHTML от Ajax, вполне реально. Этим мы и займёмся.
Для рассмотрения предлагаю конкретный пример. Это статическая HTML-страница, которую я назвал
незамысловато – index.html. Как видите, она почти пол-
Ajax-приложение ностью состоит из JavaScript-кода. Это и не удивительно,
Давайте рассмотрим приложение, которое вычисляет квад- ведь мы создаём не просто HTML-страницу, а Ajax-при-
раты целых чисел, а заодно выводит дополнительную от- ложение.
ладочную информацию. Сразу после загрузки страницы Небольшая HTML-составляющая кода не блещет ника-
пользователь увидит следующее (см. рис. 1). кими изысками. Все элементы, которые будут изменять-
После того, как он введёт число и нажмёт на кнопку, ся, я выделил жирным шрифтом (тег <b>) и назначил им
страница будет скорректирована (без перезагрузки) и при- уникальные идентификаторы, по которым буду на них ссы-
мет следующий вид (см. рис. 2). латься. Для наглядности, сразу после загрузки страницы
Давайте посмотрим на код «с высоты птичьего полё- (до выполнения Ajax-запросов) все динамические элемен-
та». Он складывается из двух составляющих: клиентской, ты заполнены строками «null». Это видно на рис. 1.
загружаемой в браузер, и серверной, обрабатывающей
Ajax-запросы. Ajax-запросами, для краткости, я буду назы- На стороне сервера
вать запросы, сгенерированные средствами Ajax. Конечно, На стороне сервера я предлагаю разместить PHP-сцена-
с точки зрения сервера, это обычные HTTP-запросы. рий следующего содержания:

На стороне клиента <?


header('Content-type: text/xml');
Приведу сразу весь код: header('Cache-Control: no-cache');
echo date("M d Y H:i:s\n", time());
echo ('<font color="red">'.$_SERVER['REQUEST_URI']. ↵
<html> "</font>\n");
<head><title>Test Ajax</title></head> $x=intval($_REQUEST['x']);
<script> $xx=$x*$x;
function set_inner(e, v) { echo "$x&sup2;=$xx\n";
b=document.getElementById(e); ?>
b.innerHTML=v;
}
function process_response(r) {
set_inner('step', r.readyState); Он будет обслуживать запросы, формируемые Ajax-
if (r.readyState == 4) { сценарием.
set_inner('status', r.status);
text = r.responseText; Думаю, что даже человек, не знакомый с PHP, легко раз-
strings = text.split('\n'); берётся в том, что делает этот сценарий. Сперва он пере-
set_inner('time', strings[0]);
set_inner('qstring', strings[1]); даёт два HTTP-заголовка:
set_inner('xsq', strings[2]);
} Content-type: text/xml
} Cache-Control: no-cache
function prepare_http_object() {
r = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, Opera ... Первый из них весьма важен. Некоторые браузеры
r = new XMLHttpRequest(); не обрабатывают HTTP-ответ, если MIME-тип не text/xml.
} else if (window.ActiveXObject) { // IE
r = new ActiveXObject("Microsoft.XMLHTTP"); Эту проблему можно решить и средствами JavaScript на сто-
} роне клиента (к этому мы ещё вернёмся), но «бережёного
return r;
} бог бережёт». Второй заголовок тоже рекомендуется до-
function setup_http_object(r) { бавлять. Он, как вы понимаете, предотвращает кэширова-
r.onreadystatechange = function() {process_response(r);};
} ние передаваемой информации.
function send_http_require(r) {
r.open('GET', 'calc.php?x=' ↵
+escape(document.frm.x.value), true);
r.send(null);
}
function do_http_rq() {
r=prepare_http_object();
setup_http_object(r);
send_http_require(r);
}
</script>
<body>
<form name="frm">
Данные для запроса:<br>
x = <input type="text" name="x" size="3">
<input type="button" value="отправить запрос"
onclick="do_http_rq();"><br>
Ход выполнения запроса: <b id="step">null</b><br> Рисунок 1. Веб-страница Рисунок 2. Веб-страница
Статус ответа: <b id="status">null</b><br> сразу после загрузки после нажатия на кнопку

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


web
После заголовка мы формируем тело ответа, которое }
return r;
состоит из трёх строк следующего вида: }

Aug 18 2006 13:09:28 Это единственное место, где мы сталкиваемся с не-


<font color="red">/ajax/calc.php?x=4</font>
4&sup2;=16 совместимостью браузеров. Все браузеры создают
объект запроса функцией XMLHttpRequest, и только
Первая – дата (по часам сервера). Вторая – строка за- Microsoft предлагает использовать альтернативный под-
проса, переданная клиентом, оформленная HTML-тегами. ход – ActiveXObject("Microsoft.XMLHTTP"). Любопытно,
Когда она будет отображаться на HTML-странице, теги бу- что при этом создаётся точно такой же объект, но должен
дут корректно интерпретированы браузером, как вы уже ви- же был Microsoft внести свой вклад.
дели на рис. 2. Точно так же можно передавать не только Обратите внимание, если браузер не поддержива-
элементарное форматирование, но и таблицы, формы, те- ет ни XMLHttpRequest, ни ActiveXObject, то наша функция
ги img и прочее. Третья строка содержит ответ на вопрос – prepare_http_object возвращает false. Эту ситуацию не пло-
параметр запроса x, возведённый в квадрат. хо было бы обработать в do_http_rq. Например так:
Обратите внимание, Ajax не делает веб-сервер более
защищённым. Он никак не расширяет возможности HTTP- function do_http_rq() {
r=prepare_http_object();
протокола. Чтобы избежать неприятностей, мы использо- if (r) {
вали функцию intval, гарантированно представляющую ар- setup_http_object(r);
send_http_require(r);
гумент в виде целого числа. } else {
Следует оговорить и ещё одну возможность, которую alert('Эта страница не может быть корректно ↵
отображена вашим браузером');
Ajax-приложения эксплуатируют очень часто (в нашем }
примере мы её не используем). Дело в том, что програм- }
мно генерировать ответ необходимо не всегда. Часто до-
статочно хранить на сервере статические файлы с данны- Я этого не сделал, только чтобы не перегружать код
ми, которые будут подгружаться по мере (и в случае) не- деталями. Здесь уместно вспомнить о том, что некоторые
обходимости. Следует только позаботиться о правильном браузеры (например Firefox 1.5 и более поздние(?)) не об-
MIME-типе, который обычно можно задать в файле .htaccess рабатывают ответы с типом, отличным от text/xml. Лучше
директивой: и надёжнее, конечно, решать эту проблему средствами сер-
вера, как мы это делали выше, но если ситуация безвыход-
AddType text/xml .xml ная, то в код следует добавить инструкции принудительно-
го корректирования MIME-типа:
После этого все файлы с расширением xml (можно вы-
брать и любое другое расширение) будут выдаваться с вер- function prepare_http_object() {
r = false;
ным типом. if (window.XMLHttpRequest) { // Mozilla, Safari, Opera ...
r = new XMLHttpRequest();
if (http_request.overrideMimeType) {
Как это всё работает http_request.overrideMimeType('text/xml');
Давайте теперь перейдём к подробному рассмотрению }
} else if (window.ActiveXObject) { // IE
JavaScript – именно он заставляет работать всю эту «ма- ...
шину».
После того как пользователь нажимает на веб-стра- Как видите, мы ус тановили MIME-тип методом
нице магическую кнопку «отправить запрос», вызывает- overrideMimeType. Для браузера Internet Explorer этого де-
ся функция do_http_rq, которая по очереди совершает три лать не надо.
основные операции: Если ваш сервер правильно настроен и выдаёт коррек-
 создаёт объект запроса (функция prepare_http_object); тный MIME-тип, то необходимости в этом дополнении, ко-
 инициализирует объект нашего запроса (функция нечно, нет вообще.
setup_http_object);
 осуществляет запрос (функция send_http_require). Настраиваем обработчик ответа
После того как объект соединения создан, его следу-
Внимательный читатель спросит: «А кто же обрабаты- ет настроить. Для этого у нас предусмотрена функция
вает результат запроса?». Давайте рассмотрим всё по по- setup_http_object. Единственное, что она делает – назнача-
рядку. ет функцию-обработчик ответа. Саму эту функцию мы рас-
смотрим ниже, а здесь коснёмся способов её указания.
Создаём объект запроса Самый простой способ – по имени (или по ссылке):
За создание объекта запроса у нас отвечает функция:
obj.onreadystatechange = function_name;
function prepare_http_object() {
r = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, Opera ... Обратите внимание, что после имени функции не следу-
r = new XMLHttpRequest(); ет указывать скобки и аргументы, иначе произойдёт обыч-
} else if (window.ActiveXObject) { // IE
r = new ActiveXObject("Microsoft.XMLHTTP"); ный вызов.

62
web
Можно задать обработчик, не создавая именованной function unclose(r) {
r.onreadystatechange = function() {};
функции: }

obj.onreadystatechange = function() { Он бы разорвал замкнутый круг взаимных зависимостей


// делаем что-то
} (разомкнул замыкание), и переменная была бы уничтоже-
на системой автоматически. Использование такого приёма,
Так мы создадим анонимную функцию и присвоим ссыл- к сожалению, не даёт никаких результатов ни на одном бра-
ку на неё свойству obj.onreadystatechange. узере. Более того, в FireFox утечка памяти происходит да-
Оба эти способа обладают одним большим недостат- же в отсутствии замыканий! Да-да, даже если использовать
ком – функция-обработчик не имеет возможности обраба- глобальные переменные, каждый вызов XMLHttpRequest()
тывать соответствующий объект запроса. Поэтому в ней, навсегда съедает половину килобайта оперативной памя-
например, невозможно оценить результат запроса, полу- ти. Очевидно, язык JavaScript ещё есть куда улучшать, ес-
чить код ошибки или тело ответа. ли он не справляется с такими простыми задачами.
Чтобы решить эту проблему, обычно применяется один Есть и ещё одна плохая новость: браузеры освобожда-
из двух приёмов. ют память (а IE и дескрипторы) только в случае закрытия
Первый – хранить объект запроса в глобальной пере- окна. Никакие переходы на другие страницы или закрытия
менной. Это очень дурная (хотя и распространённая) прак- вкладок не вызывают очистку памяти.
тика. Если во время выполнения одного запроса пользова- Всё это весьма прискорбно, однако, я нигде не видел
тель снова нажмёт на кнопку, то глобальная переменная, и не слышал о том, что утечки памяти являются серьёзной
хранящая объект первого запроса, будет изменена. Теперь, проблемой JavaScript-приложений. Все источники сходят-
если будет принят первый запрос, обработчик запроса по- ся во мнении, что использование глобальных дескрипторов
лучит ссылку на второй, который ещё, может быть, не вы- (да и любых других переменных) – гораздо большее зло,
полнился. Всё это неминуемо приведёт к очень неприят- чем замыкания и трудности, связанные с ними.
ным, плохо воспроизводимым, ошибкам. Чтобы покончить с вопросами сбережения памяти, да-
Второй подход как раз применяется в моём коде: вайте оценим, какова реальная угроза. Допустим, на опре-
делённое действие пользователя ваше приложение совер-
function setup_http_object(r) { шает три запроса (надо сказать, это должно быть весьма
r.onreadystatechange = function() {process_response(r);};
} и весьма развитое приложение). Пусть пользователь рабо-
тает достаточно активно и совершает указанное действие
Здесь мы создаём анонимную функцию, которая только один раз в минуту. Ощущать дефицит памяти он начнёт где-
и делает, что вызывает реальный обработчик с соответс- то после 500 000-1 000 000 операций. Несложный подсчёт
твующим аргументом. Но и этот подход имеет существен- показывает, что на это ему понадобятся месяцы непрерыв-
ные недостатки. ной работы. В свете результатов этого нашего воображае-
В данном случае возникает ситуация, называемая мого эксперимента проблема утечек памяти уже не кажет-
в программировании «замыкание» (closure): локальная пе- ся столь зловещей. Просто о ней надо помнить, если вы ре-
ременная r исчезает после завершения работы функции шите делать запросы в циклах по тысяче штук за раз.
setup_http_object, но её значение сохраняется, так как дан- В заключении обсуждения процедуры инициализации
ные продолжают использоваться в анонимной функции, ко- объекта мне осталось добавить, что назначение функций-
торая, в свою очередь, не исчезнет, пока существует сам обработчика – важное, но отнюдь не единственное, полез-
объект r. То есть сам же объект r становится гарантом сво- ное действие, которое уместно выполнить именно здесь.
ей вечной жизни, и при этом он оказывается недоступен Например, если вы будете делать POST-запрос, то будет
для основной программы. Единственное место, где можно уместно назначить MIME-тип отправляемых данных:
оперировать с r, – тело функции process_response.
Подобные ситуации всегда неминуемо ведут к утечкам obj.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
памяти. Немногочисленные тесты, проведённые мной, по-
казали, что так оно и есть. FireFox на разных платформах Итак, мы создали и инициализировали объект запроса.
показал примерно один и тот же результат – утечка око- Самое время сделать запрос на сервер.
ло 600-700 байт на один запрос. Internet Explorer оказался
куда более расточительным: на каждый запрос он тратит Посылаем запрос
около 1700 байт и один системный дескриптор. Opera «ку- Запрос мы посылаем функцией do_http_object. Она выпол-
шает» примерно по килобайту на запрос, но есть основа- няет всего два действия:
ния полагать, что Opera всё же «освобождает» паять. Она  открывает поток методом open;
не возвращает память системе, но, возможно, использу-  запускает процесс обмена данными методом send.
ет её повторно.
Замыкания не являются редкостью, но классичес- Open получает три входных параметра: HTTP-метод, ад-
кие методы борьбы с ними в данном случае не работают. рес и флаг асинхронности.
Так в любом высокоуровневом языке с автоматическим
управлением памятью достаточно было бы создать «де- r.open('GET', 'calc.php?x=' ↵
+escape(document.frm.x.value), true);
структор» вида:

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


web
Имя метода следует всегда пи- нозначно и единообразно трактуют «как есть». При этом корректно интер-
сать большими буквами: не все бра- эти шаги обработки запроса. Каждый претируются специальные символы
узеры станут преобразовывать ре- из них может вызваться не один раз. («&sup2;») и HTML-теги (<FONT>).
гистр, а по протоколу HTTP имя мето- Код 0 не используется большинс- Данные, переданные сервером
да должно передаваться именно за- твом браузеров. Это начальное со- в HTTP-ответе, можно получить дву-
главными буквами. стояние. мя методами:
Адрес может быть и абсолютным, Вызов с кодом 1 обычно происхо-  r.responseText возвращает тело от-
и относительным, но я бы советовал дит дважды. Согласно спецификации вета без каких-либо изменений –
не использовать полных адресов с яв- от W3C, код 1 должен отрабатываться просто как строку;
ным указанием имени сервера. Брау- по завершении open(), однако, в реаль-  r.responseXML возвращает объ-
зеры должны допускать Ajax-обраще- ной жизни все вызовы с этим кодом ект XML-документ, предоставляю-
ния только к тому серверу, с которого происходят уже после вызова send. щий программисту массу методов
был загружен документ. Это приводит Вызов с кодом 2 не повторяется, для манипулирования данными (ти-
к массе недоразумений при наличии а Opera не генерирует вызов с кодом па getElementsByTagName).
синонимов типа www.google.ru и прос- 2 вовсе. По спецификации он знаме-
то google.ru (без www). В нашем приме- нует конец отправки браузером запро- Мы передавали данные просто
ре мы генерируем адрес вида: са и переход на приём. строкой. В нашем случае этого впол-
Код 3 может поступать много раз не достаточно. Но передача данных
/ajax/calc.php?x=4 по мере получения данных от серве- в формате XML открывает гораздо бо-
ра; причём разные браузеры вновь ве- лее широкие возможности. Надо толь-
Обратите внимание, для кодиро- дут себя не одинаково: Internet Explorer ко учитывать, что средства обработки
вания передаваемых данных мы ис- не повторяет код 3 (он вообще всегда XML-документов достаточно сильно от-
пользовали функцию escape. В на- выдаёт одну и ту же последователь- личаются в разных браузерах. И, ко-
шем случае это скорее дань хороше- ность 1-1-2-3-4), а FireFox повторяет нечно, следует формировать коррек-
му тону, но при передаче более слож- его на каждые четыре переданные ки- тные документы, начинать их с пра-
ных данных эта мера становится жиз- лобайта. Согласно спецификации этот вильного заголовка, корректно закры-
ненно необходима. код может поступать на обработку не- вать теги, квотировать небезопасные
Третий аргумент интерпретируется сколько раз, но, по замыслу разработ- символы.
как логическое значение. Если он ра- чиков, он несёт гораздо более глубо-
вен «истина», то запрос производится кий смысл: первый вызов – принят за- «За» и «против» Ajax
асинхронно (это и есть буква A в аббре- головок, второй вызов – принято тело Достоинства Ajax не нуждаются в рек-
виатуре Ajax). То есть браузер не ждёт, документа. ламе. Эта «технология» открывает не-
когда отработается запрос, и продол- В большинстве случаев требует- обозримые горизонты перед веб-про-
жает выполнять JavaScript-код. ся обработать только ситуацию 4, и, граммистом и позволяет создавать
Метод send предназначен для от- к счастью, это, пожалуй, наиболее од- сколь угодно сложные и динамичные
правки тела запроса. В нашем случае нозначный и надёжный код. интерфейсы. Но и недостатки Ajax
выполняется GET-запрос и тело пусто, В первой строке мы выводим зна- трудноскрываемы. Давайте остано-
но в случае POST-запроса тело пере- чение r.readyState в элемент с id=step; вимся на них подробнее.
даётся как раз этим методом. в HTML-коде ему соответствует подпись Фундаментальным «дефектом»
«Ход выполнения запроса». (Для этого Ajax является то, что она нарушает са-
Обрабатываем результат используется функция set_inner.) му концепцию веб-пространства. Ведь
Итак, при обработке запроса вызы- Во второй строке мы проверяем, за- изначально HTTP разрабатывался как
вается функция process_response. вершён ли запрос, и если «да», то вы- протокол передачи данных, а браузе-
Её единственным аргументом являет- полняем серию нехитрых действий: ры – как средства отображения дан-
ся объект запроса.  получаем код HTTP-ответа мето- ных. Ajax же, являясь вершиной эво-
Эта функция вызывается не толь- дом status и «выкладываем» его в люции Web, окончательно превращает
ко при принятии ответа, но и на дру- тело документа (в элемент status – веб-документ в приложение, а браузер
гих этапах обработки HTTP-запроса. «Статус ответа»); – в среду выполнения этого приложе-
Об этапе говорит свойство .readyState.  получаем тело ответа методом ния. Эта «придирка» может показаться
Возможны следующие значения: responseText; слишком надуманной, но все недостат-
 0 – инициализация запроса;  разбиваем его на строки методом ки Ajax проистекают именно из этого
 1 – формирование запроса; split; нарушения философии Web.
 2 – формирование запроса оконче-  «выкладываем» три полученные Ajax нарушает основную концеп-
но; строки, соответственно, в элемен- цию адресации документов. Наруша-
 3 – взаимодействие с сервером; ты time («время»), qstring («строка ется уникальность адресов: по одному
 4 – взаимодействие завершено (от- запроса»), xsq («x-квадрат»). и тому же адресу можно увидеть раз-
вет получен). ную информацию. Это не только де-
Как ви д и те, вс ё, п ер ед анно е лает невозможным реализацию эле-
Я не уверен, что все браузеры од- сервером, вставляется в документ ментарных функций браузера, начиная

64
web
с использования кнопки «назад», за- кументов, и от которых теперь требу- А то, что Ajax используется в крупней-
канчивая возможностью создания за- ется стать средами выполнения прило- ших веб-проектах, сулит этой «техно-
кладки, но и делает в принципе невоз- жений. Косметическими улучшениями логии» большое будущее.
можным индексацию документов поис- здесь не отделаться.
ковыми системами или даже элемен- Кроме того, Ajax базируется на тех- 1. Прежде всего, мне хотелось бы отме-
тарный обмен ссылками, когда друг нологиях, которые не предназначались тить MDC (Mozilla Developers Center) –
«кидает» другу ссылку по «аське». (Ко- для решения тех задач, на которые он http://developer.mozilla.org/en/docs/
нечно, пока ни один поисковик не в со- направлен. Поэтому Ajax порождает AJAX. Информации там не очень мно-
стоянии выполнить Ajax-код и правиль- массу неоднозначностей и противо- го, но она очень качественная. Нет ни-
но проиндексировать ресурс.) В деле речий. Например, как должен реаги- каких недомолвок, не лоббируются ин-
разрушения соответствия URL-доку- ровать браузер, если вместо обычно- тересы какого-либо одного производи-
мент Ajax продвинулся гораздо даль- го HTML-содержимого в страницу будет теля браузеров, язык очень прост и по-
ше, чем фреймы, о вреде которых уже встраиваться новый JavaScript-код? нятен.
много написано. Все эти противоречия порождаются 2. Большой «развал» ссылок на раз-
Ну и, конечно, нельзя обойти вни- той путаницей между данными и уп- личные ресурсы для Ajax-разработ-
манием пресловутую несовместимость равляющим кодом, о которой я говорил чиков можно найти здесь – http://
браузеров. В этой статье мы видели её в самом начале. Думаю, и браузеры, www.maxkiesler.com/index.php/weblog/
только в одном месте, но это во мно- и технологии должны полностью пе- comments/451.
гом от того, что мы практически не ис- реродиться, чтобы возможности Ajax 3. Спецификацию метода XMLHttpRequest
пользовали DOM, реализация которо- стали универсальными и безопасны- можно найти тут – http://www.w3.org/TR/
го в разных браузерах весьма и весь- ми. Сейчас мы наблюдаем первых лас- 2006/WD-XMLHttpRequest-20060405.
ма различна. Причём, добиться уров- точек, которые возвещают о грядущих 4. Русский перевод описания протокола
ня совместимости, необходимого для больших переменах в Web. HTTP (RFC 2068) можно найти здесь –
использования Ajax, будет не прос- Одним словом, строить сайты http://www.lib.ru/WEBMASTER/rfc2068.
то. Не только потому, что это просто на Ajax, наверно, преждевременно, 5. Кроме того, «Системный Администра-
сложно технически, но ещё и потому, однако его вполне уместно использо- тор» уже публиковал две статьи об Ajax
что придётся пересмотреть основные вать в тех ситуациях, где качество ин- (№12 за 2005 г. и №6 за 2006 г.), где так
механизмы браузеров – программ, ко- дексирования и комфортность нави- же приводились интересные ссылки
торые создавались для просмотра до- гации не так важны, как интерфейс. по этой теме.

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


web

Устанавливаем DACS

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

С
о времени публикования первой ваться и этими пакетами. Это позво-  библиотека OpenSSL, разработ-
части статьи [1] ничего не из- лит сосредоточиться больше на изу- чики рекомендуют 0.9.8b, хотя и
менилось. Текущей версией чении функциональности, чем на на- с 0.9.8а проблем не было.
по-прежнему является 1.4.13а. Про- стройке. Мы же не ищем легких путей  библиотека синтаксического
ект придерживается строгих правил, и будем устанавливать DACS с исход- анализа XML Expat, рекомендуе-
распространяя только исходные тек- ных текстов. мой версией является 2.0.
сты DACS, и рекомендует полностью
пересобрать всю систему с их помо- Компоненты, необходимые Кроме того, в зависимости от тре-
щью. Прекомпилированные пакеты для работы DACS буемой функциональности вам могут
удалось найти только на сайте про- Для установки, кроме самого DACS, понадобиться и другие пакеты, уста-
екта OMSE [2]. Хотя здесь доступ- понадобятся исходные тексты либо за- новка которых опциональна. Так, ес-
на версия DACS 1.4.11, собранная головочные devel-пакеты: ли планируется сохранение конфигу-
для Debian 3.1 и Fedora Core 4, кото-  веб-сервер Apache, рекоменду- рации в базе данных, то потребуется
рые шли в качестве приложения к ста- емыми версиями являются 2.0.58 Berkeley DB, gdbm или ndbm. Для вклю-
тье «DACS: Nur für Mitglieder» в немец- или 2.2.2, с последней DACS начал чения NTLM понадобится пакет Samba,
ком журнале для IT-профессиона- работать с 1.4.13а, и еще не до кон- а возможность работы с LDAP или
лов IX (http://www.heise.de/ix). Версии ца протестирован, поэтому, впол- Active Directory реализуется посредс-
1.4.11 и 1.4.13а имеют отличия, но если не вероятно, возникнут проблемы твом пакета OpenLDAP. Но при первой
цель – знакомство с системой DACS, при установке и работе (по крайней настройке лучше всего ограничиться
то первоначально можно воспользо- мере, у меня они были). только базовым набором, постепенно

66
web
разобравшись с настройками, уже можно установить пол- Все настройки SSL по умолчанию описываются
нофункциональную систему. в секции:

Устанавливаем основные компоненты <IfModule mod_ssl.c>


Include /opt/conf/ssl.conf
В большинстве систем уже имеются библиотеки OpenSSL, </IfModule>
если их в системе нет, установить их очень просто.
Для удобства все необходимые компоненты я установил Если заглянуть в файл ssl.conf, в нем файлы сертифика-
в свой каталог. та и ключа указываются следующими переменными:

$ cd openssl-0.9.8a/ SSLCertificateFile /opt/apache2/conf/ssl.crt/server.crt


$./config --prefix=/opt/openssl SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server.key
$ make; make test
# make install После этих действия Apache должен нормально рабо-
тать через SSL, для чего соединяемся при помощи браузе-
Теперь очередь веб-сервера. Конфигурировать его необ- ра или telnet к 443 порту.
ходимо с опцией --enable-ssl, остальные опции по необходи- Теперь Expat. Здесь все стандартно.
мости. Чтобы не повлиять на работу основного Apache, тес-
товую версию советую установить в отдельный каталог. $ cd expat-2.0.0
$ ./configure --prefix=/opt/expat; make
# make install
$ cd apache-2.0.58
$./configure --enable-ssl --with-ssl=/opt/openssl ↵
--prefix=/opt/apache2 После чего следует добавить путь к библиотеке
/opt/expat/lib в файл /etc/ld.so.conf и дать команду:
После чего стандартные make и make install. По умолча-
нию поддержка SSL компилируется статически, проверить # /sbin/ldconfig
встроенные модули можно командой:

# /opt/apache2/bin/apachectl –l Установка модуля и утилит DACS


mod_so.c Распаковываем архив с исходными текстами. Конфигура-
… ционный скрипт находится в подкаталоге src. Для просмот-
mod_ssl.c
ра всех опций конфигурирования вводим.
Если поддержка SSL компилировалась как динамически
загружаемый модуль (Dynamic Shared Object), то при даль- $ cd dacs-1.4.13a
$ src/configure --help
нейшей настройке необходимо проследить, чтобы при помо-
щи директивы LoadModule в файле веб-сервера httpd.conf, Опций много, необходимости в выборе всех нет.
mod_ssl загружался перед mod_auth_dacs. Иначе вы по- Я использовал следующие параметры при конфигури-
лучите ошибку при запуске. Хотя настройкой Apache зай- ровании:
мемся чуть позже.
Теперь для веб-сервера необходимо сгенерировать сер- $ src/configure --with-ssl=/opt/openssl ↵
--with-expat=/opt/expat --with-apache=/opt/apache2 ↵
тификаты и ключи: --enable-unix-auth --enable-debug ↵
--enable-apache-auth --enable-native-auth ↵
# /opt/openssl/bin/openssl req -config ↵ --prefix=/opt/dacs --enable-ndbm=no --enable-bdb=no
/opt/openssl/openssl.cnf -new -x509 ↵
-keyout gw-ca.pem -out gw-ca.pem -days 365 Опции with-ssl, with-expat и with-apache указывают
на каталоги, в которых установлены соответствующие
Generating a 1024 bit RSA private key
.......++++++
приложения, а prefix – куда требуется установить DACS.
writing new private key to 'gw-ca.pem' Все виды аутентификации можно включить при помо-
щи параметра enable-all-auth, сейчас все возможности
Далее выбираем пароль и отвечаем на стандартные воп- нам не нужны, поэтому включаем аутентификацию UNIX
росы скрипта (страна, организация, почтовый адрес и пр.). и Apache опциями enable-unix-auth, enable-native-auth
Разделяем ключ и сертификат, убираем пароль с ключа: и enable-apache-auth. По умолчанию поддержка ndbm
и Berkeley DB включена, и если они не установлены в сис-
# /opt/bin/openssl rsa -in gw-ca.pem -out gw-ca.key теме, при конфигурировании будет выдана ошибка, поэ-
Enter pass phrase for gw-ca.pem: тому отключаем их поддержку. Если все прошло нормаль-
writing RSA key но, строим зависимости:
# /opt/ openssl/bin/openssl x509 -in gw-ca.pem ↵
-out gw-ca.crt $ gmake depend

И копируем сертификат и ключ на свое место Кстати, теперь можно получить помощь по компиляции
mod_auth_dacs, вызвав make help. Модуль mod_auth_dacs
# cp gw-ca.crt /opt/apache2/conf/server.crt можно построить с тремя возможными параметрами, до-
# cp gw-ca.key /opt/apache2/conf/server.key
бавляющими информацию о DACS в строку ответа серве-

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


web
ра. Для включения вывода всей информации используйте Все, сервер работает, осталось только указать на ката-
make tag, для частичной – make smalltag, и для того чтобы логи, которые будут защищены DACS. В «DACS Quick Start
в ответе не было упоминания о работе DACS – make notag. Tutorial» для DACS настроен виртуальный сервер, мы то-
Я пробовал при помощи Google проверить, на скольких сер- же поступим аналогичным образом, так легче разобрать-
верах установлен DACS, и нашел только один сервер. По- ся, что, где и как. Создадим виртуальный сервер testdacs.
лучается два варианта, либо DACS малоизвестен, либо со- net, который будет слушать на 8080 порту. Для этого доба-
бирается с опцией notag, как более безопасной. вим в httpd.conf следующие строки:

$ gmake smalltag <Directory /opt/dacs/www/*>


# gmake install Options Indexes FollowSymLinks
Order allow,deny
Скрипт сначала запрашивает пользователя и группу Allow from all
</Directory>
владельцев файлов DACS.
# Настраиваем виртуальный сервер и делаем доступными
Which user name/id should own DACS files [sergej]? apache2 # каталоги DACS
Which group name/id should own DACS files [www]? apache2 NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080
/opt/dacs/lib <VirtualHost 127.0.0.1:8080>
/etc/ld.so.conf
ServerName testdacs.net
DocumentRoot "/opt/dacs/www/"
NOTES:
ErrorLog "/opt/dacs/logs/error_log"
* /opt/apache2/cgi-bin/dacs/local_unix_authenticate may need to be TransferLog "/opt/dacs/logs/access_log"
setuid or setgid in order to check passwords: ScriptAlias /cgi-bin/ "/opt/apache2/cgi-bin/dacs/"
chown root /opt/apache2/cgi-bin/dacs/local_unix_authenticate Alias /css "/opt/dacs/www/css/"
chmod u+s /opt/apache2/cgi-bin/dacs/local_unix_authenticate Alias /icons/ "/opt/apache2/icons/"
* /opt/apache2/cgi-bin/dacs/local_apache_authenticate may need to be Alias /dacs "/opt/dacs/www/"
setuid or setgid in order to check passwords: Alias /dtd-xsd "/opt/dacs/www/dtd-xsd/"
chgrp www /opt/apache2/cgi-bin/dacs/local_apache_authenticate Alias /examples "/opt/dacs/www/examples/"
chmod g+s /opt/apache2/cgi-bin/dacs/local_apache_authenticate Alias /handlers "/opt/dacs/www/handlers/"
* Run 'make install-autologin' if you require autologin Alias /man "/opt/dacs/www/man/"
* Check that /opt/dacs/man is on your MANPATH Alias /misc "/opt/dacs/www/misc/"
* DACS version info: Alias /mod "/opt/dacs/www/mod/"
number="1.4" </VirtualHost>
release="1.4.13a"
date="Release date 2-Jun-06 12:12:28"
revid="$Id: dacs-stamp-h 1218 2006-06-02 19:15:04Z brachman $"
other="Expat 2.0.0, OpenSSL 0.9.8a 11 Oct 2005, Apache 2.0.58"
Конфигурирование DACS
В качестве примера создадим одну федерацию, назо-
Последний вывод получен при помощи утилиты version, вем ее DACSTEST и сопоставим ее с доменом testdacs.
которая доступна так же, как веб-сервис dacs_version, поз- net. Для упрощения федерация будет состоять из одной
воляющая проверить версию DACS и опции конфигуриро- юрисдикции – FIRST. Во время работы DACS использует
вания. Ее можно вызвать отдельно: два файла: site.conf и dacs.conf. Первый является опцио-
нальным, в нем хранится информация обо всех федера-
# /opt/dacs/bin/version -v циях, расположенных на узле. Второй dacs.conf может опи-
сывать федерацию, юрисдикцию, узел. Каждый указанный
После установки убедитесь, что в httpd.conf добавилась элемент может иметь свой файл dacs.conf со своими на-
строка, загружающая модуль mod_auth_dacs.so. стройками, или на узле может использоваться всего один
dacs.conf, в котором все свалено в кучу. Разработчики ре-
# cat httpd.conf | grep LoadModule комендуют использовать утилиту install, которая имеется
LoadModule auth_dacs_module modules/mod_auth_dacs.so в большинстве дистрибутивов. С ее помощью очень удобно
контролировать права доступа к объектам, а DACS очень
Теперь можно запустить веб-сервер и проверить пра- чувствительный к этим параметрам. Если такой утили-
вильность работы модуля. ты нет, в комплекте имеется скрипт src/conftools/install-sh.
Как вариант можно использовать стандартные утилиты
# /opt/apache2/bin/apachectl start cp, chown, chgrp и chmod, хотя это не так наглядно и мож-
но допустить ошибку. Обратите внимание, что мы исполь-
Сделать это можно несколькими способами. зуем пользователя/группу apache2/apache2, от имени ко-
Журнал работы веб-сервера является самым простым торых работает веб-сервер. Скопируем шаблонный файл
способом, в нем должна появиться такая запись: site.conf-std на свое место.

[Wed Jun 14 10:33:00 2006] [notice] Apache/2.0.58 (Unix) # install -g apache2 -m 0640 ↵
mod_ssl/2.0.58 OpenSSL/0.9.8a mod_auth_dacs/1.4.13a configured -- /opt/dacs/federations/site.conf-std ↵
resuming normal operations /opt/dacs/federations/site.conf

Еще для проверки работы с SSL в комплекте DACS име- Файл хорошо комментирован, многие параметры понят-
ется утилита sslclient, позволяющая подсоединиться к веб- ны, поэтому трогать его не будем. На время тестирования
ресурсу по SSL и получить необходимую информацию. можно отключить SSL, установив директиву SECURE_MODE
в off, но в рабочей системе, естественно, она должна быть
# /opt/dacs/bin/sslclient testserver.net:443 включена.

68
web
Обратите внимание на каталоги, в которых должны хра- <Jurisdiction uri="testdacs.net">
JURISDICTION_NAME "FIRST"
ниться настройки, они описаны как: </Jurisdiction>

${Conf::FEDERATIONS_ROOT}/${Conf::FEDERATION_DOMAIN}/ ↵ </Configuration>
${Conf::JURISDICTION_NAME}
В примере адрес федерации и юрисдикции совпадает,
То есть в нашем случае полный путь должен быть такой – разделение идет на уровне ресурсов. Как вариант можно
/opt/dacs/federations/testdacs.net/FIRST/. разделять на юрисдикции при помощи разных доменов,
Создадим файл dacs.conf для федерации. например first.testdacs.net. Чтобы не создавать множество
конфигурационных файлов, создадим для FIRST/dacs.conf
# install -g apache2 -m 0660 /dev/null ↵ символическую ссылку:
/opt/dacs/federations/dacs.conf

Теперь каталоги, в которых будут храниться все ассоци- # ln -s /opt/dacs/federations/dacs.conf ↵


/opt/dacs/federations/ testdacs.net/FIRST/dacs.conf
ативные настройки федерации и юрисдикции FIRST.

# install -d -g apache2 -m 0770 ↵ Проверяем настройки


/opt/dacs/federations/testdacs.net/
# install -d -g apache2 -m 0770 ↵ Для этого в комплекте DACS идет специальная утилита conf,
/opt/dacs/federations/testdacs.net/FIRST которая выведет результат слияния всех этих файлов.

Все списки контроля доступа и revocation list юрисдик- # /opt/dacs/bin/conf -u testdacs.net -q


ции по умолчанию хранятся в подкаталоге acl, и они долж- <Jurisdiction uri="testdacs.net">
JURISDICTION_NAME "FIRST"
ны существовать. FEDERATION_DOMAIN "testdacs.net"
AUTH_ERROR_HANDLER "* url /handlers/auth_failed.html"
HTTP_PROG "/opt/dacs/bin/http"
VERIFY_IP "no"
# install -d -g apache2 -m 0770 ↵ AUTH_SUCCESS_HANDLER "url /handlers/auth_ok.html"
/opt/dacs/federations/testdacs.net/FIRST/acls AUTH_CREDENTIALS_DEFAULT_LIFETIME_SECS "43200"
# install -g apache2 -m 0660 /dev/null ↵ FEDERATION_NAME "DACSTEST"
/opt/dacs/federations/testdacs.net/FIRST/acls/revocations DTD_BASE_URL "/dtd-xsd"
XSD_BASE_URL "/dtd-xsd"
PASSWORD_DIGEST "SHA1"
SSL_PROG "/opt/dacs/bin/sslclient"
SSL_PROG_CA_CRT "/opt/apache2/conf/ssl.crt/server.crt"
В подкаталогах groups записывается вся информа- SIGNOUT_HANDLER "url /handlers/signout_ok.html"
ALLOW_HTTP_COOKIE "no"
ция о том, кто состоит в юрисдикции (FIRST) и федера- AUTH_FAIL_DELAY_SECS "2"
ACS_ERROR_HANDLER "* /handlers/acs_failed.html"
ции (DACS). SECURE_MODE "on"
COOKIE_PATH "/"
NAME_COMPARE "case"
# install -d -g apache2 -m 0770 ↵ LOG_FILE "/opt/dacs/logs/FIRST-28-Jul»-06.log"
LOG_FILTER "filename exact DEBUG "crypto.c""
/opt/dacs/federations/testdacs.net/FIRST/groups ↵ LOG_LEVEL "info"
/opt/dacs/federations/testdacs.net/FIRST/groups/FIRST ↵ LOG_SENSITIVE "no"
/opt/dacs/federations/testdacs.net/FIRST/groups/DACS NOTICES_ACCEPT_HANDLER "/handlers/notices_accepted.html"
NOTICES_DECLINE_HANDLER "/handlers/notices_declined.html"
NOTICES_ACK_HANDLER ""
NOTICES_SECURE_HANDLER "yes"
NOTICES_WORKFLOW_LIFETIME_SECS "120"
Файл jurisdictions.grp описывает все юрисдикции, вхо- NOTICES_NAT_NAME_PREFIX "NAT-DACS"
VFS "[dtds]dacs-fs:/opt/dacs/www/dtd-xsd"
дящие в федерацию, в случае внесения изменений в этот VFS "[federation_keys]dacs-fs:/opt/dacs/federations/testdacs.net/federation_keyfile"
VFS "[jurisdiction_keys]dacs-fs:/opt/dacs/federations/testdacs.net/FIRST/jurisdiction_keyfile"
файл он должен быть скопирован во все юрисдикции. VFS "[revocations]dacs-fs:/opt/dacs/federations/testdacs.net/FIRST/acls/revocations"
VFS "[acls]dacs-fs:/opt/dacs/federations/testdacs.net/FIRST/acls"
VFS "[dacs_acls]dacs-fs:/opt/dacs/acls"
# install -g apache2 -m 0660 /dev/null ↵ VFS "[groups]dacs-fs:/opt/dacs/federations/testdacs.net/FIRST/groups"
/opt/dacs/federations/testdacs.net/FIRST/groups/ ↵ VFS "[passwds]dacs-kwv-fs:/opt/dacs/federations/testdacs.net/FIRST/passwd"
DACS/jurisdictions.grp VFS "[roles]dacs-kwv-fs:/opt/dacs/federations/testdacs.net/FIRST/roles"
AUTH_AGENT_ALLOW_ADMIN_IDENTITY "no"
LOG_FORMAT "[%t] [%l] [%p,%c,%F] [%sp:"%sm"]"
STATUS_LINE "off"
Добавим в созданный jurisdictions.grp информацию о на- </Jurisdiction>

шей юрисдикции.
Параметры понятны. Обратите внимание на установ-
<groups xmlns="http://dss.ca/dacs/v1.4"> ленное по умолчанию время жизни credentials, которое со-
<group_definition jurisdiction="FIRST" name="jurisdictions"
mod_date="Tue, 26-Jun-2006 12:00:00 GMT" type="public"> ставляет 43200 секунд – 12 часов, и на отключенную про-
<group_member jurisdiction="FIRST" name="DACS" type="meta" верку IP-адреса в credentials.
alt_name="My First Test Jurisdiction"
dacs_url="http://testdacs.net:8080/cgi-bin/dacs"
authenticates="yes" prompts="no"/> Создаем ключи
</group_definition>
</groups> Для создания ключей используется утилита mkkey. Ключи
необходимо сгенерировать для федерации и каждой юрис-
А в /opt/dacs/federations/dacs.conf данные о федерации дикции. Во избежание компрометации в дальнейшем лучше
и юрисдикции. поручить эту процедуру cron, который будет менять ключи
в наименее загруженное время (с учетом жизни credentials,
<Configuration xmlns="http://dss.ca/dacs/v1.4.13а"> чтобы никто не возмущался).
<Default>
FEDERATION_DOMAIN "testdacs.net" # install -g apache2 -m 0660 /dev/null ↵
FEDERATION_NAME "DACSTEST" /opt/dacs/federations/testdacs.net/federation_keyfile
LOG_LEVEL "info" # /opt/dacs/bin/mkkey -u testdacs.net -q ↵
</Default> /opt/dacs/federations/testdacs.net/federation_keyfile

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


web
Please check ownership and mode of И чтобы модуль веб-сервера знал о том, что ему конт-
'/opt/dacs/federations/testdacs.net/federation_keyfile' ролировать в конец секции VirtualHost, которую мы созда-
ли ранее в файле httpd.conf, запишем следующие строки
Проверяем созданный ключ. (параметры -t -v позволяют вывести отладочную информа-
цию, которая вам понадобится).
# cat /opt/dacs/federations/testdacs.net/federation_keyfile
<crypt_keys fed_id="27-Jul»-2006@19:33:57,
AddDACSAuth dacs-acs /opt/dacs/bin/dacs_acs "-t -v"
SetDACSAuthMethod dacs-acs external
3375dd487ad8bb2430b37da395ecb2eb4290dbc2" SetDACSAuthConf dacs-acs "/opt/dacs/federations/dacs.conf"
auth_key="p3CEHQymtQi/PJJXW7/nm0" hmac_key="…UA/../"
private_key="..."/> <Location /cgi-bin/dacs>
AllowOverride AuthConfig
Все нормально. Повторяем процедуру для юрисдикции, Require valid-user
Options ExecCGI
но с другими опциями mkkey. AuthType DACS
AuthDACS dacs-acs
# install -g apache2 -m 0660 /dev/null ↵ </Location>
/opt/dacs/federations/testdacs.net/FIRST/ ↵
jurisdiction_keyfile И перезапускаем Apache:
# /opt/dacs/bin/mkkey -uj FIRST ↵
/opt/dacs/federations/testdacs.net/FIRST/ ↵
jurisdiction_keyfile # /opt/apache2/bin/apachectl restart

Please check ownership and mode of


'/opt/dacs/federations/testdacs.net/FIRST/jurisdiction_keyfile' Если набрать в веб-браузере «http://testdacs.net:8080/
cgi-bin/dacs/prenv», вы должны увидеть результат рабо-
ты скрипта. Причем к некоторым другим скриптам, лежа-
Списки доступа для новой юрисдикции щим в этом же каталоге, получить доступ вам не удаст-
В папке /opt/dacs/acls сейчас лежат списки контроля досту- ся, так как они защищены правилом acl-dacs.0, позволяю-
па, используемые DACS по умолчанию. Эти правила в ос- щим работать с ними только пользователю с правами ад-
новном описывают параметры для стандартных веб-ресур- министратора.
сов. Трогать их не рекомендуется, для того чтобы переопре-
делить правило, следует поместить файл с таким же име- Регистрация пользователя
нем в подкаталог acl юрисдикции. Теперь заставим пользователя регистрироваться. Как уже
Например, правило acl-prenv.0 разрешает доступ говорилось в первой части, DACS поддерживает несколько
к cgi-скрипту prenv, выдающему информацию о рабочем методов аутентификации, в том числе и свой. Изменим опи-
окружении только администратору. Поэтому попытка за- сание юрисдикции в файле dacs.conf, добавив в него дан-
пуска этого скрипта выдаст ошибку 403. Выглядит прави- ные, позволяющие осуществлять аутентификацию при по-
ло так: мощи паролей UNIX.

<acl_rule> <Jurisdiction uri="testdacs.net">


<services> JURISDICTION_NAME "FIRST"
<service url_expr= ↵ <Auth id="passwd">
'"${Conf::dacs_cgi_bin_prefix}/prenv"'/> URL "http://testdacs.net:8080/cgi-bin/dacs/ ↵
</services> local_unix_authenticate"
STYLE "pass"
<rule order="allow,deny"> CONTROL "sufficient"
<allow> </Auth>
dacs_admin() </Jurisdiction>
</allow>
</rule>
</acl_rule> Для регистрации используем подготовленную HTML-фор-
му (см. рис. 1), доступную по адресу http://testdacs.net:8080/
Давайте разрешим всем просматривать эту информа- examples/login.html, где вводим системный логин и па-
цию. Для этого создадим файл acl-prenv.0, переопределя- роль. Как вариант можно использовать аутентификацию
ющий это правило. DACS, заменив в файле строку local_unix_authenticate
на local_passwd_authenticate. Для создания пароля DACS
# install -g apache2 -m 0660 /dev/null ↵ применяется утилита dacspasswd, роль ее аналогична ко-
/opt/dacs/federations/FIRST/acls/acl-prenv.0
манде htpasswd, предназначенной для работы с паролями
И поместим в него следующие строки. пользователей веб-сервера Apache. Создадим файл, в кото-
ром будут храниться пароли пользователей юрисдикции.
<acl_rule>
<services> # install -g apache2 -m 0660 /dev/null ↵
<service url_expr= ↵ /opt/dacs/federations/testdacs.net/FIRST/passwd
'"${Conf::dacs_cgi_bin_prefix}/prenv"'/>
</services>
И теперь пароль для пользователя sergej.
<rule order="allow,deny">
<allow>
user("any") # то есть всем # /opt/dacs/bin/dacspasswd -u testdacs.net -q -a sergej
</allow> New password for sergej?
</rule>
</acl_rule> Re-type new password for sergej?

70
web

Рисунок 1. HTML-форма для регистрации пользователей DACS Рисунок 2. Вид страницы при успешной регистрации

Посмотрим, что получилось. Например, такая запись при наличии самого файла:

# cat /opt/dacs/federations/testdacs.net/FIRST/passwd [Wed Jun 14 10:34:25 2006] [error] [8578,18,-] [dacs_acs:"conf"]


Could not load config file '/opt/dacs/etc/dacs.conf'
sergej:2|6Jc.6GFAiA15Rq6X|VbGuYg3H05MU4zzz4fCsvd1bqb1
может свидетельствовать о том, что после правки изменились
Теперь пробуем зайти с новыми данными. Если все права доступа, и модуль DACS не может его прочитать.
нормально, то вам будет выведена страница handlers/ Если пользователь не допущен, система проинформи-
auth_ok.html (см. рис. 2), где вы можете просмотреть полу- рует администратора.
ченный credentials. Вот он: [Fri Jul 28 18:57:12 2006] [notice] [8145,266,A]
[dacs_acs:"dacs_acs"] *** Access denied to unauthenticated user
DACS:DACSTEST::FIRST:sergej=y/ZPRm4Yh………………убрано……………..mOikAoE (FkA74G32) for /cgi-bin/dacs/prenv

Если заглянуть внутрь cookie, то можно увидеть только Или, например, когда DACS не нашел описание ресур-
имя пользователя в формате DACS, остальная информа- са (требуется testdacs.net).
ция зашифрована. При помощи утилиты cookie расшифру-
[Thu Jul 27 18:43:32 2006] [error] [8459,1,-]
ем полученный credentials.
[dacs_version:"conf"] Could not find config in
"/opt/dacs/federations/dacs.conf" using service URI
# /opt/dacs/bin/cookie -u testdacs.net -decrypt < cookie http://localhost:8080/cgi-bin/dacs/dacs_version

federation='DACSTEST'
DACS username='FIRST:sergej'
ip_address=''
Вместо заключения
roles='' Несмотря на то что DACS уже установлен и работает, что-
expires_secs='1154148374' бы окончательно в нем разобраться, потребуется провес-
auth_style='generated'
valid_for='acs'
ти не один эксперимент, меняя параметры и отслеживая
version='1.4' реакцию системы. Здесь открываются большие просторы
для творчества. Следует добавить еще юрисдикций, хотя
В файле acl-prenv.0 изменим user("any") на user("auth"). бы одну федерацию, передать между ними пользователя,
Если параметр изменяется в конфигурационном файле поэкспериментировать с revocations list, несколькими поль-
Apache, то для того чтобы он вступил в силу, требуется пе- зователями, ролями. Только так можно будет ощутить мощь
резапуск веб-сервера. При правке файлов DACS измене- и гибкость этой системы. Успехов.
ния будут актуальны уже при следующем запросе, поэтому
перезапускать ничего не надо. Попробуем теперь получить 1. Яремчук С. Контролируем доступ к веб-сервису с помощью
доступ к prenv без регистрации, авторизовавшись в систе- DACS.//Системный администратор, № 8, 2006 г. – C. 74-78.
ме. В последнем случае credential делает свое дело, и мы 2. Сай т пр о ек та OMSE – ht tp: //w w w.omse.de /download /
получаем доступ к требуемому ресурсу. download-dacs-ix-07-2006.shtml.en.
3. Сайт DACS – http://dacs.dss.ca.
Загляни в журнал 4. Сайт проекта Apache – http://httpd.apache.org.
При настройках, описанных в статье, DACS будет вести 5. Сайт OpenSSL – http://www.openssl.org.
четыре файла журнала, которые расположены в каталоге 6. Сайт Expat – http://expat.sourceforge.net.
/opt/dacs/logs. Три файла описывают все события, а файл, 7. Базы данных, которые могут использоваться с DACS – Berkeley
имя которого начинается с FIRST и далее текущая дата, DB: http://dev.sleepycat.com/downloads/latestreleases.html; gdbm
поможет разобраться с происшедшим в конкретной юрис- (она может компилироваться в режиме совместимости с ndbm):
дикции. В режиме отладки выдается большое количество ftp://ftp.gnu.org/gnu/gdbm.
информации, которая при внимательном анализе поможет 8. Сайт проекта Samba – http://www.samba.org.
разобраться с проблемой. 9. Сайт проекта OpenLDAP - http://www.openldap.org.

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


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

Развиваем модуль DBI

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

DBI – это Perl-модуль для взаимодействия с базами данных. Наверно, я не сильно ошибусь,
если скажу, что он используется в доброй половине всех существующих Perl-программ. Можно
ли его усовершенствовать или адаптировать, пользуясь его объектно-ориентированной
природой? Конечно!

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

П
окопаться во внутреннем устройстве модуля DBI ин- тва имён и две директивы package, оформлено ли это одни
тересно по двум причинам. Во-первых, он весьма по- файлом или двумя, пакетами или модулями.
пулярен и используется в проектах самого разного Так оно и есть.
масштаба. Вам, я думаю, знакома ситуация: крупный про- В недрах модуля DBI существуют два разных класса
ект развивался на MySQL 4.0, и, когда было накоплено не- (пакета или модуля; в терминах Perl это практически од-
мало кода, MySQL 4.0 сменили на 4.1. В этом случае сра- но и тоже). Первый – класс соединений – DBI::db, второй –
зу возникают проблемы с кодировками. Наиболее универ- класс запросов – DBI::st. То есть когда вы инициируете но-
сальное решение – выставлять кодировку после каждого вое соединение:
вызова connect, но это может потребовать скорректировать
код многих сценариев. my $dbh=DBI->connect(...);
Аналогичная ситуация возникает, когда с одной базой
работают комплексы программ, разработанные из расчё- вы порождаете объект класса DBI::db (а не класса DBI, как
та на разные установки времени; например, одна програм- можно было бы подумать). Аналогично, когда вы констру-
ма предполагает, что системные часы идут по Гринвичу, ируете новый дескриптор запроса:
а другая – по московскому времени. Тогда выставить еди-
ное время для базы не представляется возможным и каж- my $sth=$dbh->prepare('select ...');
дый клиент должен выставлять локальную переменную
time_zone. Как и в предыдущем, в этом случае есть два вы получаете объект класса DBI::st. Причём обратите вни-
выхода: первый – «перелопатить» весь код; второй – на- мание, метод prepare, который мы только что вызвали
писать модуль, наследующий все свойства DBI, но с неко- и который является конструктором для объектов класса
торыми коррективами. DBI::st, принадлежит объекту класса DBI::db. Методы де-
У каждого из этих подходов есть свои плюсы и ми- скрипторов запросов, соответственно, принадлежат объ-
нусы, выбор во многом зависит от конкретной ситуации, ектам класса DBI::st.
но для крупных проектов второй подход реализуется го- Таким образом, DBI – это не один, а два тесно связан-
раздо проще и быстрее, чем первый. ных класса, что незаметно для прикладного программис-
Кроме того, объектно-ориентированный подход более та, но при детальном рассмотрении оказывается вполне
универсален и позволяет решать не только эти, но и мно- логично.
гие другие задачи.
Вторая причина, по которой обратиться к модулю DBI бу- Пустой модуль, наследующий от DBI
дет весьма интересно, – это нетривиальность самого моду- Теперь становится понятно, как унаследовать методы мо-
ля. Как мы скоро увидим, чтобы унаследовать методы это- дуля DBI. Вот развёрнутый пример, простой и понятный,
го модуля, совсем недостаточно строчки: как букварь:

# для DBI это не работает 1: package DBItoo;


@ISA=qw(DBI); 2: use strict;
3: use DBI;
В этом смысле рассмотрение модуля DBI может под- 4: use vars qw(@ISA);
5: @ISA = qw(DBI);
бросить разработчику пару ценных мыслей о том, как ему 6: package DBItoo::db;
организовать свои собственные модули, классы, объек- 7: use vars qw(@ISA);
8: @ISA = qw(DBI::db);
ты и методы. 9: package DBItoo::st;
Весь SQL-код и код, зависящий от используемой ба- 10: use vars qw(@ISA);
11: @ISA = qw(DBI::st);
зы данных, я буду писать, ориентируясь на MySQL, если 12: 1;
вы работаете с другой СУБД, то, возможно, вам придётся
внести в код незначительные изменения. Perl-составляю- Этот код, естественно, должен находиться в файле
щая кода и суть обсуждаемых в статье вопросов, конечно, DBItoo.pm. Как видите, это три модуля в одном, содержи-
от базы не зависят. мое каждого модуля я дополнительно выделил отступами.
Все просто: первый модуль – DBItoo – является наследни-
Внутренняя структура DBI ком DBI, второй – DBItoo::db – наследник DBI::db, третий –
Чтобы понять логику модуля DBI, следует сперва обра- DBItoo::st – DBI::st.
тить внимание на то, что этот модуль предоставляет два
класса принципиально различных объектов: дескрип- Разные способы использования
торы базы данных (или соединения) и дескрипторы за- собственных модулей
просов. Каждый из этих классов является самостоятель- Наш модуль DBItoo просто наследует все свойства DBI,
ным и полноценным. Для каждого имеются конструкторы не привнося ничего нового. Использовать его можно точ-
(connect для баз данных и prepare для запросов), множес- но так же, как DBI:
тво различных методов и деструкторы (disconnect и finish,
соответственно). #!/usr/bin/perl -w
То есть DBI описывает два класса и, следуя логике Perl, use strict;
должен быть не одним, а двумя модулями или пакетами. use DBItoo;
my $dbh=DBItoo->connect('DBI:mysql:test', 'root', '');
В любом случае должны быть использованы два пространс- my $sth=$dbh->prepare('SELECT id, txt FROM tbl');

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


программирование
$sth->execute(); ClassА и содержит собственный метод b. Как будет вести
while (my ($id, $txt)=$sth->fetchrow_array()) {
print "$id $txt\n"; себя объект B класса ClassB? Что будет происходить при
} вызове метода B->a (унаследованного от A->a)? Опытные
$sth->finish();
$dbh->disconnect(); ОО-программисты легко ответят на этот вопрос: если метод
b виртуальный, то ответ – B->b; если нормальный – A->b.
Однако есть и другой способ: В Perl нет специального синтаксиса описания виртуаль-
ных и нормальных методов. Вместо этого существует про-
use DBI; стое соглашение: при работе с методами класса всё рабо-
my $dbh=DBI->connect('DBI:mysql:test', 'root', '', ↵
{RootClass => 'DBItoo'}); тает нормально, при работе от имени объекта – виртуаль-
но. (То есть один и тот же метод, допускающий два разных
Здесь мы загрузили обычный DBI, но при создании со- вызова, может работать по разным схемам.)
единения указали атрибут RootClass=>'DBItoo'. После та- Напомню, что методами класса называются методы,
кого вызова модуль DBItoo будет загружен автоматичес- вызываемые от имени класса (не требующие существо-
ки и вместо обычного объекта DBI::db будет создан объект вания объекта).
DBItoo::db со всеми вытекающими последствиями. Типичными представителями таких методов являются
Обратите внимание, что при втором способе загруз- конструкторы:
ки строка:
$dbh=DBI->connect(...);
3: use DBI
Но это могут быть и методы, устанавливающие некото-
в модуле DBItoo уже не нужна, хотя её присутствие не вы- рые глобальные настройки для всех объектов класса (на-
зовет никаких ошибок. Кроме того, если вам придётся мо- пример, DBI->trace) или сообщающие о ресурсах, доступных
дифицировать код, то второй способ позволит сэкономить в равной мере всем объектам класса (DBI->available_drivers).
некоторые усилия: при использовании первого способа Методами объекта называются методы, оперирующие с дан-
правке подвергаются две строки, а второго – одна. Вместе ными определённого объекта. Это, например, $dbh->do().
с тем первый способ более прозрачен и очевиден. Какой
выбрать – решать вам. Манипуляции с методами
базы данных
Разные варианты Давайте рассмотрим несколько примеров выполнения раз-
оформления модулей личных действий с методами объекта-соединения.
Рассмотренный нами модуль DBItoo можно назвать «при-
лежно составленным». В реальной жизни модуль-наслед- Метод connect (замещение существующего
ник DBI может выполнять множество разных функций, тог- виртуального метода)
да, возможно, его будет удобнее разбить на отдельные фай- Чаще всего возникает необходимость скорректировать
лы; или, наоборот, вам может понадобиться лишь чуть до- поведение DBI при создании соединения. Переопреде-
полнить стандартный DBI, тогда излишний код будет толь- лять метод connect для этого не требуется, разработчи-
ко помехой. Минимальный модуль-наследник (я назвал его ки DBI предусмотрели специальный метод connected, ко-
DBItoo_cmpct) выглядит так: торый вызывается методом connect после успешного со-
единения с базой. В исходном модуле DBI этот метод ни-
@DBItoo_cmpct::ISA = qw(DBI); чего не делает, но он может быть переопределён в клас-
@DBItoo_cmpct::db::ISA = qw(DBI::db);
@DBItoo_cmpct::st::ISA = qw(DBI::st); се-наследнике.
1; Для нас существенно то, что метод connected вызыва-
ется не как метод класса, а как метод «вновь испечённо-
Если вы хотите, чтобы модуль можно было подключать го» объекта-дескриптора соединения. В качестве аргумен-
всеми возможными способами, то в него следует добавить тов методу connected передаются все аргументы соответс-
строку «use DBI;». Использование подобных сокращённых твующего connect.
конструкций можно одобрять или не одобрять. Я ни в коем Внимательный читатель уже успел оценить всё изя-
случае не настаиваю на их применении, но буду использо- щество конструкции. Метод connected является методом
вать их далее в статье, просто чтобы не перегружать лис- объекта, то есть он является виртуальным, а это означа-
тинги большими повторяющимися кусками кода. ет, что мы можем его переопределить в модуле-наследни-
ке и метод connect из родителя (DBI) будет вызывать наш
Несколько слов о наследовании в Perl метод, а не метод-пустышку из DBI.
Прежде чем перейти к практике, давайте вспомним не- Если вы используете MySQL старше 4.1, то наверняка
сколько терминов из теории ОО-программирования, отно- сталкивались с проблемой кодировок. В идеале, сразу пос-
сящихся к наследованию. ле создания соединения клиент должен оговорить, в какой
Допустим, у нас имеется объект A класса ClassA. У не- кодировке он работает.
го имеются два метода – A->a и A->b. Причём метод A->a Давайте создадим модуль, который при соединении
в процессе своей работы вызывает метод A->b. Теперь сразу устанавливает кодировку КОИ8. Я назвал его DBIru
мы создаём класс ClassB, который является наследником (файл DBIru.pm):

74
программирование
1: use strict; Наиболее полезным примером мне представляется метод
2: @DBIru::ISA = qw(DBI);
3: @DBIru::st::ISA = qw(DBI::st); ping. Конечно, модуль DBD::mysql поддерживает метод ping,
4: но если вы мигрируете на другую базу данных, то можете
5: package DBIru::db;
6: @DBIru::db::ISA = qw(DBI::db); не обнаружить метода ping в соответствующем DBD-драй-
7: sub connected { вере. (Особенно этим грешат драйверы для работы с фай-
8: my ($dbh, $src, $login, $passwd, $attr)=@_;
9: $dbh->do('SET CHARACTER SET koi8r'); лами.) Модуль DBI содержит только «пустышку», которая
10: } всегда возвращает «0 but true». Вместе с тем если вы ис-
11:
12: 1; пользовали собственный метод ping, то не почувствуете
смены DBD-модуля.
Как и следовало ожидать, метод connected принадле- Вот текст модуля DBIping.pm:
жит к пространству имён DBIru::db, так как он является ме-
тодом дескриптора соединения. Ничего экзотического он 1: use strict;
2: @DBIping::ISA = qw(DBI);
не делает, просто устанавливает кодировку. 3: @DBIping::st::ISA = qw(DBI::st);
Здесь же можно выставить часовой пояс: 4:
5: package DBIping::db;
6: @DBIping::db::ISA = qw(DBI::db);
$dbh->do(q|SET time_zone='+04:00'|); 7: sub ping {
8: my ($dbh)=@_;
9: my $r=0;
10: eval {
11: local $SIG{__DIE__} = sub { return (0); };
Другие способы инициализации соединения 12: local $SIG{__WARN__} = sub { return (0); };
Тема инициализации соединения представляется мне на- 13: $r=$dbh->do('select 1');
14: };
столько важной, что я просто не могу обойти вниманием 15: return ($@)?0:$r;
другие способы настройки соединения, не относящиеся 16: }
17: 1;
к созданию дочерних модулей. Установить кодировку мож-
но, используя конфигурационный файл. Метод ping, как и положено, проверяет, не было ли по-
Сперва создаём файл следующего содержания: теряно соединение с базой. Для этого он пытается сделать
элементарный запрос к базе и анализирует результат. Ко-
[dbi_options] нечно, многие базы данных имеют в своём API самостоя-
default-character-set=koi8r
тельный метод ping, но наш ping сможет работать практи-
Допустим, мы назвали его /home/etc/my.cfg. чески с любой базой данных.
Теперь при создании соединения мы должны указать Если вы используете модуль DBIping вместо DBI, то мо-
модулю DBI (а он передаст эту информацию драйверу жете навсегда забыть о проблемах с методом ping.
DBD::mysql), что при соединении следует обратить внима-
ние на настроечный файл: Другие методы соединения
Отмечу, что к методам соединения относятся не только
$db=DBI->connect('DBI:mysql:test;'. connect, disconnect, rollback, begin_work, но и prepare, и do,
'mysql_read_default_file=/home/etc/my.cfg;'.
'mysql_read_default_group=dbi_options', и даже last_insert_id, selectrow_array, которые, на первый
'root', ''); взгляд, работают с данными и интуитивно могут быть от-
несены к методам запроса.
Имя файла указывается в параметре mysql_read_default_file, Не стоит обманываться, смотрите в корень – на объект,
а секция файла, которую надо прочитать, – в параметре для которого вызывается метод.
mysql_read_default_group. Конечно, это работает только
для MySQL, подход, которому посвящена статья, гораздо Наследование методов запросов
более универсален, но создать конфигурационный файл Аналогично можно переопределить или добавить методы
всё-таки несколько проще, чем модуль-наследник. запроса. Я не буду приводить примеры этих действий. Да-
К сожалению, выставить часовой пояс таким образом не вайте теперь подправим существующий метод – execute.
получится. Если вы являетесь единственным пользовате-
лем базы данных (или другим пользователям безразлично, Модернизация метода execute
какое время возвращают SQL-функции типа NOW()), то зо- Я предлагаю заставить метод execute протоколировать все
ну можно выставить глобально: запросы. Зачем это может понадобиться? Например, вы
поддерживаете большой проект. Со временем ресурс на-
mysql> SET GLOBAL time_zone = '+04:00'; бирает популярность, нагрузка на базу данных возрастает,
и вы замечаете, что сервер начинает «задыхаться». При-
Но чаще всего это решение не подходит, так как раз- чину установить бывает трудно, так как все запросы доста-
ный софт, использующий один сервер, требует разных на- точно легки, просто их много. В таком случае бывает очень
строек временной зоны. полезно собрать статистику по запросам за недельку и про-
анализировать их: какие запросы выполняются чаще, не на-
Метод ping (страхующее замещение метода) до ли где-то создать индексы... Из такой статистики порой
Итак, мы попробовали переопределять методы DBI. Давай- можно узнать самые неожиданные вещи и не раз восклик-
те теперь попробуем создать собственный новый метод. нуть «Эврика!».

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


программирование
Вот текст модуля DBIlog: 10: $st->{execure_at => time()} if ($s);
11: return $s;
12: }
1: use strict; 13: 1;
2: @DBIlog::ISA = qw(DBI);
3: @DBIlog::db::ISA = qw(DBI::db);
4: Теперь в основной программе в любой момент можно
5: package DBIlog::st;
6: @DBIlog::st::ISA = qw(DBI::st); обратиться к свойству объекта execure_at и получить вре-
7: sub execute { мя окончания операции execute для этого объекта. С точ-
8: my $st=shift;
9: my @args=@_; ки зрения чистого ОО-программирования было бы коррек-
10: my $s=$st->{'Statement'}; тнее написать метод для доступа к этому полю, но основ-
11: $s=~s/\s+/ /g;
12: open FH, '>>statments' or die; ные проблемы кроются совсем не в этом.
13: print FH "$s\n";
14: close FH;
15: return $st->SUPER::execute(@args); Конструкторы и подводные камни
16: } Основные опасности чаще всего возникают как раз при до-
17: 1;
бавлении данных.
Начинается этот модуль аналогично уже рассмотрен- Во-первых, все данные лучше всего добавлять в конс-
ным, в пространстве имён DBIlog::st расположена одна трукторе, а не в обычном методе, как мы это сделали в пре-
единственная функция execute, которая заменит одноимён- дыдущем примере.
ный стандартный метод. Иначе получается, что метод, добавляющий данные, как-
В восьмой строке мы получаем указатель на объект бы доделывает объект – берёт на себя часть функциональ-
(this), в девятой – аргументы, переданные явно. ности конструктора, что противоречит принципам объектно-
В десятой строке мы получаем строку SQL-запроса. Да- ориентированного программирования. Вас это не смущает?
лее мы выкидываем из неё все повторяющиеся пробелы, Тогда я скажу ту же мысль иначе: получается, что конструк-
а заодно заменяем разрывы строк на пробелы. Это сильно тор создаёт «недоделанный» объект, нуждающийся в даль-
облегчит нам работу с log-файлом; формат у него получа- нейшей доработке. Это нехорошо.
ется очень простой: одна строка – одна команда. Во-вторых, и в конструкторе это надо делать вдвой-
Далее (строки 12-14) открываем файл, записываем стро- не осторожно. Дело в том, что SUPER-конструктор в слу-
ку и закрываем файл. чае ошибки может вернуть не объект, а ноль или неопре-
В пятнадцатой строке мы вызываем «родной» метод делённое значение.
execute, пользуясь специальным префиксом SUPER::, и воз- Если мы не отследим эту ситуацию и попытаемся до-
вращаем результат. бавить некоторые данные к объекту, то Perl автоматичес-
Конечно, чтобы этим модулем можно было пользовать- ки создаст ссылку на хэш, но она не будет ассоциирова-
ся в полной мере, в нём надо бы предусмотреть нормаль- на ни с каким классом. Таким образом ваш конструктор
ные сообщения об ошибках и блокировку файлов для кор- отработает без видимых ошибок, и даже результат его
ректной работы в многозадачной среде, но это уже дело работы будет похож на правду (true), но дальнейшее ис-
техники. пользование созданного «объекта» может вызвать стран-
ные ошибки, природу и причины которых будет не прос-
Работа со свойствами объекта то понять.
С методами объектов мы уже выполнили все возможные
операции, давайте теперь рассмотрим более тонкую мате- Что ещё можно добавить в DBI
рию – данные объекта. Например, можно сделать так, что- В этом разделе мы рассмотрим ещё несколько примеров,
бы метод execute фиксировал в объекте-запросе время вы- которые могут быть полезны, но использовать их нужно
полнения, которое потом можно будет получить и проана- осторожно.
лизировать. Так вы сможете узнать, сколько времени ваша
программа потратила на обработку результатов запроса. Новый метод md5
Большинство баз данных позволяют узнать, сколько вре- При работе больших баз данных иногда полезно отслежи-
мени было потрачено на обработку запроса. Сравнив эти вать изменения некоторых таблиц (например, чтобы не де-
два показателя, вы можете сделать вывод о том, где нахо- лать лишних резервных копий больших и редко изменяю-
дятся узкие места в вашем коде. щихся массивов информации). Как быстро и надёжно оп-
Объект запроса (как и большинство объектов Perl) явля- ределить, изменилась ли таблица, в которой, скажем, не-
ется хэшем, и наша задача сводится к простому добавле- сколько миллионов записей? MySQL 4.1 (и выше) предо-
нию ещё одного элемента в этот хэш. Для начала, я пред- ставляет прекрасную возможность – подсчёт контрольной
лагаю вот такую реализацию: суммы. (В некоторых ситуациях можно ограничиться прос-
то подсчётом строк, это гораздо быстрее.) Давайте доба-
1: use strict; вим новый метод базы данных $dbh->md5(). Для этого со-
2: @DBItime::ISA = qw(DBI);
3: @DBItime::db::ISA = qw(DBI::db); здадим модуль DBImd5:
4:
5: package DBItime::st;
6: @DBItime::st::ISA = qw(DBI::st); 1: use strict;
7: sub execute { 2: @DBImd5::ISA = qw(DBI);
8: my $st=shift; 3: @DBImd5::st::ISA = qw(DBI::st);
9: my $s=$st->SUPER::execute(@_); 4:

76
программирование
5: package DBImd5::db; 4:
6: @DBImd5::db::ISA = qw(DBI::db); 5: package DBIautodef::st;
7: sub md5 { 6: @DBIautodef::st::ISA = qw(DBI::st);
8: my ($db, $table)=@_; 7: sub fetchrow_array {
9: my $sql='CHECKSUM TABLE '. 8: my $st=shift;
10: $db->quote_identifier($table); 9: return map {defined($_)?$_:'N/A'} ↵
11: my $st=$db->prepare($sql); $st->SUPER::fetchrow_array();
12: $st->execute(); 10: }
13: my (undef, $md5)=$st->fetchrow_array(); 11: 1;
14: $st->finish();
15: return $md5;
16: } Ничего, требующего дополнительных комментариев,
17: 1; в этом коде нет. Мы корректно наследуем методы из DBI,
DBI::db и DBI::st; в пространстве имён DBIautodef::st создаём
Если вместо DBI использовать этот модуль, то в вашем метод fetchrow_array.
распоряжении окажется ещё один метод соединения: В нашем методе fetchrow_array мы вызываем оригиналь-
ный fetchrow_array, используя префикс SUPER. Результат
$dbh->md5(имя_таблицы); обрабатываем и возвращаем.
В определённых условиях тот метод может быть очень
который будет возвращать контрольную сумму всех дан- полезен. Одной только заменой DBI на DBIautodef вы из-
ных таблицы. Чтобы код не потерял наглядность, я не стал бавитесь от всех неопределённых значений, возвращае-
проверять в нём ошибки, ограничившись только самыми мых запросами. Если вы выбираете данные для отчётов,
важными и необходимыми процедурами. Я имею в виду наш модуль может весьма и весьма облегчить вашу рабо-
вызов функции quote_identifier. Ни в коем случае не под- ту. Но у него есть и важные недостатки.
ставляйте в SQL-запрос имя таблицы «как есть». Это сразу Во-первых, не станет ли подобное поведение метода
создаст большую брешь в безопасности. Остальные про- fetchrow_array помехой? Надеюсь, вы всё хорошо проду-
верки не так принципиальны, и читатель может добавить мали?
их сам – по вкусу. Во-вторых, а как поведут себя методы fetchrow_arrayref
Чем же плох этот метод? Ответ может показаться фи- и fetchrow_hashref? А многочисленные методы selectrow_array,
лософским, но весь мой опыт показывает, что за этой фи- selectall_arrayref и их близнецы? Документация DBI не го-
лософией стоит железный прикладной смысл. ворит ничего определённого о том, какой из этих мето-
Дело в том, что модуль DBI реализует определённую дов является «основным». Это может зависеть от конк-
абстракцию. Он, как известно, передаёт запросы серверу ретного DBD-драйвера, и здесь надо быть предельно ос-
и получает данные. Обратите внимание: он не формирует торожным.
запросы, он их только передаёт. Конечно, эта абстракция В-третьих (и, на мой взгляд, это наиболее важно), наш
соблюдена не совсем строго, не все методы одинаково хо- метод снова нарушает логику DBI, ведь DBI не производит
роши для разных запросов и наоборот. Но в данном случае никаких манипуляций с данными, он их просто передаёт.
мы нарушили концепцию. Не лучше ли в данном случае сделать одну-единственную
Не менее важно и то, что DBI задумывался как интер- функцию, избавляющую вас от неопределённых значе-
фейс, не зависящий от конкретной СУБД. Мы же, добавив ний? Этот вопрос не риторический, ответ зависит от конк-
метод md5, прочно привязались не только к конкретной ретных обстоятельств. Если вы выберете более «правиль-
базе данных, но и к конкретной её версии. Если учитывать ный» подход и создадите простую функцию, то вам придёт-
тот факт, что мы никому не навязываем наш модуль и не ся скорректировать весь код, включив эту функцию вез-
позиционируем его как универсальный, то наше «преступ- де, где это необходимо. А если код писали не вы? А те, кто
ление» не будет казаться столь уж большим, но концепция его писали, уже уволились и забыли вообще, как это напи-
всё равно оказывается попрана. сано? Тогда, возможно, лучше попрать свои религиозные
Я вовсе не утверждаю, что наш метод md5 не применим чувства и грубо наступить на горло идеалам, заложенным
или вреден. Если посмотреть на него непредвзято, то он в архитектуру DBI.
ничем не хуже, скажем, метода last_insert_id(). Но, следуя
по этому пути, надо быть предельно осторожным. Если вы Заключение
разрушите абстракцию модуля DBI, то он во многом утра- DBI не случайно написан объектно-ориентированным. Его
тит свою ценность. Возможно, методы и функции, проти- конструкторы разделены на продуманные компоненты,
воречащие философии DBI, лучше выносить в другие мо- которые делают его ещё более гибким при наследовании.
дули? Нужно взвесить все «за» и «против», прежде чем на- Всё это открывает перед разработчиком бескрайние про-
чать кодировать. сторы для совершенствования DBI, что может существен-
но облегчить разработку и/или перенос и адаптацию уже
Замена NULL-значений на лету существующего кода.
Давайте переопределим метод fetchrow_array так, чтобы Но прежде чем вы начнёте улучшать DBI, обязательно
он автоматически заменял все неопределённые значения сделайте две вещи: ещё раз внимательно прочитайте доку-
на строку «N/A». ментацию – возможно, то, что вам нужно, уже реализовано;
и взвесьте все «за» и «против», ведь DBI является фунда-
1: use strict; ментом многих программ, и малейшие неточности в фун-
2: @DBIautodef::ISA = qw(DBI);
3: @DBIautodef::db::ISA = qw(DBI::db); даменте могут покривить всё здание.

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


IMHO

В поисках профессиональной этики


сисадминов

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

Ф
ормирование профессии сис- пов задумывался любой автор, добро- на данную тему [2], отслеживая изме-
темного администратора тес- совестно подходящий к процессу опи- нение среды и спроса, но разделы, пос-
но связано с созданием общих сания системного администрирования. вященные «вечным вопросам», почти
представлений о принципах деятель- Например, широко известно «толко- не менялись и путешествовали из из-
ности сисадминов. Такие принципы, вание от Эви Немет». В нашей стра- дания в издание. Поэтому оказалось,
безусловно, должны опираться на тех- не познакомились с ним по перево- что принципы деятельности сисадмина
нологические особенности профессии, ду второго издания руководства сис- Linux, согласно изданию 2002 года [3],
но создавать стойкую и непротиворе- темного администратора [1] от группы буквально повторяют морали от 1995
чивую систему этических норм, неза- авторов под предводительством это- года [1]. Быть может, авторы нашли то
висимую от уровня развития техноло- го специалиста. И хотя далее Эви Не- самое, что уже более не совершенс-
гии. О необходимости таких принци- мет опубликовала много литературы твуется? Предполагаю, что нет! Эви

78
IMHO
Немет и компания были проповедни- сиональной этики, начиная с книг Эви ми (всем известный конверт с паро-
ками подчинения деятельности сисад- Немет и завершая другими публикаци- лем суперпользователя) дает доста-
минов корпоративной политике. А при- ями, и поставлю задачи, не нашедшие точно ясную картину ошеломленного
знаком зрелости профессии является отражения в указанных работах. человека, который только-только разо-
создание независимой системы про- брался с проблемами и спешит поде-
фессиональных норм. Например, та- Примитивная литься своими рецептами. Особо тро-
ких, что регламентируют деятельность корпоративная этика гательно упоминание авторов о том,
адвокатов, врачей и даже бухгалтеров Вопросы общего характера в трудах как «машины другого факультета ин-
в развитых странах! Эви Немет и команды рассматрива- фицировали весь университетский го-
Когда пытаются рассмотреть дан- ются в самом начале, как «основные родок». Вот проблема-то! К чести ав-
ную проблему, то, как правило, рас- задачи системного администратора», торов, они не повторили этот же при-
суждают со стороны некой абсолют- и ими же завершаются книги упомя- мер в версии [3]. Вообще в [3] практи-
ной и абстрактной правды или соци- нутого «сиквела», это глава «Страте- чески нет примеров из университетс-
ального заказа. Например, чтобы ав- гия и политика». Иногда заголовки ва- кой практики. Хотя, быть может, дело
томобиль доехал из точки А в точку рьируются, но общая схема повторяет- в элементарном взрослении и смене
В с оптимальной скоростью, рассмат- ся с педантичностью плана школьного места работы.
ривают, сколько надо залить бензи- сочинения: введение в профессию, ос- Но даже на таком примитивном ма-
на, как надо «давить» акселератор, новной блок «технических аргументов» териале Эви Немет сотоварищи сдела-
какого качества должно быть дорож- и заключительное напутствие. ли ряд очень важных замечаний, кото-
ное покрытие, и никто, подчеркиваю, – Учитывая хронологию и некоторые рые нельзя не процитировать и про-
никто! – не пытается рассмотреть дан- положения этих материалов, отнесу их комментировать:
ную проблему с точки зрения «само- к начальному этапу осмысления про- ...Вы ...захотите стать штатным
го» автомобиля. А «ему» лучше во- фессиональной этики. Даже «основ- администратором. ...проблем с по-
обще никуда не ездить, а стоять чис- ные задачи» представляют собой прос- иском работы у вас не будет. Но от-
теньким в гараже. Так и с системным то набор абстрактных пожеланий рабо- ношения с коллегами и руководс-
администрированием, все вариан- тодателя. Вроде того, что бы вы хотели твом ... обязательно обострятся.
ты рекомендаций созданы явно с по- от сисадмина, но стеснялись это поп- [1, 1.6]
дачи заказчиков. Причем трансфор- росить. Авторы постоянно сбиваются Это фактическое признание, что си-
мация произошла незаметно. Нача- на бытовые примеры и случаи из уни- садмин является участником обычного
лось все с книжек, подобных пресло- верситетской практики самозаявлен- сервисного антагонизма. В версии [3]
вутой серии «библий» от Эви Немет. ных админов. И временами откровен- оно отсутствует, так как там уже декла-
Затем идеи сортировки сисадминов но признаются, что описывают предмет рируется подчинение сисадмина кор-
по методам ведения работы на «бан- с позиции новичка: «Вы можете обна- поративной политике, а внутри корпо-
дитов», «фашистов» и «идиотов» про- ружить, что системное администриро- рации антагонизм неприемлем, так как
никли в массовое сознание [3]. И за- вание вам нравится, и захотите стать там царит «тимбилдинг» (team building –
вершилось все вполне официаль- штатным администратором.» [1, раз- методика сплочения коллектива).
ным бойскаутским катехизисом [5] дел 1.6]. Забавно, что и к публикации Ответственное лицо должно
от Red Hat Inc., претендующим на ис- семью годами позже [3, раздел 1.9] ав- иметь диктаторские полномочия.
тину в последней инстанции. Но пред- торы снова в нерешительности и бук- [1, 32.2]
ставители профессиональной группы вально слово в слово повторяют совет. Конечно, это в адрес сисадмина
тоже имеют свои интересы и тоже мо- За семь лет можно бы и определиться в период ликвидации проблемы. В поз-
гут нуждаться в защите. Этот вопрос с выбором профессии! дней версии [3] снова отсутствует. Ну
также должен регулироваться про- Итак, рассмотрим, как специалис- какая диктатура может быть в устояв-
зрачным образом. тами под руководством Эви Немет по- шейся корпоративной иерархии?
Получается, что и требования об- нимаются принципы деятельности сис- Вышестоящее руководство часто
щества к представителям профессии, темных администраторов. Буду исхо- не имеет ни малейшего представле-
и претензии самих профессионалов дить из того, что вы имеете возмож- ния о том, чем занимаются систем-
должны получить некоторое формаль- ность ознакомиться с подлинника- ные администраторы. [1, 32.8]
ное выражение и закрепление в виде ми [2], и здесь стану отмечать только Данное положение в [3] еще более
соглашения. Со стороны общества та- важные, с моей точки зрения, или при- усугублено. Раздел «Как руководить
кое закрепление создается признани- мечательные положения. руководителями» стал короче, но на-
ем норм поведения профессиональной Прежде всего авторы используют полнился конкретными замечаниями
группы и поддержкой этих норм, выра- эмпирические и экспертные правила. и выводами. Например, в число непо-
женной законодательно. Самые сильные аргументы: «Мы бесе- нятливых руководителей добавлены
Конечно, в рамках одной журналь- довали с видными деятелями в облас- «менеджеры нетехнического звена».
ной статьи невозможно решить эти ти системного администрирования...» Удваивайте или утраивайте вре-
вопросы. Здесь лишь попытаюсь оп- и «Мы знаем одну фирму...». Но в це- мя, которое, на ваш взгляд, по-
ределить направления формирова- лом оперирование интуитивно понят- надобится для решения ... задач.
ния такой системы норм или профес- ными истинами и бытовыми рецепта- [1, 32.8]

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


IMHO
Очень важное положение, присутс- пы (в данном случае стереотипы бе- те системных администраторов мно-
твующее и в [1] и в [3]. На мой взгляд, зопасности). гое строится на доверии. [3, 29.8]
это меткое замечание вместе с преды- Но вместе с тем в [3] возник ряд но- Вот оно как! То есть этика есть,
дущим предложением подчеркивает, вых утверждений: но как набор моральных норм, укреп-
что сисадмин обязан действовать ис- ...администратору необходим до- ляющих доверие к ... К чему же? И да-
ходя из профессиональных, а не обще- ступ к копиям важных данных, на- лее Эви Немет поясняет:
принятых взглядов на его работу. Эви ходящихся в компьютерах и на вне- Администратор должен соблю-
Немет оправдывает это профессио- шних носителях. [3, 29.2] дать конфиденциальность инфор-
нальными рисками. Логика совершен- Иначе говоря, сисадмин тем эф- мации, с которой работают пользо-
но прозрачна. Поскольку никто не име- фективнее работает, чем меньше ог- ватели, и защищать профессиональ-
ет представления о сути работы сисад- раничений в доступе он имеет. ные секреты компании. [3, 29.8]
мина, то в случае неудачи он рискует Системные администраторы Ну вот и проговорились – все-та-
необъективным расследованием. Если обычно не отвечают за то, что поль- ки интересы компании в первую оче-
же работа пройдет «гладко», то по той зователи хранят на своих компью- редь! И это на фоне того, что сисад-
же причине никто не усомнится в оцен- терах. [3, 29.3] мин не несет ответственности за со-
ке трудозатрат. Хорошо подмечено. Если развить держимое пользовательских компью-
Системные администраторы ... эту мысль, то системные администра- теров, с одной стороны, и обязан до-
часто забывают, что они – поставщи- торы не могут отвечать за процесс ра- носить о нарушении лицензий – с дру-
ки услуг, а пользователи – их клиен- боты пользователей, в результате ко- гой! Прямо каша какая-то! Уму не пос-
ты. Многие администраторы втайне торого образуются те самые данные, тижимо, как выполнить все рекоменда-
считают, что системы принадлежат за которые они не отвечают. Но чуть ции хитроумной Эви Немет и ее сума-
им... [1, 32.9] далее уже не так лаконично авторы тошных соавторов.
Дословно повторено в [3]. Ну, ес- выворачивают все наизнанку, дока- В заключение можно только по-
тественно, надо же показать сисад- зывая, что: радоваться, что работы [1, 3] созданы
мину, что все кругом не его, а вот сам ...чем больше вы контролируе- выходцами из академической среды,
он всем окружающим полностью обя- те использование интернет-ресур- а не искушенными последователями
зан. Очень напоминает: все, что твое, сов, тем большую ответственность Хаббарда. И поток поведенческих ре-
то общее, а вот что общее, то уже несете за действия пользователей. комендаций, выработанный в локаль-
не твое. Но обратный вывод, что си- [3, 29.3] ных сетях кампусов, не такой уж боль-
садмин обязан компании лишь в ме- И уж совсем непоследовательно шой. Но обращаю ваше внимание, как
ру оплаты его услуг, почему-то авторы группа авторов с Эви Немет во гла- на авторов давит необходимость сде-
забыли сделать! ве высказывается в отношении нели- лать реверансы в пользу их корпора-
В продолжении этой мысли авто- цензионного копирования програм- тивных работодателей.
ры возвращаются к тому, что им труд- много обеспечения. Там даже нельзя
но определиться кто же прав в реше- процитировать твердую рекоменда- Народные представления
нии вопросов типа «сисадмин vs нани- цию. Просто отсутствует конкретная Вне всякой зависимости от литера-
матель» и признаются: фраза, которая точно описывает авто- турной версии самоосознания сисад-
Некоторые качества хорошего рскую позицию. Вместо этого какие-то минского профессионализма, в пред-
системного администратора проти- бесхребетные поучения: ставлениях окружающих, да и в са-
воречат друг другу. [1, 32.9] ...помните, что речь идет о вашей мой среде системных администрато-
В [3] прояснение так и не снисхо- личной и профессиональной чест- ров, тоже зарождались некие зачат-
дит к ним, и авторы снова повторяют ности. [3, 29.3] ки стереотипов поведения. Но только
это высказывание буквально. Хотя если следовать предложенно- не в виде моральных кодексов, а в ви-
Далее замечание на первый взгляд му ими же принципу разделения отвес- де всяких фольклорных форм, напри-
совсем не по теме этики и морали: твенности, то сисадмин не должен от- мер, анекдотов. Но самое лучшее, на-
Что делает резервная копия? вечать за копии ПО, нарушающие ли- иболее полное и, несомненно, извест-
Надежно нарушает защиту файла. цензии. Но авторы здесь требуют от си- нейшее воплощение этого принадле-
[1, 32.14] садминов вопреки всякой логике «сту- жит перу Стефана Зелински [4]. Оте-
Это самое парадоксальное экс- чать» на своих клиентов. чественные любители «сетевого юмо-
пертное мнение, процитированное Использование термина «эти- ра» знакомы с переводом [5], который
в [1]. В версии [3] отсутствует. Веро- ка» в [1] можно заметить, но и только. чуть короче оригинала. В этом произ-
ятно, администраторы linux-систем не В контексте раздела «Военные исто- ведении рассматривается в утриро-
занимаются резервным копировани- рии и этика» первое с избытком, а вто- ванной форме поведение 4 типов сис-
ем, по мнению Эви Немет и компании. рое лишь как синоним балластной мо- темных администраторов, отличаю-
Но нам интересно это высказывание, рали. А вот в [3] уже специально объ- щихся этическими установками и со-
так как оно признает, что даже в пов- яснена авторская позиция: ответственно мотивацией.
седневной деятельности сисадминов Невыдуманные истории и эти- Технический бандит, администра-
постоянно складываются ситуации, ка поведения. При чем здесь этика, тор-фашист, маньяк и идиот последо-
ломающие общепринятые стереоти- спросите вы? Дело в том, что в рабо- вательно попадают в типичные про-

80
IMHO
изводственные ситуации. Каждый вые квоты. Пытается уволить пок- дом последней версии можно ознако-
действует в силу собственных убеж- лонников игры в xtrek.» Правилам миться в [6]. Наиболее старый из раз-
дений и привычек. По замыслу ав- работы в сети Эви Немет посвяща- мещенных в Сети оригиналов мож-
тора, ни один не добивается успеха. ет в [3] целый раздел. Нет нужды но найти по адресу [7] и определить,
На этом и построен комизм положе- повторять, что использование се- что они слабо эволюционируют. Ко-
ния. То есть тут должен содержаться ти для игр они не предусматрива- нечно, можно предположить, что мне-
определенный юмор. Но, увы, не всег- ют. ние специалистов Red Hat Inc. являет
да именно тот, что планировал автор.  Ситуация 6. «Глупые» вопросы собой наиболее свежий и, значит, на-
И возможно, при детальном рассмот- пользователей. Технический бан- иболее верный взгляд на обсуждае-
рении в этом замечательном произве- дит просто издевается над чайни- мый предмет. Но на деле это не так.
дении оказывается еще более основа- ками. Маньяк ведет себя как иди- Требования не только много раз про-
ний для смеха. от из ситуации 5. Идиот увлекает- дублированы, но и часто противоре-
Несмотря на желание автора вы- ся панибратством. И снова админ- чат одно другому. Общее впечатление
смеять методы администратора-фа- фашист делает практически то, таково, что авторы стремились не ос-
шиста, наряду с остальными, очень что может привести к успеху: «Бло- тавить сисадмину никаких шансов ук-
часто именно его действия происхо- кирует вход пользователя в систе- лониться от выполнения придуманных
дят в рамках ожидаемого, и именно му, пока тот не представит веские ими обязательств. Далее буду по-по-
они оказываются более успешными, доказательства своей квалифика- рядку анализировать каждое утверж-
чем действия остальных. Рассмотрим ции». Эви Немет в [3, раздел 29.2] дение «Философии системного адми-
выборочно несколько типовых ситуа- предлагает не допускать к работе нистрирования» от Red Hat Inc.
ций из [5]. пользователей, пока они не согла- 1. Автоматизировать все, что
 Ситуация 1. Нехватка дискового сятся с правилами использования. можно. Естественно, не нужно пони-
пространства. Технический бан- Если предполагается осознанное мать буквально. Безусловно, не в си-
дит погружается в пучину исследо- согласие, то оно подразумевает на- лах сисадмина автоматизировать все.
ваний и прогнозов. Маньяк прос- личие квалификации, достаточной Но даже с такой поправкой – «усту-
то удаляет самые большие файлы. для понимания и применения пра- пайте старикам, помогайте женщи-
Идиот самые большие файлы пы- вил. нам» – данное правило не приемле-
тается упаковать. А вот админ-фа-  Ситуация 7. Установка новой опе- мо. И оговорка, мол, поищите снача-
шист: «Активно пользуется квоти- рационной системы. Техничес- ла решение в Интернете, тоже ниче-
рованием диска.» Автор пытается кий бандит ведет себя как типич- го не меняет. Это правило фактичес-
передернуть ситуацию: «Не допус- ный пользователь Gentoo. Маньяк ки призывает системного админист-
кает никаких исключений, чем пол- просто всех выкидывает из систе- ратора заняться несвойственной ему
ностью останавливает деятельность мы. Идиот копирует дистрибутив- работой в стиле «технического бан-
разработчиков». То есть в этом слу- ный диск в ядро. А админ-фашист: дита» Стефана Зелински [5]. Заду-
чае разработчики настолько слабо- «В первую очередь изучает законо- маемся, чем же должен заниматься
умны, что не реагируют на сообще- дательные акты против производи- сисадмин и кто он такой вообще? Во-
ния операционной системы. Воз- теля, поставляющего программное первых, сисадмин – это нанятый со-
можно, ситуация взята из практи- обеспечение с ошибками». Ну раз- трудник, а во-вторых, он должен об-
ки. (Ситуации 2 и 3 пропустим.) ве это не разумно? служивать эксплуатационный цикл
 Ситуация 4. Авария загрузочно- информационных систем (далее ИС),
го диска. Технический бандит со- Раскроем карты, как же Стефан Зе- и не более! Создание новых сущнос-
вершает чудеса и восстанавливает лински определил типаж администра- тей или объектов своей работы не вхо-
все сам. Маньяк сводит все к скан- тора-фашиста – «Обычно законченный дит в его задачу. Даже самое первое
далу. Идиот не замечает ничего. тунеядец, вынужденный занимать- обоснование «любое задание, возни-
А вот админ-фашист: «Начинает ся администрированием системы». кающее более одного раза» надо счи-
расследование аварии...» То есть Очень мило! Это так типично для си- тать вздорным! В работе системного
делает то, что и требуется. Кстати, садмина. Ведь недаром лень счита- администратора не возникает ника-
предложения в [3] наиболее близ- ется добродетелью системного адми- ких заданий. Вся его работа подчине-
ки действиям администратора-фа- нистратора. Похоже, Стефан Зелинс- на и полностью обусловлена возмож-
шиста. ки попал прямо «в яблочко», совсем ностями программного обеспечения
 Ситуация 5. Слабая производи- не целясь. Он умудрился указать са- и аппаратуры. Что значит, далее ци-
тельность сети. Технический бан- мый правильный стиль поведения си- тирую из [6], «возникло более одного
дит опять занимается какой-то са- садмина! Хотел посмеяться, но вмес- раза» и, чуть далее, «проверка сво-
модеятельной модификацией. Ма- то этого научил! бодного дискового пространства»?
ньяк просто размыкает кабели. Это откровенный бред! Или в эксплу-
Идиот делает нечто непотребное. Изощренная атируемой ИС предусмотрена дан-
А вот админ-фашист снова на вы- корпоративная этика ная отчетность, или нет. Не может ру-
соте: «Звонит в Беркли и АТ&Т, при- Но, безусловно, всех превзошли гу- ководство вдруг поставить такую за-
ставая к ним, как установить сете- ру из Red Hat Inc. С русским перево- дачу. И не может сам системный ад-

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


IMHO
министратор, однажды проснувшись, тизированных систем. Вопрос нуж- Хотя, быть может, я что-то не так
вдруг озаботиться данной пробле- но ставить так, что ИС должны обла- понял. И авторы опуса на самом де-
мой. Но все проясняется далее. Цити- дать свойствами самодокументирова- ле предлагают иное. Цитирую: «От-
рую: «функции, связанные с деятель- ния. Например, из предыдущего тези- дел бухгалтерского учёта испытыва-
ностью компании», и, самое смешное, са – «проверка свободного дискового ет трудности с сервером базы данных,
«загрузка новых данных на веб-сер- пространства», если такой параметр который временами очень медленно
вер…». Вот и итог развития подобной протоколируется, чем данные отчеты работает. Вы планируете остановить
ущербной логики. Сисадмина превра- не документация? Ведь можно рас- сервер, заменить процессорный мо-
щают в «палочку-выручалочку», в до- сматривать некий мониторинг, а мож- дуль на более мощный...». Да нет, все
полнительного сотрудника рекламно- но и задокументировать моментальное верно! Полный вздор! «Перевожу»
го отдела или в аварийного бухгалте- значение выбранного параметра. процитированное: отдел бухучета за-
ра. Вы этого хотите? Я нет! Таким образом, если ИС строится планировал модернизацию оборудо-
Итак, сисадмин должен заниматься по устойчивым индустриальным и кор- вания; для этого была запланирована
эксплуатацией, а не автоматизацией. поративным стандартам, то не возни- модернизация сервера; для чего бы-
Вся автоматизация должна рассматри- кает никаких проблем, требующих не- ло куплено новое оборудование; и это
ваться как отдельная задача. И на пе- штатного документирования. То есть все прошло массу согласований, начи-
риод выполнения этой задачи систем- документировать надо лишь, что нуж- ная с финансовых и кончая процедур-
ный администратор становится разра- но. В противном случае неверно вы- ными... Вам все еще кажется, что си-
ботчиком. Теперь задумаемся. Если брано программное обеспечение, садмин должен прийти в бухгалтерию
наниматель оплачивает работу сисад- требующее неординарной настройки, и рассказать о запланированной мо-
мина исходя из 100% занятости, то си- или принят на работу бездарный си- дернизации? Есть маленькая разница
садмин-разработчик или осуществля- садмин, выполняющий все работы од- между «рассказать» и «известить». Со-
ет свою внедренческую деятельность ному ему ведомым способом. Не знаю, гласитесь, что «известить» не уклады-
за свой счет, или в ущерб основной ра- что хуже. Вероятно, надо учитывать, вается в категорию общения. Это бли-
боте. Третьего не дано! Следователь- что будет дороже! же к командному наречию. Именно то-
но, какая-либо автоматизация не вхо- 3. Общаться как можно больше. му, к которому в реальной практике об-
дит в обязанности сисадмина. Все ра- Это самый смешной раздел! В глазах щения и приходится прибегать.
боты по модификации ИС должны оп- всех пользователей сисадмин, в луч- Но кое-что верно подмечено. Здесь
лачиваться отдельно и, возможно, да- шем случае, «домовой из аппаратной». авторы не могли не признать, что сле-
же как отдельный проект, с привлече- В глазах сисадмина пользователи, дует максимально оградить пользо-
нием субподрядчика. в лучшем случае, назойливые источ- вателей от ненужных им технических
Таким образом, исключая прими- ники проблем. Рассказывать пользо- подробностей. Сформулируем наш
тивное скриптостроительство, сисад- вателям о структуре системы или не- подход в данном вопросе: надо все-
мин не должен заниматься никакой безопасно, если они въедливые, или ми возможными способами ограничи-
автоматизацией! Если же в вашей бесполезно во всех остальных случа- вать интерес пользователей к опера-
практике возникает подобная необхо- ях. Вообще глупо это делать заранее. циям обслуживания ИС. Почему? Если
димость, рассматривайте ее как мо- У нормального сисадмина должно хва- вы практикующий сисадмин, а не тео-
дернизацию системы. Если сисадмин, тать время только на ответы, а никак ретик, то легко догадаетесь: они никог-
ваш подчиненный, занят этим, значит, не на инициативные лекции. В анали- да не должны иметь возможность ис-
в первоначальной спецификации ИС зе рассматриваемого тезиса возни- пользовать служебную информацию
есть ошибки. кает сильное ощущение, что авторы о действиях сисадмина, чтобы списать
2. Документировать все, что мож- спутали пользователей и заказчиков. на него свои проблемы!
но. Здесь вздорность видно даже не- Причем это не описка, это системная 3.2. Рассказывайте пользовате-
вооруженным глазом. Внимательный ошибка, так как, оказывается, у данной лям, что вы делаете. Здесь уже при-
читатель должен и сам заметить, что идеи есть еще и подпункты, детализи- меняется суггестивная технология
такая постановка задачи есть следс- рующее это заблуждение. Рассмотрим для закрепления рефлекса подчине-
твие из только что обсужденного за- их в том же порядке. ния сисадмина. Подумал – рассказал,
блуждения. Ибо, когда возникает про- 3.1. Рассказывайте пользовате- приступил к работе – продолжай бол-
блема документации? Только тогда, лям, что вы собираетесь делать. Ес- тать непрерывно! Можно в ответ пов-
когда сисадмин выполнил нештатную ли выполняется плановая операция, торить контраргументы из предыдуще-
модификацию. И только в этом слу- то надо не рассказывать, а предуп- го раздела, чтобы закрепить процесс
чае он должен задокументировать ее, реждать, иначе выполняется опера- антивнушения.
так как все ординарные действия уже ция по запросу пользователя и в рам- 3.3. Рассказывайте пользовате-
описаны в руководствах, сопровожда- ках штатных обязанностей сисадмина, лям, что вы сделали. Ошибка оче-
ющих ИС и ее компоненты. и, значит, опять же не о чем рассказы- видна. Безусловно, все модифика-
Более того, если задуматься, то про- вать. Да и что может быть вздорнее, ции должны описываться. Безуслов-
цедура документирования, как сугубо чем болтливый и «липучий» сисадмин? но, все работы должны протоколиро-
ручной процесс, в корне противоре- Ну разве что генерал, бегущий вприп- ваться. Но не в качестве темы для бе-
чит принципам эксплуатации автома- рыжку в мирное время! сед с пользователями (вспомните па-

82
IMHO
нибратствующего «маньяка» из заме- шали инструкции, прочли документа- вышать свои полномочия или тракто-
ток Зелински), а именно в том смыс- цию, то непонимание может иметь ис- вать свои обязанности расширитель-
ле, как это рекомендует Эви Немет. точник только в неформальном аспек- но. Общечеловеческое правило «мож-
Информируйте руководство о том, те. Тут мудрецы из Red Hat Inc. впер- но все, что не запрещено» в произ-
что собираетесь делать, что делае- вые затрагивают этику. Они извиня- водстве не работает. Ну ясно же, если
те и что сделали. Для чего? Дословно ются, что употребляют вообще такой за каждое действие заказчик должен
из [3, 29.6]: «...если необходимо соб- термин, как «пользователи», но сра- платить, то перечень действий уже за-
рать аргументы в пользу найма до- зу вслед за этим, ничтоже сумняшись, ранее описан и согласован сторонами.
полнительного персонала или покупки именуют их «ключевым звеном успеш- Но далее еще забавнее: «Это не озна-
нового оборудования.», и, чуть далее, ного администрирования». Здорово, чает, что вы должны относиться к со-
«он (документ. – А.Б.) может стать се- да! Не люди, а звенья. Но я приветс- трудникам как к злоумышленникам».
рьезным оружием в ежедневных раз- твую такую откровенность. Итак, все- Хм! Тогда не понятно, кто может угро-
борках.». Замечаете, как изменился таки админ-фашист и здесь «рулит»! жать безопасности не подключенных
контекст работы сисадмина от описан- 6. Знать свое дело. Вот это са- к Интернету систем. Наверное, «зеле-
ного в работах Эви Немет до того, что мое противоречивое место катехизи- ные человечки»? Но потом изощрен-
существует в грезах инженеров из Red са от Red Hat Inc. Вы, наверное, поду- ные авторы из Red Hat Inc. начинают
Hat Inc. Задумайтесь, что вам ближе? мали: составил документацию, расска- уже прямо противоречить своим же
4. Знать свои ресурсы. Вот сно- зал ее наизусть, повторно инвентари- рекомендациям.
ва элемент внушения. Если, следуя зировал ресурсы, подружился с поль- 7.1. Риски социальной инжене-
рекомендации выше, все задокумен- зователями и их семьями, да еще при рии. Здесь совершенно однозначно
тировано и даже, как предложено да- этом можно решить, что производил рекомендуется относиться ко всем
лее, несколько раз произнесено вслух все эти действия неосознанно, без зна- пользователям как к потенциальным
публично, то что еще нужно? Быть мо- ния, что делает! Бред, конечно! Да и нарушителям. Что, в общем-то, пра-
жет, продекламировать перед сном? не о работе сисадмина здесь вооб- вильно и логично. Но чуть далее все
Или, возможно, этап документирова- ще. Вы же прочли заголовок раздела: выворачивается наизнанку. Сначала
ния, по логике Red Hat Inc., может про- «Изощренная корпоративная этика». странное: «На самом деле... у вас во-
изводиться в ситуации, когда предмет Цитирую по [6, раздел 6]: «Вы должны обще не будет полномочий вырабаты-
работы сисадмина и собственно объ- понимать, чем занимается ваша орга- вать правила, не говоря уже о том, что-
ект документирования ему известен низация». Во как! Правда, далее они бы обязывать их выполнять.» Теперь
не полностью? Ну а финальное закли- пытаются выкручиваться: «Это можно понятно, зачем надо познакомиться
нание вообще трудно понять: «Отсутс- свести к одному вопросу: каково назна- с пользователями поближе? Чтобы уп-
твие «ситуационной осведомленнос- чение систем, которые вы администри- рашивать их в приватной обстановке!
ти» в отношении доступных ресурсов руете?». А, спрашивается, чем отлича- Ну а потом все в точности, как у Сте-
часто хуже, чем полное отсутствие ос- ются письма с контрактами на постав- фана Зелински в сценарии действий
ведомленности». «Покрутил» это, как ку памперсов от переписки риэлторов? «идиота» в [4] ситуация 6: «Публикуй-
конфетку, ничего не понял! Быть мо- Вероятно, как в известном анекдоте: те ссылки на статьи по вопросам бе-
жет так: «полное отсутствие осведом- пишите письма прописью – они быст- зопасности в вашей внутренней поч-
ленности заведомо лучше, чем отсутс- рее дойдут по назначению. Завершает- товой рассылке». Тем, кто примет эту
твие осведомленности в конкретной ся все репликой в стиле Дзен: «Вы об- глупость за «чистую монету», рекомен-
ситуации»? Очень напоминает пове- наружите, что ваши повседневные ре- дую сразу представить, как сообще-
дение «идиота» в описании Стефана шения стали лучше». То есть для вас ние формата BagTrack получит дирек-
Зелински. Неужели в Red Hat Inc. хо- это станет полной неожиданностью. тор его предприятия. Хотя, быть может,
тели именно такого? Прямо-таки корпоративная терапия! я не прав. Тут, скорее, предлагаются
5. Знать своих пользователей. За- 7. Безопасность не может быть действия в стиле «технического бан-
гадочное требование. Если сисадмин второстепенной задачей. Начина- дита», когда упомянутый персонаж по-
знает свои ресурсы, все задокумен- ется, как в анамнезе параноика: «Вне мещал советы в практически нечитае-
тировал и все начитал каждому поль- зависимости от того, что вы думае- мые источники, так как, я уверен, эти
зователю, то неужели можно предпо- те о среде, в которой работают ваши письма пользователями станут выки-
ложить, что он еще не познакомился системы, вы не можете считать ее бе- дываться «в корзину» без прочтения.
с каждым из них? А! Быть может, на- зопасной. Даже автономные системы, 8. Планировать. Снова, как в анек-
до узнать их приватные данные? Же- не подключенные к Интернету, могут доте: «Мужик, ты ведь не за гриба-
ны, дети, домашние любимцы... Веро- быть в опасности». Прочитав это, я на- ми в лес ходишь?», то есть речь опять
ятно, именно так, поскольку подчер- чинаю понимать, откуда у сисадминов не о планировании в технологичес-
кивается: «как вы сможете понять, ка- развивается та самая болезнь, что опи- ком смысле. Это очередной гипно-
кие системные ресурсы нужны пользо- сала еще Эви Немет в своих трудах блок. Его полезная нагрузка нуле-
вателям, не понимая самих пользова- и заметила, что в результате ее си- вая. Ну разве можно всерьез прини-
телей?» Задумаемся, в каком случае садмины склонны считать все ресурсы мать такие рекомендации, как требо-
возможна ситуация непонимания поль- своей собственностью [1, 32.9]. Сисад- вание экстраполировать заявления ру-
зователей? Если пользователи услы- мин ни в коем случае не должен пре- ководства: «Сказанное вскользь ... за-

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


IMHO
мечание о готовящемся новом проек- есть соответствующий диагноз, опи- ют определенные профессиональные
те является верным знаком, что в ско- сывающий поведение людей, навяз- преимущества. Например, врачебная
ром будущем вам придется поддержи- чиво думающих о неизбежных физи- этика запрещает врачующему исполь-
вать новых пользователей». Заключе- ческих явлениях. Но это тема иного ис- зовать ситуацию, создавшуюся в про-
ние пропитано шаманизмом: «Умение следования в изданиях для лиц другой цессе выполнения процедуры лечения,
видеть такие знаки (и соответствующе профессии. Здесь же подчеркну, что, для нанесения вреда пациенту.
на них реагировать) облегчит жизнь по сути, все разглагольствования в [6] Ну, скажете, да сколько угодно!
вам...». Откровенный сюрриализм! Ви- не имеют никакого отношения к адми- Примите, какой угодно вычурный ко-
дать, неспроста в среде админов ходит нистрированию. Они, скорее, описыва- декс и наслаждайтесь этой абстракт-
шутливый совет «не курить» руководс- ют правила поведения сисадмина-но- ной ерундой. Но секрет не в том, что-
тва, а читать. вичка в крупной компании: ты должен бы самому себе выдумать правила.
9. Предвидеть непредвиденное. сделать все возможное и невозмож- А в том, чтобы заставить общество
Можно только продолжить императив- ное, но, что бы ты не сделал, все рав- признать их силу!
ный ряд: слышать неуслышанное, до- но будешь не прав. Вернемся к врачу. Врач, которому
гадываться о несуществующем, де- доверяют в силу его профессиональ-
лать невозможное, ... пойди туда, не А о чем вообще речь? ной этики, может оказаться объектом
знаю куда, принеси то, не знаю что... Надо признать, что и Эви Немет, и Сте- давления тех, кто захочет использо-
Вероятно, последнее и является целью фан Зелински гораздо ближе подошли вать данное преимущество в своих це-
этой типичной нейролингвистической к решению вопроса об успешной стра- лях. И вот общество признает за врача-
обработки. Как и в предыдущем разде- тегии поведения сисадмина, чем со- ми право на защиту. Так, законом оп-
ле, сисадмину просто не дают рассла- трудники Red Hat Inc. с их незамысло- ределяются понятия врачебной тайны.
биться. Вы что-то услышали – начните ватыми бойскаутскими рекомендаци- То есть врачебная этика закрепляется
об этом думать и развивать в мыслях. ями. Объяснение тривиально. Этичес- законодательно!
Если возможно предположить сущест- кими нормами может обладать только Теперь задумаемся, почему у вра-
вование какой-то проблемы, действуй- личность, а не корпорация или какое- чей, юристов и даже аудиторов есть
те так, будто бы она непременно слу- то иное юридическое лицо, или госу- признанная законом профессиональ-
чится! И вот пример: «Известно, что дарственное образование. И, значит, ная этика, а у, например, военных ее
его (дискового пространства. – А.Б.) чем далее правила поведения личнос- нет! Уточню, чтобы военные и прочие
постоянный недостаток является фи- ти от стереотипов поведения толпы, служащие не обижались, и повторю:
зическим законом, таким же, как и за- тем больше в них морали. Поэтому ре- у них нет признанной законом про-
кон тяготения. Потому разумно пред- комендации Red Hat Inc. столь неудач- фессиональной этики. А на все попыт-
положить, что в какой-то момент вы ны. Они вообще не служат профессио- ки ее им дать они отвечают сплочен-
столкнетесь с крайней необходимос- нальным интересам системных адми- ным отказом. Например, этика служа-
тью в дополнительном дисковом про- нистраторов, хотя и размещены в до- щих должна требовать публичности
странстве. Что же в таком случае дол- кументах, предназначенных в помощь и прозрачности их приватных бюдже-
жен делать системный администратор, сисадминам. Остальные же просто от- тов в части доходов и расходов. Они же
который предвидит непредвиденное? ражают ранние фазы процесса форми- имеют преимущество – значит должны
Вероятно, вы можете держать несколь- рования этики сисадминов. взять и обязательство, а не ссылаться
ко запасных дисков на случай аппарат- Здесь самое время задуматься. За- на общегражданские права и охрану
ных проблем». У вас еще нет несколь- чем сисадминам профессиональная «прайвиси» тех, кто и так не имеет воз-
ких дисков, лежащих в шкафу на слу- этика? Есть масса профессий, кото- можности получать взятки. А этика со-
чай непредвиденного? Немедленно пи- рые прекрасно обходятся общечелове- трудников правоохранительных орга-
шите докладную записку руководству ческими этическими нормами. Напри- нов и вообще людей с оружием долж-
и потребуйте их купить! А в обоснова- мер, сантехники не имеют собственно- на требовать от них исключительной
ние укажите, что «увидели непредви- го морального кодекса ассенизаторов. порядочности в его применении, а зна-
денное». Но не удивляйтесь ответной Почему сисадминые должны обрести чит, и закрепленного законом более
реакции! собственную этику? строгого порядка наказания за зло-
С моей точки зрения, два послед- Сначала попытаемся определить, употребления. Но и они благоразумно
них раздела «Философии системного что такое профессиональная этика. предпочитают не выделяться из общей
администрирования» откровенно вну- Итак, существует общечеловеческая массы народа. Может быть, сисадми-
шают сисадмину чувство вины за лю- этика. Но некоторые профессии вы- ны тоже в числе необремененных эти-
бое событие. Даже такое, что кудесни- рабатывают собственные, отличные кой профессий?
ками из Red Hat Inc. приравнивается от всеобщих этические нормы. Такие
к закону тяготения. Падают яблоки, все нормы, основываясь на особенностях С чего начать
равно виноват сисадмин! Ну не знаю, деятельности представителей некото- Давайте определим, есть ли в деятель-
как по версии Red Hat Inc. может спо- рой профессии, предписывают им до- ности системных администраторов не-
койно спать сисадмин, обслуживаю- полнительные ограничения. То есть, которое преимущество перед осталь-
щий компьютеры, которые обязатель- всем можно, а вот некоторым запре- ными гражданами, которое потребует
но когда-то сломаются! В медицине щено. Такие ограничения компенсиру- выработки сдерживающих норм и пос-

84
IMHO
лужит отправной точкой для создания врачи, и адвокаты, и служители культа. ресурсам их предприятий, предохра-
профессиональной этики и соответс- Но максимальное сходство наблюдает- няет сисадминов от проблем!
твующего закона, ее защищающего. ся с профессией аудиторов. Это тоже В заключение приведу пример
Первое, на что можно обратить вни- молодая профессия, и она тоже име- из собственной практики. Один мой
мание, это замеченные еще Эви Немет ет дело как с приватной, так и с про- уважаемый заказчик, не желая де-
чрезвычайные полномочия сисадми- изводственной информацией. И вот ржать электронные сообщения на об-
нов [1, раздел 32.2] в отношении всех как решается вопрос в данном случае. щем сервере, забирает их не по про-
информационных ресурсов [3, раздел В Федеральном законе об аудиторс- токолу IMAP, а по протоколу POP3.
29.2]. Припомним еще и фразочку из [1, кой деятельности присутствует гла- При этом все сообщения, проходящие
раздел 32.14] о том, что резервная ко- ва 8 «Аудиторская тайна» [8]. Эта гла- через почтовый сервер, всегда дуб-
пия фактически взламывает любую ва полностью устанавливает обязан- лируются в специальный пул перед
защиту. Причем данное соображение ности и ответственность аудиторов пе- фильтрацией на вирусы и спам. И хо-
имеет значимость как в отношении ред клиентами-доверителями. Указан- тя я в договор обслуживания неизмен-
компаний, так и в отношении частных ная норма закона служит в поддержку но вношу пункт, обязывающий меня
пользователей. Человек в своей пов- соответствующих принципов из Кодек- исключить работу на возможных кон-
седневной жизни все более становится са этики аудиторов России, а именно курентов, но все-таки снимает беспо-
зависимым от компьютеров. Они дав- понятия о конфиденциальности и свя- койство только вера в правоту утверж-
но стали нормой в почти каждой го- занных с ним обязательствах [9]. дения Эви Немет на счет неисправи-
родской квартире. Они давно проник- Таким образом, кодекс этики сис- мой неграмотности заказчиков!
ли в телефоны, фотоаппараты, плейе- темных администраторов, поддержан-
ры DVD и даже в стиральные машины. ный законодательно, должен защитить 1. Evi Nemeth, Garth Snyder, Scott Seebass,
Все эти устройства, сопровождая де- интересы клиентов и обеспечить га- Trent R. Hein. UNIX System Andministration
ятельность человека, неизбежно на- рантию прав сисадминов, в силу об- Handbook. Prentice Hall PRT, 1995. Пе-
капливают информацию о тех сторо- стоятельств оказавшихся причастны- ревод на русский: «UNIX: руководство
нах жизни, которые принято считать ми к деловым интересам и правовым системного администратора», BHV,
личными. конфликтам их клиентов. 1997.
Если сейчас комплекс мероприя- Но это лишь час ть проблемы 2. Книги Эви Немет на сайте Ozon.ru –
тий по изъятию информации начина- и часть возможных преимуществ. http://www.ozon.ru /context/detail /id /
ется с обесточивания мест размеще- Здесь снова сделаю лирическое от- 336421.
ния компьютеров, продолжается бло- ступление. В нашей стране государс- 3. Evi Nemeth, Garth Snyder, Trent R. Hein.
кированием комнат и завершается твенные мужи издавна озабочены па- Linux Andministration Handbook. Prentice
непосредственной выемкой систем- дением престижа правоохранитель- Hall PRT, 2002. Перевод на русский:
ных блоков, то лишь потому, что за- ных органов. А проблема решается «Руководство администратора Linux»,
интересованные органы еще не дога- просто! Надо выработать этический Издательский дом «Вильямс», 2003.
дались, что к данной процедуре мож- кодекс соответствующих служб и за- 4. Stephan Zielinski. KNOW YOUR UNIX
но привлечь системных администра- крепить его законодательно. Что слу- SYSTEM ADMINISTRATOR – A FIELD
торов, которые по закону не могут от- чается при нарушении этики врачом GUIDE. 1992. – http://stephan-zielinski.
казаться (как свидетели) и произвес- или адвокатом в культурной стра- com/static/sysad.txt.
ти выемку данных в фоновом режиме, не? Провинившийся не только не- 5. «Об администрировании UNIX» – http://
используя служебный доступ систем- сет ответственность в рамках закона, www.sensi.org/~alec/unix/d_admin.html.
ного администратора. Ставшие таки- но и изгоняется из самой профессио- 6. «Философия системного администри-
ми привычными попытки спрятать сер- нальной среды. А у нас – нет! Таким рования» от Red Hat, Inc. в переводе
вер вместе со всей IT-группой в подвал, путем формируется не только уважи- И.Песина – http://old.linux.kiev.ua:8080/
в филиал, да хоть под лестницу, даже тельное отношение к профессиональ- ~ipesin/translations/rh-phy/ch-philosophy.
отправить сисадмина в отпуск вместе ной этике, но и к самим представите- html , оригинал.
с главным бухгалтером на время про- лям данных профессий, чего у нас так- 7. Red Hat Enterprise Linux 3: Introduction
верки, пусть вас не вводят в заблуж- же не наблюдается. Какую еще выго- to System Administration. Chapter 1. The
дение: сисадмины уязвимы! ду получают в этом случае профессии, Philosophy of System Administration –
Получается, что системные адми- обладающие подобным строгим ко- http://www.redhat.com/docs/manuals/
нистраторы рискуют подвергнуться дексом поведения? Они гарантируют- enterprise/RHEL-3-Manual/admin-guide/
давлению как со стороны государс- ся от случайных стихийных конкурен- ch-philosophy.html.
тва, так и со стороны работодате- тов и становятся участниками культур- 8. Федеральный закон от 7 августа 2001 г.
ля. Вспомните рассуждения Эви Не- ного рынка. Ибо в противном случае №119-ФЗ Об аудиторской деятельнос-
мет об ответственности сисадминов лишь недогадливость клиентов, ко- ти. Статья 8. Аудиторская тайна – http://
[3, раздел 29.3]. торые по замечанию наблюдательной www.ckat.ru/normdoc/zau/zaus8.htm.
Это не надуманная ситуация. В по- Эви Немет [1, раздел 32.8] совершен- 9. Кодекс этики аудиторов России. IV. Фун-
добное положение попадают все, но не понимают, какую власть над ни- даментальные принципы. 16.5. Конфи-
кто в силу специфики работы прони- ми может иметь человек, обладающий денциальность – http://www.docaudit.ru/
кает за границы частной жизни. Это и доступом ко всем информационным documents/kodeks/4.

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


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

Суровая правда, скрытая


за розовыми очками:
история компании Transmeta
«Мы переработали саму концепцию микропроцессора
для создания совершенно нового мобильного мира».
Единственная надпись, существовавшая на сайте
Transmeta вплоть до 2000 года.

Дмитрий Мороз
Компания Transmeta принесла практически совершенные процессоры в массы, однако
собственноручно допущенные ошибки, жестокая конкуренция и привередливые пользователи
не позволили ей завоевать место под солнцем.

Пятилетняя конспирация на рынке компаний, выпускающих про- строго засекречены. Лишь с анонсом
В 2000 году в средствах массовой ин- цессоры. До этого момента Transmeta первого продукта компании стали из-
формации стали активно циркулиро- была мало кому известна, поскольку вестны некоторые подробности по по-
вать слухи о появлении нового игрока все ее внутренние разработки были воду её деятельности.

86
ретроспектива
Для начала стоит сказать пару слов придумал для неё простое и лаконич-
о Дэвиде Дитцеле (David Ditzel) – одном ное название – «ПО для морфинга ко-
из основателей компании. Талантли- да» (Code Morfing Software). Благодаря
вый инженер, Дитцел успел поработать этому инженеры смогли добиться по-
и в AT&T Bell Laboratories, где он воз- лучения первых денежных вливаний
главлял группу, создавшую микропро- в свою компанию, которые произве-
цессор CRISP, первый RISC-чипа AT&T, ли: инвестиционная компания Walden
и в Sun Microsystems, где ему довелось Venture Capital; Пол Аллен (Paul Allen),
руководить лабораторией SPARC Labs, один из основателей Microsoft; а так-
а также занимать пост технического же скандально известный финансист
директора подразделения, занимав- Джордж Сорос (George Soros). Теперь
шегося микроэлектроникой. Впервые ничто не мешало Дитцелу, ставшему
же он стал известен в 1980 году как генеральным директором Transmeta,
один из авторов публикации «К вопро- начать вербовку талантливых кадров.
су о компьютере с сокращённым набо- В поисках инженеров он посе-
ром команд» (The Case for the Reduced тил университеты Беркли, Стэнфор-
Instruction Set Computer), в которой да, Вашингтона, а также Масачусетса.
впервые была упомянута аббревиа- Кроме молодых, в компанию набира-
тура «RISC». лись и «ветераны» – из компаний Sun, Дэвид Дитцел
Вернёмся в 1994 год, время его Silicon Graphics и Hewlett-Packard. Од-
пребывания в Sun. В то время Дит- нако от добровольцев из Intel Дитцел ное. Количество патентов, регистри-
цел вместе со своим коллегой, Ко- сразу отказывался, ссылаясь на жела- руемых компанией, непрерывно рос-
лином Хантером (Colin Hunter), экс- ние сохранять полнейшую секретность ло, к тому же масла в огонь подлила
периментировали с техникой бинар- разработки, а также избегать возмож- новость о найме на работу создателя
ной трансляции в попытке улучшить ного возникновения в будущем судеб- ядра Linux Линуса Торвальдса (Linus
работу ОС Windows на рабочих стан- ных исков по вопросам интеллектуаль- Torvalds). Теперь, по словам генераль-
циях Sun. Если кратко, то «бинарная ной собственности. ного директора Transmeta, под кры-
трансляция» представляет собой про- Со временем Transmeta обзаве- лом компании были собраны лучшие
граммный «слой», являющийся пос- лась собственным офисом в горо- специалисты по динамической ком-
редником между внутренней логи- де Санта-Клара, Калифорния, неда- пиляции.
кой процессора и операционной сис- леко от штаб-квартиры Intel. Имен- В мае 1998 года партнёр Transmeta,
темой. Он «на лету» превращает x86- но здесь трудились 240 набранных корпорация IBM, прислала ей первые
код во внутреннюю систему команд сотрудников компании. Правда, уз- изготовленные образцы процессора,
процессора, тем самым позволяя ему нать, над чем именно, в то время бы- и уже через несколько дней инжене-
выполнять программы, написанные ло невозможно. «Они соблюдают боль- ры добились его более или менее ста-
для «тандема» Wintel. Благодаря ис- шую секретность, – говорил анали- бильной работы. «То, что он вообще за-
пользованию «бинарной трансляции» тик Dataquest Натан Бруквуд (Nathan работал, – просто чудо», – говорил ин-
архитектура чипа может быть значи- Brookwood). – На протяжении года ник- женер компании Скот Дрейвис (Scott
тельно упрощена. то из них не проронил ни слова о про- Draves). «К сожалению, процессор ра-
К сожалению, руководители Sun делываемой работе». Кстати, именно ботал очень медленно. Одно только его
не были заинтересованы в радикаль- предположения Бруквуда относитель- включение занимало 30 минут време-
ном изменении дизайна своих процес- но создаваемого в недрах Transmeta ни. Что же касается производительнос-
соров семейства SPARC, поэтому оба «процессора, отдалённо совместимо- ти, чип работал в сотни раз медленнее
инженера, прихватив с собой коллег го с архитектурой х86», высказанные нормального процессора Pentium».
«по цеху» Боба Смелика (Bob Cmelik) им ещё в 1998 году, оказались наибо- К счастью, постоянная работа над
и Дуга Лэирда (Doug Laird), покинули лее точными. ошибками позволила с каждой новой
компанию, решив основать свою. Вот слова независимого разработ- ревизией процессора получать всё
Transmeta была зарегистрирована чика Джона Вартона (John Wharton): более быстрые и стабильно работа-
в апреле 1995 года. Основная миссия – «В то время я знал Дитцела уже 15 лет, ющие чипы. Теперь инженеры могли
разработка процессоров со сверх- и тем не менее я не имел ни малейше- сконцентрироваться на главной пос-
длинным командным словом (VLIW – го понятия, чем они занимаются. Я не- тавленной перед ними задаче – энер-
Very Long Instruction Word). Для того однократно спрашивал Дейва, однако гопотреблении. Для этого 10 сотрудни-
чтобы позволить компании развивать- он лишь улыбался и говорил, что рас- ков Transmeta отделились от осталь-
ся дальше, Дитцел и Лэирд возложи- скажет мне, только если я подпишу со- ных и основали группу, занявшуюся
ли на себя обязанности по поиску ин- глашение о неразглашении». разработкой технологии энергосбере-
вестиций. К середине 1995 года, дабы Несмотря на желание Дитцела со- жения процессора, впоследствии полу-
более доходчиво объяснять потенци- хранять всё в тайне, общественность чившей название LongRun. Созданная
альным инвесторам перспективы би- уже в 1997 году стала догадываться, за девять месяцев, она позволила чи-
нарной трансляции команд, Смелик что Transmeta готовит нечто незауряд- пу Transmeta ещё на стадии проекти-

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


ретроспектива
ра содержало пять модулей четырех
различных типов: двух блоков для
операций с целыми числами, одного –
для операций с числами с плавающей
запятой, одного – для операций с па-
мятью и еще одного, представлявшего
собой модуль управления переходами.
Одна молекула могла содержать до че-
тырёх команд (называемых атомами),
предназначенных для разных блоков
процессора, благодаря чему они мог-
ли выполняться одновременно. Их упа-
ковкой занимался программный транс-
лятор – Code Morphing Software (да-
лее – CMS). Поэтому эффективность
Программная иерархия процессора Crusoe
полной загрузки молекулы ложилась
рования потреблять ощутимо меньше ков) и ТМ3120 (планшетные компью- как раз на его плечи.
энергии, чем его конкуренты. теры, сверхминиатюрные ПК и проч.), Работал транслятор следующим
К 1999 году разработка архитек- а также один ноутбук и веб-планшет, образом. Во время процедуры POST
туры процессора, на которую, по сло- основанные на них. процессор отнимал у оперативной па-
вам Дуга Лэирда, компания потрати- Ну а сейчас немного приостановим мяти компьютера 16 Мб и резервиро-
ла десятки и сотни миллионов дол- наше повествование и рассмотрим ар- вал их под нужды программного обес-
ларов, была практически завершена. хитектуру Crusoe. печения CMS. И прежде чем происхо-
Приблизительно в это же время на- дила загрузка операционной систе-
чала приобретать популярность кон- Секретная начинка мы, этот эмулятор транслировал все
цепция переносных устройств с до- Crusoe представлял собой процес- команды архитектуры х86 в родные
ступом в Интернет – так называемых сор, основанный на базе архитектуры для Crusoe инструкции. Любая эмуля-
веб-планшетов. Основными критери- VLIW, которая также является серд- ция практически всегда отрицательно
ями для их создания являлись эко- цем процессоров Intel Itanium, Sun сказывается на производительности
номичный процессор и операцион- MAJC и Elbrus-2000. Дэвид Дитцел процессора, поэтому весь транслиру-
ная система, способная работать без комментировал отказ от использова- емый код хранился в вышеупомянутых
жёсткого диска. Пункт первый в акти- ния RISC, приверженцем которой он 16 Мб ОЗУ. Если был необходим пов-
ве Transmeta уже имелся, недостава- был на протяжении почти 20 лет, ещё торный «морфинг», готовый материал
ло лишь второго. Однако ведь не зря в начале 1998 года: «Изначально ар- просто загружался из оперативной па-
компания взяла на работу Линуса Тор- хитектура RISC была противником бо- мяти. Кроме того, в этом случае CMS
вальдса. «Изначально я занимался ис- лее сложной архитектуры типа CISC, производило дополнительную оптими-
ключительно вопросами, связанными да и предполагала немало досто- зацию уже транслированного кода для
с бинарной трансляцией, – говорил инств. Недаром практически каждая более эффективной работы с внутрен-
он. – Приблизительно в начале 1999 компания, производившая процессо- ней логикой Crusoe.
года, когда компания уже была готова ры, имела в своём активе минимум Для увеличения быстродействия
выйти на рынок, нам необходимо было один RISC-чип. К сожалению, на се- транслятора процессор был оснащён
доказать миру, что мы предлагаем не годняшний день дальнейшая разра- сравнительно большим объёмом кэш-
просто очередной клон процессоров ботка и усовершенствование этой ар- памяти. ТМ5400 содержал 128 Кб кэ-
Intel. Мы хотели продемонстрировать хитектуры становится всё более слож- ша первого уровня (разделённого
общественности продукт, не являв- ной задачей, к тому же сами RISC-про- пополам для инструкций и данных)
шийся персональным компьютером цессоры по своим размерам и энер- и 256 Кб – второго. Изначально для
или же ноутбуком, однако работавший гопотреблению догнали конкурентов. эффективной работы CMS эта величи-
на процессоре от Transmeta под управ- Я думаю, что особого смысла в про- на должна была составить 16 Мб, од-
лением ОС Linux и предоставлявший должении популяризации RISC боль- нако такое решение было бы слишком
пользователю доступ к сети Интернет. ше нет смысла». Как видно со слов дорогим, в результате чего разработ-
Вот так у нас и возникла идея созда- Дитцела, выбор новой архитектуры чики от него отказались.
ния веб-планшета». был очевиден. Использование в VLIW комбиниро-
Публичное представление нового Суть VLIW заключается в объеди- ванного аппаратно-программного ме-
процессора, получившего название нении нескольких элементарных ко- тода позволяет значительно сократить
Crusoe, состоялось 19 января 2000 го- манд процессора в одну большую инс- количество транзисторов в процессо-
да, через пять лет после начала работ трукцию, которую чип может выполнить ре, тем самым уменьшив его потреб-
над ним. Компания продемонстриро- за один такт. В случае с Crusoe она на- ляемую мощность. В Crusoe на крис-
вала общественности два процессора, зывалась молекулой и имела 128-бит- талле площадью 73 кв. мм содержа-
ТМ5400 (предназначенный для ноутбу- ную длину. Ядро данного процессо- лось 36,8 млн. транзисторов. Сравни-

88
ретроспектива
те эти показатели с таковыми для про- на его рыночное продвижение. Вот
цессора Pentium III Mobile: 106 кв. мм с этим как раз у Transmeta были боль-
и 44 млн. транзисторов. Однако ин- шие проблемы.
женеры Transmeta не остановились
на простом уменьшении процессо- Выход в открытый мир
ра и пошли ещё дальше, оснастив Во время представления Crusoe в ян-
Crusoe технологией энергосбереже- варе 2000 года Дитцел объявил, что
ния (LongRun). на данный момент компания ещё
В отличие от схожей технологии не нашла потенциальных клиентов.
SpeedStep корпорации Intel того пери- На протяжении последующих шес-
ода, LongRun позволяла процессору ти месяцев результат не стал лучше: Процессор Crusoe TM5600
в зависимости от загрузки изменять в списке появились компания S3, на-
тактовую частоту, а также напряжение мерившаяся производить различные го полугодия 2000 года составила нич-
питания на лету (причём без участия Интернет-устройства (Internet Apliance) тожные 358 тыс. долларов.
в этом операционной системы). Про- типа веб-планшетов, а также Quanta, Во время создания Crusoe компа-
цессор Crusoe, работающий на часто- занимавшаяся производством ноут- ния существовала за счёт многомил-
те 700 МГц, в зависимости от нагрузки буков. Однако расплывчатые пресс- лионных инвестиций, которые пос-
мог уменьшать этот параметр вплоть релизы – единственное, чем они кор- ле выхода процессора в свет прекра-
до 200 МГц. Напряжение питания в мили общественность на протяжении тились. Последние 88 млн. долларов
этом случае уменьшалось со штат- нескольких месяцев. Transmeta получила в июле. Теперь же
ных 1,6 В до 1,1 В. В этом режиме чип, Кроме отсутствия клиентов многих она должна была кормить 313 человек
по словам Transmeta, потреблял менее волновала скорость работы Crusoe. своего персонала самостоятельно. Вы-
1 Вт энергии, а в режиме «сна» – нич- Из-за необходимости эмулировать ход компании на фондовую биржу че-
тожные 0,08 Вт. архитектуру х86 производительность рез выпуск акций был запланирован
Напоследок стоит также отметить, процессора должна была быть ниже на 7 ноября. Общественность ожида-
что в Crusoe были встроены: контрол- конкурентов от Intel и AMD. Однако ла, что цены на акции Transmeta сра-
лер оперативной памяти типов SDRAM Transmeta предпочитала обходиться зу же поднимутся до заоблачных вы-
и DDR SDRAM, а также шинный интер- без демонстрации реальной скоро- сот, однако…
фейс PCI для взаимодействия с мик- сти работы своего детища, что мно- За неделю до этого корпорация
росхемой южного моста чипсета и ви- гих вводило в недоумение. «Каждый IBM, производившая Crusoe на своих
деоадаптером. По замыслу разработ- человек, которому удаётся погово- производственных мощностях и обе-
чиков интеграция этих комонентов рить с Дэйвом (Дитцелом), спраши- щавшая со временем выпустить мо-
в процессор должна была снизить ко- вает его о клиентах Transmeta. Но ни- дель ноутбука ThinkPad 240 на этом
нечную стоимость готовой системы, какого ответа он не даёт, – говорил процессоре, публично заявила о своём
уменьшить её размеры, а также энер- аналитик микропроцессорного рын- решении отказаться от его использо-
гопотребление. ка Линли Гвиннеп (Linley Gwennap). – вания. Ещё одна компания, Compaq,
На бумаге новоиспечённый про- К тому же компания до сих пор пуб- объявила о своих планах не исполь-
цессор выглядел довольно непло- лично не продемонстрировала про- зовать Crusoe, поскольку она «не на-
хо и оправдывал вложенные в него изводительность своего процессора. шла в нём больших преимуществ по
многомиллионные инвестиции (если Если бы Crusoe был настолько хорош, сравнению с продукцией конкурентов».
быть точным, за пять лет на создание насколько о нём говорят, Transmeta За день до выхода на торги за одну ак-
Crusoe было потрачено 119 млн. дол- уже бы давно разослала его обозре- цию компании брокеры собирались от-
ларов). Созданный компанией пакет вателям по всему миру. В большинс- давать не больше 18 долларов.
для тестирования скорости работы тве случаев, когда какая-нибудь ком- Однако 7 ноября её стоимость со-
Crusoe под названием Mobile Platform пания не отвечает на эти вопросы, она ставила 21 доллар. Почему так полу-
Benchmark, однако, демонстрировал что-то скрывает». чилось? Дело в том, что как раз в это
не голую производительность, а лишь Молчание было прервано в июле время в Интернете стали активно рас-
её соотношение к энергопотребле- 2000 года, когда Transmeta объявила пространяться слухи о заключении до-
нию. Конечно же, собственный чип о подписании контракта с Gateway на говора между Microsoft и Transmeta,
Transmeta был в этом тесте на высоте: поставку процессоров для проводных согласно которому последняя будет
при частоте 533 МГц ТМ5400 шёл прак- и беспроводных веб-планшетов (кста- разрабатывать аппаратную платфор-
тически вровень с 500 МГц Pentium III, ти, тех самых, которые она демонстри- му для новой операционной систе-
оставляя его далеко позади по коли- ровала в день презентации Crusoe), мы (которая позже получит название
честву потребляемой энергии и теп- рекламой и продажей которых бу- Windows for TabletPC), и многие бро-
ловыделению. дет заниматься America Online (AOL). керы воодушевились этой новостью.
В общем, всё было бы хорошо. Это была первая хорошая новость К счастью для компании, 13 млн. вы-
Но создание нового продукта – лишь для Дитцела и компании, поскольку пущенных акций позволили ей полу-
половина дела. Не меньше, а зачас- клиенты им нужны были больше возду- чить дополнительные 273 млн. долла-
тую гораздо больше труда уходит ха: прибыль компании в течение перво- ров для продолжения своего существо-

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


ретроспектива
таты первых независимых тестов были Попытка «завоевать»
просто разгромными: ТМ5600, работа- Америку
ющий на частоте 700 МГц, умудрялся Некоторые компании всё же решили
проигрывать чипу Pentium III с практи- рискнуть и выпустили модели своих
чески вдвое меньшей частотой, уве- ноутбуков на базе Crusoe. Среди них
личивая время автономной работы но- оказались: Sony, Toshiba, Hitachi, NEC,
утбука всего на 30%. Негативную роль Fujitsu и Sharp. Производители порта-
в этом сыграли: и неполная «загруз- тивных компьютеров в Стране восхо-
ка» молекулы командами; и отсутс- дящего солнца предлагали свою про-
твие поддержки набора инструкций дукцию на базе Crusoe лишь на собс-
Субноутбук Fujitsu Siemens Loox
на базе Transmeta Crusoe SSE; и 128-битная линия кэша второ- твенном рынке, однако как раз благо-
го уровня, нивелировавшая его боль- даря им Transmeta удалось продать 500
шой по тем временам объём; и общий тысяч процессоров в течение первого
PCI-интерфейс, который разрывался года их выпуска.
между графическим адаптером и юж- Этот показатель вселял в Марка
ным мостом; и отсутствие AGP-интер- Аллена надежду. К сожалению, за пре-
фейса (несмотря на то, что Transmeta делами Японии, устройства на базе
ещё с 1998 года являлась членом AGP- чипов Transmeta так и не появились.
IF – организации, разработавшей этот Единственная попытка Sony выпустить
стандарт); и ещё множество других на рынке США модель ноутбука состо-
факторов. ялась год назад, и с тех пор ни один
Не стоит забывать, что Intel всё это другой производитель не осмелил-
время не сидела сложа руки и вес- ся на подобный шаг. Об американс-
ной 2001 года представила версию ких производителях вообще не мог-
Pentium III с пониженным энергопот- ло быть и речи, поскольку их полно-
Субноутбук Casio Cassiopeia Fiva
на базе Transmeta Crusoe реблением, который был чуть-чуть стью удовлетворяли новые процессо-
«прожорливее» Crusoe, однако обеспе- ры Intel с пониженным и сверхнизким
вания и дальнейшего развития Crusoe. чивал гораздо больший уровень про- уровнем питания, стремительно завоё-
И этот факт грел душу, правда, сов- изводительности. вывавшие рынок.
сем не долго. Обвинения, выставленные Transmeta Не менее быстрыми темпами рос-
по поводу завышения данных относи- ли и убытки Transmeta. К середине 2001
Первые проблемы тельно производительности собствен- года её убытки за истёкший год соста-
Производители ноутбуков, анонсиро- ного процессора, сыпались отовсюду. вили 97,7 млн. долларов. при доходах
вавшие модели на базе Crusoe, всё Авторитетные издания старались от- в 16 млн. долларов.
не спешили с их выпуском на рынок. зываться о шокирующих результатах Ответ компании всему миру за-
Фактически первые ноутбуки на ба- как можно мягче. ключался в выпуске чипа ТМ5800, ко-
зе Crusoe увидели свет лишь спустя Дело дошло до того, что против торый отличался от своего предшес-
10 месяцев после официальной пре- Transmeta, которую ещё несколько лет твенника новой версией CMS, а так-
зентации процессора. На проходив- назад рынок называл чуть ли не на- же более совершенным 0,13 мкм про-
шей в октябре 2000 года выставке-кон- иболее перспективной молодой ком- цессом изготовления. Остаётся доба-
ференции Microprocessor Forum Дит- панией и пророчил «безоблачное» бу- вить, что IBM более не являлась пар-
цел наконец-то показал опытные эк- дущее, пошли её же собственные «при- тнёром Transmeta по его производс-
земпляры переносных машин, прав- верженцы» – инвесторы и акционеры, тву. Стремясь снизить цену на свою
да, их производителя присутствовав- обвинившие компанию в подтасов- продукцию, компания решила сме-
шие разглядеть не смогли. Эти ноут- ке результатов и обмане всего мира. нить изготовителя своих процессо-
буки были построены уже на следую- В результате головы полетели с плеч: ров, и заключила контракт с тайвань-
щей версии процессора – ТМ5600, пос- «отец» Transmeta, генеральный дирек- ской компанией Taiwan Semiconductor
кольку ТМ5400 не был принят рынком тор Дэвид Дитцел был обвинён в со- Manufacturing Co. Но сможет ли новый
«на вооружение». Новый чип отличал- крытии реальных результатов произво- процессор вернуть Transmeta былую
ся от своего предшественника лишь дительности Crusoe и смещён до пос- славу? Об этом мы поговорим в сле-
улучшенным техпроцессом, да увели- та технического директора. Его мес- дующий раз.
ченной 512 Кб кэш-памятью 2-го уров- то занял Марк Аллен (Mark Allen), при-
ня. К сожалению, даже он не скрасил шедший в январе 2000 года на пост ис- 1. http://www.wired.com
опасений многих аналитиков по поводу полнительного директора. Ранее рабо- 2. http://archive.salon.com
производительности Crusoe, которые тавший в компаниях Nvidia и C-Cube 3. http://www.arstechnica.com
позже всё же оправдались: процес- Microsystems, Аллен должен был «вы- 4. http://www.pcworld.com
сор Transmeta, несмотря на свой быст- вести компанию из сложившегося кри- 5. http://www.forbes.com
родействующий транслятор CMS, ока- зиса и сделать её функционирование 6. http://www.theregister.co.uk
зался очень медленным чипом. Резуль- более эффективным». 7. http://www.transmeta.com

90
bugtraq

Множественные уязвимости Обход аутентификации в x11vnc


в Microsoft Internet Explorer Программа: x11vnc версии до 0.8.2.
Программа: Microsoft Internet Explorer 5.01, 6.x. Опасность: Высокая.
Опасность: Высокая. Описание: Уязвимость существует из-за ошибки при об-
Описание: 1. Уязвимость существует из-за ошибки интер- работке аутентификационных запросов VNC. Удаленный
претации HTML-кода в определенной комбинации позиций. пользователь может обойти процесс аутентификации и по-
Удаленный пользователь может вызвать повреждение па- лучить доступ к целевой системе.
мяти и выполнить произвольный код на целевой системе. URL производителя: www.karlrunge.com/x11vnc.
2. Уязвимость существует из-за ошибки при обработке Решение: Установите последнюю версию (0.8.2) с сайта
таблицы каскадных стилей. Удаленный пользователь мо- производителя.
жет вызвать повреждение памяти и выполнить произволь-
ный код на целевой системе.
3. Уязвимость существует из-за ошибки в механизме Выполнение произвольного кода
воспроизведения HTML-кода. Удаленный пользователь мо- в продуктах McAfee
жет вызвать повреждение памяти и выполнить произволь- Программа: McAfee AntiSpyware 6.x, McAfee Internet Security
ный код на целевой системе. Suite 2006, McAfee Personal Firewall Plus 7.x, McAfee Privacy
4. Уязвимость существует из-за ошибок при инициали- Service 6.x, McAfee SpamKiller 7.x, McAfee VirusScan 10.x,
зации COM-объектов, которые не должны быть инициали- McAfee Wireless Home Network Security 2006.
зированы в браузере. Удаленный пользователь может с по- Опасность: Высокая.
мощью специально сформированной страницы выполнить Описание: Уязвимость существует из-за неизвестной
произвольный код на целевой системе. ошибки и позволяет выполнение произвольного кода. Под-
5. Уязвимость существует в механизме определения робности уязвимости не сообщаются.
источника выполняемого сценария. Удаленный пользо- URL производителя: www.mcafee.com.
ватель может выполнить произвольный сценарий в бра- Решение: В настоящее время способов устранения уязви-
узере жертвы в контексте безопасности другого домена мости не существует.
или другой зоны.
6. Удаленный пользователь может с помощью специаль-
но сформированного сценария получить доступ к содержи- Переполнение буфера
мому веб-страницы в другом домене или другой зоне. в Microsoft Internet Explorer
URL производителя: www.microsoft.com. Программа: Microsoft Internet Explorer 6.х с установленным
Решение: Установите исправление с сайта производите- исправлением MS06-042.
ля. Опасность: Высокая.
Описание: Уязвимость существует из-за ошибки провер-
Переполнение буфера в Clam AntiVirus ки границ данных при обработке URL на веб-сайтах, где
Программа: Clam AntiVirus 0.88.3 и более ранние версии. используется компрессия HTTP 1.1. Удаленный пользова-
Опасность: Высокая. тель может с помощью специально сформированного URL
Описание: Уязвимость существует из-за ошибки провер- вызвать переполнение буфера и выполнить произвольный
ки границ данных в функции pefromupx() в libclamav/upx.c код на целевой системе.
при распаковке PE-выполняемого файла, сжатого в UPX. URL производителя: www.microsoft.com.
Удаленный пользователь может вызвать переполнение ди- Решение: Microsoft рекомендует временно запретить ис-
намической памяти и выполнить произвольный код на це- пользование протокола HTTP 1.1 в Internet Explorer.
левой системе.
URL производителя: www.clamav.net.
Решение: Установите последнюю версию (0.88.4) с сайта Выполнение произвольного кода
производителя. в WFTPD
Программа: WFTPD 3.23, возможно более ранние вер-
Повреждение памяти в браузере Safari сии.
Программа: Safari 2.0.4 (419.3), возможно другие версии. Опасность: Высокая.
Опасность: Высокая. Описание: Уязвимость существует из-за недостаточной
Описание: Уязвимость существует из-за ошибки в функ- обработки входных данных в параметре SIZE. Удаленный
ции KHTMLParser::popOneBlock(). Удаленный пользова- пользователь может с помощью специально сформирован-
тель может с помощью элемента сценария в теге div пе- ного значения SIZE вызвать переполнение буфера и выпол-
реопределить содержимое страницы и вызвать повреж- нить произвольный код на целевой системе.
дение памяти. URL производителя: www.wftpd.com.
URL производителя: www.apple.com/macosx/features/ Решение: В настоящее время способов устранения уязви-
safari. мости не существует.
Решение: В настоящее время способов устранения уязви-
мости не существует. Составил Александр Антипов

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


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

SQL. Задачи и решения


Сергей Моисеенко
в этой книге. Все вопросы рассматри- DELETE. В третей части книги вы оз-
ваются на примере специально под- накомитесь с функциями Transact-SQL
готовленных учебных базах. Надо за- для работы со строками и данными ти-
метить, что рассмотренные ошибки па даты/времени. Также рассмотрены
при реализации не являются выду- типичные проблемы возникающие при
манными, это реальные запросы, ко- их использовании (генерация число-
торые присылали посетители сайта. вой последовательности, нумерация,
Первая часть книги посвящена реше- NULL-значения, трехзначная логика
нию задач, связанных с характерными и предложения WHERE, коррелирую-
ошибками при выборке данных (опера- щие запросы). В приложении находят-
тор SELECT). Начиная с самых простых ся детальные описания всех учебных
упражнений (например, найти в базе баз, а также даны подсказки и реше-
размеры жестких дисков у всех моде- ния для каждого из упражнений. Хо-
лей компьютеров стоимостью менее рошая книга которая будет интересна
500 долларов), последовательно слож- широкому кругу SQL-программистов,
ность заданий увеличивается. Далее желающих в свободное время поре-
В процессе работы каждый програм- рассматриваются вопросы, связан- шать интересные задачи, а также за-
мист на SQL (особенно начинаю- ные с манипуляциями данных в SQL: нятные упражнения.
щий) часто сталкивается с различны- оператор SELECT, предикаты, полу-
ми типовыми задачами, и что самое чение итоговых значений, использо-  Издательство: «Питер»
главное – ошибками при их реализа- вание в запросе нескольких источни-  Год издания: 2006
ции. Во время сопровождения сайта ков данных, традиционные операции  Количество страниц: 256
www.sql-ex.ru у автора книги накопи- над множествами, преобразование ти-  ISBN: 5-469-01362-6
лось большое количество именно та- пов и оператор CASE. Операторы мо-  Цена: ≈ 228 руб.
ких задач, часть которых он и изложил дификации данных: INSERT, UPDATE, Книга предоставлена издательством «Питер».

Ассемблер для процессоров


Intel Pentium
Юрий Магда
посредственно практический мате- семблерных процедур для Delphi 2005
риал начинается с главы, которая но- и Visual C++ .NET 2005). Не осталось
сит название «Организация вычисли- без внимания и рассмотрение ММХ-
тельных циклов», из которой вы узна- и SSE расширений процессоров Intel
ете о условных переходах и ветвлени- Pentium (команды передачи данных,
ях, организации циклов. Также в этой арифметические команды, упаковка
главе затронуты вопросы оптимиза- и распа