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

Журнал входит в перечень ВАК Минобрнауки РФ

№05(162)
май 2016

Шаблоны контейнеров
в Virtuozzo

Как писать мобильные


приложения быстрее

Технология Cucumber
Автоматизируем отчетность

ES Декораторы
Разбираемся в деталях

Защита от DDoS-атак
подручными средствами

Наука и технологии Наука и технологии Наука и технологии

Исследование воздействия Взаимосвязь отраслевой Создание ботов для Telegram:


некоторых параметров теста специфики бизнеса и уровня с использованием языка
LINPACK для гибридного кластера решаемых для него программирования Python
на производительность вычислений ИТ‑подразделением задач и облачной ОС Corezoid
Акция «Решения – в массы!»
Оформив редакционную годовую подписку на 2016 год
на смешанную версию журнала «Системный администратор»,
вы получите шанс рассказать на некоммерческой основе
о своем решении или продукте на страницах «Системного
администратора», а также на сайте издания. Мы готовы
поддержать своих подписчиков в кризис!

Минобрнауки РФ
Журнал входит в перечень ВАК

Только полезная
№05(162)
май 2016
информация
Шаблоны контейнеров
в Virtuozzo

Как писать мобильные


приложения быстрее
Бумажная
электронная
Технология Cucumber
Автоматизируем отчетность

ES Декораторы
Разбираемся в деталях
версии!
5440 руб.
Защита от DD oS-атак
вами
подручными средст
Все подробности проведения
Наука и технологии Наука и технологии акции – на сайте журнала:
Наука и технологии
Взаимосвязь отраслевой Создание ботов для Telegram:
Исследование воздействия
некоторых параметров теста специфики бизнеса и уровня
решаемых для него
с использованием языка
программирования Python
http://samag.ru/solutions2masses
LINPACK для гибридного кластера и облачной ОС Corezoid
на производительность вычислений ИТ-подразделением задач

Подписывайтесь
и продвигайте свои решения!
samag.ru/subscribe
В номере

12 52 56

АДМИНИСТРИРОВАНИЕ всемирного киберпространства от DDoS, совсем не обязательно по-


купать дорогостоящее оборудование или подписываться на сервис.
Хранение данных Любой администратор сервера может поучаствовать без дополни-
тельных материальных вложений, используя только знания и время.
04 Системы хранения данных. Часть 2. NAS. Сетевые Андрей Дугин
системы хранения данных являются неотъемлемой частью инфра-
структуры. Поговорим об их прошлом, настоящем и будущем. Аудит
Алексей Бережной
27 Проводим пентест. Часть 2. Сбор необходимой ин-
Виртуализация формации.Правильная идентификация версий ОС и ПО являет-
ся неотъемлемой частью успешной атаки. В статье мы поговорим
09 Шаблоны контейнеров в Virtuozzo. Оперативное о том, как это можно сделать.
развертывание контейнеров.Подготовка множества вир- Андрей Бирюков
туальных окружений с одной конфигурацией – задача для систем-
ного администратора нередкая. В предыдущей статье мы описали БАЗЫ ДАННЫХ
возможность использования для этих целей миграции и клониро-
вания, однако во многих ситуациях более удобным способом будет Инструменты
использование заранее подготовленных шаблонов.
Денис Силаков 32 Распараллеливание операций в Oracle. Часть 2.
Особенности и ограничения. Рассматриваются вопросы
Инструменты распараллеливания DDL-операций, SQL‑запросов и других опера-
ций в Oracle, а также особенности и ограничения, связанные с рас-
12 Поддержка филиалов средствами MDOP.Компонент параллеливанием.
DaRT пакета MDOP, применяемый совместно с встроенными средст- Владимир Тихомиров, Валерий Михеичев
вами операционной системы, позволит организовать эффективную
техподдержку филиалов. Изучаем 1С
Александр Пичкасов
37 Под капотом платформы 1С 8.3. Часть 1. Работа
БЕЗОПАСНОСТЬ с СУБД.Начнем знакомство с внутренним устройством платфор-
мы 1С 8.3 с самого важного – взаимодействия с СУБД.
Угрозы Олег Филиппов

16 Анатомия таргетированной атаки. Часть 2. Разви- 40 Общая схема оптимизации производительности


тие атаки.Используя накопленную за последние годы экспертизу 1С. Существует множество причин, из-за которых система на 1С
в расследовании целевых атак, в продолжение цикла статей опишем может медленно работать. Рассмотрим общий подход для оптими-
детальное развитие атаки, следуя четырем ее фазам, с реальными зации производительности, чтобы исключить ненужные действия.
примерами, рассмотрим функциональное применение инструментов Тимур Шамиладзе
в комбинации с различными техниками социальной инженерии.
Вениамин Левцов, Николай Демидов РАЗРАБОТКА

Механизмы защиты Мобильные приложения

22 Защита от DDoS подручными средствами. Часть 1. 44 Пишем мобильные приложения быстрее. Паттерн
DNS Amplification. Чтобы сделать свой вклад в защиту Наблюдатель и реактивное программирование.

2 май 2016 системный администратор


В номере

Выпуская на рынок пусть еще сырое, но востребованное прило- Хроники ИТ


жение, разработчик пробует захватить внимание аудитории и уйти
в  отрыв от конкурентов. Ранний старт дает возможность увидеть, 76 Семьдесят лет компьютерной эры. Первая декада:
насколько сама идея пришлась по душе пользователям, и скоррек- 1946 – 1956.Продолжаем публикацию хроник возникновения,
тировать дальнейшую бизнес-стратегию. становления и развития информационных технологий.
Андрей Пахомов Владимир Гаков

Тестирование НАУКА И ТЕХНОЛОГИИ

48 Автоматизируем отчетность по Cucumber-тестам 81 Исследование воздействия некоторых параметров


в  ExtentReports. Т ехнология Cucumber позволяет не только теста LINPACK для гибридного кластера на произ-
совмещать спецификации на разработку и тестирование продуктов водительность вычислений в зависимости от раз-
в одном источнике, но и удобно настроить автоматическое генериро- мерности задачи.Целью работы является экспериментальное
вание отчетов о прохождении таких тестов. исследование влияния значений параметров Nb и CUDA_DGEMM_
Анна Сергеева SPLIT теста LINPACK, представляющего собой решение модельной
системы линейных алгебраических уравнений методом LU‑разло-
Особенности языка жения, на  производительность вычислений на  гибридных узлах
кластера «Ломоносов» (МГУ, Москва).
52 Построение сайтов с использованием Hack.Рассмот- Куликов В.А., Чернышов А.В.
рим построение сайтов с помощью нового языка Hack, который яв-
ляется эволюцией PHP. 86 Взаимосвязь отраслевой специфики бизнеса
Александр Календарев и уровня решаемых для него ИТ-задач.В настоящей
статье показывается, что уровень решаемых ИТ-подразделением
56 ES Декораторы: разбираемся в деталях.В декорато- задач зависит не только от размеров организации и уровня управ-
рах JavaScript вроде бы нет ничего особенного, каждому разработ- ления, но и от отраслевой специфики бизнеса в разрезе четырех
чику, знающему теорию ООП, известен такой шаблон проектирова- технологических эпох (индустриальной, постиндустриальной, ин-
ния. Но только ли дело в ООП? И почему они становятся популярны? формационной и эпохи знаний). Результаты опроса руководителей
Александр Майоров ИТ-служб различных предприятий подтверждают такую взаимос-
вязь. Предложенная в работе методика определения уровня требо-
КАРЬЕРА/ОБРАЗОВАНИЕ ваний к решению ИТ-задач может быть использована в организации
работы ИТ-служб предприятий.
Аlma mater российских ИТ Славин Б.Б., Максимова Е.В.

62 Нина Романчева: «Совместная подготовка ИT- 90 Создание ботов для Telegram: с использовани-
специалиста в паре вуз  –  предприятие – это тре- ем языка программирования Python и облачной
бование сегодняшнего дня». В гостях у «Системного операционной системы Corezoid.В наше время бурного
администратора» – декан факультета прикладной математики и вы- развития ИТ-технологий огромную популярность набирают мессен-
числительной техники МГТУ ГА, кандидат технических наук, доцент джеры для телефонов и планшетов. Одним из самых совершенных
Нина Романчева. и технологически продвинутых мессенджеров является Telegram
Ирина Ложкина Messenger, который получает все большее распространение в рус-
скоязычной части интернета. Одна из особенностей этого приложе-
Лабораторная работа ния, отличающая его от конкурентов, – это боты, или «умные по-
мощники». В данной статье описывается процесс создания ботов
67 Лабораторная работа. Исследуем сокеты. Часть 2 для Telegram с помощью языка программирования Python и опера-
(продолжение).В предыдущем номере были описаны цели ра- ционной системы Corezoid. В начале работы рассматривается про-
боты, схема исследований, устройство и подготовка лабораторного цесс регистрации бота и некоторые простейшие команды. Заканчи-
стенда, ход проведения работы и отдельные компоненты. В данной вается статья рассмотрением преимуществ и недостатков двух этих
части познакомимся с оставшимися компонентами стенда. способов разработки.
Владимир Закляков Колосков В.Л., Павлов И.Ю., Иванов Е.Б.

Рейтинг ЗАЛ СЛАВЫ «СА»

72 Образование в сети: введение в программирова- 96 Человек и машина.Расскажем о человеке и вычислительной


ние на JavaScript.JavaScript один из популярнейших языков машине, носящих одно и то же имя. Об английском математике Алане
программирования, который используется в большинстве веб-про- Мэтисоне Тьюринге и созданной им «машине Тьюринга». Это опре-
ектов. С его помощью можно создавать и нативные приложения, деление требует кавычек, потому что это скорее абстрактная матема-
как это предлагает делать Microsoft для ОС Windows. А различные тическая схема. Впрочем, под руководством Тьюринга были созданы
библиотеки и расширения значительно увеличивают сферы его при- и вполне материальные – «в железе» – вычислительные устройства,
менения. сыгравшие важную роль в ходе Второй мировой войны.
Игорь Штомпель Владимир Гаков

системный администратор май 2016 3


Администрирование хранение данных

Визитка

АЛЕКСЕЙ БЕРЕЖНОЙ,
независимый консультант, системный архитектор, специалист по системам виртуализации
и резервного копирования, alexey.berezhnoy@tech-center.com

Системы хранения данных


Часть 2. NAS
Сетевые системы хранения данных являются неотъемлемой частью инфраструктуры.
Поговорим об их прошлом, настоящем и будущем

В предыдущей статье [1] шла речь о системах прямого под- функцией которого является хранение данных, полученных
ключения – Direct-attached storage (сокращенно DAS). от других участников информационного процесса.
В том числе разбирали и их недостатки – трудности при ор- По сути, NAS представляет собой сочетание системы
ганизации совместного доступа к файлам, а также низкую хранения информации (например, массив жестких дисков)
эффективность при управлении ресурсами. При дальней- и специальной программно-аппаратной платформы, позво-
шем развитии СХД эти недостатки компенсировались появ- ляющей подключить эту систему в локальную компьютер-
лением новых систем хранения данных. ную сеть (см. рис. 1).
В основном NAS используют в качестве носителя инфор-
Определение NAS мации жесткие диски. На это есть множество причин. Глав-
NAS – аббревиатура английского термина Network Attached ные из которых:
Storage. Дословно означает – «подключенное к сети сете- >> простота доступа к информации;
вое хранилище». На самом деле данное выше определение >> высокое быстродействие;
не совсем точное. Строго говоря, любой сервер подключен >> относительно невысокая стоимость хранения инфор-
к сети. Каждый компьютер имеет внутри себя некое храни- мации, которая при этом постоянно снижается благо-
лище данных, хотя бы данных для загрузки и работы опера- даря научно-техническому прогрессу.
ционной системы.
Для более точного описания NAS лучше подходит опре- Примечание. Не всегда Network Attached Storage стро-
деление «сетевой накопитель данных». То есть это не- ится только на жестких дисках. Например, существующие
кий узел локальной сети, главной и зачастую единственной аналогичные устройства могут быть построены на базе

Рисунок 1. Аппаратная организация NAS Рисунок 2. Внутренняя структура NAS

4 май 2016 системный администратор


хранение данных Администрирование

ленточных накопителей с применением файловой системы решение, на котором уже не один десяток лет системные
LTFS разработки IBM. Данная файловая система позволяет администраторы строили структуру обмена данными.
взаимодействовать с ленточным накопителем аналогично Для полного понимания идеологии Network Attached
работе с жестким диском. Storage рассмотрим обычный File Server на базе универ-
сальной операционной системы.
Отличие NAS от других систем СХД Существуют два варианта использования файловых сер-
Есть множество признаков, характерных для Network веров: в выделенном и невыделенном режиме. В последнем
Attached Storage, – это и наличие LAN-интерфейсов, и раз- случае компьютер представляет собой рабочую станцию,
витый стек сетевых протоколов, и программное обеспече- на которой работает пользователь, и одновременно на этом
ние, специализированное для работы в локальной сети. компьютере хранятся файлы других участников работы
Наверное, главным из отличительных факторов является в сети. Такая схема до сих пор применяется в небольших
обязательное присутствие сетевой файловой системы со- компаниях и домашних офисах (см. рис. 4 и 5).
вместного доступа [2]. К одному и тому же сетевому ресурсу Но даже файл-сервер используется в выделенном ре-
в составе NAS могут обращаться различные пользователи, жиме, его все равно можно приспособить для дополнитель-
серверные службы и даже другие NAS. ных функций. Например, компьютер можно использовать
Разумеется, для других систем хранения данных DAS как внутренний прокси-сервер, терминальный сервер, об-
и SAN такой совместный подход трудноосуществим, рабатывающий центр системы мониторинга и так далее.
так как это классические системы блочного типа, рассчи- Постоянное увеличение объемов хранимой и передава-
танные на подключение к серверу-клиенту в режиме внеш- емой информации потребовало их жесткой оптимизации.
него диска. Универсальная операционная система с множеством со-
путствующих программ требует дополнительных систем-
Составные NAS ных ресурсов. Кроме того, такая конструкция небезопасна.
В предыдущей статье [1], посвященной устройствам DAS, Универсальная система, позволяющая устанавливать бес-
говорилось о том, что сетевой серверный узел с прямым численное множество различных программ, более уязвима
подключением дискового хранилища (Disk Enclosure), для вирусов и атак со стороны злоумышленника, а также
по сути, является основой для построения более сложных ошибок со стороны ИТ-персонала.
устройств. Это в полной мере справедливо в отношении Помимо всего прочего, первоначальная настройка, за-
Network Attached Storage. Очень часто промышленные моде- пуск и последующая эксплуатация ПК-сервера на основе
ли NAS представляют собой головной компьютер (Controller традиционных серверных ОС требует значительной ква-
Enclosure), подключенный к локальной сети, работающий лификации, а порой и существенных временных затрат.
с внешним дисковым хранилищем (Disk Enclosure). Такая Все это неизбежно отражается на стоимости владения та-
схема имеет как свои положительные, так и отрицательные кими системами.
стороны (см. рис. 3). Это и потребовало создания систем хранения данных
Положительная сторона состоит в возможности легко на- нового типа, построенных на базе файловых серверов,
растить объем дискового хранилища, просто добавив еще но с существенными отличиями.
одно хранилище. В отличие от файловых серверов Network Attached
Еще один довод в пользу составных NAS – попытка по- Storage не допускает подобного творчества.
высить ремонтопригодность. Достаточно заменить голов- Главное отличие NAS от файловых серверов на основе
ную часть в случае выхода ее из строя, не затрагивая Disk универсальной операционной системы – оптимизация ап-
Enclosure. паратной платформы и всего программного обеспечения
Плохая новость заключается в том, что такую бесшовную
замену Controller Enclosure трудно реализовать на практи-
Рисунок 3. Схема NAS с внешним дисковым хранилищем
ке. Нужно, чтобы элементы управления дисковой системы,
такие как RAID-контроллер, операционная система и спе-
циальные драйверы, умели распознавать критически важ-
ную информацию: конфигурацию дисковых томов, уровень
RAID [3], наличие дисков в режиме Hotspare и так далее.
Поэтому крайне важно, чтобы вновь установленное про-
граммно-аппаратное обеспечение управляющей части уме-
ло полностью без ошибок распознавать такие тонкости.
Или должна существовать возможность заранее сохранить
конфигурацию с работающей системы, чтобы впоследствии
восстановить настройки при замене системы. В противном
случае можно легко потерять данные со всего хранилища,
и дополнительная мера по ремонтопригодности превратит-
ся в новую возможность уничтожения данных.

Отличие NAS от File Server


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

системный администратор май 2016 5


Администрирование хранение данных

Сети иерархические и одноранговые совместной работе аппаратного и программного обеспече-


Различия между выделенным и невыделенным серверами будут более по- ния. Программное обеспечение фактически представляет
нятны после небольшого экскурса в прошлое. В свое время (приблизитель- собой прошивку (firmware), записываемую на специальный
но в середине 1980-х) наметились два выраженных направления развития флеш-накопитель, который часто поставляется в виде не-
компьютерных сетей. съемного устройства, например, микросхемы на материн-
Первое направление предполагало наличие строго распределения ро- ской плате. Иногда в несъемном форм-факторе также по-
лей: на серверы и клиенты. Сетевая инфраструктура представляла собой ставляются процессор и базовый комплект оперативной
несколько выделенных серверов, соединенных сетевым оборудованием памяти. Модернизация таких устройств силами пользовате-
между собой и рядовыми участниками обмена данными в сети – рабочими ля, как правило, невозможна и выполняется только в специ-
станциями. Соответственно, предполагалось, что все данные хранятся ис- альных сервисных центрах.
ключительно на серверах, а рабочие станции являются просто средством В целях оптимизации использования аппаратных ресур-
доступа пользователей в компьютерную сеть. Такие сети получили назва- сов, а также в стремлении создать как можно более эко-
ние иерархические. Наиболее типичной иллюстрацией такого подхода номичную модель, применяются процессоры, отличные
можно считать Novell Netware [5]. от архитектуры x86, например, ARM [7], MIPS [8] и даже
Второй подход заключался в возможности использования ресурсов PowerPC [9].
всех компьютеров в сети. Члены такого сетевого сообщества могут об- Обычно аппаратные NAS имеют минимум средств управ-
мениваться данными, передавать короткие сообщения и даже совместно ления. В большинстве таких моделей полностью отсут-
использовать периферийные устройства друг друга, например, принтеры. ствует возможность подключения монитора и клавиатуры,
При этом нет необходимости выделять компьютер на роль отдельно стоя- а все действия по обслуживанию выполняются либо с по-
щего сервера. Все компьютеры – участники сетевого обмена имеют равный мощью специальных кнопок на корпусе, либо по сети че-
уровень и могут являться одновременно и клиентами и серверами в одной рез стандартные средства управления, либо посредством
и той же инфраструктуре. Такие сети получили название – одноранговые. специальных портов для подключения компьютера со спе-
Примером такой сети может послужить сеть LANtastik [6]. циальной программой настройки. В качестве одного из та-
Разумеется, оба подхода имеют свои преимущества и недостатки. Что- ких средств зарекомендовал себя Windows Hyperterminal,
бы максимально использовать преимущества обоих методов, появились позволяющий работать с устройством через COM-порт (ин-
так называемые смешанные сети. Большинство сетей в современных офи- терфейс RS-232).
сах принадлежит именно к этому типу. Например, тонкие клиенты подклю- В качестве еще одной характерной особенности наличия
чаются к терминальному серверу, который, в свою очередь, сам является можно назвать использование узкоспециализированных
клиентом для других серверов. версий BIOS.
Прекрасным примером аппаратного Network Attached
Storage может служить NETGEAR ReadyNAS.
именно для сетевого хранения данных и управления диско- Преимуществом аппаратного NAS является относитель-
выми массивами. но более эффективное использование системных ресурсов
Часто специализированные сетевые хранилища вообще за счет лучшей интеграции оборудования и ПО. Следует так-
не имеют возможности подключения монитора и клавиату- же отметить высокий уровень безопасности в первую оче-
ры, и управление производится только с помощью сетевого редь с тем, что аппаратный NAS является более закрытым
веб-интерфейса. При этом выбор программ, которые мож- от внешнего воздействия неподготовленного персонала
но установить дополнительно, ограничен производителем. (невозможно подключить консоль, применяются специали-
Обычно предполагается всего лишь несколько дополни- зированные BIOS и firmware и так далее).
тельных плагинов, расширяющих небогатый функционал Ограничением при использовании аппаратного NAS слу-
Network Attached Storage. Подобные ограничения продикто- жит все та же закрытость системы. Трудности в установке
ваны стремлением производителя снизить вероятность сбо- дополнительного оборудования. Чаще всего разрешается
ев по вине ПО стороннего производителя, а также неква- использовать только специализированные комплектующие
лифицированного вмешательства со стороны потребителя. от производителя данной системы хранения, ассортимент
Прекрасным примером такого узкоспециализированного которых неширок, а цены достаточно высоки.
устройства служит Netgear ReadyNAS [4]. Другое ограничение связано с дополнительными про-
Примечание. Некоторые модели NAS производители граммными модулями, которые поставляются в виде plugins
снабжают дополнительными возможностями, например, они и число которых также крайне мало. С одной стороны, такие
могут выступать в качестве принт-серверов или контрол- драконовские меры призваны повысить отказоустойчивость
леров домена Active Directory, но это скорее исключение аппаратного NAS, с другой – значительно ограничивают воз-
из правил, призванное расширить аудиторию потенциаль- можности его применения.
ных клиентов. Чаще всего такое разнообразие встречается Ну и, разумеется, практически единственный способ
среди устройств начального уровня, предназначенных в ос- модернизации при устаревании – купить другой, более со-
новном для домашнего использования. временной модели, и перенести на него данные, а старый
отправить на свалку.
Два способа создания NAS
Программный
Аппаратный В отличие от аппаратного, представляющего собой закры-
Подразумевает промышленный выпуск узкоспециализиро- тую от пользователя систему, программный вариант Network
ванных устройств, в которых большое внимание уделяется Attached Storage является универсальным компьютером

6 май 2016 системный администратор


хранение данных Администрирование

(сервером) с установленным специальным программным Из истории сетевых накопителей


обеспечением. Как говорилось выше, предшественниками NAS были
Обычно используются операционные системы семейства файловые серверы на базе универсальных операционных
UNIX-like, хотя в некоторых случаях могут применяться моди- систем.
фикации на базе Windows и других платформ. Но уже в 1990-е годы компании, разрабатывающие
Наиболее популярны дистрибутивы на базе FreeBSD [10], и производящие микропроцессоры и оборудование
например, FreeNAS [11], Linux – OpenMediaVault [12] и даже для работы в сети, в том числе Motorola-Freescale, Intel
OpenSolaris [13] – NexentaStor [14]. (отделение XScale, которое сейчас входит в состав ком-
Большинство программных NAS систем имеют удобный пании Marvell), 3Com и другие, положили начало развитию
интерфейс управления, чаще всего через веб-консоль, новых специализированных платформ, предназначенных
а также командную строку. Некоторые системы позволяют для сетевого хранения данных и управления дисковыми
использовать локальную консоль для выполнения элемен- массивами.
тарных действий, таких как смена IP-адреса. В результате этих разработок появились готовые реше-
В некоторых случаях системный администратор предпо- ния для создания специализированных систем сетевого
читает создать сетевую систему хранения данных самосто- хранения данных.
ятельно. Примером такой рукотворной системы может по- Сама идея построения нового класса устройств сетевого
служить система хранения данных на базе FreeBSD, Samba, хранения данных родилась достаточно давно, а первые об-
SWAT, описанная в статье [15]. разцы Network Attached Storage в наиболее близком к сегод-
Использование универсального оборудования подраз- няшнему виде появились в середине 1990-х.
умевает и большую универсальность ОС. Так как большин- Нельзя сказать, что NAS моментально завоевали популяр-
ство версий программных NAS строятся на базе известных ность. Отсутствие общепринятых стандартов и требование
дистрибутивов Open Source, это дает возможность исполь- установки выделенного оборудования их массового внедре-
зовать дополнительные программные пакеты из соответ- ния. Однако рост объемов хранимых данных, необходимость
ствующих дистрибутивов. организации совместной работы и необходимость выработ-
Например, можно установить текстовый редактор для ре- ки более простых методов управления ИТ-инфраструктурой
дактирования конфигурационных файлов, программу-архи- создали предпосылки для роста популярности сетевых
ватор и так далее. устройств хранения данных.
Разумеется, использование программных NAS облегчает Примечание. Победоносное шествие операционной
функции по замене комплектующих. По сравнению с аппа- системы Novell Netware по странам и офисам было обуслов-
ратным NAS расширяется ассортимент совместимых запча- лено тем, что данная система строилась по принципу «ни-
стей, упрощается модификация аппаратной и программной чего лишнего». Фактически это был первый успешный про-
составляющих. В целом программный NAS представляет со- ект по созданию программного NAS, заслуживший общее
бой более гибкое решение. признание.
Ограничением применения таких сетевых хранилищ яв- Временный регресс в сторону файловых серверов
ляется более низкий уровень «защиты от дурака». В случае на базе универсальных операционных систем был обязан
когда необходимо передать полномочия по управлению си- агрессивной маркетинговой политике компании Microsoft,
стемой хранения менее квалифицированным, но более лю- сделавшей ставку на одноранговые сети и возможность соз-
бопытным лицам, склонным к рискованным экспериментам, дания невыделенных файл-серверов в целях привлечения
применение классической аппаратной реализации NAS бу- большего числа клиентов. Расчет менеджеров Microsoft был
дет более оправданным. очевиден – создав упрощенную, пусть даже неэффективную

Рисунок 4. Выделенный файловый сервер Рисунок 5. Невыделенный файловый сервер

системный администратор май 2016 7


Администрирование хранение данных

инфраструктуру на этапе становления, впоследствии будет выносятся за периметр предприятия, а основная масса ра-
труднее мигрировать на другую платформу. бочих резервных копий хранится именно на Network Attached
Противостоять такой политике компаниям, сразу пред- Storage. Такая схема хранения обходится значительно де-
лагавшим строить иерархическую сеть и использовать шевле и позволяет быстрее восстановить данные, потерян-
выделенные файл-серверы, было очень затруднительно ные в результате мелких сбоев.
из-за более высоких затрат на начальном этапе. О том, в ка-
кую сумму выльется дальнейшая миграция, обычно мало Вместо заключения. Будущее NAS
кто задумывается. Строить прогнозы в мире информационных технологий –
Примечание. Типичный кошмар сисадмина, когда поль- дело весьма неблагодарное. Вспомним хотя бы знаменитое
зователи сети хранят рабочие файлы на своих компьютерах утверждение Билла Гейтса о достаточном размере в 640 ки-
и обмениваются данными через локальные общие папки, лобайт оперативной памяти.
получил такое распространение именно благодаря марке- Но существуют некоторые общие тенденции, на базе
тинговой политике Microsoft по продвижению одноранговых которых можно сделать кое-какие предположения. Очень
сетей и невыделенных серверов. хочется верить, что человечество все-таки придет к более
Однако впоследствии рост объемов данных заставил цивилизованному способу хранения данных – от флешек
более критично взглянуть на уже сложившуюся практику и локальных жестких дисков к специализированным устрой-
хранения данных на файл-серверах, так усиленно продви- ствам, обеспечивающим высокую надежность и безопас-
гаемую со стороны Microsoft, и снова перейти к специализи- ность хранения.
рованным сетевым устройствам хранения данных. Рано или поздно такие системы появятся не только в сер-
Но, несмотря на очевидное, NAS на заре своего появ- верных и крупных дата-центрах, а и в небольших офисах,
ления в виде законченных устройств для конечного потре- жилых пространствах, везде, где люди используют компью-
бителя не смогли уверенно утвердиться на рынке в силу теры.  EOF 
достаточно высокой на тот момент стоимости и, что еще
более важно, в силу факта идеологического опереже- [1] Бережной А. Системы хранения данных. Часть 1. DAS. //«Си-
ния времени. На тот момент развития техники и техноло- стемный администратор», №4, 2016 г. – С. 4-7 (http://samag.ru/
гии превалирующим решением были файловые серверы archive/article/3163).
на основе ПК, а доверие к альтернативным платформам [2] Бережной А. Некоторые вопросы построения СХД. Термино-
было весьма зыбким. логия. Часть 1. //«Системный администратор», №3, 2016 г. –
С. 16‑20 (http://samag.ru/archive/article/3143).
Современные системы NAS [3] Бережной А. Меры отказоустойчивости в дисковых массивах.
Если на рубеже ХХ-ХХI веков сетевые системы хранения //«Системный администратор», №10, 2015 г. – С. 30-36 (http://
данных еще были чем-то вроде экзотики, то теперь область samag.ru/archive/article/3043).
их применения заметно увеличилась. [4] Бережной А. NETGEAR ReadyNAS Pro – сразу в работу.
Этому способствуют следующие факторы: //«Системный администратор», №9, 2012 г. – С. 54-55 (http://
>> Стремительный рост хранимой информации. samag.ru/archive/article/2273).
>> Развитие такого направления, как Big Data. [5] Описание системы Novell Netware – http://www.tadviser.ru/
>> Стремление к оптимизации затрат на обслужива- index.php/Продукт:Novell_NetWare.
ние систем хранения и содержание ИТ-персонала. [6] Artisoft, Inc. LANtastic v6.0 Руководство по установке и управле-
(При этом основная потребность заключается не толь- нию – http://citforum.ru/nets/limg.
ко в попытке сэкономить на заработной плате, а в боль- [7] Официальный сайт, посвященный архитектуре ARM – http://
шей мере в дефиците грамотных ИТ-специалистов.) www.arm.com.
>> Возможность гибкого расширения уже существующей [8] MIPS Architecture and Assembly Language Overview – http://logos.
системы. cs.uic.edu/366/notes/mips%20quick%20tutorial.htm.
>> Унификация и взаимозаменяемость используемого [9] Озеров С. Архитектура процессоров. MIPS, Sparc, ARM
оборудования. и PowerPC – http://old.computerra.ru/terralab/platform/235565.
[10] Официальный сайт проекта FreeBSD – http://www.freebsd.org.
Растущая потребность в сетевых системах хранения дан- [11] Домашняя страница проекта FreeNAS – http://www.freenas.org.
ных вызывает спрос не только на продукцию таких извест- [12] Сайт проекта – http://www.openmediavault.org.
ных брендов, как NetApp, но и на более простые решения, [13] Сайт, посвященный Illumos, OpenIndiana, Nexenta, SmartOS
а также сетевые хранилища «ручной сборки» на базе про- и другим Solaris-системам – http://os-solaris.ru.
граммных NAS. [14] Страница Community проекта NexentaStor – https://community.
Отдельное слово стоит сказать о системах резервного nexenta.com.
копирования, главное, о системах резервного хранения. [15] Бережной А. Создаем интегрированный в Active Directory файл-
Ленточные носители большого объема стоят недешево, сервер на базе Samba во FreeBSD. //«Системный администра-
и все больше администраторов резервного копирования тор», №2, 2007 г. – С. 12-20 (http://samag.ru/archive/article/761).
подходят к мысли о том, что хранить резервные копии на лен- [16] Бережной А. Сохранение данных: теория и практика.
точных картриджах становится достаточно дорого. ISBN: 978-5-97060-185-3. Издательство ДМК-Пресс, 2016 г. –
Например, новая формула хранения при схеме ротации http://samag.ru/news/more/2213.
«дед-отей-сын» предполагает, что на ленточные носители
записываются только ежемесячные копии («дед»), которые Ключевые слова: устройства хранения, NAS.

8 май 2016 системный администратор


виртуализация Администрирование

Визитка

ДЕНИС СИЛАКОВ,
к.ф.-м.н., старший системный архитектор Virtuozzo,
dsilakov@virtuozzo.com

Шаблоны контейнеров в Virtuozzo


Оперативное развертывание контейнеров
Подготовка множества виртуальных окружений с одной конфигурацией – задача
для системного администратора нередкая. В статье [1] мы описали возможность
использования для этих целей миграции и клонирования, однако во многих ситуациях
более удобным способом будет использование заранее подготовленных шаблонов

Клонирование позволяет только копировать виртуальное Такие различия в именах носят не только косметический
окружение целиком, и назвать это решение гибким нельзя. характер, но находят отражение в структуре файлов, из ко-
Например, если вы хотите иметь возможность быстро раз- торых состоит шаблон, о чем мы узнаем немного позже.
вертывать контейнеры с одной и той же ОС, но отличающие-
ся только набором приложений, то под каждый такой набор Управление
вам придется подготовить отдельный «эталонный» контей- Управление шаблонами осуществляется с помощью утили-
нер. Шаблоны Virtuozzo предоставляют более элегантное ты vzpkg. Для установки шаблона ОС необходимо дать ей
решение, позволяя отдельно хранить образ базовой ОС, команду install template:
а отдельно – образы с наборами приложений, которые могут
накладываться на ОС в различных сочетаниях. # vzpkg install template centos-6-x86_64

Классификация Для обновления файлов шаблона до актуальных версий


Для контейнеров в Virtuozzo поддерживаются шаблоны служит команда update template. Удалить шаблон ОС можно
двух типов – ОС и приложений. С шаблонами ОС мы уже с помощью команды remove template. Для удаления шабло-
сталкивались – они используются при создании контейне- на приложения нужно использовать эту же команду, однако
ров с заданной операционной системой внутри (в реалиях необходимо ей передать отдельно имя приложения, а от-
Virtuozzo – с заданным дистрибутивом Linux и набором преду- дельно (в опции -F) – имя шаблона ОС:
становленных пакетов в нем). Шаблон приложения использу-
ется для установки (или удаления) конкретного приложения # vzpkg remove template -F centos-6-x86_64 mysql
или стека программ в контейнер, где уже установлена ОС.
При этом каждый шаблон приложения рассчитан на исполь- Удалить шаблон можно, только если он не используется
зование в контейнере, созданном из шаблона определенной ни одним контейнером.
ОС. Например, можно создать контейнер с CentOS 6 на ос- Технически установка шаблона сводится к установке па-
нове шаблона ОС CentOS 6, а затем добавить туда MySQL кета с его конфигурационными файлами – например, после
с помощью шаблона приложения MySQL для CentOS 6. выполнения:
Шаблоны для ОС, в свою очередь, разделяются на ба-
зовый и кастомизированные. Как правило, базовый шаблон # vzpkg install template centos-6-x86_64
подразумевает установку ОС в варианте по умолчанию, а ка-
стомизированные отличаются от него настройками или на- у вас в системе появится пакет centos-6-x86_64-ez (суффикс
бором предустановленных программ. «ez» появился от созвучия со словом «easy» – «простой» –
Различать базовые шаблоны ОС от кастомизированных и шаблоны Virtuozzo часто называют EZ-шаблонами).
и от шаблонов приложений можно по их имени – согласно В Virtuozzo 6 шаблоны приложений оформлялись как от-
правилам именования базовый шаблон содержит только дельные пакеты, однако в Virtuozzo 7 (очередная редакция
имя, версию и архитектуру ОС (например, centos-6-x86_64), которой недавно получила статус beta и уже рекомендует-
кастомизированные содержат некоторый дополнительный ся для знакомства всем потенциальным пользователям [2])
суффикс (centos-6-x86_64-server), а имя шаблона прило- в настоящее время файлы шаблонов основных приложений
жения содержит как название приложения, так и название включены в пакет с шаблоном ОС, для которой они предна-
шаблона базовой ОС, для которой он предназначен (mysql- значены. Теоретически можете и самостоятельно устанав-
centos-6-x86_64). ливать, обновлять и удалять такие пакеты с помощью yum.

системный администратор май 2016 9


Администрирование виртуализация

Однако по крайней мере удаление лучше производить через # vzpkg list --available centos*
vzpkg, ведь yum не в состоянии проверить, не используется
ли шаблон в каком-то из контейнеров, а также может оста- Учтите, что на момент написания статьи эта команда
вить следы пребывания шаблона (в частности, кэш его па- в Virtuozzo 7 смотрела на имена доступных пакетов и не уме-
кетов) в системе. ла распознавать шаблоны приложений, включенные внутрь
После установки шаблона ОС желательно сразу создать пакетов с шаблонами ОС.
кэш входящих в него пакетов и образ диска с установлен-
ными пакетами, иначе все эти операции будут произведены Использование
при первой попытке использовать шаблон. Вы наверняка Использование шаблонов – дело нехитрое. Для создания
заметили это, если создавали контейнеры по примерам контейнера на основе шаблона ОС достаточно указать имя
из нашей первой статьи [3] – именно из-за скачивания шаблона в опции --ostemplate:
и установки пакетов процесс развертывания первого кон-
тейнера может занять заметное время (а может и вовсе за- # prlctl create c1 --vmtype=ct --ostemplate=centos-6-x86_64
вершиться неудачей, если возникнут проблемы с доступом
к репозиториям). Заметим, что в этом заключается главное Для установки шаблонов приложений контейнер необхо-
отличие шаблонов Virtuozzo от шаблонов OpenVZ, которые димо сначала запустить, а затем воспользоваться командой
представляли собой архивы с готовой к использованию vzpkg install:
файловой системой [4]. Создается кэш командой:
# prlctl start c1
# vzpkg create cache # vzpkg install c1 mysql

Можно указать ей в качестве параметра имя шабло- Утилита vzpkg также позволяет обновлять и удалять паке-
на, а можно ничего не указывать – тогда она создаст кэши ты, входящие в состав шаблона ОС приложения, «снаружи»
для всех установленных шаблонов ОС, у которых этих кэшей контейнера. Например, вот так можно обновить все паке-
еще нет. Пакеты, скачанные для установки, помещаются ты, входящие в базовый шаблон ОС (в нашем примере –
в директорию /vz/template/<ОС>/<версия>/<архитектура>/ centos‑6-x86_64):
pm, а сжатый архив с установленными пакетами помещается
в /vz/template/cache. Если заглянете внутрь одного из таких # vzpkg update c1 centos-6-x86_64
архивов, вы увидите образ диска root.hds и его дескриптор
DiskDescriptor.xml. Этот образ будет автоматически исполь- Если не указать имя шаблона, то будут обновлены пакеты
зоваться при создании контейнеров на основе шаблона. всех шаблонов, используемых контейнером.
Просмотреть список шаблонов, установленных на серве- А вот так можно удалить все пакеты, установленные
ре, можно с помощью команды: при добавлении шаблона mysql:

# vzpkg list # vzpkg remove c1 mysql

без аргументов. Опция --os для этой команды ограничит вы- Таким образом, шаблоны могут сослужить вам хорошую
вод шаблонами ОС. Если же передать команде в качестве службу не только при создании контейнеров, но и на про-
аргумента имя контейнера, то получите список шаблонов, тяжении всего их жизненного цикла.
используемых данным контейнером. Ввод команды:
Структура
# vzpkg list –available Файлы шаблонов хранятся в директории /vz/template,
здесь же находятся закэшированные данные. Файлы рас-
покажет список доступных, но неустановленных шаблонов. полагаются в директориях, структура которых соответству-
В запросе можно использовать шаблоны подстановки – на- ет имени, версии и архитектуре ОС шаблона – например,
пример, вот так можно получить перечень доступных шабло- centos/6/x86_64.
нов, начинающихся с centos: Конфигурация базового шаблона ОС хранится в файле
config/os/default, настройки кастомизированных шаблонов –
в файлах config/os/<суффикс>. Конфигурационные фай-
Рисунок 1. Структура подкаталогов /vz/templates отражает набор доступных шаблонов File
лы для шаблонов приложений, предназначенных для дан-
ной ОС, хранятся в файлах config/app/<имя_приложения>/
default.
Внутри каталогов config можно найти набор файлов с го-
ворящими названиями:
>> packages– набор пакетов;
>> package_manager – используемый системой пакетный
менеджер;
>> repositories – репозитории, подключаемые внутри кон-
тейнеров на основе шаблона и используемые для уста-
новки пакетов;

10 май 2016 системный администратор


виртуализация Администрирование

>> mirrorlist– список зеркал для репозиториев; Для начала установите пакет vztt-build из репозиториев
>> distribution– тип дистрибутива Linux; Virtuozzo:
>> summary и description– краткое и подробное описания;
>> environment – предопределенные переменные окруже- # yum install vztt-build
ния для контейнеров;
>> ...и многое другое. Теперь создайте новый каталог с именем шаблона, а в нем
метафайл с инструкциями по развертыванию шаблона (обыч-
Из не очевидных вещей следует отметить формат, но этот файл называют просто «metafile» либо добавляют
в котором указывается пакетный менеджер, – для Debian- «metafile» как суффикс к имени шаблона). Сюда же следует
систем необходимо указать dpkg для 32-битных архитектур положить pre- и post-скрипты, которые включаем в шаблон.
и dpkg64 для 64-битных, а для дистрибутивов, использующих Метафайлы проще всего создавать на основе примеров,
rpm, возможны варианты – например, rpm43x86 для 32-битных располагающихся в каталоге /usr/share/vztt/samples. Мета-
ОС, использующих rpm версии 4.3, rpm41s9x64 для 64-бит- файл состоит из набора секций, каждая из которых начина-
ного SLES-9 и ряд других значений, полный перечень кото- ется с символа процента («%»). Имена секций соответствуют
рых можно найти в справке по команде: файлам шаблона, которые будут помещены в директорию
config, как мы это видели в предыдущем разделе. Внутри ме-
# man vzpkg.metafile тафайла можно оставлять комментарии начиная их с симво-
ла решетки («#»). Детальное описание формата метафайла
Менеджер пакетов, репозитории и списки зеркал обяза- можно найти в соответствующей справке по команде:
тельны только для базовых шаблонов ОС. Для кастомизи-
рованных шаблонов и шаблонов приложений эти значения # man vzpkg.metafile
берутся из параметров базовой ОС, но можно указать и до-
полнительные настройки в их собственных конфигураци- Когда метафайл готов, необходимо его передать команде
ях – они будут добавлены к значениям базовой ОС. Для шаб- vzmktmpl. Если будете использовать какие-либо pre- и post-
лонов приложений можно указывать перечни совместимых скрипты, то надо их явно указать в соответствующих опциях,
и необходимых шаблонов. например:
Помимо статических файлов конфигурации, шаблоны
ОС могут содержать скрипты, выполняемые на определен- # vzmktmpl --pre-cache pre-cache --pre-upgrade ↵
ной стадии их развертывания. Более точно: скрипты можно pre-upgrade metafile

выполнять непосредственно перед либо сразу после завер-


шения одного из следующих шагов: Результатом работы этой утилиты будет rpm-пакет с но-
>> cache– создание кэша из пакетов шаблона; вым шаблоном, который вы можете установить на любой
>> install– установка шаблона на сервер; машине с Virtuozzo.
>> upgrade– обновление шаблона;
>> remove– удаление шаблона с сервера.
Шаблоны – удобное средство, экономящее время систем-
Скрипт, выполняемый перед тем или иным шагом, имеет ного администратора, уменьшающее время развертывания
префикс «pre-» (например, pre-install), а после завершения готовых систем для пользователей и снижающее вероят-
шага – префикс «post-». ность ошибок при таких развертываниях. Virtuozzo 7 предо-
ставляет шаблоны для наиболее часто запрашиваемых кон-
Создание фигураций ПО, а если нужного вам шаблона нет в штатной
Virtuozzo предоставляет готовые шаблоны для популярных поставке, то есть инструментарий для его оперативного
ОС и приложений, однако вряд ли возможно предусмотреть создания. Если вы при этом полагаете, что ваши наработ-
все конфигурации, которые могут понадобиться пользова- ки могут пригодиться кому-то еще, то вы можете передать
телям. их разработчикам Virtuozzo для размещения в публичных
Впрочем, если готового шаблона не нашлось, можно соз- репозиториях [5].
дать свой собственный.
Проще всего это сделать, взяв за основу уже существу- [1] Силаков Д. Виртуальные машины в Virtuozzo 7. // «Систем-
ющий. Достаточно создать каталог для шаблона в соот- ный администратор», №1-2, 2016 г. – С. 16-19 (http://samag.ru/
ветствии с его именем, скопировать файлы из исходного archive/article/3111).
шаблона и внести необходимые изменения. Если все моди- [2] Virtuozzo 7 Beta Program – https://goo.gl/IjaHdH.
фикации сводятся к изменению набора пакетов или настро- [3] Силаков Д. Промышленная виртуализация с помощью
ек по умолчанию, то много времени это не займет. После Virtuozzo 7. // «Системный администратор», №12, 2015 г. – С. 4-6
создания новых файлов в /vz/templates, vzpkg автоматиче- (http://samag.ru/archive/article/3083).
ски увидит новый шаблон. [4] Виртуализация с OpenVZ. // Хабрахабр – https://habrahabr.ru/
Если же имеющиеся примеры не подходят в качестве post/211915/.
основы либо просто вы хотите поглубже понять устройство [5] Исходный код шаблонов Virtuozzo 7 – https://src.openvz.org/
шаблонов, то можно создать собственный экземпляр с нуля projects/OVZT.
с помощью тех же средств, которыми пользуются разработ-
чики Virtuozzo. Ключевые слова: виртуализация, OpenVZ, контейнеры, Virtuozzo.

системный администратор май 2016 11


Администрирование инструменты

Визитка

АЛЕКСАНДР ПИЧКАСОВ,
сертифицированный специалист Microsoft, VMware, apichkasov@gmail.com

Поддержка филиалов средствами MDOP


Компонент DaRT пакета MDOP, применяемый совместно с встроенными
средствами операционной системы, позволит организовать эффективную
техподдержку филиалов

Многие предприятия обладают филиальной сетью, часто (TCO). Необходимо отметить, что для правомерного исполь-
довольно разветвленной, но состоящей из небольших офи- зования MDOP предприятие должно иметь действующую
сов. При этом размеры филиалов предъявляют специфиче- подписку Software Assurance (SA), а также оплатить годовое
ские требования к их ИТ-поддержке. Можно выделить две использование самого пакета. Крупные предприятия часто
главные особенности: это, во-первых, необходимость обе- пользуются возможностями подписки SA, если же этот воп-
спечить техподдержку пользователей и, во-вторых, поста- рос находится на стадии рассмотрения, детальную инфор-
вить на должный уровень информационную безопасность мацию по пакету MDOP можно получить на сайте постав-
филиала в условиях физической удаленности и отсутствия щика [1]. Прежде чем перейти к теме статьи, необходимо
постоянного ИТ-персонала. Часть задач возможно решить раскрыть, что представляет собой пакет MDOP в целом.
совместным использованием встроенных средств настоль- С точки зрения конечного потребителя, он состоит из ше-
ных и серверных ОС, но задействование для этих целей па- сти независимых компонентов:
кета MDOP предоставит ряд дополнительных возможностей. >> виртуализации приложений Microsoft App-V;
>> виртуализации пользовательской среды Microsoft UE-V;
Пакет MDOP, состав и особенности >> виртуализации настольных систем MED-V;
Пакет Microsoft Desktop Optimization Pack (MDOP) предназна- >> расширенного управления групповыми политиками
чен для повышения эффективности управления настольны- Microsoft AGMP;
ми системами и снижения совокупной стоимости владения >> средства администрирования и мониторинга BitLocket
MBAM;
>> набора средств диагностики и восстановления
Рисунок 1. Состав набора инструментов DaRT
Microsoft DaRT.

Непосредственно для решения обозначенных выше за-


дач полезным будет последний элемент списка.

Организация удаленной техподдержки


средствами MDOP
Решение задачи удаленной техподдержки естественным
образом распадается на две подзадачи: это, во-первых,
предоставление удаленной помощи в штатном режиме ра-
боты настольной системы и, во-вторых, подобная помощь
в случае невозможности выполнить обычный старт, когда,
собственно, и потребуются средства MDOP.
Для штатного режима логично использовать встроенные
средства, а именно возможности «Удаленного помощни-
ка» (Remote Assistance). Нужно отметить, что без дополни-
тельных настроек «Удаленный помощник» может быть ис-
пользован в режиме запроса удаленного взаимодействия.
Служба техподдержки часто предпочитает пользовать-
ся режимом предложения удаленной помощи. Напомню,

12 май 2016 системный администратор


инструменты Администрирование

Пакет MDOP предназначен


для повышения эффективности
управления настольными
системами

что такой вариант работы должен быть предварительно нас- >> анализатор аварийных дампов (Crash Analyzer);
троен с помощью групповых политик (для выбранного объ- >> утилита восстановления удаленных файлов (File
екта ГП – Computer Configuration → Policies → Administrative Restore);
Templates  → System  → Remote Assistance → Configure >> утилита восстановления дисков, разделов и томов (Disk
Offer Remote Assistance, добавить предварительно соз- Commander);
данную группу техподдержки, например, <Domain_name>\ >> утилита надежной очистки диска (Disk Wipe);
HelpDesk). При таком варианте запуск предложения удален- >> утилита управления компьютером (аналог встроенной
ной помощи может быть выполнен из командной строки: оснастки с тем же названием, Computer Management);
>> файл справки(Help);
msra /offerra <computer_name | ip_address> >> файловый менеджер (аналог встроенного проводника,
Explorer);
Для реализации варианта техподдержки в нештатной си- >> утилита выбора подходящего инструмента (Solution
туации удобно использовать набор инструментов диагности- Wizard);
ки и восстановления (Diagnose and Recovery Toolset, DaRT), >> утилита конфигурации сетевого соединения (TCP/IP
в состав которого входят следующие элементы (см. рис. 1): Config);
>> редактор реестра (Registry Editor); >> утилита деинсталляции исправлений (Hotfix Uninstall);
>> утилита сброса пароля локальных пользователей >> утилита восстановления системных файлов (SFC Scan);
(Locksmith); >> утилита поиска файлов (Search);

Рисунок 2. Настройка параметров удаленного подключения Рисунок 3. Добавление драйверов оборудования

системный администратор май 2016 13


Администрирование инструменты

>> антивирусная утилита (Defender); После этого можно приступить к созданию загрузочно-
>> утилита удаленного подключения (Remote Connection). го образа, используя мастер DaRTImage.exe (находится
в каталоге установки DaRT). Для его успешного завершения
Реализован DaRT в виде загрузочного образа на плат- необходимо предоставить дистрибутивный носитель, соот-
форме Windows Preinstallation Environment, генерацию ко- ветствующий версии установленного пакета WADK. Шаги
торого проводит администратор системы в соответствии мастера позволяют задать расположение дистрибутивного
со своими потребностями. При этом конкретный вариант носителя, выбрать инструменты, настроить параметры уда-
DaRT может содержать сокращенный список инструментов, ленного подключения (см. рис. 2), добавить драйверы обору-
определяемый на этапе его создания. дования, отсутствующие в дистрибутиве (см. рис. 3), а также
Для получения возможности генерации загрузочных задать путь для сохранения генерируемого файла. Резуль-
образов необходимо последовательно установить пакет татом работы мастера в соответствии с вашим выбором
Windows Assessment and Deployment Kit (WADK) наиболее будут загрузочный образ в формате WIM, такой же образ,
свежей версии, соответствующей последнему выпуску подготовленный к записи на сменный носитель, и скрипт
MDOP [2, 3], а затем, собственно, компонент DaRT пакета PowerShell для повторной его генерации. Последний опцио-
MDOP. При развертывании пакетов значения параметров нальный шаг мастера дает возможность записать подготов-
принимаются по умолчанию. ленный файл на сменный носитель.
Созданный образ может быть использован для запуска
обслуживаемых компьютеров в разных вариантах. Это, на-
Рисунок 4. Настройка ответа на запросы клиентов сервера WDS
пример, их непосредственная загрузка с использованием
сменного носителя (оптического диска или флеш-накопите-
ля). Другой вариант – замена файла Winre.wim среды вос-
становления (Recovery Environment), расположенного в ОС
Windows 8/Windows 2012 на отдельном томе с меткой System
Reserved, в каталоге Recovery/WindowsRE. Однако наиболее
удобно воспользоваться вариантом сетевой загрузки, учи-
тывая, что подавляющее большинство материнских плат,
выпущенных в последние годы, снабжены встроенными се-
тевыми адаптерами, позволяющими выполнять сетевую за-
грузку по протоколу PXE.
Для реализации последнего варианта наиболее простой
способ – установка роли серверной операционной сис-
темы, а именно служб развертывания Windows (Windows
Deployment Services, WDS). Главное предназначение данных
сервисов – автоматизация развертывания операционных
систем, однако входящий в их состав сервер PXE позволя-
ет организовать загрузку произвольных образов в формате
WIM. Стоит отметить, что в случае, если службы WDS уже
Рисунок 5. Запрос сетевой загрузки при старте компьютера
установлены и используются по прямому назначению, до-
бавление образа DaRT нисколько не повлияет на их работу,
поскольку конфигурационные средства дают возможность
сформировать список выбора загрузки. Далее подразуме-
вается, что в назначенном филиале присутствует компью-
тер или виртуальная машина с серверной ОС семейства
Windows и работающим сервером DHCP.
Роль WDS может быть установлена, например, средства-
ми PowerShell:

Install-WindowsFeature WDS -IncludeAllSubFeature ↵


Рисунок 6. Пример установки удаленного подключения –IncludeManagementTools

После установки роли WDS сервер должен быть нас-


троен с помощью графической консоли (Control panel →
Administrative tools → Windows Deployment Services), зна-
чения требуемых параметров можно оставить задаваемы-
ми по умолчанию, за исключением настроек сервера PXE.
Необходимо предоставить возможность обработки запро-
сов всех клиентов, без подтверждения администратором
(см. рис. 4). Затем добавить созданный ранее образ в спи-
сок предлагаемых при старте компьютеров либо с помощью
той же оснастки, либо средствами PowerShell, например:

14 май 2016 системный администратор


инструменты Администрирование

Import-WdsBootImage –Path C:\Users\Administrator\Desktop\ ↵ Специалист техподдержки, получив данные, подключает-


DaRT8.1\x64\boot.wim –NewImageName ↵ ся к удаленному компьютеру с помощью DartRemoteViewer,
"HelpDesk DaRT 8.1 (x64) –DisplayOrder 0
расположенной в каталоге установки DaRT. Параметры
подключения могут быть набраны в интерактивном режиме
Значение параметра NewImageName задает наиме- либо указаны в командной строке при старте:
нование варианта загрузки в списке, DisplayOrder зада-
ет его положение, указанный вариант определяет пер- DartRemoteViewer.exe –ticket=619-691-521 ↵
вую строку и,  таким образом, делает образ загружаемым –ipaddress=10.10.0.40 –port=3388

по умолчанию.
На этом этапе сервер готов обрабатывать запросы се- После подключения на целевом компьютере блокируют-
тевой загрузки по PXE-протоколу. Настройка клиентских ся клавиатура и мышь, но пользователь может отслеживать
компьютеров заключается в установке в BIOS Setup приори- на экране действия администратора.
тета сетевой загрузки. Поскольку параметры по умолчанию Необходимость присутствия пользователя при запуске
сервера WDS предусматривают подтверждение сетевой удаленной поддержки составляет некоторые неудобства,
загрузки нажатием клавиши <F12> (см. рис. 5), сделанные в действительности такое требование соответствует иде-
изменения не повлияют на обычную загрузку настольных ологии информационной безопасности. Это объясняется
компьютеров. тем, что конечный пользователь как владелец информации,
хранящейся на локальных дисках компьютера, должен при-
Запрос поддержки в нештатной ситуации нимать решение, когда и кому предоставлять доступ.  EOF 
Получение помощи в нештатной ситуации при описанных
настройках потребует следующих действий пользователя: [1] Описание MDOP на сайте производителя – https://technet.
>> нажатие клавиши <F12> при загрузке компьютера; microsoft.com/ru-ru/windows/mdop.aspx .
>> выбор загрузочного образа из списка; [2] Загрузка пакета Windows ADK 8.1 – http://www.microsoft.com/en-
>> переход по дереву меню к инструментам DaRT после us/download/details.aspx?id=39982.
загрузки образа Windows PE; [3] Загрузка пакета Windows ADK 10 – https://msdn.microsoft.com/
>> запуск инструмента Remote Connection; en-us/windows/hardware/dn913721.aspx.
>> передачи сотруднику техподдержки номера тикета, IP-
адреса и порта подключения (см. рис. 6). Ключевые слова: Windows, MDOP, WADK, техподдержка.

системный администратор май 2016 15


Безопасность угрозы

Визитка Визитка

ВЕНИАМИН ЛЕВЦОВ, НИКОЛАЙ ДЕМИДОВ,


вице-президент, глава корпоративного дивизиона технический эксперт
«Лаборатории Касперского» «Лаборатории Касперского»

Анатомия таргетированной атаки


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

В первой части статьи [1] мы обратили внимание на историю существующие в ней механизмы безопасности и опреде-
происхождения таргетированных атак, привели описание ленные продукты, вовлечь во взаимодействие ключевых
применяемых методов и инструментов, которые использу- сотрудников (чаще всего обманом). Такая операция обыч-
ются в процессе достижения целей, и подробно разобрали но управляется организованной группой профессио-
шаги подготовительной фазы. По статистике «Лаборатории налов, порой международной, вооруженной изощренным
Касперского» доля целевых атак составляет 1% от обще- техническим инструментарием. Деятельность группы часто
го числа мировых угроз, но, несмотря на низкую распро- похожа на многоходовую войсковую операцию, следую-
страненность, целевые атаки наносят больше ущерба, чем щую четко подготовленной стратегии, обычно состоящей
оставшиеся 99% угроз совокупно, каждый раз увеличивая из четырех фаз.
этот антирекорд. Продолжая аналогию, можно сказать, что происходит во-
оруженная схватка между людьми: одни нападают, другие
Что же представляет собой отражают хорошо подготовленное нападение, учитывающее
таргетированная атака? слабые стороны и особенности систем противодействия.
Таргетированная атака – это непрерывный процесс не- И статистика в этом противостоянии неутешительна:
санкционированной активности в инфраструктуре атакуе- по данным проведенного «Лабораторией Касперского»
мой системы, управляемый киберпреступником в режиме опроса российских предприятий, практически каждая чет-
реального времени. Процесс всегда строится под жертву, вертая компания (23%) считает, что уже становилась жерт-
являясь некой продуманной операцией, а не просто разо- вой целевых атак.
вым техническим действием, он направлен для работы в ус- Таргетированная атака включает в себя четыре основные
ловиях конкретной инфраструктуры, призван преодолеть фазы (см. рис. 1).

Фаза первая. Подготовка


Рисунок 1. Фазы целевой атаки
Основные задачи начальной фазы
атаки, подтверждающие ее определе-
ние как «целевой»:
>> Поиск и определение цели с после-
дующим сбором детальной инфор-
мации по выявлению слабых мест.
>> Анализ собранной информации,
разработка стратегии по достиже-
нию результата, дополняя ее созда-
нием инструментов.

Более детально первая фаза описа-


на в первой части цикла статей [1].

Фаза вторая. Проникновение


По совокупности применяемых тех-
ник фаза «Проникновение» является

16 май 2016 системный администратор


угрозы Безопасность

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


нии и реализации. Это троянская программа, которая осуществляет доставку
Большинство инженеров информационной безопасности основного вредоносного модуля Payload на целевую маши-
затруднялись с ответом, когда их просили перечислить при- ну с последующим закреплением внутри операционной сис-
меняемые средства и методы проникновения в инфраструк- темы, как правило, это скрытая автозагрузка:
туру, давайте сформулируем ответ вместе. Для этого внача- >> определяет активные процессы в операционной систе-
ле приведем наименование основных технических средств ме, выбирая наиболее выгодный с точки зрения при-
с описанием их основных функций. вилегий и инжектирует собственный код в код актив-
ного процесса непосредственно в оперативной памяти,
Эксплойт (Exploit) что позволяет ему получить все уровни доступа к ре-
Вредоносный код, использующий уязвимости в программ- сурсам операционной системы, не вызывая подозре-
ном обеспечении. Основной инструмент проникновения, ний у средств защиты;
средствами доставки которого являются электронная почта,
компрометированные веб-сайты и USB-устройства.
Проникнув благодаря уязвимости на целевой корпора- По данным проведенного
тивный компьютер, эксплойт запускает средство доставки,
тип которого зависит от дизайна атаки: это могут быть вали-
«Лабораторией Касперского»
датор, загрузчик или Dropper. опроса российских
Валидатор
предприятий,практически
Сборщик информации с зараженного хоста, выполняет каждая четвертая
фильтрацию информации об учетных записях пользовате-
лей, установленном программном обеспечении, активных
компания (23%) считает,
процессах и средствах защиты. Передает шифрованные что уже становилась жертвой
данные в центр управления. В зависимости от полученной
информации хакеры принимают решение о дальнейшем
целевых атак
развитии атаки, выбрав соответствующую команду:
>> загрузка Dropper – приступить к выполнению целевой >> загружает тело основного модуля Payload;
атаки; >> выполняет частичную дешифрацию и запуск основного
>> самоуничтожение – в случаях, когда компьютер и дан- модуля.
ные на нем не представляют ценности для целевой атаки;
>> ожидание– решение откладывается, режим «сна». Средствами доставки могут являться электронная почта,
скомпрометированные веб-сайты, в редких случаях USB-
Обладая минимальным размером и функционалом, вали- устройства, а также основные описанные ранее загрузчики
датор не несет в себе уникальной информации о целевой (эксплойт, валидатор).
атаке и ее организаторах. В случае если он перехватывает-
ся средствами защиты, это не создает для киберпреступни- Основной модуль Payload
ков угрозы утечки методов и средств, планируемых к при- Основной модуль в целевой атаке может обладать самым
менению. Благодаря таким качествам может применяться разным вооружением, которое зависит от поставленной
в случаях, когда: цели и задачи (см. рис. 2).
>> риск обнаружения стандартны-
ми средствами защиты велик,
Рисунок 2. Основной модуль в целевой атаке может обладать самым различным вооружением, которое зависит
для исключения возможной утеч- от поставленной цели и задачи
ки применяемых техник в целе-
вой атаке;
>> целевая почтовая рассылка.

Средства доставки: электронная по-


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

Загрузчик (Downloader)
Инструмент загрузки используется
в целях быстрого заражения с приме-
нением техники фишинга через вло-
жения в письмах либо с фишинговых
веб-сайтов. При запуске выкачивает
основной модуль Payload либо Dropper
в зависимости от целей и планов ки-
берпреступников.

системный администратор май 2016 17


Безопасность угрозы

Тело модуля содержит многоуровневое шифрование, >> Шифрование.Многоуровневое шифрование применяет-


призванное защитить разработки и технологии киберпре- ся для сокрытия части кода от детектирующих механиз-
ступников и детектирование атаки. При первом запуске мов. Часто обфускация применяется с частичным много-
Dropper дешифрует только ту часть кода, которая содер- уровневым шифрованием кода.
жит техники проверки, призванные обеспечить гаранти- >> Инжектирование процесса. Техника по динамическому
рованный запуск модуля в подходящей для него среде внедрению собственного кода в чужой процесс. Позво-
и не допустить запуска, если среда не удовлетворяет тре- ляет использовать все привилегии легитимного процесса
бованиям. Среди неподходящих для модуля условий мож- в своих целях, не обращая на себя внимание установлен-
но назвать: ных средств защиты. Данный метод позволяет обойти
>> поведенческий анализ в песочнице (Sandbox); различные системы контроля безопасности, в том чис-
>> эмуляторные техники в случаях, когда антиэмулятор- ле контроля приложений. Инжектирование применяется
ные механизмы не срабатывают; на уровне Windows API:
>> наличие отладчика и любого другого средства работы »» Определение дескриптора нужного процесса.
вирусного аналитика; »» Создание нового потока в виртуальном простран-
>> наличие средств мониторинга системы и сетевого тра- стве процесса.
фика; >> Mimikatz. Инструмент перехвата паролей открытых
>> наличие неизвестного антивируса, не попадающего сессий в Windows, реализующий функционал Windows
под используемые техники обхода. Credential Editor. Способен извлекать аутентификацион-
ные данные залогиневшегося в системе пользователя
в открытом виде. Из практики «Лаборатории Касперско-
Из статистики «Лаборатории го»: каждая целевая атака строится на повышении прав

Касперского»: доля целевых доступа и реализуется под правами суперпользователя.


>> Руткит. Это средство используется для обхода защиты,
атак составляет 1% закрепления во взломанной системе и сокрытия следов
от общего числа мировых присутствия. Для Unix-среды пакет утилит (который вклю-
чает также сканер, сниффер, кейлогер) содержит и тро-
угроз,но целевые атаки янские программы, которые заменяют собой основные
наносят больше ущерба, утилиты Unix. Для Windows пакет перехватывает и мо-
дифицирует низкоуровневые API-функции, позволяя ма-
чем оставшиеся 99% скировать свое присутствие в системе (скрывая процес-
угроз совокупно,каждый сы, файлы на диске, ключи в реестре). Многие руткиты
устанавливают в системы свои драйверы и службы (они
раз увеличивая этот также являются «невидимыми»). Руткит также может быть
антирекорд использован как средство доставки, способное выгру-
зить все необходимое хакеру после заражения машины.
>> Обход эмулятора. Антивирусный эмулятор проверяет
У вас может возникнуть ложное ощущение, что все пере- исполняемый файл в изолированной среде, анализируя
численные средства применяются в каждой целевой атаке, логику его работы. Обнаружение вредоносного кода про-
но это не так. В случае гипотетической атаки на компанию исходит сигнатурным либо эвристическим методом. Ха-
«А» хакеры будут использовать конкретный набор инстру- керы используют различные практики по изменению ал-
ментов. Он может состоять из одного Dropper с основным горитма кода, не позволяя эмулятору определить логику
модулем Payload. Весь перечень инструментов, приведен- выполнения зловредной программы.
ный выше, лишь демонстрирует разнообразие технологий >> Обход поведенческого анализа. Такой метод детекти-
в арсенале киберпреступников. рования применяется песочницей в целях обнаружения
Перейдем к применяемым техникам обхода стандарт- угроз нулевого дня. Так как время проверки песочницей
ных средств защиты, таких как Firewall, IPS, Blacklisting/ ограничено ее функциональными возможностями, хаке-
Whitelisting, контроль приложений и антивирус. ры используют замедлитель, и исполняемый код «засы-
пает» на некоторое время, чтобы предотвратить обнару-
Обход стандартных средств защиты жение.
На сегодняшний день стандартные решения информа-
ционной безопасности обладают большим количеством Важно отметить факт присутствия уязвимостей в различ-
функций, обеспечивающих высокий уровень по контролю ном программном обеспечении, в первую очередь от извест-
и фильтрации данных. Этот факт сильно усложняет работу ных производителей. Зачастую эксплуатирующий персонал
киберпреступников и вынуждает их изобретать и использо- не отслеживает бюллетени безопасности производителей
вать различные техники, позволяющие обмануть либо обой- и не устраняет проблемы своевременно, оставляя хакерам
ти защитные механизмы. шанс на проникновение.
Опишем наиболее известные из них:
>> Обфускация кода.Запутывание кода на уровне алгорит- Эксплуатация уязвимостей
ма с помощью специальных компиляторов для усложне- Само определение уязвимости говорит о потенциальном
ния его анализа антивирусом. недостатке в программном обеспечении. Такое случается

18 май 2016 системный администратор


угрозы Безопасность

вследствие просчетов проектирования либо допущенных Примеры проникновения из реальных атак


ошибок разработчиками ПО, ведь программы пишут люди. 1) Атака Carbanak известна как большое банковское ограбление. Суммар-
Этот недостаток может быть использован киберпреступ- ный ущерб от нее, по оценкам экспертов «Лаборатории Касперского», со-
ником в собственных целях. Уязвимость эксплуатируется ставил один миллиард долларов.
через внедрение кода в уже запущенную ОС или програм- Первое заражение производилось с помощью фишинговых писем,
му – таким образом изменяется штатная логика работы ПО, в которых содержались вложения с именами файлов «Соответствие
что позволяет злоумышленникам выполнять не деклариро- ФЗ‑115 от 24.06.2014г.doc», «Запрос.doc», «Анкета.doc». Внутри каждого
ванные функции, зачастую с правами администратора. файла был встроен эксплойт с набором следующих уязвимостей, каждая
Уязвимости программного обеспечения можно разде- из которых позволяла выполнять произвольный код:
лить на два типа: >> CVE-2014-1761 – уязвимость в Microsoft Office;
>> Известные– имеющие стандартно классифицированное >> CVE-2013-3906 – уязвимость в Microsoft Office компонента Microsoft
CVE (Common Vulnerabilities and Exposures) описание и го- Graphics;
товые исправления в обновлениях разработчика. CVE – >> CVE-2012-0158 – уязвимость ActiveX.
открытая база известных уязвимостей.
>> Неизвестные, или уязвимости нулевого дня, 2) Duqu 2.0 – кампания кибершпионажа, созданная для сбора конфиденци-
не устраненные и еще не обнаруженные разработчиками альных данных и гостайны различных государств.
и исследователями угрозы. Такого рода угрозы являются Киберпреступники также комбинировали е-mail рассылки с фишингом
неплохим заработком для черных исследователей, зара- через размещенную в письмах URL, которая вела на инфицированный
батывающих на продаже выявленных уязвимостей на ха- сайт. Для проникновения в сеть использовалась уязвимость нулевого дня
керских рынках. с инжектированием svchost процесса и еще одна уязвимость нулевого дня
в Kerberos для получения прав доступа администратора домена.
Приведем несколько примеров эксплуатации уязвимости
в процессе проникновения в инфраструктуру.
Переполнение буфера (buffer overflow) – может вы- Так, секретарь может получить электронное письмо с вло-
зывать аварийное завершение или зависание программы жением якобы от своего руководства либо партнера (кибер-
(отказ в обслуживании). Отдельные виды переполнений по- преступники могут подделать адрес отправителя или просто
зволяют злоумышленнику загрузить и выполнить произволь- сделать его похожим на нужный е-mail, видоизменив один
ный машинный код от имени программы и с правами учетной символ). При открытии или предварительном просмотре до-
записи, под которой эта программа запущена. Например, кумента произойдет инфицирование любым из описанных
пользователь с правами администратора на своем компью- выше инструментов с вытекающими последствиями разви-
тере может получить письмо с вложенным PDF-документом, тия атаки.
в который будет вшит эксплойт. При открытии или предва- Разновидности использования почты как точки входа:
рительном просмотре приложенного документа запустится >> подделка/имитация адреса отправителя;
процесс переполнения буфера, что позволит злоумышлен- >> опасное вложение (различные документы и изображе-
нику получить права локального администратора на этом ния с вшитым эксплойтом);
компьютере. >> ссылка на HTML-страницу с заранее размещенным ин-
USB-устройства в сочетании с уязвимостью и мето- струментом проникновения.
дом социальной инженерии. Пример заражения через
подключенные USB-устройства чрезвычайно прост в реа- По данным исследования «Лаборатории Касперского»
лизации. Например, известны случаи, когда в офисе компа- среди российских компаний, ключевыми рисками внутри
нии (на парковке, у входа, в лифте) были разбросаны ин- по-прежнему остаются уязвимости в ПО (их отметили 48%
фицированные USB-флешки с документом под заманчивым от общего числа опрошенных компаний), а также незнание
для простого сотрудника наименованием (годовой отчет, правил ИТ-безопасности сотрудниками, приводящее к утеч-
финансовый план), в который был вшит эксплойт. кам данных (отметили 37% респондентов). Исходя из этого
Второй пример еще более простой: злоумышленник мы приравниваем методы социальной инженерии к угрозам,
приходит на собеседование в целевую компанию и просит не меньшим по важности, чем программные.
секретаря распечатать резюме, которое он якобы забыл,
с его флеш-карты. Комбинированные техники
Целевой фишинг (Spear phising) в сочетании с соци- Все организаторы целевой атаки используют комбини-
альной инженерией. Абсолютно все современные компа- рованный подход, включающий различные технические
нии используют специализированные средства контроля средства для реализации проникновения. Очевидный при-
электронной почты. Наличие таких сервисов, как антиспам мер – когда хакер делал рассылку по электронным адресам
и антивирус, является обязательным условием для работы сотрудников компании, предварительно войдя в контакт
корпоративной почты. Многие пользователи привыкли до- с ними в социальной сети под вымышленным именем и со-
верять входящей корреспонденции, прошедшей, как они брав данные о них. Это комбинация методов социальной ин-
предполагают, профессиональную проверку специализиро- женерии с фишингом.
ванными средствами контроля безопасности. К сожалению, Когда мы говорим о комбинировании инструментов,
это не относится к социальной инженерии, когда хакеры це- то уместно провести аналогию со швейцарским ножом,
ленаправленно готовят письма для обхода фильтров и анти- который объединяет несколько лезвий, отверток и так да-
вируса. лее, что придает ему высокую универсальность. Эксплойт,

системный администратор май 2016 19


Безопасность угрозы

сформированный аналогично швейцарскому ножу, может со- в инфраструктуру жертвы. Дело в том, что первичной точкой
держать большой набор уязвимостей и применять их после- проникновения являются, как правило, компьютеры сотруд-
довательно. При этом часть инструментов по проникновению ников с фиксированным рабочим графиком, а это означает,
могут сочетаться с легальным ПО, что позволяет минимизи- что время доступа в инфраструктуру для злоумышленников
ровать обнаружение атаки, так как доверенные программы будет ограниченным.
внесены в «белые списки» систем безопасности. Для нагляд- Лучше всего этапы закрепления проиллюстрируют при-
ности приведем несколько примеров таких программ: меры из реальных кибератак, расследованных экспертами
>> Продукты удаленного администрирования, RDP, VNC. «Лаборатории Касперского»:
>> Программы переключения языков клавиатуры, имею- >> Duqu 2.0. В этой кампании киберпреступники исполь-
щие возможность легитимно использовать логирова- зовали подписанный компанией Foxconn сертификат
ние клавиатуры. (Foxconn – известный производитель оборудования). Ха-
>> Сетевые сканеры и т.д. керы создали клон библиотеки DLL, которая присутство-
вала на компьютере жертвы и после модификации стала
выполнять роль загрузчика Payload. Это позволяло за-
Среди российских компаний гружать вредоносный модуль при включении компьютера

ключевыми рисками внутри и выгружать его при выключении. Тем самым злоумыш-
ленники не оставляли следов на жестких дисках зара-
по-прежнему остаются женных машин, но при этом сохраняли свое присутствие
уязвимости в ПО (их отметили внутри, распространяя такой метод внутри инфраструк-
туры. Для основной точки входа использовался главный
48% от общего числа контроллер домена компании.
опрошенных компаний), >> Carbanak.Закрепление происходило методом копирова-
ния Payload в системную папку %system32%\com с име-
а также незнание правил ИТ- нем svchost.exe, назначая файлу следующие атрибуты:
безопасности сотрудниками, системный, скрытый, только для чтения. Для автозапуска
использовался специально созданный сервис со схожим
приводящее к утечкам данных системным именем, отличающийся одной точкой.
(отметили 37% респондентов) Шаг 2. Распространение
Значимым аспектом является наличие постоянных актив-
Инвентаризация сети ных точек входа, обычно для этого используются серверы
После выполнения автоматических уклонений от обнару- с малым временем простоя, хорошо подходящие для выпол-
жения и системных тестов на соответствие операционной нения одного из правил целевой атаки Persistent. На таком
среде Payload активирует основные функциональные мо- уровне для заражения достаточно подключиться в выбран-
дули, устанавливая закрытое шифрованное соединение ной машине удаленным RDP-клиентом и запустить вредо-
с командными центрами и сигнализируя о своем активном носный модуль, предварительно скопировав его одним кли-
статусе. На этой стадии киберпреступники приступают ком мыши.
к консольной работе, используя терминал подконтрольной
машины. Им очень важно быстро сориентироваться внутри, Шаг 3. Обновление
чтобы сохранить свое присутствие и закрепиться в сети. Случается, когда определенная функция отсутствует в ар-
Первоочередным по важности является поднятие уровня сенале уже задействованного в атаке основного модуля,
доступа до привилегированного, после чего сразу же начи- например, такой функцией может являться запись звука
нается изучение топологии сети. Для выполнения этой за- с внешнего микрофона. Возможность обновить модуль за-
дачи обычно применяют свободно распространяемое ПО, ранее предусмотрена разработчиком атаки и может быть
например Netscan. активирована при необходимости.

Фаза третья. Распространение Шаг 4. Поиск ключевой информации


ОС учетом собранных данных по топологии сети происхо- и методов достижения целей
дит ручной отбор ключевых рабочих станций и серверов. Выполнение этапа может сильно варьироваться по време-
Выбранные машины киберпреступники берут под свой кон- ни, ведь информация может быть разной. Если целью ки-
троль и используют под новые задачи. На этом шаге хаке- берпреступников является, например, финансовая инфор-
ры уже имеют административные права и все их действия мация, сконцентрированная в одной системе, то это сильно
по отношению к системам безопасности абсолютно легаль- упрощает им задачу. Но если целью являются шпионаж
ны. Используя стандартные средства удаленного доступа, и долгосрочный сбор разрозненных данных, то и количе-
они выбирают наиболее удобные с точки зрения их задач ство устройств, хранящих нужную хакерам информацию,
серверы и рабочие станции. существенно возрастает, что влияет на сроки обнаружения
целей и на продолжительность этапа.
Шаг 1. Закрепление внутри инфраструктуры Приведем пример из Carbanak: ключевой информацией
Под закреплением понимается комплекс мероприятий, на- для киберпреступников являлась работа кассиров-опера-
правленный на организацию гарантированного доступа ционистов банка, которые совершали платежные операции.

20 май 2016 системный администратор


угрозы Безопасность

Дело в том, что киберпреступники не обладали опытом ра- на жестких дисках рабочих компьютеров были стерты, ки-
боты с платежными системами. Помимо вычисления и рас- берпреступники грозились опубликовать информацию,
пространения на машины кассиров-операционистов, ими если компания не подчинится их требованиям.
был применен метод записи экранов их работы в целях об-
учения. Это заняло довольно продолжительное время и уве-
личило по срокам подготовительный этап. В организациях наиболее
Фаза четвертая. Достижение целей серьезными последствиями
киберинцидентов признаются:
Шаг 1. Выполнение вредоносных действий
В завершающей фазе мы подходим к ключевой точке целе-
потеря доступа к критически
вой атаки. На этом этапе киберпреступники уже могут вы- важной для бизнеса
полнить любое действие, направленное против атакуемой
компании. Перечислим основные типы угроз:
информации (59%),
Пример 1. Хищение ключевой информации. Чаще репутационный ущерб (50%)
всего компании сталкиваются с хищением информации.
В коммерции это целый бизнес, основанный на конкуренции
и потеря важных деловых
и больших деньгах. В государственных структурах это шпио- контактов или бизнес-
наж, реже получение информации, содержащей конфиден-
циальные данные, для последующей перепродажи. В финан-
возможностей (34%)
совом секторе это информация о платежных и биллинговых
системах, счетах крупных клиентов и другая финансовая ин- Уничтожение данных – другой не часто встречающийся
формация для проведения незаконных транзакций. пример развития целевой атаки: в августе 2012-го поряд-
Само хищение происходит максимально незаметно ка 30 тысяч персональных компьютеров, принадлежащих
для систем мониторинга компании, маскируя сетевую актив- крупнейшей в мире нефтедобывающей компании Saudi
ность под работу известного интернет-сервиса с наимено- Aramco, были выведены из строя. Киберпреступники пре-
ванием домена, сильно напоминающего реальный. Обычно следовали две цели: первая – хищение закрытой инфор-
это выглядит как активная шифрованная сессия, где веб- мации, вторая – полная остановка бизнес-процессов ком-
адрес часто похож на популярные сетевые ресурсы (напри- пании. В результате атаки компания была вынуждена почти
мер, почтовые сервисы, поисковики или новостные сайты). на месяц прекратить свою операционную деятельность, от-
Пример 2. Изменение данных. Пример целевой атаки ключив филиалы от сети Интернет.
Metel, от которой пострадали сотни финансовых организа-
ций: киберпреступники, используя контроль над платежной Шаг 2. Сокрытие следов
системой, изменяли доступный кредит на балансе кредит- На протяжении всей целевой атаки киберпреступники ста-
ной карты, тем самым позволяя сообщнику несколько раз раются маскировать свое присутствие под легитимный
обналичивать средства с одной и той же карты. процесс, в крайних случаях, когда это невозможно, хакеры
А в случае киберограбления Carbanak хакеры, изучив ра- вручную очищают журналы событий. Как правило, большая
боту операционистов, действовали от имени сотрудников, часть активности протекает под административным досту-
используя онлайн-банкинг для перевода средств на подкон- пом, не вызывая подозрения.
трольные киберпреступникам счета. Также они удаленно
управляли конкретными банкоматами, отправляя команды Шаг 3. Точка возврата
на выдачу наличных средств, в то время как сообщник даже На финальном этапе атаки многие киберпреступники стара-
не вставлял в банкомат никаких карточек. ются оставить внутри средство, позволяющее им в случае
При этом если смотреть со стороны самих компаний, необходимости вернуться обратно в инфраструктуру. Таким
то статистика «Лаборатории Касперского» говорит о том, средством обычно является управляемый загрузчик, спо-
что в организациях наиболее серьезными последствиями собный по команде закачать исполняемый модуль.
киберинцидентов признаются потеря доступа к критически
важной для бизнеса информации (59% российских компа-
ний отметили этот фактор), репутационный ущерб (50%) В завершении статьи еще раз подчеркнем три основных от-
и потеря важных деловых контактов или бизнес-возможно- личия целевой атаки:
стей (34%). >> адресность; >> результативность.
Пример 3. Манипуляции с бизнес-процессами >> скрытность;
и шантаж. Наглядный случай произошел с компанией
Sony Pictures, которая подверглась таргетированной атаке В третьей части цикла статей «Анатомия целевой атаки»
в 2014 году. В результате были похищены тысячи файлов мы рассмотрим актуальные способы профилактики и проти-
и документов, финансовых данных, а также к киберпре- водействия процессу, именуемому целевой атакой.  EOF 
ступникам в руки попали фильмы, готовящиеся к прокату.
В компании рассказали, что большинство ее компьютеров [1] Левцов В., Демидов Н. Анатомия таргетированной атаки.
вышло из строя, а на экранах рабочих станций отобража- Часть 1. //«Системный администратор», №4, 2016 г. –
лась фраза «мы завладели вашими секретами». Все данные С. 36‑39 (http://samag.ru/archive/article/3170).

системный администратор май 2016 21


Безопасность механизмы защиты

Визитка

АНДРЕЙ ДУГИН,
инженер по защите информации, CCNP Security, andrew_dugin@ukr.net

Защита от DDoS подручными средствами


Часть 1. DNS Amplification
Рассмотрим DDoS-атаки типа «усиление» (amplification) с использованием
сервиса DNS и защиту от них

Чтобы сделать свой вклад в защиту всемирного киберпро- google.com. 271 IN A 173.194.122.230
странства от DDoS, совсем не обязательно покупать до- google.com. 271 IN A 173.194.122.225
google.com. 271 IN A 173.194.122.226
рогостоящее оборудование или подписываться на сервис. google.com. 271 IN A 173.194.122.232
Любой администратор сервера может поучаствовать без до- google.com. 271 IN A 173.194.122.231
<skipped>
полнительных материальных вложений, используя только
;; MSG SIZE rcvd: 204
знания и немного времени.

DNS amplification На DNS-сервере запустим в это время tcpdump:


Суть атаки заключается в том, чтобы в ответ на DNS-запрос
приходил ответ, в несколько раз больший, чем запрос. По- dns-server# tcpdump -n -s 0 host 192.168.10.129 and port 53
скольку протокол DNS основан на UDP, в запросе подме-
няется адрес отправителя на адрес жертвы и генерируется tcpdump: verbose output suppressed, use -v or -vv for full
трафик к большому количеству IP-адресов, на которых об- protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size
наружена возможность рекурсии. 262144 bytes
Источниками вредоносного трафика могут быть: 22:11:20.965578 IP 192.168.10.129.47551 > 192.168.10.128.53:
28004+ A? google.com. (28)
>> третьи лица;
22:11:20.989697 IP 192.168.10.128.53 > 192.168.10.129.47551:
>> клиенты хостинг-провайдера; 28004 11/0/0 A 173.194.32.136, A 173.194.32.129,
>> абоненты интернет-провайдера. A 173.194.32.142, A 173.194.32.135, A 173.194.32.132,
A 173.194.32.128, A 173.194.32.133, A 173.194.32.130,
A 173.194.32.134, A 173.194.32.131, A 173.194.32.137 (204)
Как такая атака выполняется? Предположим, есть у нас
такие участники:
>> 192.168.10.128– рекурсивный DNS-сервер; Видно, что запрос от клиента происходит всего один,
>> 192.168.10.129– клиент. далее рекурсивный сервер самостоятельно обращается
к вышестоящим DNS, выясняя необходимую информацию,
Выполняем элементарный DNS-запрос по FQDN, у кото- и в итоге клиент получает один ответный пакет во много раз
рого гарантированно большое количество соответствую- больше размером (204 байта полезной нагрузки), чем ис-
щих ему IP-адресов: ходный (28 байт). И это притом что каждый пакет содержит
еще 42 байта заголовков:
client:~$ dig @192.168.10.128 google.com >> 14 – Ethernet;
>> 20 – IP;
<skipped> >> 8 – UDP.
;; QUESTION SECTION:
;google.com. IN A
Итого: при запросе типа А по google.com 70-байтный за-
;; ANSWER SECTION: прос возвращает 246-байтный ответ.
google.com. 271 IN A 173.194.122.227
Дальше – больше. Теперь давайте попробуем запросить
google.com. 271 IN A 173.194.122.238
google.com. 271 IN A 173.194.122.228 не только A, но и все записи, касающиеся запрашиваемого
google.com. 271 IN A 173.194.122.229 FQDN.
google.com. 271 IN A 173.194.122.233
google.com. 271 IN A 173.194.122.224
client:~$ dig @192.168.10.128 -t ANY google.com

22 май 2016 системный администратор


механизмы защиты Безопасность

<skipped> Отключение сервиса DNS


;; QUESTION SECTION: Если размещенный в сети Интернет сервер не выполняет
;google.com. IN ANY
функцию DNS-сервера, то необходимо, чтобы сервис об-
;; ANSWER SECTION: работки запросов DNS на нем не был активен. В информа-
google.com. 271 IN A 173.194.122.227
ционной безопасности принято такое равенство: лишний
google.com. 271 IN A 173.194.122.238
....... сервис = лишняя уязвимость.
google.com. 271 IN A 173.194.122.232 Проверить, какие сетевые службы запущены и готовы
google.com. 271 IN A 173.194.122.231
google.com. 571 IN MX 50 alt4.aspmx.l.google.com.
обрабатывать запросы, на Unix-сервере можно с помощью
google.com. 571 IN MX 10 aspmx.l.google.com. команды:
google.com. 571 IN MX 20 alt1.aspmx.l.google.com.
google.com. 571 IN MX 30 alt2.aspmx.l.google.com.
client:~$ netstat -nap | egrep 'udp|tcp'
google.com. 571 IN MX 40 alt3.aspmx.l.google.com.
google.com. 20439 IN NS ns2.google.com.
google.com. 20439 IN NS ns1.google.com. В случае наличия DNS-сервера увидим приблизительно
google.com. 20439 IN NS ns3.google.com.
google.com. 20439 IN NS ns4.google.com. следующее:
google.com. 20439 IN TYPE257 \# 19
0005697373756573796D616E7465632E636F6D Proto Recv-Q Send-Q Local Address Foreign Address
google.com. 31 IN SOA ns2.google.com. dns-admin. State PID/Program name
google.com. 118858953 900 900 1800 60 <skipped>
google.com. 2439 IN TXT "v=spf1 include:_spf. tcp 0 0 192.168.10.128:53 0.0.0.0:*
google.com ~all" LISTEN 589/named
tcp 0 0 127.0.0.1:53 0.0.0.0:*
<skipped> LISTEN 589/named
udp 0 0 192.168.10.128:53 0.0.0.0:
;; MSG SIZE rcvd: 509 * 589/named
udp 0 0 127.0.0.1:53 0.0.0.0:
* 589/named
На сервере tcpdump показывает ответ большего разме- <skipped>
ра, чем в прошлом случае, поскольку клиенту возвращается
информация о записях всех типов по домену google.com: Если запущенный сервис в действительности не исполь-
зуется, а запущен исторически, то необходимо:
dns-server# tcpdump -n -s 0 host 192.168.10.129 and port 53 >> остановить сервис DNS;
>> удалить службу DNS-сервера из загрузочных скриптов
22:09:45.058655 IP 192.168.10.129.42278 > 192.168.10.128.53: системы;
2825+ ANY? google.com. (28) >> деинсталлировать DNS-сервер.
22:09:45.094795 IP 192.168.10.128.53 > 192.168.10.129.42278:
2825 23/0/0 A 173.194.32.128, A 173.194.32.136,
A 173.194.32.135, A 173.194.32.134, A 173.194.32.130, Во многих реализациях ОС все три действия могут быть
A 173.194.32.137, A 173.194.32.131, A 173.194.32.133,
выполнены при удалении пакета программ DNS-сервера
A 173.194.32.132, A 173.194.32.129, A 173.194.32.142,
NS ns4.google.com., NS ns1.google.com., NS ns3.google.com., (деинсталляции).
NS ns2.google.com., MX aspmx.l.google.com. 10, MX alt1.
aspmx.l.google.com. 20, MX alt4.aspmx.l.google.com. 50,
MX alt2.aspmx.l.google.com. 30, MX alt3.aspmx.l.google.com. 40,
Защита DNS-серверов
Type257, SOA, TXT "v=spf1 include:_spf.google.com ~all" (509) Если же роль DNS-резолвера актуальна, то необходимо
обеспечить максимальную защиту сервера от атак извне.
То есть один только ответ на запрос типа ANY по зоне Методы защиты используем следующие:
google.com на момент в ответном пакете 509 + 42 = 551 байт. Метод 1. Отсутствие запущенных неиспользуемых сете-
Есть такое понятие, как коэффициент усиления, кото- вых сервисов и протоколов – проверяется той же командой:
рый является соотношением размеров пакета-инициатора
и ответного пакета. В описанных выше случаях он доволь- client:~$ netstat -nap | egrep 'udp|tcp'
но небольшой (246/70 = 3.5 и 551/70 = 7.87, чего явно недо-
статочно для серьезной DDoS-атаки), но если количество с последующей остановкой и удалением пакетов, не исполь-
записей увеличить, то ответ может составлять несколько зуемых на сервере. Если в перечне видно подобное:
килобайт.
Злоумышленник, выполняющий атаку DNS amplification, udp6 0 0 :::53 :::* 589/named
для увеличения ее эффективности будет использовать сле-
дующие приемы: это говорит об использовании IPv6.
>> манипуляция размерами записей в DNS – чтобы ответ При обслуживании запросов исключительно по IPv4, не-
и коэффициент усиления были больше; обходимо отключить IPv6 (помним равенство «лишний сер-
>> IP spoofing – чтобы ответ прилетел к жертве; вис = лишняя уязвимость»), указав в /etc/sysctl.conf строку:
>> высокая интенсивность DNS-запросов от имени жерт-
вы. net.ipv6.conf.all.disable_ipv6 = 1

Еще с 2000 года документы BCP38 и RFC2827 дают ре- и выполнив команду:
комендации, как противодействовать DDoS. Рассмотрим
их практическую реализацию. $ sudo sysctl -p /etc/sysctl.conf

системный администратор май 2016 23


Безопасность механизмы защиты

Полный комплекс по защите ОС не описывается, по- ;; Truncated, retrying in TCP mode.


скольку объем материала уведет от основной мысли статьи.
<skipped>
Метод 2. Разрешение управляющих протоколов только ;; QUESTION SECTION:
из внутренней сети компании и доверенных IP достигает- ;irs.gov. IN ANY
ся либо ограничением с помощью внешнего firewall/VPN-
;; ANSWER SECTION:
концентратора (при наличии), либо системного iptables/ irs.gov. 7077 IN RRSIG SOA 7 2 7200
ipfw/и т.п. в зависимости от архитектуры сегмента сети, в ко- 20160416030058 20160409020058 13368 irs.gov.
mmRD+b1bZHI+nKC3uc4zHtbfspUwMARdGVkWgsoYd0sRKwvKzxJyWzJ9
тором расположен сервер. 2/4zeNTB/nAFGcZAF3Cu5fklQ+WbrpsSk3Nq7emzZPo45DXWLk0/JcaH
Метод 3. Разрешено только то, что разрешено. Явно 2ydEGLXqJC5iF4uBhMxRoIOtzvFzXn4RqtiVRHUImv04ddjE8hdky2U1 0rA=
не разрешенные доступы запрещаются. irs.gov. 7077 IN SOA ns1.irs.gov.
it\.aciouns\.external\.dns\.admin.irs.gov. 2010085496 3600
Метод 4. Установка последних стабильных обновлений 1800 2419200 900
и патчей ОС, а также используемых прикладных сервисов. irs.gov. 7077 IN RRSIG NSEC3PARAM
7 2 7200 20160416030058 20160409020058 13368 irs.gov.
MTDhI91CSla/AsANt3j9Bu5KmPyL0ZCbosh3V8qNIC89C+Ra0PofExcr
Ограничение рекурсии FhGCSLNA518UgbcLp+a9CXWfkg4Pnc/Phm5aZQK1SqXW8kORlGTcR9l5
Если DNS-сервер исключительно авторитативный, то обра- c3Liy01hG3ddooCH/fseY3htzvcfe8OIxj2emRougRhdWt3vB4Cl7NpT CR4=
ботка рекурсивных запросов на нем не нужна. Он должен irs.gov. 7077 IN NSEC3PARAM 1 0 100
AABBCCDD
отвечать только на запросы по своей зоне, не перенаправ- <skipped>
ляя их. Для этого на примере Bind в раздел options конфигу- ;; MSG SIZE rcvd: 3334
рационного файла добавляются строки:
где за счет размеров и количества записей объем сообще-
allow-transfer {"none";}; ния будет более 3 килобайт, то есть коэффициент усиления
allow-recursion {"none";}; атаки будет уже порядка 50 при использовании протокола
recursion no;
UDP. Но, как видно, в связи с тем, что был получен усечен-
ный UDP-пакет, клиент переинициировал запрос, используя
Если же сервер выполняет роль и авторитативного, и ре- TCP. Красным выделено то, на что следует обратить внима-
курсивного DNS, необходимо разрешить выполнять запро- ние: переинициация по TCP и размер сообщения.
сы только из доверенных подсетей, модифицируя конфигу- В дампе трафика переход на TCP выглядит так:
рационный файл следующим образом:
20:10:11.512845 IP 192.168.10.129.47720 > 192.168.10.128.53:
acl "trusted_ip" { 62574+ ANY? irs.gov. (25)
192.168.0.0/16; 20:10:11.513048 IP 192.168.10.128.53 > 192.168.10.129.47720:
10.0.0.0/8; 62574| 4/0/0 RRSIG, SOA, RRSIG, Type51 (450)
localhost; 20:10:11.513561 IP 192.168.10.129.60506 > 192.168.10.128.53:
localnets; Flags [S], seq 1836767364, win 29200, options [mss
}; 1460,sackOK,TS val 78657 ecr 0,nop,wscale 7], length 0
20:10:11.513580 IP 192.168.10.128.53 > 192.168.10.129.60506:
options { Flags [S.], seq 1926843090, ack 1836767365, win 28960,
<skipped> options [mss 1460,sackOK,TS val 89135 ecr 78657,nop,wscale
allow-recursion { trusted_ip; }; 7], length 0
allow-query-cache { trusted_ip; }; 20:10:11.513710 IP 192.168.10.129.60506 > 192.168.10.128.53:
<skipped> Flags [.], ack 1, win 229, options [nop,nop,TS val 78657 ecr
}; 89135], length 0
20:10:11.513755 IP 192.168.10.129.60506 > 192.168.10.128.53:
Flags [P.], seq 1:28, ack 1, win 229, options [nop,nop,TS val
В случае когда под управлением администратора нахо- 78657 ecr 89135], length 2737688+ ANY? irs.gov. (25)
20:10:11.513762 IP 192.168.10.128.53 > 192.168.10.129.60506:
дится не сервер, а сетевое оборудование конечного пользо- Flags [.], ack 28, win 227, options [nop,nop,TS val 89135 ecr
вателя (маршрутизаторы уровня доступа), необходимо убе- 78657], length 0
диться в том, что функция DNS-relay не используется либо 20:10:11.513988 IP 192.168.10.128.53 > 192.168.10.129.60506:
Flags [P.], seq 1:3337, ack 28, win 227, options [nop,nop,TS
не активирована на интерфейсе, доступном из интернета. val 89135 ecr 78657], length 333637688 31/6/12 RRSIG, SOA,
Также через внешний интерфейс не должна быть доступна RRSIG, Type51, RRSIG, RRSIG, A 166.123.218.220, RRSIG, TXT
функция управления устройством. "v=spf1 ip4:152.216.0.0/20 ip6:2610:30::/32 include:qai.irs.
gov -all", RRSIG, MX emg6.irs.gov. 10, MX emg5.irs.gov. 10,
EDNS0 MX emg3.irs.gov. 10, MX emg2.irs.gov. 10, MX emgw.irs.gov.
В RFC6891 описаны требования к поддержке Extension 20, MX emg1.irs.gov. 10, MX emg4.irs.gov. 10, RRSIG, RRSIG,
DNSKEY, DNSKEY, DNSKEY, DNSKEY, RRSIG, DS, NS ns2.irs.gov.,
Mechanisms for DNS (EDNS0) серверами во избежание атак
NS ns6.irs.gov., NS ns4.irs.gov., NS ns5.irs.gov., NS ns3.
типа DNS amplification и при этом совместимости с RFC1035. irs.gov., NS ns1.irs.gov. (3334)
По умолчанию для обработки запросов используется про- 20:10:11.514121 IP 192.168.10.129.60506 > 192.168.10.128.53:
Flags [.], ack 3337, win 281, options [nop,nop,TS val 78657
токол UDP, но в случае когда размер UDP-сообщения в от- ecr 89135], length 0
ветном пакете превышает 512 байт, должна происходить 20:10:11.518986 IP 192.168.10.129.60506 > 192.168.10.128.53:
инициация запроса по протоколу TCP. Flags [F.], seq 28, ack 3337, win 281, options [nop,nop,TS
val 78658 ecr 89135], length 0
Например, запрос: 20:10:11.519093 IP 192.168.10.128.53 > 192.168.10.129.60506:
Flags [F.], seq 3337, ack 29, win 227, options [nop,nop,TS
client:~$ dig @192.168.10.128 -t ANY irs.gov val 89136 ecr 78658], length 0
20:10:11.519312 IP 192.168.10.129.60506 > 192.168.10.128.53:
Flags [.], ack 3338, win 281, options [nop,nop,TS val 78658
показывает следующее: ecr 89136], length 0

24 май 2016 системный администратор


механизмы защиты Безопасность

Response Rate Limiting (RRL) для рекурсивных носят поведенческий неселективный ха-
Функционал EDNS0 спасает не всегда. Например, если рактер и должны определяться самостоятельно, что чревато
DNS-запросы рекурсивно перенаправляются открытыми влиянием на легитимный трафик.
резолверами наших клиентов либо сетевым оборудовани-
ем уровня доступа, на котором доступен всем функционал 2. Рекурсивный сервер
DNS-relay. В этом случае сам клиент является легитимным, Для рекурсивных серверов подойдет другое решение обес-
а принудительный переход на TCP только увеличит потре- печения RRL. Логично, что большинство запросов к DNS-
бление ресурсов сервера в случае атаки. серверам имеют тип A либо CNAME. Интенсивность query
type ANY, TXT, RRSIG, DNSSEC в норме, на порядки ниже.
1. Авторитативный сервер Значит, частоту их обработки необходимо контролиро-
Чтобы не давать возможности использовать авторитативный вать. Предположим, разрешить одному клиенту выполнять
DNS-сервер как источник для атаки, необходимо настроить за 10 секунд не более трех запросов type ANY. Несмотря
ограничение на количество ответов в секунду, которые сер- на то что подобная фильтрация более характерна для спец-
вер предоставит одному IP-адресу. Подобное ограничение ифических решений класса Application Firewall, задача аб-
позволит сэкономить ресурсы сервера и снизить интенсив- солютно выполнима с помощью всем известного инструмен-
ность атаки. Для использования Response Rate Limiting (RRL) та iptables.
данная функция должна быть активирована при компиляции Любой DNS-запрос может быть идентифицирован как не-
DNS-сервера (--enable-rrl). кая последовательность символов в пакете. Главное – понять
В конфигурационном файле BIND необходимо прописать вид последовательности, в каком месте искать и как указать
как минимум такие параметры применимо к одному клиенту: это iptables. Рассмотрим пример запроса.
>> slip – количество пакетов, ответные пакеты на которые Из рис. 1 видно, что запрос типа ANY идентифицируется
отправляются усеченными (truncated); двухбайтовой последовательностью символов 00ff, идущих
>> responses-per-second– количество ответов в секунду. под номерами 63-64 в данном пакете. Iptables считает по-
следовательность символов с IP-заголовка, поэтому искать
Например: данную последовательность в этом случае нужно будет на-
чиная с 49-го байта. Соответственно, смещение для iptables
slip 2 будет равняться 48.
responses-per-second 5 В соответствии с RFC 1034 и 1035 под query type выде-
лено 2 байта с максимальным десятичным значением 255.
Данный функционал рекомендуется использовать толь- Значения типов DNS-запросов:
ко для авторитативных серверов, поскольку значения >> ANY– 255 (0x00FF)

Рисунок 1. DNS-запрос

системный администратор май 2016 25


Безопасность механизмы защиты

>> RRSIG– 46 (0x002e) интенсивность, для правил iptables вместо 0000FF00 выби-
>> DNSKEY– 48 (0x0030) раем следующие последовательности:
>> TXT– 16 (0x0010) >> RRSIG– 00002E00
>> DNSKEY– 00003000
Следующим в пакете идет класс запроса. Согласно RFC >> TXT– 00001000
это также 16-битная величина, значения которой находятся
в диапазоне от 0x0001 до 0x00FF. То есть байт, следующий uRPF-check. В случае когда зараженный клиент, ини-
после типа запроса, будет также равен 0x00. циирующий трафик с поддельных IP-адресов, на уровне
Сам по себе байт, предшествующий query type, также L3 терминируется на вашем оборудовании, защититься
всегда будет равен двум нулям (0x00), поэтому для более от спуфинга из этой подсети можно, используя технологию
четкого описания последовательности символов для поиска Unicast Reverse Path Check (uRPF). Суть ее для подобных
возьмем 0000FF00. подключений в том, чтобы обрабатывать пакеты, влетающие
Самым коротким будет DNS-запрос к зоне root (.), где query на определенный интерфейс, только в случае присутствия
type будет идти в 55-56-м байтах, и фрагмент 0000FF00 нуж- IP-адреса в таблице маршрутизации через этот же интер-
но считать начиная с 40-го байта для iptables. Ограничение фейс.
на размер query name – 63 байта и зона. Предположим, в схеме подключения, обозначенной
Если выполнить: на рис. 2, необходимо выпускать в интернет только пакеты
из «честных» подсетей клиента 192.0.2.0/24 и 198.51.100.0/24,
$ dig -t ANY qwertyuiopqwertyuiopqwertyuiopqwertyuiopq ↵ не пропуская адреса из других подсетей.
wertyuiopqwertyuiop123.northwesternmutual

3. Подключение клиента
то в нем байты, обозначающие query type, будут идти под но- Соответствующая команда Cisco IOS будет выглядеть следу-
мером 138-139, и поиск 4-байтного 0000FF00 нужно начи- ющим образом:
нать с 123-го байта. Не самый большой запрос, но и вероят-
ность подобных запросов очень невелика. CE(config-if)# ip verify unicast source reachable-via rx
Соответственно, чтобы минимизировать возможный
DDoS, нужно сконфигурировать iptables следующим обра- и может быть применена как на интерфейсе Gi0/1 маршру-
зом: тизатора PE (provider edge router – граничный маршрутиза-
>> пропускать за 10 секунд три DNS-запроса типа ANY тор провайдера, к которому подключается нетранзитный
с одного IP; клиент), так и на интерфейсах VLAN2 и VLAN100 маршрути-
>> в UDP-пакетах с портом назначения 53; затора CE (маршрутизатор клиента).
>> считая запросом типа ANY последовательность
0000FF00 в 40-127-м байтах пакета.
Выполнив описанные настройки, мы напрямую не защи-
В итоге искомая последовательность команд iptables бу- тимся от атак на нашу сеть и серверы, но сделаем невоз-
дет иметь следующий вид: можным использование своих ресурсов для атак на других,
а также минимизируем количество оснований для кричащих
iptables -N DNS_ANY заголовков в прессе «Русские хакеры атаковали...».
iptables -v -A DNS_ANY -m recent --name dns_any ↵ Итого: уменьшить количество DDoS-атак типа DNS
--update --seconds 10 --hitcount 3 -j DROP
iptables -v -A DNS_ANY -m recent --name dns_any ↵ amplification и минимизировать участие своего инфраструк-
--set -j ACCEPT турного сегмента можно с помощью следующих действий,
iptables -v -A INPUT -p udp --dport 53 -m string ↵
не требующих дополнительных финансовых вложений:
--from 40 --to 123 --algo bm ↵
--hex-string '|0000FF00|' -j DNS_ANY >> Отключение неиспользуемых сервисов на всех серве-
рах.
При необходимости фильтровать интенсивность запро- >> Управление обновлениями.
сов других типов (TXT, DNSSEC, RRSIG) частота легитимных >> Ограничение рекурсивной обработки запросов только
запросов может варьироваться в зависимости от использую- для клиентов предоставляемого сервиса.
щих их сервисов. Если все же принято решение фильтровать >> Поддержка EDNS0.
>> Ограничение интенсивности ответов (Response Rate
Limiting) на DNS-серверах посредством настроек Bind
Рисунок 2. Схема подключения
либо iptables.
>> Применение проверок uRPF на активном сетевом обо-
рудовании.

И если так поступит каждый администратор серверов,


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

Ключевые слова: DNS, DDoS, DNS amplification, безопасность,


BIND.

26 май 2016 системный администратор


аудит Безопасность

Визитка

АНДРЕЙ БИРЮКОВ,
ЗАО «НИП Информзащита», системный архитектор, mex_inet@rambler.ru

Проводим пентест
Часть 2. Сбор необходимой информации
Правильная идентификация версий ОС и ПО является неотъемлемой частью
успешной атаки. В статье мы поговорим о том, как это можно сделать

В предыдущей статье [1] мы провели аудит доступа к бес- Государственные организации обязаны все свои зака-
проводной сети. Теперь будем считать, что злоумышленник зы размещать в открытом доступе, поэтому ресурсы типа
уже проник в корпоративную сеть и ему нужно собрать не- goszakupki.ru являются дополнительным источником ин-
обходимую для взлома информацию. Для этого понадобится формации. Например, среди заказов можно встретить лоты
правильно идентифицировать установленные в сети прило- на продление лицензий на ПО. К лотам должно быть при-
жения и перехватить как можно больше сетевого трафика, креплено техническое задание или аналогичный документ,
из его содержимого узнать о том, какие протоколы исполь- из которого тоже можно почерпнуть массу полезной инфор-
зуются, и постараться перехватить учетные данные пользо- мации.
вателей. Серьезной проблемой для информационной безопас-
Разнообразие приложений, протоколов, ОС и прошивок ности могут стать социальные сети. Конечно, никто не будет
к оборудованию ставит перед потенциальным взломщиком размещать пароли или другую конфиденциальную инфор-
задачу по точной идентификации как самой программы, мацию на своей странице. А вот телефонный номер, ICQ,
так и ее версии, архитектуры и других важных для атаки пара- личную почту очень даже может. Ну и само собой фотогра-
метров. Ведь не бывает универсальных эксплоитов, каждый фия лишней не будет.
из них рассчитан на уязвимости в определенных условиях. Ну а дальше социальная инженерия во всей красе. С по-
мощью полученной контактной информации злоумышлен-
Не забываем о людях ник может связаться с сотрудниками компании и получить
Собирать информацию о целевых сервисах можно не толь- необходимую информацию. Обратите внимание, все приве-
ко техническими средствами, но и с помощью социальной денные выше действия вряд ли можно хоть как-то подвести
инженерии. Основные способы сбора информации (под- под статьи уголовного кодекса.
робнее в [2]): В качестве практической части ко всему вышесказанно-
>> Анализ оборудования и ПО, упоминающихся в ваканси- му можно попытаться собрать информацию о технических
ях организации. специалистах своей компании в социальных сетях. Посмо-
>> Получение данных посредством общения с техниче- треть, какая информация о корпоративной сети есть в от-
скими специалистами организации. крытом доступе. Не лишним будет кому-либо из специалис-
>> Сбор сведений о закупаемом оборудовании и ПО из отк- тов, проводящих аудит, позвонить сотрудникам компании
рытых источников (например, goszakupki.ru). и от имени, например, техподдержки попытаться узнать
>> Анализ информации, которую размещают сотрудники пароль выхода в корпоративную сеть. Подобные экспери-
компании, и особенно технические специалисты, в со- менты позволяют получить представление об общем уровне
циальных сетях. осведомленности об ИБ в компании.
>> Телефонные звонки сотрудникам от имени техническо- На этом, я думаю, с социальной инженерией можно за-
го персонала. кончить и перейти к техническим способам сбора инфор-
мации.
Первый метод позволит злоумышленнику получить базо-
вое представление о тех сервисах, которые могут исполь- Осматриваемся в сети
зоваться в компании. Само по себе это даст мало полезной Для сбора информации нам снова потребуется Kali Linux.
информации, поэтому на следующем шаге хакер под видом Подключившись к сети, первое, что мы можем сделать,
соискателя может попытаться пройти собеседование и по- это посмотреть вывод команды ifconfig. Если мы получи-
лучить более детальные данные по оборудованию и ПО. ли IP-адрес по DHCP, то знаем размер подсети, в которой

системный администратор май 2016 27


Безопасность аудит

находимся, и можем смело приступать к сканированию. 139/tcp open netbios-ssn


В случае если нам не выдали адрес, придется выставлять 445/tcp open netbios-ssn
912/tcp open vmware-auth VMware Authentication Daemon 1.0
его самостоятельно. Для этого необходимо запустить сниф- (Uses VNC, SOAP)
фер и посмотреть, какой трафик «гуляет» по сети. В этом 5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
MAC Address: 00:25:22:12:C7:7F (ASRock Incorporation)
нам поможет Wireshark (см. рис. 1).
Service Info: OS: Windows
Наличие пакетов из и в сеть 192.168.1.х позволяет сде-
лать вывод о том, какая адресация используется, а бродка-
сты дают возможность оценить размер сети и маску. IP-ад- Прежде чем двигаться дальше, посмотрим, какие еще
рес придется выставлять наугад, разыскивая свободный, полезные для автоматизации сканирования сети функции
рекомендую начать с верхних адресов предполагаемого есть у nmap.
диапазона. В случае если злоумышленник хочет, чтобы его дейст-
Теперь запускаем сканирование подсети для поиска уяз- вия были менее подозрительными и не были обнаружены
вимых узлов. Для этого можно воспользоваться утилитой системами обнаружения атак (IDS), он может разбить свою
nmap, в составе Kali также есть и GUI… Однако мы вос- атаку на части, сканируя только небольшие диапазоны
пользуемся командной строкой. Для сканирования подсе- адресов.
ти 192.168.1.0/24 выполним команду: Приведенная ниже команда запускает перебор хостов
и TCP-сканирование первой половины всех (из доступ-
root@kali:~# nmap –sS -O 192.168.1.0/24 ных 255) адресов подсети 192.168.1.0. Также опция -p прове-
ряет, запущены ли SSH, DNS, POP3 или IMAP с использова-
Здесь мы проводим скрытое SYN-сканирование нием их стандартных портов и использует ли какое-нибудь
всех 255 машин сети 192.168.1.0/24 (опция -sS). Также будет приложение порт 4564. Если какой-нибудь из этих портов
произведена попытка определения операционной системы открыт, то будет произведена попытка определения работа-
на каждом работающем хосте (опция -O). ющего с этим портом приложения.
Через несколько минут мы получим информацию о рабо-
тающих в данный момент в сети узлах. Как видно, процесс root@kali:~# nmap -sV -p 22,53,110,143,4564 198.168.1.1-127
сканирования не слишком сложен.
Вывод может быть аналогичен следующему: Практический смысл следующей команды может по-
казаться сомнительным, потому что она указывает nmap
Nmap scan report for 192.168.1.2 выбрать случайным образом 100 000 хостов и проскани-
Host is up (0.0080s latency). ровать их на наличие запущенных на них веб-серверов
Not shown: 995 filtered ports
PORT STATE SERVICE VERSION (порт 80). Однако я бы рекомендовал при проведении ауди-
135/tcp open msrpc Microsoft Windows RPC та выполнить данную команду, дабы сымитировать действия

Рисунок 1. Перехваченные Wireshark пакеты

28 май 2016 системный администратор


аудит Безопасность

злоумышленника, уже проникшего в сеть и пытающегося от 7000-го до 7100-го, которые используют самописное при-
использовать корпоративные ресурсы для осуществления ложение. Также у нас имеется сеть 10.0.0.0/8. Мы хотим най-
атак на другие узлы. ти, на каких из этих машин открыты порт 80 и диапазон пор-
При этом перебор хостов отключен опцией -PN, т.к. по- тов с 7000-го по 7100-й. При этом нам необходимо провести
сылка пары предварительных запросов в целях определе- сканирование как можно быстрее, но с учетом пропускной
ния доступности хоста является нецелесообразной, когда способности каналов связи. Таким образом, нам надо от-
интересует всего один порт на каждом хосте. правлять 100 000 пакетов в секунду. Для этого выполним
команду:
root@kali:~# nmap -v -iR 100000 -PN -p 80
root@kali:~# masscan -p80,7000-7100 10.0.0.0/8 --rate=100000
Если требуется просканировать большое количество
узлов, то имеет смысл сохранять полученные результаты В результате мы получим список машин с обнаруженны-
в файл. К тому же в случае, если злоумышленник будет об- ми открытыми портами (см. рис. 2).
рабатывать полученные результаты с помощью сценариев Для удобства работы с собранной информацией ее не-
в целях автоматизации процесса взлома, вывод в файл так- обходимо сохранять в файл. В следующем примере в файл
же будет необходим. Написание сценариев для автоматиза- будут сохранены приветственные сообщения, которые по-
ции задач аудита мы подробно рассмотрим в одной из сле- казывают узлы при обращении к открытому порту 80.
дующих статей цикла.
Следующей командой будут просканированы 4096 IP-ад- root@kali:~# masscan -p80 10.0.0.0/8 --banners -oB <имя_файла>
ресов (без предварительного пингования), а выходные дан-
ные будут сохранены в формате XML и формате, удобном Еще одной полезной опцией, которая может быть исполь-
для просмотра утилитой grep (grepable-формат). зована при проведении аудита, является возможность ука-
зания IP и MAC-адреса интерфейса, отправляющего пакеты
root@kali:~# nmap -PN -p80 -oX logs/pb-port80scan.xml ↵ для сканирования.
-oG logs/pb-port80scan.gnmap 216.163.128.20/20 Вот пример использования утилиты с заданными IP
и MAC, сканирующей сеть 10.0.0.0/8 на наличие открытых
Когда нужна скорость портов 137-139.
Nmap является, пожалуй, наиболее известным средством
сканирования сети. Однако, помимо него, существуют так- root@kali:~# masscan 10.0.0.0/8 –p137-139 ↵
же и другие средства. Например, в случае если необходимо --adapter-ip 192.168.1.111 ↵
--adapter-mac 00-11-22-33-44-55
просканировать сеть в несколько тысяч узлов на предмет
наличия хостов с открытыми портами, то наиболее подходя-
щим будет массовый сканер портов MASCAN. Для автоматизации и ускорения процесса сканирования
Это приложение способно отправлять до 10 миллионов можно создать конфигурационный файл, в котором указать
пакетов в секунду. По утверждениям разработчиков, он мо- необходимые параметры для IP и MAC-адресов. Например:
жет сканировать весь интернет за 6 минут. Этот инстру-
мент полезен для обзора сетей большого масштаба – таких adapter-ip = 192.168.1.111
как интернет или крупные внутренние сети. Этот сканер adapter-mac = 00-11-22-33-44-55

построен на технологии асинхронного сканирования пор-


тов, когда одновременно отправляется большое количество И затем запустить утилиту с ключом -с.
пакетов на порты хоста. К тому же он достаточно гибкий,
позволяет выбирать произвольные диапазоны адресов root@kali:~# masscan -c <имя_файла>
и портов.
Важной особенностью MASSCAN, о которой не стоит забы- Для генерации конфигурационного файла из текущих
вать, является то, что он использует кастомный (то есть спе- настроек наберите опцию --echo. Это остановит програм-
циально изготовленный) TCP/IP-стек. То есть любое другое му от обычного запуска, и вместо этого она просто напе-
действие, которое выходит за пределы простого сканиро- чатает текущую конфигурацию. Это полезно для генерации
вания, приведет к конфликту с локальным TCP/IP-стеком.
Это означает, что либо нужно использовать опцию -S для ис-
Рисунок 2. Обнаруженные узлы
пользования раздельных IP-адресов, либо настроить опера-
ционную систему так, чтобы файрвол обрабатывал порт,
который использует masscan [3].
Теперь перейдем непосредственно к работе с данной
утилитой.

root@kali:~# masscan <ip адрес/диапазон> -p порты опции

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


мощью методов, описанных выше, показали, что на многих
машинах в сети могут быть открыты порт 80 и группа портов

системный администратор май 2016 29


Безопасность аудит

первого конфигурационного файла или для просмотра спи- сводится к тому, что подменяем в ARP-таблице MAC-адрес
ска параметров. узла, вследствие чего в корпоративной сети становится
На этом, я полагаю, тему идентификации узлов и при- возможным контролировать трафик всех узлов в пределах
ложений с помощью сетевых сканеров можно завершить. доступности ARP-ответов с контролируемого узла вне зави-
Собранная на данном этапе аудита информация нам потре- симости от свойств физической сетевой инфраструктуры.
буется в следующей статье, когда мы будем выявлять уяз- То есть мы сможем получать копии трафика с других портов
вимости и пытаться эксплуатировать их. А теперь перейдем коммутатора.
к сбору информации посредством перехвата сетевого тра- Перейдем к практической части. Для этого воспользу-
фика. емся утилитой Ettercap. Конечно, описанные ниже действия
можно реализовать и с помощью Wireshark, однако Ettercap
Анализируем трафик немного удобнее для реализации данной атаки.
Нам потребуется Wireshark, позволяющий перехватить ин- Запустим утилиту с графическим интерфейсом.
формацию, передаваемую по сети в открытом виде. Напри-
мер, некоторые самописные веб-приложения, работающие root@kali:~# ettercap –G
в корпоративных сетях, до сих пор не используют SSL-
шифрование, вследствие чего передача учетных данных Далее выбираем тип перехвата трафика Unified
и другой информации ведется в открытом виде и легко пере- или Bridged. Первый производит простой перехват трафи-
хватывается. ка, в то время как второй предназначен для вмешательства
Для мониторинга трафика с помощью Wireshark необхо- в процесс передачи трафика. Выберем unified. Далее ука-
димо на активном интерфейсе запустить прослушивание. зываем используемый сетевой интерфейс. Можно указать
Для поиска «интересной» информации в уже собранном как проводной, так и беспроводной варианты.
трафике необходимо остановить перехват и сделать филь- Далее определяемся с тем, у кого мы хотим перехваты-
трацию по интересующему порту или протоколу. Например, вать трафик. Для этого необходимо просканировать сеть
по порту 80. Так как вся информация в HTTP передается на наличие активных узлов. Как видно, функционал Ettercap
в текстовом виде, найти, к примеру, пароль, переданный частично перекликается с описанным ранее сканерами.
формой, можно довольно просто. Достаточно сделать по- Для запуска сканирования выбираем Hosts, далее Scan for
иск в собранных пакетах по тегу hidden. Рядом с этим тегом hosts. Получаем список активных узлов с IP и MAC-адресами.
и будет пароль. Выбираем нужный узел и нажимаем Add To Target 1. В этом
Помимо Wireshark, существуют и другие не менее инте- окне еще имеется кнопка Add To Target 2. В случае если хо-
ресные средства. Одним из них является Driftnet [4]. Эта ути- тим перехватывать только трафик между двумя конкретны-
лита ориентирована на воспроизведение перехваченного ми узлами, необходимо указать второй узел и нажать Add
медийного контента, который передается по сети. Конечно, To Target 2, если планируем перехватывать весь трафик
с точки зрения безопасности нас мало интересует, какие для данного узла, то второй узел выбирать не надо.
видео смотрят пользователи в рабочее время. Хотя исполь- Затем запускаем сканирование, нажав Start, Start Sniffing.
зование корпоративного доступа в сеть Интернет тоже мож- Далее завершаем процесс отравления ARP, выбрав MITM/
но отразить в отчете об аудите, особенно если к нему можно ARP Poisoning. Опция Sniff Remote Connections должна быть
приложить иллюстрирующие доказательства. Однако нас включена.
больше интересует передача по сети сканов различных до- Далее уже в Wireshark можно осуществлять перехват тра-
кументов и других изображений, содержащих конфиденци- фика по аналогии с тем, как мы это делали ранее.
альную информацию. По окончании сбора пакетов в Ettercap необходимо от-
Пользоваться Driftnet довольно просто, для этого до- ключить ARP-poison, нажав Start/Stop sniffing.
статочно запустить Applications → Kali Linux → Sniffing/
Spoofing → Web Sniffers → driftnet. После запуска появится Становимся посредником
небольшое окно, которое желательно растянуть. Злоумышленник, попав в сеть, может осуществить атаку
А дальше просто смотрим, что проходит через сеть. типа «человек посередине» (Man in the middle), то есть попы-
таться стать посредником между легальными узлами. С по-
Боремся с коммутаторами мощью MitM можно реализовать много различных атак, свя-
Что делать в случае, если, подключившись к сети, сниффер занных не только с прослушиванием, но и с модификацией
показывает только пакеты, идущие к или от нашей машины? проходящего трафика. Но в контексте темы данной статьи
В современных сетях такая ситуация достаточно распро- мы реализуем перехват паролей, заодно познакомившись
странена, так как повсеместно используемые коммутаторы еще с парой полезных утилит из состава Kali Linux.
в отличие от концентраторов не ведут широковещательных Итак, мы уже знаем, какие узлы сейчас активны в сети.
рассылок поступающего трафика на все порты. Так как машина злоумышленника выступает в роли по-
Однако эту «защиту» достаточно легко преодолеть с по- средника, для начала разрешаем пересылку IP-пакетов (ip
мощью инструментов, входящих в состав Kali. Но сначала forwarding). Сделать это можно следующим образом:
немного теории для лучшего понимания процесса.
На коммутаторах для преобразования IP-адресов и MAC- root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward
адресов используется протокол ARP (Address Resolution
Protocol). Информация о соответствии IP и MAC хранит- Теперь проводим ARP spoofing (подменяем MAC-ад-
ся в ARP-таблицах. Атака ARP-poison (отравление ARP) реса для определенных IP-адресов). Машина злоумыш-

30 май 2016 системный администратор


аудит Безопасность

ленника будет посредником между шлюзом по умолчанию а вот про внутреннюю сеть обычно забывают. В результате,
и локальной сетью. Если адрес шлюза 192.168.1.1, а наш если злоумышленнику каким-либо образом удалось проник-
адрес 192.168.1.100, то для подмены нам необходимо вы- нуть во внутреннюю сеть, он может совершенно безнака-
полнить следующее: занно проводить различные атаки, оставаясь при этом не-
заметным для средств защиты.
root@kali:~# arpspoof –t 192.168.1.1 192.168.1.100 В случае если IDS/IPS все-таки что-то обнаружили,
то я рекомендую внимательно посмотреть, какие именно
Утилита arpspoof как раз предназначается для подмены атаки были найдены и какие сообщения были выведены
MAC-адресов. в консоль. Лучше всего по отдельности провести каждую
Для корректной работы ARP spoofing обязательно дела- из атак и посмотреть, реагирует ли на нее IDS, и если ре-
ем подмену и в обратную сторону. агирует, то как именно. Возможно, есть смысл написать
собственные правила или подправить уже существующие.
root@kali:~# arpspoof –t 192.168.1.100 192.168.1.1 Также современные антивирусные системы умеют обнару-
живать некоторые виды сетевых атак, прежде всего скани-
Начинаем перехват трафика. Правда, в отличие от преды- рование портов на хосте. Поэтому нелишним будет прове-
дущих примеров здесь мы будем перехватывать, а вернее, рить журналы событий антивирусных систем.
отображать не весь трафик, а только пароли от различных Что касается активной защиты от описанных атак,
приложений. Для этого мы воспользуемся утилитой dsniff [5]. то здесь лучше всего справится именно система предотвра-
щения вторжений, установленная в разрыв. Если архитекту-
root@kali:~# dsniff ра сети позволяет, то правильно настроенная IPS даст воз-
можность заблокировать большинство описанных в статье
--------------- атак.
05/21/00 10:49:10 bob -> unix-server (ftp) Также межсетевые экраны, блокирующие все, кроме
USER bob
PASS dontlook нужного трафика, будут хорошим средством защиты от ска-
--------------- нирования портов. Бороться с прослушиванием трафика
05/21/00 10:53:22 karen -> lax-cisco (telnet)
достаточно сложно. Конечно, если целевое приложение
karen
supersecret поддерживает шифрование трафика, например SSL, то не-
--------------- обходимо его использовать. Однако если какая-либо старая
05/21/00 11:01:11 karen -> lax-cisco (snmp)
[version 1]
программа работает только по HTTP или FTP, то здесь един-
private ственным решением может стать шифрование на уровне
IPSec.
В результате работы мы перехватили несколько паролей, Но для выявления того, прослушивают ли вашу сеть, мож-
передававшихся в незашифрованном виде. но прибегнуть к помощи узла-приманки (honeypot). Создаем
Dsniff позволяет перехватывать пароли, отправлен- поддельный сервис, на который периодически производит-
ные методом HTTP POST данные, HTTP Basic and Digest ся подключение под как бы административной учетной за-
authentications, FTP,IRC, POP, IMAP,SMTP, NTLMv1/v2 (HTTP, писью по нешифрованному протоколу с одного и того же
SMB, LDAP и т.п.). узла. На узле-приманке настраиваем журналирование всех
На этом, я думаю, практическую часть сегодняшней ста- попыток входа. И ведем регулярный мониторинг журналов
тьи можно завершить и перейти к рассмотрению резуль- приманки. Если обнаруживаются входы с IP-узла, отличного
татов. от того, с которого мы подключаемся, значит, кто-то прослу-
шивает нашу сеть.
Что в результате
Защищаться от социальной инженерии не так просто,
как может показаться на первый взгляд. Необходимо на ре- На этом тему сбора информации о сети и защиты от данного
гулярной основе производить мониторинг той информации, типа атак можно завершить. В следующей части мы начнем
которая есть о компании в интернете, на предмет наличия подробное рассмотрение того, как можно получить доступ
сведений о приложениях, используемых в корпоративной на целевые узлы атакуемой сети.  EOF 
сети. Особое внимание здесь следует уделить социальным
сетям, так как в них зачастую публикуют «лишнюю» инфор- [1] Бирюков А. Проводим пентест. Часть 1. Проникаем в беспро-
мацию. водную сеть. // «Системный администратор», №4, 2016 г. –
Теперь перейдем к технике. После выполнения тех дейст- С. 40-44 (http://samag.ru/archive/article/3171).
вий, которые описаны в статье, я бы рекомендовал обра- [2] Бирюков А. А. Информационная безопасность: защита и на-
титься к средствам защиты информации и мониторинга падение. ISBN: 978-5-94074-647-8.
событий ИБ, которые установлены в корпоративной сети. [3] Статья по работе с masscan – https://kali.tools/?p=976.
Прежде всего необходимо посмотреть в консоли систем об- [4] Описание утилиты DriftNet – http://goo.gl/x0pZK3.
наружения и предотвращения вторжений, какие атаки они [5] Описание работы с dsniff – http://256bit.ru/Secure/Glava%2010/
увидели. Если IDS не зафиксировал ничего, то, может, он, Index10.html.
конечно, и не настроен, но скорее всего у вас просто не ве- [6] Список всех ключей nmap – http://xgu.ru/xg-ids/ch06.html.
дется мониторинг трафика внутри сети. Очень часто IDS/IPS
контролируют только каналы, ведущие в интернет и DMZ, Ключевые слова: безопасность, пентест, аудит, Kali.

системный администратор май 2016 31


Базы данных инструменты

Визитка Визитка

ВЛАДИМИР ТИХОМИРОВ, ВАЛЕРИЙ МИХЕИЧЕВ,


директор по информационным технологиям эксперт Oracle, ОСАО «Ингосстрах»,
СПАО «Ингосстрах», Vladimir.Tikhomirov@ingos.ru Valery.Mikheitchev@ingos.ru

Распараллеливание операций в Oracle


Часть 2. Особенности и ограничения
В статье рассматриваются вопросы распараллеливания DDL-операций, SQL‑запросов
и других операций в Oracle, а также особенности и ограничения, связанные
с распараллеливанием

В первой части статьи [1] были рассмотрены вопросы Select u.username, p.profile, p.resource_name, p.limit ↵
распараллеливания DML-операций: Insert, Update, Delete, from dba_profiles p, dba_users u ↵
where u.profile=p.profile ↵
Merge, особенности и ограничения процессов распаралле- and resource_name ='SESSIONS_PER_USER' ↵
ливания обычных (не секционированных) таблиц [1]. Во вто- and u.username='AIF';
рой части разберемся с возможностями Oracle по распа-
раллеливанию DML-операций секционированных таблиц. где в username подставляется имя схемы пользователя.
Также осветим вопросы распараллеливания SQL-запросов При этом на профиль пользователя накладывает ограни-
(parallel query) и распараллеливания DDL-операций (таких чения ресурсов только в том случае, когда параметр иници-
как Create tables, Create index и Rebuild index). Рассмотрим ализации Resource_limit установлен в true. Увидеть значение
возможности использования параллелизма при сборе ста- параметра инициализации можно из запроса:
тистики таблиц и индексов.
На степень параллелизма существенное влияние оказы- Select name,value from v$parameter where name='resource_limit';
вает ряд таких факторов, как число процессоров на серве-
ре, значения параметров инициализации экземпляра базы Параметры параллелизма на уровне сессии
данных, параметры, установленные на уровне сессии, про- (сессионные параметры)
фили пользователей и их параметры ресурсов и т.д. Их можно увидеть из представления v$ses_optimizer_env че-
рез запрос:
Параметры инициализации
Они отвечают за параллелизм во всех сессиях, и их значе- Select name, isdefault, value from v$ses_optimizer_env s ↵
ния можно увидеть по запросу: where sid = sys_context('USERENV', 'SID') ↵
and name like 'parallel%' order by 1;

Select name, value, description from v$parameter ↵


where name like ‘%parallel%’ order by 1; Среди всех сессионных параметров особый интерес
представляют следующие три параметра:
Основные параметры инициализации, отвечающие за па- >> Parallel_dml_mode, определяющий параллелизм DML-
раллелизм, приведены в таблице 1. операций (по умолчанию принимает значение disabled);
>> Parallel_ddl_mode, определяющий параллелизм DDL-
Профили пользователя операций (по умолчанию принимает значение enabled);
Профиль (Profile) – это коллекция атрибутов, связанных с ис- >> Parallel_query_mode, определяющий параллелизм SQL-
пользованием ресурсов и паролей, которая может быть на- запросов (по умолчанию принимает значение enable).
значена пользователю. В профилях задаются, в том числе,
предельные значения степени параллелизма для пользова- Первый параметр Parallel_dml_mode имеет значение
теля. Для параллелизма интерес представляет параметр ре- disable, блокирующее (выключающее) режим распараллели-
сурсов Session_per_user, который указывает максимальное вания процессов DML-операций, например таких, как Insert,
количество сессий (параллельных процессов), которые мо- Delete Update, Merge. Чтобы распараллеливание заработа-
гут быть параллельно открыты пользователем. ло, необходимо включить его в режим enable командами:
Наличие профиля у пользователя AIF и его ограничения
по ресурсам, например по Session_per_user, можно увидеть Alter session enable parallel DML
через запрос: Alter session force parallel DML

32 май 2016 системный администратор


инструменты Базы данных

Как работают эти команды и их особенности описаны зировать параллелизм через указание в таблице фразы
в первой части статьи. Первая команда требует еще активи- parallel, либо через хинт parallel, либо путем выполнения пе-
зации процесса распараллеливания либо через хинт (под- ред запуском сессии команды Alter с фразой force, например:
сказка оптимизатору) Parallel, либо указанием параллелиз-
ма фразой Parallel при создании таблицы командой Create. Alter session force dml
Второй параметр Parallel_ddl_mode сообщает, что в сес- Alter session force dml parallel 32

сиях включен режим enabled, разрешающий проводить рас-


параллеливание процессов при DDL-операциях (например, где 32 – степень параллелизма.
при создании или перестройке индекса). Однако следует Таким образом, первый способ активизации секциони-
заметить, что это не подразумевает автоматического вклю- рованной таблицы – это указать в таблице параллелизм
чения процесса распараллеливания, требуется провести при ее создании в команде Create. Для этого используется
работу по активизации процессов распараллеливания. фраза parallel с указанием степени параллелизма (degree of
Третий параметр parallel_query_mode по умолчанию при- parallelism или сокращенно DOP), при этом возможен вари-
нимает значение enabled, разрешающее распараллелива- ант без указания степени параллелизма во фразе parallel.
ние SQL-запросов. При этом можно изменить значение па- Другим способом активизации параллелизма в секциони-
раметра с enabled на force в сессии командой Alter session рованной таблице является использование хинта (подсказ-
force parallel query. При этом в команде может быть добав- ка оптимизатору) parallel с указанием в нем степени парал-
лена еще одна фраза parallel со степенью параллелизма, лелизма (возможен вариант без указания в хинте DOP).
например, Alter session force parallel query parallel 16. Ниже приводится пример секционированной таблицы
AIF.TARIFF, секционированной по полю HEADISN с интерва-
Параллелизм DML и SQL-операций лом секционирования 100 по методу RANGE, с автоматиче-
c секционированными таблицами ским созданием секции фразой interval(100). Параллелизм
Для секционированной таблицы, чтобы заработал парал- в таблице задается фразой parallel со степенью паралле-
лелизм при выполнении DML-операций, достаточно активи- лизма DOP=32.

Таблица 1. Документированные параметры инициализации, ответственные за параллелизм

Имя параметра Назначение параметра


LICENSE_MAX_SESSIONS Определяет максимальное количество параллельно выполняющихся сеансов, которые могут существовать в любой заданный
момент времени (значение, используемое по умолчанию: 0)
PARALLEL_ADAPTIVE_ Включает адаптивный алгоритм, разработанный для того, чтобы улучшить производительность в многопользовательских
MULTI_USER средах с использованием параллельного выполнения. Алгоритм автоматически уменьшает требуемую степень параллелизма
на основе системной загрузки во время выполнения запроса. Эффективная степень параллелизма основана на степени
параллелизма по умолчанию или степени параллелизма из таблицы или хинтов
PARALLEL_DEGREE_LIMIT Оптимизатор автоматически определяет степень параллелизма для операторов на основе потребности их в ресурсах. При этом
оптимизатор будет ограничивать степень параллелизма используемого для обеспечения параллельных процессов сервера
в случае их лавинообразного роста в системе до определенного предела. Данный предел и определяется значением этого параметра
PARALLEL_DEGREE_ Определяет, будет ли автоматическая степень параллелизма
POLICY
PARALLEL_EXECUTION_ Определяет размер сообщений, используемых для параллельного выполнения (параллельный запрос, параллельные DML-
MESSAGE_SIZE операции, параллельное восстановление, репликация)
PARALLEL_FORCE_LOCAL Контролирует параллельные выполнения в среде Oracle RAC
PARALLEL_MAX_SERVERS Параметр определяет максимальное число параллельных серверных процессов, заданное для экземпляра
PARALLEL_MIN_SERVERS Определяет минимальное число параллельных серверных процессов, заданных для экземпляра. Значение является числом
процессов параллельного выполнения, которые Oracle создает, когда экземпляр запускается
PARALLEL_MIN_PERCENT Позволяет определять минимальный процент числа процессов параллельного выполнения, требуемых для выполнения
параллельного запроса. Установка этого параметра гарантирует, что параллельные операции не будут выполняться, если
соответствующие ресурсы не будут доступны
PARALLEL_MIN_TIME_ Определяет минимальное время выполнения, после которого для оператора включается автоматическая степень
THRESHOLD параллелизма. По умолчанию параметр устанавливается в значение, равное 10 секундам. Автоматическая степень
параллелизма разрешена, только если параметр PARALLEL_DEGREE_POLICY устанавливается в значение AUTO или LIMITED
PARALLEL_SERVERS_ Определяет, какое количество серверных параллельных процессов разрешено для операторов параллельного выполнения,
TARGET прежде чем в действие вступит очередь операторов. Если параметр установлен на AUTO, Oracle поставит в очередь SQL-
операторы, которые требуют параллельного выполнения, если необходимые параллельные процессы сервера будут
недоступны. Организация очереди операторов начнется тогда, когда число активных серверных параллельных процессов
в системе будет равно или больше, чем значение этого параметра
PARALLEL_THREADS_ Параметр описывает число выполняющихся параллельных процессов или потоков, которые ЦП может обработать во время
PER_CPU параллельного выполнения
PROCESSES Значение параметра устанавливает верхний предел для числа процессов операционной системы, которые могут параллельно
подключаться к базе данных

системный администратор май 2016 33


Базы данных инструменты

CREATE TABLE AIF. TARIFF параллельное чтение секции, например распараллеливани-


( ISN NUMBER, NAME VARCHAR2(200), PRICE NUMBER, HEADISN NUMBER) ем извлечения строк из секции sys_p48283 по запросу:
PARTITION BY RANGE (HEADISN)
INTERVAL( 100)
( PARTITION P_1 VALUES LESS THAN (100)) Select /*+ parallel(32) */ t.* ↵
PARALLEL 32; from aif.tariff partition(sys_p48283) t;

Число секций, созданных в таблице, можно увидеть Следует учесть также, что для секционированных таблиц
по запросу: распараллеливание поддерживается в том числе для опера-
ций с секциями Move, Split и Coalesce.
Select p.* from dba_tab_partitions p where p.table_owner='AIF' ↵ Замечание. Как показала практика предпочтительнее
and p.table_name=’TARIFF' order by partition_position; указывать DOP во фразе parallel как в таблице, так и в хин-
те, поскольку число параллельных процессов по умолчанию
Если при создании таблицы во фразе parallel не указать может оказаться велико, что может привести к потере про-
степень параллелизма DOP, то в таблице при ее создании изводительности SQL-запроса.
по умолчанию появляется фраза: Увидеть результаты распараллеливания DML-операций
и SQL-запросов позволяет представление Oracle v$px_
PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT) session через запрос запущенный в другой сессии:

При этом DEGREE DEFAULT говорит о том, что степень Select * from v$px_session where qcsid=241
параллелизма DOP автоматически рассчитывается Oracle
на основании параметров инициализации, в первую очередь При этом qcsid – это sid сессии, в которой запущен за-
на основании таких параметров, как Cpu_cout и Parallel_ прос, например 241, где sid можно найти по запросу:
threads_per_cpu.
При этом число задействованных параллельных процес- Select sid from v$session where audsid in ( ↵
сов на основании данных параметров рассчитывается как: select userenv('sessionid') from dual)

Cpu_cout * Parallel_threads_per_cpu + 1 (добавляется еще


один процесс, представляющий собой координатор процес- Данный запрос покажет сессии, образованные в ре-
сов). Назовем полученное значение Degree default и будем зультате выполнения параллельных операций (например,
на него ссылаться далее в статье. Для определения Degree при DOP=32 будет 33 сессии, где одна из них будет сессия-
default можно воспользоваться запросом: координатор с sid=241).

Select value*(select value from v$parameter ↵ Параллелизм SQL-запросов


where name='parallel_threads_per_cpu')+1 ↵ Одним из способов инициировать распараллеливание вы-
from v$parameter where name='cpu_count';
полнения SQL-запросов является использование хинта
parallel c указанием в нем степени параллелизма DOP. На-
Пример DML-операции с секционированной таблицей пример:
с использованием хинта parallel:
Select /*+ parallel(a 32) */ a.* from aif.buch_t a
Update /*+ parallel(32) */ aif.tariff set price=price+100 ↵
where isn=1000000; commit; где a – алиас таблицы (если его нет, то ставится имя табли-
цы). В Oracle 11g и 12c алиас (имя таблицы) можно не ста-
операция с параллелизмом должна быть обязательно за- вить, т.е. хинт имеет вид /*+ parallel(32) */.
вершена по commit или rollback. Кроме того, в хинте parallel значение DOP можно не ста-
Число DOP в таблице можно скорректировать командой: вить, например писать /*+ parallel */. В этом случае Oracle
вычисляет DOP на основании значений параметров инициа-
Alter table aif.rtariff parallel 64 лизации по формуле, описанной выше, принимая значение
Degree default.
в том числе задать DOP, если при создании таблицы не ука- Другой вариант распараллеливания SQL-запросов, об-
зали фразу parallel. ращающихся к таблице, – это задания в таблице паралле-
При выполнении SQL-запросов к секционированной та- лизма через фразу parallel со значением DOP при создании
блице наличие фразы parallel в таблице позволяет распа- таблицы. Например:
раллеливать запрос исходя из значения DOP, указанного
в таблице. При отсутствии фразы parallel в таблице распа- Create table aif.buch_t (…) parallel 32
раллеливать запрос позволяет использование хинта parallel
в запросе: где 32 – степень параллелизма.
Если же таблица уже создана, то задать параллелизм
Select /*+ parallel(32) * / t.* from aif.tariff t… в таблице позволяет команда Alter table имя таблицы parallel
степень параллелизма (при этом по умолчанию в таблице
Если идет обращение по Select к какой-то секции табли- DOP=1). Например, указать в таблице aif.buh_t параллелизм
цы, то использование хинта parallel позволяет выполнять с DOP=16 позволяет команда:

34 май 2016 системный администратор


инструменты Базы данных

Alter table aif.buh_t parallel 16 from v$process p,v$session s where s.paddr=p.addr ↵


and p.pname like 'P%' order by s.sid;

Увидеть наличие параллелизма в таблице можно по за-


просу: Использование распараллеливания
DDL‑операций
Select degree from all_tables where owner='AIF' ↵
and table_name='BUH_T' Создание таблиц с использованием
параллельных процессов
Для удаления параллелизма в таблице следует выпол- Распараллеливание можно использовать для сокращения
нить команду: времени при создании таблицы через конструкцию as select.
В этом случае в Select указывается хинт parallel , например:
Alter table aif.buh_t noparallel
Create table aif.buh_t parallel 32 as ↵
Правда, в этом случае может возникнуть ошибка: select /*+ parallel(32) */ * from aif.buh_isx;

ORA-00054:resource busy and acquire with NOWAIT specified or При этом если в таблице есть фраза parallel, то парал-
timeout expired лелизм ввода также произойдет и без хинта со степенью,
указанной во фразе parallel команды Create.
которая сообщает, что убрать параллелизм в структуре та-
блицы пока не представляется возможным в силу работы Создание и перестройка индексов с использованием
с таблицей (надо ждать освобождения ресурсов таблицы параллельных процессов
или выполнить указанную команду, например, в период пе- Активизация параллелизма индекса при его создании и пе-
резагрузки базы данных). рестройке осуществляется либо через хинт parallel, либо че-
Следует заметить, что поддаются распараллеливанию рез указание в индексе фразы parallel при создании индекса
также следующие конструкции внутри одной команды Select: в команде Create. Если индекс уже создан, то изменить сте-
>> Distinct, >> Union и Union all, пень параллелизма в индексе позволяет команда Alter index
>> Group by, >> Cube и Rollup, имя индекса parallel степень параллелизма. При этом уви-
>> Order by, >> агрегатные функции, на- деть степень параллелизма индекса, например aif.x_buh_t,
>> Not in, пример Sum и Max. можно запросом:

Замечание. Установка описанного выше сессионно- Select degree from all_index where owner='AIF' ↵
го параметра parallel_query_mode в режим disable (от- and index_name='X_BUH_T'

ключение) через Alter session disable query при наличии


фразы parallel в таблице блокирует работу параллелизма Создание индекса
SQL-запросов к таблице. Вместе с тем если используем Сократить время создания индекса, например x_buh_t_isn,
в запросе хинт parallel, то параллелизм срабатывает вне за счет параллелизма позволяет команда:
зависимости от значения сессионного параметра parallel_
query_mode. Дополнительные возможности дает использо- Create index aif.x_buh_t_isn on aif.buh_t(isn) parallel 32 ↵
вание фразы force в команде: nologging online tablespace prise

Alter session force parallel query parallel 32 где степень параллелизма равна 32. Если индекс уже соз-
дан, то задать режим parallel и степень параллелизма DOP
выполняемой при запуске сессии (в команде указывается в индексе можно командой:
степень параллелизма). Фраза force инициирует паралле-
лизм выполнения запроса, что позволяет распараллеливать Alter index имя индекса parallel 32
запросы в сессии без хинта parallel или фразы parallel в та-
блице. Если после фразы parallel не указывается степень па-
Следует заметить, что при интенсивной работе с парал- раллелизма, то число параллельных процессов равно зна-
лельными запросами целесообразно иметь ненулевой боль- чению Degree default (как вычисляется, описано выше).
шой пул (large pool). Степень параллелизма индекса можно увидеть из запроса
Увидеть, что запрос выполняется в параллельном режиме, в столбце degree:
позволяет Oracle представление v$px_session по запросу:
Select degree, i.* from dba_indexes i ↵
Select count(*) from v$px_session where index_name='X_BUH_T_ISN'

запущенному в другой сессии. При этом если не указывать степень параллелизма


Полезен также запрос: в Create index, то в столбце degree будет стоять default.
Замечание. При создании индекса с фразой parallel мо-
Select sql_id, (select v.sql_text from v$sql v ↵ жет сократиться время выполнения, вместе с тем создает-
where v.sql_id=s.sql_id and rownum=1) sql_text, p.* ,s.* ↵ ся запись о создании индекса в журнале redo_log, которая

системный администратор май 2016 35


Базы данных инструменты

помещается в журнал последовательно. Это может стать степень параллелизма DOP в пакете dbms_stats в поле
узким местом, в силу чего добавление фразы nologging по- degree=>DOP. Например, для индекса aif.x_attrib с процентом
зволяет избежать этой опасности, отказавшись от ведения сбора статистики 20 и степенью параллелизма DOP=32 ко-
журнала при создании индекса. манда сбора статистики выглядит следующим образом:
Ведение фразы parallel при создании индекса дает эф-
фект не только при создании, перестройке и сбору статисти- Execute dbms_stats.gather_index_stats ('aif', 'x_attrib, ↵
ки по индексу, но и ускорению выполнения SQL-запросов, null,20, degree=>32);

использующих хинты – например, index_ffs для обычно та-


блицы и хинта parallel_index для секционированной таблицы. Можно фразу degree не указывать, но тогда DOP следует
указать в восьмом поле команды:
Перестройка индекса
Перестройка Rebuild большого индекса может потребовать Execute dbms_stats.gather_index_stats ('aif',
существенного времени, которое можно сократить, приме- 'x_test_statist_ISN', null,20, null, null, null, 32);

няя распараллеливание процесса перестройки.


Например, перестройка в параллельном режиме индекса Замечание. Возможен вариант, когда в восьмом поле
aif.x_buh_t_isn выполняется по команде: указывается фраза dbms_stats.default_degree или dbms_
stats.auto_degree (в последнем случае степень параллелиз-
Alter index aif.x_buh_t_isn rebuild parallel 32 ↵ ма регулируется автоматически).
online nologging Еще одним вариантом является отсутствие указания
степени параллелизма в команде сбора статистики, одна-
где в команде DOP=32, значение фразы nologging описа- ко в этом случае требуется указать степень параллелизма
но выше. Фраза online предлагает перестройку индекса при создании индекса фразой parallel с DOP:
в онлайновом режиме, повышая доступность перестройки
для крупных таблиц. Вместе с тем, когда уже выполняются Create index aif.x_attrib…parallel 32
DML-операции над таблицей, распараллеливание пере-
стройки индекса отключается. Если же индекс уже создан, то ввести параллелизм в ин-
Отследить наличие DML-операций над таблицей позво- декс позволяет команда:
ляет запрос (его следует запустить несколько раз, чтобы
выявить динамику DML-операций по вставке, удалению и из- Alter index aif.x_attrib parallel 32
менению строк таблицы):
Если DOP не указывать во фразе parallel при создании
Select timestamp, u.name owner,o.name table_name,m.inserts, ↵ (или модификации индекса через Alter), то степень паралле-
m.deletes, m.updates from sys.mon_mods$ m, ↵ лизма равна degree default.
sys.obj$ o,sys.user$ u where o.owner#=u.user# ↵
and o.obj#=m.obj# and u.name='AIF' ↵ Таким образом, полезность указания параллелизма в ин-
and o.name='BUH_T'; дексе в том, что при автоматическом сборе статистики, вы-
полняемом Oracle по мере необходимости, будет ускорен
Сбор статистики таблиц и индексов ее сбор путем распараллеливания в соответствии с DOP
в параллельном режиме индекса.

Сбор статистики таблиц Выводы


Для ускорения сбора статистики по таблице используется >> Распараллеливание DML-операций в секционирован-
параллелизм. Для этого в команде сбора статистики в пакете ной таблице требует активации параллелизма через
dbms_stats.gather_table_stats указывается степень паралле- хинт, либо через установку параллелизма в секциони-
лизма DOP либо чрез фразу degree =>DOP, либо установку рованной таблице, либо через команду Alter с фразой
в седьмом поле значения DOP. Например, команда по сбору Force.
статистики таблицы aif.obj_attrib c процентом сбора стати- >> Параллелизм SQL-запросов требует активации парал-
стики 20% и степенью параллелизма DOP=32 имеет вид: лелизма либо через хинты, либо через установку па-
раллелизма в обрабатываемой таблице.
Execute dbms_stats.gather_table_stats ( ↵ >> Параллелизм DDL-операций используется для ускоре-
'aif','obj_attrib',null,20,null, ↵ ния создания таблицы через as select, создания и моди-
'for all indexed columns size auto',32);
фикации индекса.
>> Ускорить сбор статистики таблиц и индексов позволяет
Если в таблице при ее создании указать фразу parallel распараллеливание этой операции.  EOF 
со значением DOP, то степень параллелизма в команде сбо-
ра статистики можно не указывать, т.к. Oracle возьмет DOP [1] Тихомиров В., Михеичев В. Распараллеливание операций
из таблицы. в Oracle. Часть 1. // «Системный администратор», №4, 2016 г. –
С. 48-52 (http://samag.ru/archive/article/3173).
Сбор статистики для индекса
Параллелизм позволяет ускорить сбор статистики по индек- Ключевые слова: Oracle, СУБД, распараллеливание операций,
су. При этом в команде сбора статистики следует указать DML-операции.

36 май 2016 системный администратор


изучаем 1С Базы данных

Визитка

ОЛЕГ ФИЛИППОВ,
АНТ-Информ, заместитель начальника отдела разработки, comol@mail.ru

Под капотом платформы 1С 8.3


Часть 1. Работа с СУБД
В этой статье мы начнем знакомство с внутренним устройством
платформы 1С 8.3 с самого важного – взаимодействия с СУБД

После прочтения заголовка хочется спросить: «Зачем мне информационную систему в таких условиях, важно и нужно
это знать? Зачем заглядывать под капот машины?» Действи- понимать, как она устроена внутри.
тельно, если у вас новый автомобиль и вы ездите на нем Сразу оговорюсь, что в данной статье не буду переписы-
в городской среде на небольшие расстояния, – незачем. вать широко известную документацию о структуре таблиц
А теперь представьте, что вы участвуете в ралли: каждая БД. Эту информацию вы легко можете найти в официальных
остановка – путь к поражению, постоянные изменения ре- источниках либо воспользоваться функцией ПолучитьСтрук-
жима эксплуатации, работа в режиме 24x7, особые требова- туруХраненияБазыДанных платформы 1С или ее оформлен-
ния к скоростному режиму и расходу топлива, повышенные ными вариациями [1]. В этой статье постараемся рассмо-
нагрузки, обслуживание должно производиться «на лету». треть детали, о которых обычно не пишут.
Мне лично больше знаком второй режим эксплуатации Для начала стоит сказать, что структура хранения таблиц
информационных систем. Дело в том, что современный в БД у 1С относительно других систем имеет ряд особен-
бизнес больше похож на ралли, поэтому современные ин- ностей:
формационные системы становятся более похожими на го- >> Названия реквизитов и таблиц БД никак напрямую
ночные машины. Тут и экстремальные условия, и тонкий тю- не связаны с названиями реквизитов и таблиц метадан-
нинг, и отсутствие технологических пауз для обслуживания. ных, которые видит прикладной разработчик.
В 1С, к сожалению, для этого достаточно мало штатных >> При создании базы данных на СУБД и загрузке ее сред-
средств. Поэтому для того, чтобы успешно эксплуатировать ствами 1С названия таблиц и реквизитов могут поме-
няться. Названия таблиц и реквизитов вообще могут
поменяться произвольным образом при любых измене-
Рисунок 1 Метаданные платформы 1С
ниях метаданных 1С.
>> Вообще прямое обращение к БД является нарушением
лицензионного соглашения с 1С. Но данный пункт со-
глашения добавлен, конечно же, больше в целях отка-
за от ответственности.

Что такое метаданные? Если выражаться простым язы-


ком, то это выглядит примерно как на рис. 1.
То есть вся прикладная логика платформы «зашита»
в метаданных. В соответствии с ними строится структура
БД, в них содержится программный код, их модифициру-
ет прикладной разработчик. А что собой представляют
«метаданные» внутри 1С? Как это ни печально, но мета-
данные 1С – набор бинарных файлов, и большая часть
проблем в платформе, так или иначе, связана с этим ар-
хитектурным решением. Эти бинарные файлы разрушают-
ся, не передаются по обмену, неправильно кэшируются,
долго распаковываются, не соответствуют БД и прочая,
и прочая… Можно только гадать, почему данный механизм
не претерпел изменений со времен платформы 1С 7.7.

системный администратор май 2016 37


Базы данных изучаем 1С

Скорее всего потому, что в этом варианте достаточно лег- гурация или не обновлена и когда было последнее об-
ко адаптироваться под различные СУБД. Привязка логики новление. В 8.3 появились еще копии данных таблиц, со-
к таблицам БД все-таки требует определенной зависимо- держащие «CAS» в названии, но относятся они к работе
сти. В 1С же слой DBMS (работа с СУБД) настолько от- в модели сервиса, поэтому вряд ли кого-то всерьез ин-
делен от интерфейсного, что платформа работает почти тересуют.
(очень почти!) одинаково как на СУБД Oracle Database, >> Таблица _UsersWorkHistory, по сути, позволяет следить
так и в файловом варианте. за всеми действиями пользователя, но в оригинале ис-
Более-менее официальная информация о служебных пользуется для других целей – для удобства.
таблицах 1С содержится в специальном разделе ИТС [2]. >> Таблицы *Settings* – их название пусть вас не обманы-
Но того, что пишет 1С, недостаточно, опыт эксплуатации вает: там хранятся просто пользовательские настройки
систем на платформе 1С подсказывает, что об этих табли- для конкретных объектов, будь то отчет или форма спи-
цах нужно написать еще пару строк: ска. Раньше эти настройки сохранялись в профиле поль-
>> Таблица v8users– список пользователей. Пароли их со- зователя, где-то рядом с кэшем метаданных, но, посколь-
держатся в другом месте в зашифрованном виде. Инте- ку кэш мы периодически чистим, а пользователю очень
ресно то, что банальная очистка данной таблицы будет не нравится терять свои настройки, их вынесли отдельно
означать отсутствие пользователей ИБ, а, следователь- и, надо сказать, весьма удачно.
но, вход без пароля с полными правами любому желаю-
щему. Больше ничего особенного в базе 1С нет. Никаких хра-
>> Таблица Params– в бинарном виде содержит некоторые нимых процедур, триггеров, представлений на стороне
файлы ИБ 1С, знакомые нам еще по платформе 7.7: тут СУБД 1С не использует. Наверное, отчасти поэтому воз-
можно увидеть и users.usr (да, правильно – тот, в котором никает так много проблем со службой регистрации изме-
пароли в «условно зашифрованном» виде), и locale.inf – нений в распределенной базе, которая по сути всей своей
языковые настройки, и log.inf – настройки журнала реги- логики должна бы выполняться непосредственно на СУБД,
страции, и много чего другого. Видимо, что-то «изобре- т.е. от репликации отличаться только сложными правилами
тать» в 1С не очень хотели и по доброй старой традиции фильтрации.
сохранили файлы настроек в бинарном виде. Все прочие таблицы строятся примерно по одному прин-
>> Таблицы Config и ConfigSave. В них, собственно, в би- ципу и неплохо описаны в документации [2], поэтому разо-
нарном виде лежат те самые метаданные, о которых речь браться в них не составит особого труда.
шла выше. Таблицы интересны тем, что «падение базы Теперь, пожалуй, перейдем от просмотра к действию –
при обновлении», как правило, лечится путем манипуля- посмотрим, как 1С обращается к СУБД при запуске.
ции с этими таблицами примерно следующим образом: Для начала не помешает ознакомиться с тем, что про-
»» Очищаем ConfigSave – пробуем. исходит при запуске информационной базы. Удивительно,
»» Удаляем последнюю запись Config – пробуем. как же много всего 1С выполняет только для того, чтобы
»» Восстанавливаем резервную копию и переносим от- просто отобразить диалог выбора пользователя: в профай-
туда таблицу Config. лере MS SQL появляется примерно следующее (см. рис. 2).
»» Обязательно добавляем реквизит в какой-нибудь Вся эта куча запросов содержит примерно один и тот же
объект и повторяем попытку обновления. текст:
Если база поднялась после какого-то из этапов, следу-
ющие можно не повторять. Кроме разве что пункта (d) – exec sp_executesql N'SELECT Creation,Modified,Attributes,
его желательно выполнить в любом случае. Еще по этим DataSize,BinaryData FROM Config WHERE FileName = @P1 ORDER
BY PartNo',N'@P1 nvarchar(128)',N'a4a8693b-dc91-4762-92e6-
таблицам запросто можно определить, обновлена конфи- 35360c8768db'

Рисунок 2. Профайлер MS SQL-системы 1C, только отобразившей диалог выбора пользователя

38 май 2016 системный администратор


изучаем 1С Базы данных

В принципе из этого можно сделать два вывода: по 45 элементов. Вопрос: почему именно 45? Магическая
>> 1С все запросы выполняет через хранимую процедуру цифра? К сожалению, суть в том, что эта настройка нигде
sp_executesql (т.е. использует так называемые динами- не задается. Но стоит всегда держать в уме, сколько запро-
ческие запросы). сов «полетит» к СУБД, если вы откроете большой список
>> 1С постоянно обращается к таблице Config, нужно на большом экране и попытаетесь его быстро листать.
это или не нужно. При чтении самого элемента происходит еще больше
всего интересного: первое, что сразу бросается в глаза, –
Если пункт 1 – достаточно полезный и правильный путь, при открытии формы элемента справочника выполняется
который тем не менее мало к чему приведет, потому как ди- порядка тридцати (конечно, зависит от справочника) запро-
намически генерируемые запросы в платформе 1С все рав- сов к БД.
но оказываются очень разнообразными, а если в запросе Итак, чтобы открыть форму одного элемента справочни-
участвуют еще ограничения RLS, то шансов случайно нат- ка, 1С отправляет следующие обращения к СУБД:
кнуться на похожий запрос практически нет. >> Читает метаданные конфигурации этого справочника –
А вот пункт 2 выглядит достаточно бессмысленным, с уче- притом разные элементы.
том того, что существует еще и кэш метаданных, такое по- >> Проверяет, не наложена ли на этот справочник тран-
ведение платформы кажется более чем странным. закционная блокировка СУБД.
Таким образом, если вдруг решитесь разнести БД на раз- >> Читает кучу констант, связанных с функциональными
ные файловые группы и на разные диски – размещайте опциями, которые могут примеряться для элементов
таблицу Сonfig 1С на самые быстрые. Весит она немного, данного справочника (да, чем больше функциональных
но обращения происходят постоянно. опций, тем больше обращений к СУБД).
Покопавшись в профайлере, можно найти еще несколь- >> Читает настройки пользователя для открываемой фор-
ко интересных запросов: мы данного справочника.
>> Наконец читает сам элемент справочника.
SET LOCK_TIMEOUT 20000 >> Читает некоторые данные из связанных с ним по ссылке
элементов справочника (в основной таблице есть толь-
Вопросы, каково будет время ожидания, перед тем как «от- ко ссылка, а пользователю на экране нужно отобра-
валится» транзакция, отпали сами собой. зить наименование).

SET TRANSACTION ISOLATION LEVEL READ COMMITTED Если сравнить с логом профайлера по другим системам
(SAP, Dynamics Ax), напрашиваются определенные выводы
Весь основной функционал 1С работает на уровне изо- о неоптимальности обращений к подсистеме хранения у 1С.
ляции Read Committed. Хотя отчеты, которые мы строим Хотя SAP – другая крайность. Число обращений к СУБД ми-
в 1С, выполняются вне транзакции и могут читать Read нимизировано даже в ущерб удобству пользователя.
UnCommitted. Во всем сказанном выше стоит отметить полезный в прак-
тике момент: каждая функциональная опция увеличивает от-
SELECT TOP 2147483647 ID, Name, Descr, OSName, Changed, крытие формы на время чтения соответствующей константы
RolesID, Show, Data, EAuth, AdmRole, UsSprH из СУБД. Пользовательские настройки справочника тоже
FROM v8users WITH(READCOMMITTED)
читаются из СУБД при каждом открытии формы.

Есть ограничение на количество пользователей в инфор-


мационной системе. Мы только начали погружаться в логику внутреннего устрой-
Собственно, это все, что происходит при запуске 1С ства 1С. Конечно, многое, с чем столкнулись уже в начале
как в режиме конфигуратора, так и предприятия. Куча за- пути, вызывает достаточно негативную реакцию. Но, зная,
просов к одной и той же таблице, иногда с отбором по од- что и как происходит внутри системы, можно минимизиро-
ному и тому же значению. Главный вывод, который здесь вать отрицательный эффект от определенных архитектур-
можно сделать, – при запуске 1С обращения к СУБД про- ных решений, принятых в платформе 1С. Сами подобные
исходят неоптимально, ключевая таблица для ускорения за- решения, вполне вероятно, принимались не только из прин-
пуска – Config. Если ее, к примеру, вычленить в отдельную ципов простоты реализации, а скорее удобства для поль-
файловую группу и переложить на отдельный диск, то мож- зователя и прикладного разработчика. В конце концов
но существенно ускорить старт 1С. стоимость серверных мощностей снижается с каждым го-
Теперь попробуем разобраться, как 1С производит чте- дом (не берем в расчет курс рубля, конечно же), поэтому
ние данных. Откроем список какого-либо справочника: будущее за теми решениями, которые «лицом к пользова-
телю».  EOF 
exec sp_executesql N'SELECT TOP 45
T1._OwnerIDRRef, [1] Обработка получения структуры хранения базы данных – http://
T1._Description,
T1._Fld1076RRef, infostart.ru/public/147147.
T1._Fld1077, [2] Официальная информация о служебных таблицах БД 1С –
http://its.1c.ru/db/metod8dev/content/1591/hdoc.
Можно было бы и пропустить этот момент, если бы не одна
деталь: в формах списков 1С читает данные порциями Ключевые слова: 1C, СУБД, производительность, запросы.

системный администратор май 2016 39


Базы данных изучаем 1С

Визитка

ТИМУР ШАМИЛАДЗЕ,
руководитель, ООО «БухКонсалтинг», timurshamiladze@yandex.ru

Общая схема оптимизации


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

Без системного подхода к анализу производительности 1С Определение текущего состояния по APDEX.


многие сразу пытаются сделать апгрейд оборудования, что- Регулярный мониторинг производительности
бы заставить систему быстрее работать, на что идут огром- Для начала работ по оптимизации производительно-
ные средства. В результате тратятся большие деньги на бо- сти 1С сначала необходимо выяснить текущее состояние
лее мощное «железо», а 1С при этом быстрее не работает. системы. И сделать это нужно в конкретных показателях
Бывают еще такие случаи: пользователи жалуются («хорошо»/«плохо»), чтобы можно было сравнить состояние
на медленную работу 1С, программист вносит изменения системы до оптимизации и после. Без такой оценки все дей-
в базу, и в результате она начинает быстрее работать. ствия могут не иметь никакого смысла, т.к. конечный резуль-
Но при сдаче работ по оптимизации пользователи говорят, тат не с чем сравнить и он будет приблизительный.
что все равно медленно работает, и не хотят принимать Фирма «1С» рекомендует для оценки производитель-
работы. Этого можно было бы избежать, если бы в начале ности системы использовать методику APDEX (Application
работ было зафиксировано текущее и желаемое состояние Performаnce Index), которая состоит из определенных ша-
работы системы в измеряемых показателях. гов, позволяющих получить конкретную оцифрованную
Чтобы избежать возможных проблем при оптимиза- оценку.
ции, можно воспользоваться общей схемой оптимизации Рассмотрим эти шаги.
(см. рис. 1).
Рассмотрим основные пункты схемы. Шаг 1. Определить список «ключевых операций»
К ключевым операциям относим: критичные для бизнес-про-
цессов предприятия, имеются жалобы на производитель-
Рисунок 1. Общая схема оптимизации производительности
ность этих операций, выполняется большим количеством
пользователей. Список ключевых операций необходимо со-
гласовывать с заказчиком (пользователем).
Примеры ключевой операции:
>> проведение документ;
>> формирование отчета;
>> открытие формы.

Количество ключевых операций не ограничено, но обыч-


но их выбирают около пятнадцати.

Шаг 2. Определяем приоритет у каждой операции


Необходимо отсортировать операции по убыванию их важ-
ности.

Шаг 3. Определяем целевое время выполнения


по каждой операции
Целевое время – максимальное время исполнения опера-
ции, при котором она считается выполненной за приемле-
мое время и удовлетворяет заказчика (пользователя).

40 май 2016 системный администратор


изучаем 1С Базы данных

Шаг 4. Получаем данные по времени выполнения Таблица 1. Шкала APDEX


всех ключевых операций в реальной системе
Здесь необходимо собрать фактические данные по рабо- Значение Оценка
чей системе, чтобы сделать оценку ее производительности. от до
Удобным способом получения длительности выполнения клю- 0.00 0.49 Неприемлемо
чевых операций и их интегральных оценок по шкале APDEX 0.50 0.69 Очень плохо
является встраивание подсистемы «Оценка производитель-
0.70 0.84 Плохо
ности» из состава «Библиотеки стандартных подсистем».
0.85 0.94 Хорошо

Шаг 5. Вычисляем значение индекса 0.95 1.00 Отлично


производительности для каждой ключевой операции
Индекс вычисляется по формуле:
Таблица 2. Оценка системы 1С по методике APDEX

(NS + NT/2)/N
Операция Приоритет Т APDEX

где: Индекс Оценка


>> N– количество раз выполнения операции: чем оно боль- Открытие информационной 1 10 1.0 Отлично
ше, тем индекс точнее; базы каждым пользователем
>> NS– количество операций, выполненных за целевое вре- Открытие справочника 2 2 0.90 Хорошо
мя T; «Контрагенты»
>> NT– количество операций, выполненных за время от 0 до 4T. Запись нового элемента 3 2 0.87 Хорошо
справочника «Контрагенты»

В таблице 1 показано, каким количественным значениям Открытие журнала 4 2 0.90 Хорошо


показателя APDEX соответствуют качественные значения. «Заявок на кассовый расход»

Собираем все данные в таблицу. Это и будет фиксацией Проведение документа 5 3 0.60 Очень
«Заявка на кассовый расход» плохо
исходного состояния системы, которую можно использовать
для оценки проделанных работ. Пример полученной оценки
производительности в таблице 2.
Рисунок 2. Включение и выключение замера производительности
Индекс APDEX позволит:
>> оценить состояние системы в любой момент времени;
>> оценить состояние системы после оптимизации;
>> оценить объем работ по оптимизации и приоритеты.

Выполнение регламентных заданий


Нужно убедиться, что в системе выполняются все необходи-
мые регламентные задания, чтобы обеспечить максималь-
ную производительность базы данных. Какие регламентные
задания необходимо проверить:
>> обновление статистики;
>> очистка процедурного кэша;
Рисунок 3. Результат замера производительности
>> дефрагментация индексов;
>> реиндексация индексов.

Если эти задания не выполняются, то необходимо на-


строить их выполнение, чтобы исключить их влияние
на производительность. Для MS SQL Server регламентные
операции можно автоматизировать с помощью «Планов об-
луживания».
Рисунок 4. Результат анализа 1С ЦУП
Например: если в системе неактуальная статистика,
то запросы будут медленно работать, т.к. будут формиро-
ваться неоптимальные планы запросов. Кроме того, неоп-
тимальные запросы могут приводить к ожиданиям на бло-
кировках.

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

системный администратор май 2016 41


Базы данных изучаем 1С

Например: если ситуация медленного проведения доку- >> ожидания на блокировках;


мента «Реализация» воспроизводится в однопользователь- >> взаимоблокировки.
ском режиме, то сначала необходимо выполнить его прове-
дение в режиме «Замер производительности». Включение Так как в конфигурации программист 1С может испра-
и выключение режима происходит в конфигураторе инфор- вить либо ее код, либо структуру метаданных, то все про-
мационной базы в меню «Отладка → Замер производитель- блемные места, найденные ЦУПом, привязываются к строч-
ности» (см. рис. 2). ке кода и к объекту метаданных.
Если просуммировать вес каждой неоптимальной строки
кода, наверху оказываются строки, которые оказали самый
Оптимизация большой вклад в медленную работу 1С, на которые и необ-

производительности 1С –  ходимо обратить внимание (см. рис. 4). Без этого инструмен-
та получить интегральную оценку производительности было
очень сложный процесс, бы очень сложно.
но в нем можно выделить Анализ загруженности оборудования
определенные постоянные К апгрейду оборудования необходимо прибегать, только
действия,которые помогут когда точно известно, что оно не справляется с текущей
нагрузкой. Анализируют обычно работу серверов, где рас-
облегчить труд оптимизатора положены СУБД, сервер 1С:Предприятия и терминальный
сервер.
Для определения загрузки оборудования для серверов
В результате будет выдана таблица, показывающая на Windows Server можно применять утилиту Performance
в процентных и абсолютных данных самые медленные опе- Monitor.
рации, выполнявшиеся во время замера производительно- С помощью нее можно проанализировать:
сти и ту строчку кода, которая их вызвала (см. рис. 3). >> недостаток оперативной памяти;
Также при необходимости на данном этапе могут ис- >> недостаточную производительность процессоров;
пользоваться такие инструменты, как технологический жур- >> недостаточную производительность дисковой подси-
нал 1С и SQL Profiler. стемы;
Например: с помощью SQL Profiler удобно анализиро- >> недостаточную пропускную способность сетевого ин-
вать неоптимальные запросы, т.к. можно получать планы за- терфейса.
проса в графическом и текстовом представлении, а также
сами тексты запросов. Если система на 1С очень медленно работает, а обо-
рудование загружено совсем незначительно, то тут точно
Анализ данных с помощью ЦУП можно сказать, что апгрейд сервера не поможет решить
Если ситуация сложная и в однопользовательском режиме проблему.
не воспроизводится, то это проблема, связанная с парал- В таблице 3 приведены описания основных счетчиков
лельной работой пользователей. Performance Monitor и предельные значения для каждого
Так как часто такие случаи трудны для расследования, из них. При превышении этих значений следует рассмо-
то необходимо использовать такой инструмент, как «Центр треть вопрос об увеличении производительности соответ-
управления производительностью» (ЦУП), который входит ствующего компонента.
в «Корпоративный инструментальный пакет» (КИП).
1С ЦУП представляет собой отдельную информацион- Оптимизация кода конфигурации
ную базу, которая подключается, собирает и анализиру- и структуры метаданных
ет «узкие места» в исследуемой системе за выбранный После того как убедились, что выполняются все регламент-
период. ные операции и проблема не в загрузке оборудования, на-
ЦУП анализирует следующие типы проблем: ступает этап, когда необходимо оптимизировать саму кон-
>> неоптимальные запросы; фигурацию.

Таблица 3. Описания счетчиков

Группа Счетчик Описание Критерий


Memory Pages/sec Интенсивность обмена между дисковой Среднее: около 0
подсистемой и оперативной памятью Максимальное: не более 20
Processor [_total] % Processor Time Загруженность процессоров Не более 70% в течение длительного времени
System Processor Queue Length Очередь к процессорам Не более 2 * количество ядер процессоров в течение
длительного времени
Physical Disk Avg. Disk Queue Length Очередь к дискам Не более 2 * количество дисков, работающих параллельно
Network Interface Bytes Total/sec Скорость передачи данных через сеть Не более 65% от пропускной способности сетевого адаптера

42 май 2016 системный администратор


изучаем 1С Базы данных

В этом нам помогут следующие инструменты: >> установка управляемых блокировок и др.
>> центр управления производительности;
>> замер производительности; После изменения кода конфигурации и структуры мета-
>> SQL Profiler; данных делается снова повторный замер индекса произво-
>> технологический журнал и др. дительности для того, чтобы подтвердить, что оптимизация
удалась.
Основными причинами медленной работы 1С являются: С ростом количества данных, добавлением новых пользо-
>> неоптимальная работа запросов; вателей, изменением функциональности системы необходи-
>> ожидания на блокировках; мо постоянно проверять, соответствует ли производитель-
>> взаимоблокировки. ность системы заявленным требованиям. Самое главное
в этой схеме, что она имеет точку входа, но не имеет точки
Кстати, именно поэтому 1С:ЦУП анализирует именно завершения, т.к. оптимизация – это постоянный процесс, ко-
эти параметры. торый необходимо выполнять, чтобы обеспечить и поддер-
Если наша проблема воспроизводилась в однопользова- живать хорошую производительность.
тельском режиме, то скорее всего имеется проблема с не-
оптимальными запросами, и с помощью «Замера произво-
дительности» мы его сможем найти. Хоть оптимизация производительности 1С – очень сложный
Найденный запрос можно проанализировать, посмотрев и разнообразный процесс, но в нем можно выделить опре-
его код либо план этого запроса при выполнении. деленные постоянные действия, которые помогут облегчить
В общем случае рекомендуется начинать разбор про- труд оптимизатора.  EOF 
блем с производительностью с анализа запросов, потому
что, если исправить неоптимальные запросы, могут исчез- [1] Описание 1С:ЦУП – http://v8.1c.ru/expert/pmc/pmc_overview.htm.
нуть проблемы с ожиданиями на блокировках и взаимобло- [2] Описание APDEX – http://www.apdex.org.
кировки. [3] Описание БСП (библиотека стандартных подсистем) – http://
По результатам анализа всех проблем могут быть приня- v8.1c.ru/libraries/ssl/index.htm.
ты различные решения, например:
>> добавление нового индекса; Ключевые слова: 1C, мониторинг, производительность, оптимиза-
>> изменение запроса в коде конфигурации; ция, запросы.

системный администратор май 2016 43


Разработка мобильные приложения

Визитка

АНДРЕЙ ПАХОМОВ,
Android-разработчик, mailforpahomov@gmail.com

Пишем мобильные приложения быстрее


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

Собственно, именно в целях быстрого создания конечно- придется переписывать практически весь проект с чистого
го продукта было и придумано объектно-ориентированное листа. Такая ситуация не только отодвинет выпуск долго-
программирование. Благодаря возможностям ООП можно жданных обновлений, но и летний отпуск.
за считанные дни создать с нуля приложение, которое за- Разработчики часто сталкиваются с похожими задачами,
няло бы гораздо более длительное время при функциональ- которые уже были успешно решены в предыдущих проек-
ном программировании. тах. Опыт решений однотипных проблем позволил вырабо-
тать своего рода архитектурные шаблоны ООП кода – иначе
Паттерны говоря, паттерны проектирования.
Проблема создания поддерживаемого кода, наверное, Сегодня мы разберем один из самых популярных паттер-
существует столько же, сколько и само программирова- нов – паттерн Наблюдатель. Он настолько удобен, что в не-
ние. Поскольку ООП-разработка существенно упрости- которых ООП-языках доступна его готовая реализация, бо-
ла сам процесс написания кода, основной задачей ста- лее того, во многом благодаря ему появился новый стиль
ло грамотное планирование архитектуры приложения. разработки мобильных приложений.
Использование ООП возлагает на разработчика большую
ответственность за продумывание общей структуры прило- Наблюдатель
жения – того, как будут организованы связи между класса- Наш журнал уже не раз (статьи [1] и [2]) писал о потоках
ми или объектами. и сервисах в Android, которые позволяют параллельно
При написании классов большую роль играет так на- в фоне выполнять какие-то операции. Даже в совсем ма-
зываемая связность кода – то, насколько сильно исходные леньких программах может возникнуть ситуация, когда
коды задействованных классов переплетены между собой. работа одного объекта или группы зависит от состояния
В процессе развития приложения некоторые функции мо- какого-то другого, параллельно выполняющегося процесса.
гут быть существенно переделаны или вообще исключены, К примеру, может возникнуть потребность постоянно сле-
а также добавлен ранее не запланированный функционал. дить за тем, что печатает пользователь, и выводить на экран
В погоне за временными рекордами легко написать Java- дополнительную информацию.
код, который будет практически невозможно поддержи- Именно для такого случая создан паттерн проектирова-
вать в следующих версиях приложения, в худших случаях ния Наблюдатель: он позволяет организовать между объек-
тами связь «один ко многим», то есть при изменении состоя-
ния одного объекта будут вызваны методы других объектов.
Рисунок 1. Схема паттерна Наблюдатель
Объект, данные в котором могут измениться в любой мо-
мент, называется Observable (субъект наблюдения), а один
или несколько объектов, ждущих обновлений, – Observer
(подписчики). Для организации связи субъекту Observable
требуется указать, кто именно будет за ним наблюдать,
и при обновлении данных Observable подаст сигнал подпис-
чикам, и те, в свою очередь, выполнят требуемые действия.

Система мониторинга
Паттерн Наблюдатель может существенно облегчить созда-
ние системы по мониторингу состояния ресурсов. Создадим

44 май 2016 системный администратор


мобильные приложения Разработка

приложение, которое поможет системному администратору private void sendSms(){


следить за состоянием веб-сервера: в случае его недоступ- SmsManager alertSms = SmsManager.getDefault();
alertSms.sendTextMessage(number,null,text,null,null);}
ности мобильное устройство подаст звуковой сигнал. По-
скольку паттерн Наблюдатель позволяет подключить сразу
несколько подписчиков, воспользуемся этим – звуковое Ввиду ограничений ОС Android нам требуется указать
уведомление будем дублировать СМС-сообщением коллеге в манифест-файле, что приложению требуется возмож-
системного администратора. ность отправки сообщений.
Компания Oracle уже реализовала его функции в Java-
классах Observer и Observable, а нам остается только доба- <uses-permission android:name="android.permission.SEND_SMS" />
вить их в нужные места и переопределить методы.
Сетевой функционал приложения будет сосредоточен Второй подписчик, отвечающий за звуковое уведомле-
в классе CheckServer. Это субъект наблюдения, поэтому ние, будет написан похожим образом.
при его определении необходимо расширить Observable.
public class Notify implements Observer {
public class CheckServer extends Observable{ @Override
public void update(Observable observable, Object data) {
makeBeep();}...}
Главная задача этого класса – передача результата
сетевого запроса к серверу. Для этого создадим метод Для завершения паттерна нужно создать объекты на ос-
isServerOnline, который будет возвращать булевые значе- нове классов и заполнить их необходимыми данными.
ния.
CheckServer netRqv = new CheckServer();
public void isServerOnline(String url){ Notify notify = new Notify();
NetworkClient nClient = new NetworkClient(url); SmsSender smsSender = new SmsSender("+7999...", ↵
if (!nClient.getRequest()){... "Wake up, something happened!");

Чтобы получать сообщения от субъекта наблюдений, за-


Механику сетевых запросов в Android мы уже неодно- регистрируем подписчиков методом addObsever.
кратно рассматривали – к примеру, в статье [1] были разо-
браны особенности работы с библиотекой Retrofit. Я уверен, netRqv.addObserver(notify);
что вы сможете применить на практике уже накопленные netRqv.addObserver(smsSender);

знания, а мы пойдем дальше.


Для уведомления подписчиков об изменениях требуется Все, паттерн Наблюдатель реализован! Если в резуль-
вызвать два метода: setChanged установит флаг, означа- тате сетевого запроса метод getRequest вернет значение
ющий, что в субъекте наблюдения произошли изменения, «ложь», то в каждом из подписчиков будет вызван метод
а notifyObservers оповестит об этом подписчиков. onUpdate. Таким образом, в случае недоступности сервера
созданное приложение мгновенно разошлет уведомления
if (!nClient.getRequest()){ системному администратору.
setChanged();
notifyObservers();}}

При использовании
Теперь приступим к написанию кода подписчиков. Для от-
правки СМС создадим класс SmsSender, а в нем реализуем
паттерна Наблюдатель
интерфейс Observer. нужно внимательно следить
public class SmsSender implements Observer {
за жизненным циклом
объектов,участвующих
Для работы паттерна нам нужно переопределить метод
onUpdate, который вызывается каждый раз, когда в субъек-
в обработке данных
те наблюдения происходят какие-либо изменения.
Остается добавить, что при использовании такого пат-
@Override терна нужно внимательно следить за жизненным циклом
public void update(Observable observable, Object data) ↵ объектов, участвующих в обработке данных: наблюдаемый
{sendSms();}
субъект ничего не знает о состоянии своих подписчиков
и будет рассылать сообщения каждому из них бесконечно.
Отправлять сообщения возможно, используя класс Возможна ситуация, когда какой-либо из подписчиков будет
SmsManager. Он позволяет отправлять SMS и MMS-сообще- уничтожен, а затем создан заново и опять подписан на по-
ния и даже поддерживает отправку SMS на определенный лучение сообщений. В результате у субъекта наблюдения
порт – это был когда-то популярный способ сетевого взаи- будет постоянно расти число подписчиков и, как следствие,
модействия между приложениями. Отправить сообщения со- количество рассылаемых сообщений – такое поведение
всем несложно: достаточно создать объект, а затем вызвать приводит к утечкам памяти и нестабильной работе прило-
нужный метод, указав номер телефона и текст сообщения. жения.

системный администратор май 2016 45


Разработка мобильные приложения

Для отмены подписки требуется вызвать метод delete Но такой подход к разработке требует большого вни-
Observer. Поскольку в языке Java нет деструкторов, то раз- мания к каждому участку кода. Синхронизация состояний,
работчику придется самостоятельно выбрать момент, когда обработка ошибок, контроль утечек памяти – все эти проб-
можно будет отписать объект от получения новых уведом- лемы могут привести к нестабильной работе приложений.
лений. К счастью, в мире мобильной разработки полно энтузиа-
стов, которые создают решения для самых сложных задач.
netRqv.deleteObserver(smsSender);
ReactiveX
Разрабатывать Android-приложение со сложной логикой,
Реактивное программирование большим количеством сетевых запросов, пользовательским
Пользователи мобильных устройств требуют от разработ- интерфейсом и анимацией не так легко. В таких ситуаци-
чиков создавать такие продукты, которые будут работать ях следует внимательно следить за каждым параметром,
плавно, красиво и, самое главное, мгновенно. Связать что может превратить разработку в каторгу. Набор библио-
все эти составляющие возможно только при максимальном тек ReactiveX позволяет скинуть часть проблем на реализо-
использовании ресурсов устройства. ванные в ней классы и заняться творчеством.
Создатели этой библиотеки объединили паттерн Наблю-
датель с многопоточными вычислениями. Вполне вероятно,
Реактивное программирование – что хороший программист сможет самостоятельно генери-

это следствие использования ровать потоки, написав свой вариант Observer и Observable,
но создание вспомогательного кода и его тестирование могут
паттерна Наблюдатель занять приличное время, а по сути в самом проекте практи-
и дополнительных потоков чески ничего не изменится. Использование такого проверен-
ного инструмента, как ReactiveX, позволит существенно сэ-
кономить время, избежать ошибок и повысить качество кода.
В мире разработки мобильных приложений популярность
набрал тренд под названием «реактивное программирова- Библиотека RxJava
ние». Этот подход подразумевает создание клиент-сервер- ReactiveX доступен для всех популярных языков высокого
ного приложения с максимально широким использованием уровня. В статье будут приводиться примеры кода на языке
многопоточного программирования. Вычисления поделены Java, поэтому мы станем говорить об адаптации этой библи-
на блоки, каждый из которых обрабатывается в отдельном отеки под названием «RxJava» [3].
потоке, при этом между блоками организован постоянный RxJava создана для обработки реакций на происходящие
обмен данными. события, а также облегчения взаимодействия между объек-
По сути, реактивное программирование – это следствие тами при многопоточной разработке. Использование этой
использования паттерна Наблюдатель и дополнительных библиотеки во многом упрощает решение проблем, возни-
потоков. Объединение двух этих технологий позволило су- кающих при использовании в Android-проектах многопоточ-
щественно ускорить разработку приложений и задейство- ности и асинхронных запросов. Уже знакомый нам паттерн
вать всю мощность процессоров мобильных устройств. Наблюдатель существенно расширен и дополнен несколь-
кими полезными функциями.
Рисунок 2. Подключение RxJava через Gradle Библиотека RxJava состоит из нескольких классов, раз-
беремся, чем же они могут нам помочь. Разбирать работу
библиотек лучше на практике, поэтому расширим функцио-
нал приложения по мониторингу с помощью новых возмож-
ностей. Но для начала нужно подключить модули библиоте-
ки в Android Studio. Для ее использования через сборщик
Gradle нужно подключить еще один репозиторий.

repositories {maven { url 'https://oss.jfrog.org/ ↵


libs-snapshot' }}

Android-проекты развиваются довольно быстро, актуаль-


ную версию лучше искать на официальном сайте проекта.
Рисунок 3. Принцип работы фильтров в RxJava
compile 'io.reactivex:rxjava:1.1.2-SNAPSHOT'

В RxJava тоже есть класс Observable, но его функцио-


нал в отличие от реализации Oracle существенно шире.
Метод just создает субъект наблюдения из любых данных,
поданных ему на вход. Он позволяет конвертировать в тип
Observable все, что может быть необходимо, – от объектов
до массива переменных.

46 май 2016 системный администратор


мобильные приложения Разработка

Observable.just(new NetworkFunc(). ↵ в пользовательский интерфейс. По умолчанию все операции


isServerOnline("server.addr")) с субъектом наблюдения и его подписчиками выполняются
.subscribe(new Subscriber() {...
в одном и том же потоке. Для того чтобы развести их между
собой, используются метод Subscribe и класс Scheduler.
Подписка на Observable организуется через класс Хотя библиотеки для работы с сетью самостоятельно
Subcriber, в простом случае достаточно создать новый объ- реализуют многопоточность, Scheduler может быть поле-
ект и переопределить несколько методов. Для обработки зен для других длительных вычислений, например генера-
каждого события из Observable существует метод onNext. ции объектов JSON-формата. Для выполнения вычислений
Также есть возможность отловить последнее сообщение в новом потоке достаточно вызвать метод subscribeOn,
от субъекта наблюдения через метод onCompleted и обра- в качестве параметра он принимает один из методов класса
ботать ошибки в реализации через метод onError. Schedulers.

@Override Observable.just(JsonObject.create()). ↵
public void onNext(Object o) { subscribeOn(Schedulers.newThread())...
notify.showNotification();
smsSender.sendSms();}});
Модуль работы с многопоточностью был разделен
Вообще философия RxJava состоит в организации глу- на несколько частей, требуется также добавить через
бокой обработки данных, поступающих из субъекта наблю- Gradle-библиотеку RxAndroid.
дения. Для этого уже реализовано несколько десятков ме-
тодов, которые помогут организовать фильтрацию данных, compile 'io.reactivex:rxandroid:1.1.0'
поступаемых из Observable.
Продолжим работу над проектом по мониторингу сете- Теперь есть возможность задействовать класс
вых ресурсов и воспользуемся инструментами фильтрации. AndroidSchedulers, который позволит легко вернуть резуль-
Проверку сетевой доступности разумно производить по- таты вычислений в пользовательский интерфейс.
стоянно, и в классе Observable есть все для периодическо-
го запуска субъекта наблюдения. Сервер по адресу server. Observable.just(mathOperation). ↵
addr будет проверяться бесконечно с интервалом в 5 се- subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
кунд – это удалось организовать с помощью методов repeat .subscribe(new Action1<Integer>() {
и delay. @Override
public void call(Integer integer) {
textView.setText(integer.toString());}});
Observable.just(new NetworkFunc(). ↵
isServerOnline("server.addr"))
.delay(5,TimeUnit.SECONDS).repeat(). ↵
subscribe(new Subscriber() {... Популярность мобильных приложений растет с каждым
днем. Все больше людей довольствуются только носимыми
Также тут доступна гибкая предобработка событий, про- устройствами, и, возможно, уже очень скоро традиционные
исходящих с Observable: их возможно частично отбрасы- компьютеры будут востребованы исключительно специали-
вать, объединять или отбирать на основе математических стами.
условий. Если сетевой модуль будет регистрировать время Инструментов для разработки для Android и iOS стано-
ответа от сервера, то мы можем реагировать только на са- вится все больше, главным образом благодаря расшире-
мые длительные паузы в ответах – в этом поможет метод нию количества доступных библиотек. Они существенно
filter. упрощают задачи, которые совсем недавно были под силу
только опытным программистам.
.filter(new Func1<Integer, Boolean>() { Сегодня мы посмотрели набор библиотек ReactiveX, ко-
@Override торый доступен для всех популярных платформ и уже стал
public Boolean call(Integer integer) {
return integer>90;} привычным для большинства разработчиков. Если вам еще
не приходилось работать с RxJava, уверен, теперь вы за-
В некоторых случаях паттерн Наблюдатель требуется ор- хотите воспользоваться этой библиотекой в своих проектах.
ганизовать для проверки выполнения одного-единственного Новые технологии могут сделать жизнь лучше, нужно только
условия, тогда целесообразно использовать класс Single. верить в себя. Удачи!  EOF 
Синтаксис работы с этим классом одинаков с Observable,
отличие только в обработке событий – реакция на данные [1] Пахомов А. Современное клиент-серверное приложение
из субъекта наблюдения отлавливается всего двумя метода- для Android. // «Системный администратор», №12, 2015 г. –
ми: onSuccess и onError. С. 44-47 (http://samag.ru/archive/article/3096).
[2] Пахомов А. Отображение систематизированных данных
Single.just(new NetworkClient("a").getRequest())... в Android. // «Системный администратор», №10, 2015 г. – С 58-
61 (http://samag.ru/archive/article/3050).
Многопоточность [3] Страница RxJava – https://github.com/ReactiveX/RxJava.
Скорее всего для улучшения производительности при-
ложения вам понадобится запустить все вычисления Ключевые слова: Android, паттерны проектирования, реактивное
в отдельном потоке, а потом вернуть результат обратно программирование.

системный администратор май 2016 47


Разработка тестирование

Визитка

АННА СЕРГЕЕВА,
старший специалист службы обеспечения качества Alloy Software Inc., annserge@rambler.ru

Автоматизируем отчетность
по Cucumber-тестам в ExtentReports
Технология Cucumber позволяет не только совмещать спецификации на разработку
и тестирование продуктов в одном источнике, но и удобно настроить автоматическое
генерирование отчетов о прохождении таких тестов

Cucumber и с чем ее едят дефектов, затрачивая при этом минимум усилий, избегая
В последнее время среди инструментов автоматизации про- ручного труда и высвобождая время высококвалифициро-
ектирования, разработки и тестирования ПО все большую ванных специалистов на решение не менее актуальных,
популярность набирает технология Cucumber. но более сложных рабочих задач.
Главная ее особенность заключается в возможности Вместе с тем для представления текущей ситуации
выражать поведение программы естественным языком по разрабатываемому проекту и принятия управленческих
(gherkin) [1]. Таким образом, легко достигается более высо- решений постоянно возникает необходимость документиро-
кий уровень взаимного понимания и тесного сотрудничест- вания результатов проводимого тестирования. То есть, по-
ва между разработчиками, тестировщиками и заказчиками, мимо настройки запуска автоматических тестов, тестиров-
ведь вся спецификация продукта и его тестовая документа- щики обязаны регулярно формировать производственные
ция, по сути, являются одним и тем же документом. отчеты, которые публикуются на внутренних сетевых ресур-
Регулярная автоматическая прогонка таких тестов дает сах и в качестве официальных внутренних документов ком-
уверенность в непрерывном соответствии кода специфи- пании предоставляются руководству. Разумеется, создание
кации и в отсутствии в нем значительного числа критичных таких отчетов также следует автоматизировать. В данной

Рисунок 1. Отчет о результатах тестирования, сгеренированный в ExtentReports

48 май 2016 системный администратор


тестирование Разработка

статье пойдет речь о том, как генерировать отчеты о про- Тем не менее существует и успешно используется в авто-
хождении Cucumber-тестов в автоматическом режиме. матизации тестирования специально разработанный плагин
CucumberExtentReporter. Его исходный код доступен на ре-
Как вести отчетность для Cucumber-JVM? сурсе [4].
Технология Cucumber имеет ряд реализаций, среди которых
распространение получила Cucumber-JVM [2]. Она предна- Подключение CucumberExtentReporter в проект
значена для наиболее популярных языков виртуальных ма- Если для сборки проектов запуска тестов применяется
шин Java (JVM), таких как Java, JavaScript, Groovy, Jython, фреймворк Apache Maven, то следует добавить в файл
Jruby и т.д. описания проекта pom.xml зависимость от внешней биб-
Каждый тестировщик, работающий с Cucumber-JVM, лиотеки, которая будет генерировать пользовательские
рано или поздно сталкивается с вопросом: как же настроить отчеты:
формирование пользовательских отчетов, например, в од-
ном из самых распространенных форматов – HTML? Можно, <dependency>
конечно, потратить время на изучение и исследование мно- <groupId>com.vimalselvam</groupId>
<artifactId>cucumber-extentsreport</artifactId>
жества деталей и реализовать собственный генератор отче- <version>1.0.0</version>
тов, поместить его в библиотеку и в таком виде подключать </dependency>
к своим тестовым проектам. Однако существуют и готовые
решения, экономящие время и бюджет, поскольку многие Если Apache Maven для сборки проекта не используется,
из них находятся в открытом доступе. можно скачать jar-файл с сетевого ресурса [5] и добавить
путь к нему в значение переменной CLASSPATH.
Готовый вариант – библиотека ExtentReports
Одним из наиболее доступных решений является исполь- Настройка параметров класса запуска
зование готовой совместимой библиотеки с открытым ис- При использовании Cucumber-JVM создается класс запуска
ходным кодом ExtentReports. Она реализует автоматическое тестов (раннер), в который нужно добавить параметры ис-
создание html-отчетов о прохождении тестов на таких плат- пользования плагина.
формах, как Java, .Net и Ruby [3]. По умолчанию без указания аргументов для Extent
Помимо свободного распространения, ее достоинство CucumberFormatter отчеты будут создаваться в директории
еще и в том, что итоговые сгенерированные документы {project directory}/output/Run_{timestamp}/report.html.
включают достаточно детальное описание результатов
обработки. Именно то, что представляет интерес для QA- @RunWith(Cucumber.class)
специалистов. К тому же удобный для восприятия формат @CucumberOptions(plugin = ↵
{"com.cucumber.listener.ExtentCucumberFormatter:"})
отображения данных по достоинству оценят руководители public class RunCukesTest {
продуктов и проектов разработки ПО. }
На рис. 1 приведен пример сгенерированного отчета.
Результаты логически сгруппированы по закладкам Здесь важно следить за указанием символа двоеточия
и отображаются в виде таблиц с настаиваемой фильтраци- в конце значения, поскольку это обязательное требование
ей, а также в виде линейных и круговых диаграмм. Cucumber.
Отображаются данные об общем количестве тестов (Total Также можно размещать генерируемые отчеты в любом
Tests/Total Steps) с разбиением на диаграммы, в зависимо- другом месте, конкретно указав его в значении параметра
сти от статуса результата (общепринятые варианты: Pass/ ExtentCucumberFormatter:
Fail/Fatal/Error/Warning/Info/Skip/Unknown) и с отображением
общего показателя успеха прохождения всего тестового на-
бора (Pass Percentage).
Таблица 1. Набор ключей командной строки для запуска ExtentMerge
Приводятся метрики общего времени суммарного и теку-
щего прогона тестов (Total Time Taken (Overall /Current Run),
время старта и завершения обработки (Start/Stop). Ключ Описание
Дополнительно также доступна информация о тестовой -h, --help Доступ к помощи по работе с приложением
среде (Environment) и об обработанных категориях тестов -v, --version Отображение текущей версии приложения
(Categories). -css Указание встроенного CSS-скрипта
-css-file Путь к пользовательскому CSS-скрипту
Объединяем возможности ExtentReports
и Cucumber -dir Директория размещения набора html-отчетов,
сгенерированных в ExtentReports
На многих профессиональных форумах можно найти об-
суждение специфики использования ExtentReports в качест- -from Начальная дата сбора данных

ве перехватчика (listener) для Java-тестов, обрабатываемых -html Конкретный html-отчет, сгенерированный в ExtentReports
во фреймворке TestNG. -js Указание встроенного JS-скрипта
Что же касается взаимодействия с виртуальной ма- -js-file Путь к пользовательскому JS-скрипту
шиной Java, Cucumber-JVM, применяемой для обработки
-out Путь к итоговому файлу с расширением .html
Cucumber-кода, полезную информацию отыскать значи-
-to Конечная дата сбора данных
тельно сложнее.

системный администратор май 2016 49


Разработка тестирование

@RunWith(Cucumber.class) Так, например, на рис. 2 показаны тренды по статусу


@CucumberOptions(plugin = ↵ результатов запуска по тестам и по функциональным ша-
{"com.cucumber.listener.ExtentCucumberFormatter: ↵
output/report.html"}) гам (Report Trends By Status – Test/Step), список наиболее
public class RunCukesTest { популярных успешно/неуспешно пройденных тестов (Top
}
Passed/Top Failed). Для более гибкой работы с приложени-
ем определен набор документированных ключей командной
В данном примере отчет с именем report.html будет раз- строки (см. таблицу 1).
мещен в директории output текущего проекта. Приведем несколько примеров удобного настраиваемого
Допускается указывать неполный набор тестов для за- запуска ExtentMerge.
пуска, например, так можно запустить все тесты с тегом Можно просканировать все содержимое каталога C:\
@search, находящиеся в каталоге /examples, и разместить MyDirectory, найти все допустимые html-файлы, сгене-
отчет в каталоге /search: рированные в ExtentReports, и поместить сводный отчет
ExtentMerge.html в директорию C:\PublicDirectory:
@RunWith(Cucumber.class)
@Cucumber.Options(features = ↵ java -jar extentmerge.jar -dir "C:\MyDirectory" ↵
"target/test-classes/cucumber/examples/", ↵ -out "C:\PublicDirectory\ExtentMerge.html"
tags = {"@search"}, ↵
format = {"html:target/cucumber-report/search"})
public class RunCukesTest {
Для объединения данных из конкретных html-отчетов нуж-
}
но указать каждый из них:

Объединяем отчеты с ExtentMerge… java -jar extentmerge.jar -html "C:\MyDirectory\Report1.html" ↵


В результате запуска серии тестов будет сгенерирован -html "C:\MyDirectory\Report2.html" ↵
-out "C:\PublicDirectory\ExtentMerge.html"
определенный набор отчетов, которые, возможно, будут
расположены в различных директориях. Для повышения
удобства работы с ними на завершающем этапе конфигу- Допускается включение в сводный отчет данных только
рирования системы автоматической отчетности разработ- за указанный период времени. Обязательное требование:
чики ExtentReporter рекомендуют совместить все отчеты границы интервала необходимо задавать в формате 'yyyy-
в один. MM-dd hh:mm:ss':
Они предлагают свободно распространяемое консоль-
ное приложение ExtentMerge, которое на базе набора java -jar extentmerge.jar -dir "locataion" -out "extent.html" ↵
html-отчетов дает возможность просматривать историю -from "2016-01-02 00:00:00" -to "2016-03-04 23:59:59"

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


ресующий запуск, выполнять сравнение и оценивать стати- Для кастомизации сводных отчетов удобно подключать
стику успешных и неуспешных исходов обработки. внешние CSS и JS-скрипты:

Рисунок 2. Объединение результатов тестирования в ExtentMerge

50 май 2016 системный администратор


тестирование Разработка

java -jar extentmerge.jar -dir "location" -out "extent.html" ↵ тестов и по статусу результата (Reports/Analysys (Last 5 Runs),
-css-file "css.css" и указаны обработанные категории тестов (Categories).
К моменту написания статьи ExtentX Server находится
или: на завершающей стадии реализации и доступен только
для ознакомления [6].
java -jar extentmerge.jar -dir "location" -out "extent.html" ↵ Однако современные темпы разработки ПО, особенно
-js-file "script.js" что касается всевозможных утилит и плагинов с открытым
исходным кодом, позволяют смотреть в будущее с опреде-
Или использовать встроенный скрипт, прописав его не- ленным оптимизмом. Не исключено, что к моменту публика-
посредственно в командной строке: ции данной статьи ExtentX Server уже будет завершен и до-
ступен для полноценного использования.
java -jar extentmerge.jar -dir "location" -out "extent.html" ↵
-css ".tag { display: none; }"

Применение подобных инструментов поможет тестировщи-


или так: кам, практикующим выполнение тестов и генерирование от-
четности по ним в автоматическом режиме, добавить допол-
java -jar extentmerge.jar -dir "location" -out "extent.html" ↵ нительные плюсы в эффективность своей работы, удобство
-js "$(document).ready(function() ↵ взаимодействия всех участников команды разработчиков
{ alert('hello world'); });"
и, что всегда так важно, взаимопонимание с заказчиками.  EOF 

…или ExtentX Server [1] Сайт разработчиков технологии Cucumber – https://cucumber.io.


В качестве альтернативы консольному приложению [2] Cucumber-JVM – https://github.com/cucumber/cucumber-jvm.
ExtentMerge разработчики ExtentReporter предлагают новый [3] Сайт разработчиков библиотеки ExtentReports – http://
совместимый плагин ExtentX Server, который подключается extentreports.relevantcodes.com.
в Maven POM-файле с помощью exec-maven-plugin. Он реа- [4] Ресурс с плагином CucumberExtentReporter – https://github.com/
лизует веб-сервер для хранения отчетов и отображения ре- email2vimalraj/CucumberExtentReporter.
зультатов в виде удобных для восприятия дашбордов, объ- [5] Ресурс с плагином CucumberExtentReporter в формате jar – http://
единяющих данные из множества html-файлов. search.maven.org/remotecontent?filepath=com/vimalselvam/
Среди поддерживаемых браузеров заявлены Chrome 35+, cucumber-extentsreport/1.0.0/cucumber-extentsreport-1.0.0.jar.
Firefox 31+, Safari 7+, IE 10+. [6] Пример реализации ExtentX Server – http://extentx.herokuapp.com.
Например, итоговый сводный отчет может выглядеть,
как показано на рис. 3. Кроме метрик, отображаемых Ключевые слова: автоматизированное тестирование, генерирова-
в ExtentMerge, здесь также доступны сводные показатели ние отчетов, Cucumber, gherkin, Cucumber-JVM, Java, ExtentReports,
для последних запусков тестов, сгруппированные по именам CucumberExtentReporter, ExtentMerge, ExtentX Server.

Рисунок 3. Объединение результатов тестирования в ExtentX Server

системный администратор май 2016 51


Разработка особенности языка

Визитка

АЛЕКСАНДР КАЛЕНДАРЕВ,
РБК Медиа, программист, akalend@mail.ru

Построение сайтов с использованием Hack


Рассмотрим построение сайтов с помощью нового языка Hack, который является
эволюцией PHP

Как уже говорилось в предыдущих частях статьи [1, 2], должен быть парный закрывающий, а одиночный тег должен
в Hack запрещен закрывающий скриптовый тег ?>. В ос- включать закрывающий слеш (<br />).
нове современного веб-приложения лежит MVC-концепция Например, следующая конструкция:
(Модель-Представление-Контроллер). За слой Представле-
ние (View) отвечает специальный модуль, который называют echo <p><strong>Hello {$word}</strong>!;
«шаблонизатор». Так как же нам построить шаблонизатор,
если запрещен закрывающий скриптовый тег ?>. (отсутствует закрывающий тег </p>) даст ошибку:

Что за зверь XHP? Fatal error: XHP: mismatched tag: 'p' not the same as 'p' in
Разработчики Hack придумали альтернативный шаблони- test.php on line

затору вcтроенный инструмент XHP (XHTML for PHP), ко-


торый представляет собой разобранное XML-дерево PHP- В-третьих, идет проверка на правильность использова-
объектов. ния основных тегов HTML, например, между открывающим
Традиционный вывод в PHP для переменной $word = и закрывающим тегами <select> запрещено использовать
'word': любые другие теги. При вставке любого другого тега мы по-
лучим ошибку:
<p><strong>Hello <?= $word ?></strong>!</p>
Fatal error: Element 'select' was rendered with invalid
Или, используя вывод: children.

echo "<p><strong>Hello $word </strong>!</p>"; В-четвертых, используя объектную модель (DOM), можно
динамически строить необходимые HTML-конструкции.
А вывод, используемый в XHP, будет следующим: И, в-пятых, можно самому придумывать пользователь-
ские теги, вроде пользовательских компонент в ASP.NET.
echo <p><strong>Hello {$word}</strong>!</p>;
Пользовательские элементы в Hack
С точки зрения грамматики изменения не принципи- Рассмотрим эти элементы более подробно. Первоначально
альны. В синтаксисе РНР при выводе свойств объектов необходимо проинсталлировать XHP-элементы. Это мож-
или элементов массивов присутствуют фигурные скобки. но сделать с помощью composer. Составим composer.json
Здесь при использовании XHP мы видим только отсут- файл:
ствие двойных кавычек. Но разве только в этом разница?
И что дает нам XHP? {
Во-первых, весь ввод/вывод будет автоматически про- "require": {
"facebook/xhp-lib": "~2.2"
верен и все опасные символы будут заменены на escape- }
последовательность и обратно. То есть использование }
для ввода функции htmlspecialchars() будет проходить авто-
матически. и запустим:
Во-вторых, XHP подразумевает построение HTML-стра-
ницы по правилам XHML: на каждый открывающий тег hhvm composer

52 май 2016 системный администратор


особенности языка Разработка

Некоторые конструкции,
на которых построены
популярные РНР-фреймворки,
в Hack не работают

Если появился каталог vendor/facebook/xhp-lib, то все ком- При запуске наш скрипт сгенерит следующий вывод:
поненты XHP проинсталлированы и готовы к использова-
нию. Включаем классы директивой: <form id="4e496c8eeb" method="post" action="http://www.
example.com" class="postLink"><a href="#" id="4e496c8eeb"
onclick="document.getElementById(&quot;4e496c8eeb&quot;).
include 'vendor/autoload.php'; submit(); return false;">переход через POST запрос</a></form>

Все элементы XHP являются экземплярами XHP-класса, Что мы видим в этом примере? Во-первых, мы как бы соз-
которые от остальных Hack-классов отличаются тем, что они дали новый HTML-элемент <a:post/>. Данный элемент явля-
должны начинаться с символа двоеточия «:» и являются по- ется потомком класса x:element.
томками базового класса :xhp. Все объекты XHP могут иметь атрибуты:
Рассмотрим такой пример (ex1.php):
echo <input type="button" name="submit" value="Нажми меня" />;
include 'vendor/autoload.php';
final class :a:post extends :x:element { Как мы еще заметили в первом примере, в отличие от РНР
attribute :a;
use XHPHelpers; вывод XHP-элементов не заключается в кавычки, а двойные
кавычки используются для значения атрибутов.
protected function render(): XHPRoot {
В выводе XHP-элементов могут присутствовать методы:
$id = $this->getID();

$anchor = <a>{$this->getChildren()}</a>; function renderIcon(User $user): XHPRoot {


$form = ( return
<form <x:frag>
id={$id} <img src={$user->getIconURI()} />
method="post" &nbsp;
action={$this->:href} {$user->getName()}
target={$this->:target} </x:frag>;
class="postLink" }
>{$anchor}</form>
);
Все XHP-объекты имеют DOM-интерфейс, с помощью ко-
$this->transferAllAttributes($anchor); торого можно создавать пользовательские объекты. Вот не-
$anchor->setAttribute( которые наиболее популярные методы:
'onclick',
'document.getElementById("'.$id.'").submit(); ↵ >> appendChild(mixed $child): this – добавляет дочерний
return false;', элемент;
); >> prependChild(mixed $child): this – добавляет дочерний
$anchor->setAttribute('href', '#');
элемент в начало списка дочерних элементов;
return $form; >> replaceChildren(...): this – заменяет дочерний элемент
}
на указанный;
}
>> getChildren(?string $selector = null): Vector<XHPChild>–
$post_link = выбирает дочерние элементы в соответствии с заданным
<a:post href="http://www.example.com"> ↵
переход через POST запрос</a:post>;
селектором;
>> getFirstChild(?string $selector = null): ?XHPChild – воз-
echo $post_link; вращает первый дочерний элемент;

системный администратор май 2016 53


Разработка особенности языка

>> getLastChild(?string $selector = null): ?XHPChild – воз- >> тег <title>


вращает последний в списке дочерний элемент; >> теги <meta>
>> getAttributes(): Map<string, mixed>– возвращает список >> теги <script>
атрибутов;
>> getAttribute(string $name): mixed – возвращает атрибут Из них индивидуально для каждой страницы меняются
по его имени; в основном только теги <title> и <meta description> <meta
>> setAttribute(string $name, mixed $val): this – устанавли- keywords>. В принципе возможен для каждой страницы свой
вает значение конкретного атрибута; тег <script src="имя файла">, добавление которого делается
>> isAttributeSet(string $name): bool – проверяет наличие по аналогии с тегом meta.
атрибута; Исходя из вышесказанного можно составить следующий
>> categoryOf(string $cat): bool– проверяет, соответствует код (пример ex5.php):
ли объект заданной категории.
class :top extends :x:element {
Например, хорошей практикой считается установка атри- attribute string title;
attribute string description;
бутов HTML-элементов через метод setAttribute().
Пример ex2.php: use XHPHelpers;

protected function render(): XHPRoot {


function build_list(array<string> $names): XHPRoot { $description = $this->getAttribute("description");
$list = <ul />; return
foreach ($names as $name) { <head>
$list->appendChild(<li>{$name}</li>); <title>{$this->:title}</title>
} <meta name="description" ↵
return $list; content="$description"></meta>
} <script src="/js/example.js">
</head>;
$fruits = ["яблоки", "апельсины", "бананы"]; }
}
echo build_list($fruits); echo <top title="имя нашей страницы" ↵
description="некоторый краткий текст ↵
$hhvm ex0.php описания страницы"/>;
<ul><li>яблоки</li><li>апельсины</li><li>бананы</li></ul>

Что может быть интересно в данном коде? Ну, во-первых,


Как создать пользовательский HTML-элемент? Удобно ли в классе используется помощник (хелпер) XHPHelpers, ко-
это? Тут, я бы сказал, больше дело в идеологии построения торый позволяет извлекать с помощью метода getAttribute()
страницы веб-приложения либо в привычке. Это очень инди- информацию из атрибутов пользовательского тега <top>.
видуально и дискуссионно. Если кто пользовался шаблони- Для извлечения данных пользовательского тега использует-
затором Smarty, то XHP-элементы очень похожи на плагины ся свойство $this->:target.
Smarty. Создадим наш первый пользовательский элемент Во-вторых, необходимо объявить пользовательские атри-
<hello-word /> (ex3.php): буты. Доступ к атрибутам будет возможен, как доступ к за-
щищенным полям с тем же именем, но начинающимся с дво-
class :hello-world extends :x:element { еточия «:», пример: $this->:title.
protected function render(): XHPRoot { В-третьих, так как по умолчанию включена защита
return <em>Hello World</em>;
} от «левых» символов, то вывод атрибута content тега meta
} осуществляется через промежуточную переменную, иначе
echo <hello-word/>;
мы увидим следующий вывод:
$hhvm ex3.php
<em>Hello World</em> <meta name="description" content="{$this-&gt; description}">

Построение стандартной веб-страницы может быть раз- Пользовательский элемент <bottom /> содержит ту часть
делено на три пользовательских тега: HTML-тегов, которая отвечает за вывод нижней части веб-
страницы. Как правило, это копирайт, некоторые ссылки
echo на общие страницы, социальные кнопки, счетчики.
<html>
<top description="{$page->description}" ↵
title="$page->title}" /> И немного практики
<body> Самое интересное – это разработка контентной страницы.
<content id="{$page->id}" type="{$page->type}" />
Пусть мы имеем два типа контентной страницы: страни-
<bottom/>
</body> ца каталога и страница товара, и эти типы будут отличать-
</html>; ся частью url: www.host/catalog/category-name и www.host/
goods/goods-name. Это обычная практика использования
Первоначально рассмотрим, как реализован пользова- ЧПУ (человекопонятный url). Пусть где-то в коде мы разби-
тельский тег <top/>. В наиболее простом варианте в верх- раем переменную $_SERVER['REQUEST_URI'] и передаем
ней части страницы находится тег <header>, содержащий в класс page разобранный список в виде массива (разбор
в себе: $_SERVER['REQUEST_URI'] функцией explode).

54 май 2016 системный администратор


особенности языка Разработка

Пример ex6.php: $a->setAttribute("href", '/goods/'.$id);


$list->appendChild(<li>{$a}</li>);
}
enum PageType : int {
UNDEF = -1; return $list;
CATALOG = 0; }
GOODS = 1;
} private function content(): XHPChild {
if ($this->:type == (string)PageType::CATALOG)
class Page { return $this->renderCatalog();
private PageType $type = PageType::UNDEF;
public function __construct(private array $uri): void { if ($this->:type == (string)PageType::GOODS)
if ( count($uri) < 2) return; return $this->renderGoods();
if ($uri[0] == 'catalog') ↵
$this->type = PageType::CATALOG; return <p>undefined uri</p>;
if ($uri[0] == 'goods') ↵ }
$this->type = PageType::GOODS;
} protected function render(): XHPRoot {
public function getType(): string {
// возвращает тип страницы return <div id="content">{$this->content()}</div>;
return (string)$this->type; }
} }
public function getId(): string {
// возвращает контентную информацию
return $this->uri[1];
} Что еще примечательно в приведенном примере? Ну,
} во-первых, для формирования разных страниц, контентной
и страницы описания товаров, мы используем разные ме-
Что нового и интересного представлено в данном коде? тоды: renderCatalog() и renderGoods(). Оба эти метода воз-
Первое, что мы использовали, – это новый тип перечисле- вращают набор XHP-элементов и поэтому должны иметь
ния enum. Программистами Си/С++, Java, Python и даже возвращаемый тип XHPChild.
SQL этот тип данных активно и давно используется. Второе, чем отличаются друг от друга методы
Второе: мы использовали неявное объявление и присвое- renderCatalog() и renderGoods(). Мы заметили, что при ре-
ние полю uri класса page в конструкторе класса. Об этом но- ализации метода renderCatalog() используется присвоение
вовведении в языке Hack говорилось во вводной статье [1]. XHP-элементов:
В конструкторе класса в зависимости от входного разо-
бранного uri устанавливается тип страницы, которую необ- $list = <ul />;
ходимо выбрать, либо это страница каталога, либо страница
описания товара. а также для формирования контента и атрибутов использо-
И последнее: при возвращении значения поля type необ- вали DOM-модель.
ходимо сделать преобразование типа в string, иначе мы по-
лучим ошибку:
В заключение хотелось бы напомнить, что некоторые
Catchable fatal error: Hack type error: Invalid return type конструкции, на которых построены популярные РНР-
at ... фреймворки, в Hack не работают. Это использование
Рассмотрим упрощенную реализацию тега <content> конструкции двойной доллар ($$action), использование
(пример ex7.php): конструкций типа $controller→$action(). Поэтому при разра-
ботке сайтов в Hack активно используются шаблоны про-
class :content extends :x:element { ектирования [3].
attribute string type; Конечно, обозрение в данных статьях [1, 2] не полное,
attribute string id;
и поэтому официальную документацию никто не отменял [4].
use XHPHelpers; Также, если желаете углубиться в эту тему, советую книгу
private function renderGoods() : XHPChild {
Овена Ямаучи (Owen Yamauchi) «Hack and HHVM» [5].  EOF 
$googs = New Goods();
$item = $goods->get($this->:id); [1] Календарев А. Введение в язык Hack. // «Системный адми-
return <div class="googs">
нистратор», №3, 2016 г. – С. 46-50 (http://samag.ru/archive/
<div class="goods-title">{item->getTitle()}</div>
<img class="goods-img" src="{item->getImage()}" /> article/3150).
<div class="goods-description"> ↵ [2] Календарев А. Hack. Асинхронность. // «Системный адми-
{item->getDescription()}</div>
</div>;
нистратор», №4, 2016 г. – С. 66-71 (http://samag.ru/archive/
} article/3177).
[3] Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объек-
private function renderCatalog() : XHPChild {
тно-ориентированного проектирования. – СПб: «Питер», 2001.
$catalog = New Catalog(); [4] Язык Hack. Официальный сайт – www.hacklang.org.
$catalog->get($this->:id); [5] Owen Yamauchi. Hack and HHVM. – O’Reilly Media. 2015 – http://
$list = <ul />; oreilly.com/catalog/errata.csp?isbn=9781491920879.
foreach ($catalog as $id => $name) {
$a = <a>{$name}</a>; Ключевые слова: Hack, разработка, веб.

системный администратор май 2016 55


Разработка особенности языка

Визитка

АЛЕКСАНДР МАЙОРОВ,
Tutu.ru, руководитель отдела Frontend-разработки, alexander@majorov.su

ES Декораторы: разбираемся в деталях


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

С ростом популярности таких инструментов, как TypeScript /**


и Babeljs, все больше разработчиков пробуют новые экс- * ConcreteComponent
* (класс для последующего декорирования)
периментальные фишки черновых, и не только, стандар- */
тов языка ECMAScript, именуемого по традиции JavaScript. class Coffee {
getCost(defCost:number = 1):number {
К таким экспериментальным фичам относятся и декораторы
return defCost;
(Decorator). Или аннотации… Так декораторы или аннота- }
ции? О, а что это такое вообще? }
С выходом новой версии Angular2 интерес к декорато- abstract class CoffeeItem {
рам/аннотациям возрастает, так как это часть стандартного protected cost:number;
процесса разработки и кодовой базы новой версии попу-
constructor(protected coffee:Coffee) {
лярного фреймворка. }
Давайте разбираться, что же это. А начнем мы с опреде-
лений, ведь мы же хотим разобраться, верно?.. public getCost():number {
return this.coffee.getCost() + this.cost;
}
ООП паттерн Декоратор }
В объектно ориентированном программировании паттерн
/**
Декоратор относится к структурным шаблонам проектиро- * Decorator A
вания. */
Структурные шаблоны – шаблоны проектирования, в ко- class Milk extends CoffeeItem {
protected cost = 0.5;
торых рассматривается вопрос о том, как из классов и объ- }
ектов образуются более крупные структуры.
/**
Классическое определение Декоратора – структурный
* Decorator B
шаблон проектирования, предназначенный для динамиче- */
ского подключения дополнительного поведения к объекту. class Whip extends CoffeeItem {
protected cost = 0.7;
Шаблон Декоратор предоставляет гибкую альтернативу }
практике создания подклассов в целях расширения функ-
циональности. /**
* Decorator C
Задача шаблона Декоратор проста и сводится к сле- */
дующему: объект, который предполагается использовать, class Sprinkles extends CoffeeItem {
выполняет основные функции, но при этом может потребо- protected cost = 0.2;
}
ваться добавить к нему некоторую дополнительную функци-
ональность, которая будет выполняться до, после или даже var coffee =
вместо основной функциональности объекта. new Milk(
new Whip(
Итак, вроде бы ничего сложного. У нас есть некоторый new Sprinkles(
класс или объект, который мы можем задекорировать – до- new Coffee()
бавить новый функционал или даже изменить существую- )
)
щий. );
Вариант классической реализации такого шаблона
console.log(coffee.getCost());
в ООП стиле может выглядеть так:

56 май 2016 системный администратор


особенности языка Разработка

В JavaScript появилась
возможность работать
с декораторами
в функциональном стиле

Процесс инициализации в данном примере не очень удо- if (typeof obj != 'function') continue;
бен. Мы могли бы вынести код в некоторую функцию деко- newObj = new obj(newObj);
}
рирования, которая сама создавала новые задекорирован-
ные объекты. Как-то так: return newObj;
}

/** var coffee = new Coffee();


* ConcreteComponent var myCoffee = decorate(coffee, Milk, Whip, Sprinkles);
* (класс для последующего декорирования) console.log(myCoffee.getCost());
*/
class Coffee {
private cost:number = 1;
Но выходит, что каждый раз для разных объектов нам
getCost():number { return this.cost; }
} придется создавать свою функцию декоратор. А что если
мы создадим универсальную функцию и зафиксируем ин-
abstract class CoffeeItem {
protected cost:number;
терфейс декоратора? Он мог бы выглядеть следующим
образом:
constructor(protected coffee:Coffee) {
}
/**
* ConcreteComponent
public getCost():number {
* (класс для последующего декорирования)
return this.coffee.getCost() + this.cost;
*/
}
class Coffee {
}
private cost :number = 1;
/**
getCost() :number {
* Decorator A return this.cost;
*/ }
class Milk extends CoffeeItem { }
protected cost = 0.5;
} /**
* Decorator A
/** */
* Decorator B function milkDecorator() :void {
*/ this.cost += 0.5;
class Whip extends CoffeeItem { }
protected cost = 0.7;
} /**
* Decorator B
/** */
* Decorator C function whipDecorator() :void {
*/ this.cost += 0.7;
class Sprinkles extends CoffeeItem { }
protected cost = 0.2;
} /**
* Decorator C
function decorate(...args) { */
let newObj = args.shift(); function sprinklesDecorator() :void {
this.cost += 0.2;
for (let obj of args) { }

системный администратор май 2016 57


Разработка особенности языка

function decorate<T>(...args) :T { И тут вот есть уже различия, так как синтаксис похож
let target = args.shift(); и вроде бы смысл одинаков, но в Python – это декораторы,
args.map((decor) => decor.apply(target));
return target; а вот в Java – аннотации.
} На сегодня JavaScript тоже не исключение. Данный опе-
ратор есть в стандарте ES. Ранее поддержка синтаксиса
var coffee = new Coffee();
var myCoffee = decorate<Coffee>( декораторов была заявлена в стандарте ES7, который был
coffee, переименован в ES 2016. На сегодня реализация находится
milkDecorator,
whipDecorator,
в стадии stage 1, а это значит, что в стандарт ES 2016 деко-
sprinklesDecorator раторы не попадают. Поэтому мы говорим «ES Декораторы»
); или «ES.Next Декораторы». При этом синтаксис декорато-
console.log(myCoffee.getCost());
ров добавлен в TypeScript, и там они живут своим жизнен-
ным циклом и имеют небольшие отличия от API декораторов
в Babeljs.
Код примера приведен не на чистом JavaScript, Основная задача оператора декорирования – это предо-
а на TypeScript. В принципе пример справедлив ставление удобного инструмента для расширения функци-
и для ES2016 с применением аннотации типов Facebook Flow ональности объекта без использования механизма клас-
и транспайлером Babeljs. сического наследования. Следовательно, декораторы
Получилась универсальная функция декорирования лю- необходимо использовать, когда требуется реализовать
бого объекта. По сути, мы меняем содержимое созданного много независимых расширений и не создавать множество
объекта, не используя наследование. подклассов, что может привести к большой сложности сис-
темы.
Про Angular 2 и не только Так как синтаксис декораторов пока находится в экспе-
Фреймворк Angular получил широкую популярность, и поэ- риментальных стадиях, то в Babeljs их можно включить вот
тому разработчики решили выпустить вторую версию, улуч- таким образом:
шенную. В качестве основного языка для фреймворка вы-
бран, как ни странно, TypeScript. Если зайти в документацию $ npm install babel-plugin-transform-decorators
Angular2 сегодня, сразу бросается в глаза пример «Hello Usage:
{
world!», где мы видим код такого вида: "plugins": ["transform-decorators"]
}
import {Component} from 'angular2/core';
В TypeScript для этого требуется аргумент (или запись
@Component({
selector: 'my-app', в tsconfig.json):
template: '<h1>My First Angular 2 App</h1>'
})
--experimentalDecorators
export class AppComponent { }
С точки зрения синтаксиса выглядит все достаточно про-
Есть некоторый когнитивный диссонанс. У нас есть класс, сто. Каждый вызов декоратора начинается с символа @.
но в нем нет никакой реализации. При этом перед классом
вызов какой-то функции (а это похоже на вызов функции), ES DECOR@TOR
но перед ней стоит символ @. Сразу непонятно, как рабо- Если бы нам надо было дать определение, что такое ES Де-
тает этот код. коратор, то мы могли бы сказать следующее:
Или же открываем документацию на библиотеку Redux ES Декоратор – это выражение, принимающее на вход
и видим там такой пример: аргументы target, key и descriptor и возвращающее дескрип-
тор, функцию или ничего. Оператор декорирования исполь-
import { connect } from 'react-redux'; зуется для:
>> Декорирования.
@connect(mapStateToProps, mapDispatchToProps)
>> Аннотирования.
export default class MyApp extends React.Component {}
Разница заключается в работе с целевым объек-
Опять не совсем понятно, как это работает и почему. том (target). Если декоратор меняет поведение объекта,
то это называется декорирование. Если декоратор исполь-
Оператор декорирования зуется для добавления дополнительных полей и информа-
Пока мы поняли, что декоратор – это удобный способ изме- ции, не меняющих поведение оригинального объекта, то та-
нения поведения некоторой функции, класса или объекта, кое действие называется аннотированием. Сами данные,
а также добавления различных метаданных. Для того чтобы добавляемые таким способом, называются метаданные.
декораторами можно было удобно пользоваться, в некото- Аннотации – способ добавления метаданных к объявле-
рых языках программирования есть специальные операто- нию класса для использования во внедрении зависимостей
ры. К примеру: или директивах компилятора.
>> Java– объявление аннотации; Аннотации были предложены командой разработки языка
>> Python– объявление декоратора. AtScript из Google, но они не входят в стандарт. Декораторы

58 май 2016 системный администратор


особенности языка Разработка

были предложены в качестве стандарта в ES7 для измене- Возвращает функция дескриптор или ничего. Дескрип-
ния классов и свойств на этапе разработки. тор представляет собой объект конфигурации. Он достает-
С точки зрения разработчика у аннотаций и декораторов ся с помощью метода Object.getOwnPropertyDescriptor.
абсолютно одинаковый синтаксис. Отличие в том, что раз- API декоратора метода одинаково работает как в Babeljs,
работчик не контролирует то, как аннотации добавляют ме- так и в TypeScript.
таданные в код. Примеры декораторов методов. Когда программисты
Декораторы можно рассматривать как интерфейс для по- узнают о новых возможностях языка и новый синтаксис,
строения чего-то, что ведет себя, как аннотации. не сразу понятно, какой можно получить профит. Вроде бы
и без «собачки» могли делать декораторы. Но если взгля-
Что можно декорировать нуть на Java или другие языки, то идей набирается с лихвой.
>> Классы– @decorate class A {} Допустим, в Java есть такая аннотация, как @override.
>> Методы– class A { @decorate foo(){} } Она используется как подсказка компилятору при пере-
>> Свойства– class A { @decorate foo = 1; } определении метода. В JavaScript нет абстрактных классов
>> Аргументы– class A { foo(@decorate a){} } и методов. В TypeScript есть абстрактные классы и методы.
Но не все используют TypeScript. Итак, мы могли бы описать
Декоратор класса декоратор, проверяющий, был ли переопределен метод
Самый простой декоратор. Перед определением класса пи- или он вызывается в родительском классе:
шем имя функции декоратора с символом @:
class BaseComponent {
@classDecorator class A { } @override
render(){}
function classDecorator(target) {} }

let MyComponent = new BaseComponent;


MyComponent.render(); // Throw error
Декоратор принимает на вход один аргумент – ссылка
на конструктор класса. Вернуть такая функция может новый class ChildComponent extends BaseComponent {
render(){
конструктор или ничего. В случае если ничего не возвраща- return "<h1>Hello!</h1>";
ем, как было сказано ранее, мы не декорируем класс, а ан- }
нотируем, добавляя некоторые метаданные. }
Пример декоратора класса: MyComponent = new BaseComponent;
MyComponent.render(); // Ok
@Component
class MyComponent { Или такой пример использования: помечать устаревшие
template = '<h1>Hello, Moscow!</h1>';
} методы. В Java есть аннотация deprecated. Чем мы хуже,
мы можем реализовать декоратор, который будет выводить
let mc = new MyComponent;
в консоль предупреждение:
let html = mc.render();
function Component(target) {
target.prototype.render = function() { class BaseComponent {
return this.template; @deprecated
} oldMethod(){ /.../ }
} }

let component = new BaseComponent;


В данном примере реализован декоратор Component
component.oldMethod(); // Warning: deprecated ...
по аналогии с Angular2. Как видите из примера, декораторы
могут являться гибкой альтернативой множественному на-
следованию. Я не пишу реализации декораторов, так как это заняло
бы много места. Но в конце статьи я расскажу, где взять ре-
Декоратор метода ализации, готовые для использования.
Самый распространенный юзкейс использования деко-
class A { раторов – это объявление функции логирования, которая
@methodDecorator foo(){ ... } удобно заменит вызовы console.log() и позволит не засо-
}
рять код.
function decorator(target, key, descriptor) { Допустим, у нас есть некий класс, и мы хотим зало-
return dcr;
гировать каждый вызов метода. Простой код примера
}
на TypeScript (для разнообразия, но он одинаково работа-
ющий и для Babeljs, нужно только нам с вами убрать описа-
Декоратор метода позволяет декорировать и аннотиро- ния типов):
вать конкретный метод. На вход декоратора передается три
аргумента: function log<T>(target: T, key :string, descriptor :any): T {
>> target– ссылка на prototype класса; var originalMethod = descriptor.value;

>> key– имя метода; descriptor.value = function (...args :any[]) :any {


>> descriptor– дескриптор. let result = originalMethod.apply(this, args);

системный администратор май 2016 59


Разработка особенности языка

console.log(`Call: ${key} ↵ Для примера приведу простой декоратор для свойств


(${args.map(a=>JSON.stringify(a)).join()}) => ↵ с реализацией на Babeljs, так как реализация для TypeScript
${JSON.stringify(result)}`);
return result; займет намного больше строчек кода. Но главное – уло-
}; вить суть.
С приходом ES6 в JavaScript появилось ключевое слово
return descriptor;
} «const». С помощью него можно создавать переменные,
ведущие себя как константы. Но мы не можем объявить
class Coffee {
protected cost :number = 1.2;
константу внутри класса, к примеру. А порой такое очень
нужно. Все просто, мы можем реализовать декоратор
@log getCost() :number { return this.cost } @readonly:
@log someDo() { return 'some text' }
} class Cat {
@readonly name = 'Simon';
let myCoffee = new Coffee; }
let cost = myCoffee.getCost();
myCoffee.someDo(); let myCat = new Cat;
myCat.name = 'Murzik'; // Throw error
/*
Output: function readonly(target, key, descriptor) {
Call: getCost() => 1.2 descriptor.writable = false;
Call: someDo() => "some text" return descriptor;
*/ }

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

Декоратор свойств Декораторы параметров


Декоратор свойств аналогичен декоратору методов. На вхо- Декоратор параметров есть только в TypeScript. Такой син-
де – три аргумента, на выходе – новый дескриптор или ниче- таксис не заявлен в стандарте ES. При этом это не декора-
го. Это справедливо в случае, если вы пользуетесь Babeljs. тор, а именно аннотатор, так как из функции ничего не воз-
В случае TypeScript есть отличия. вращается. Нельзя изменить поведение аргумента. Можно
Приведу вам простой код декораторов, чтобы показать только добавить метаданные, описывающие, как нужно ра-
разницу: ботать с ними.
На вход функции приходит три аргумента:
// Babeljs >> target– ссылка на prototype класса;
>> key– имя метода или undefined;
function DecorateProperty(target, key, descriptor){
>> index– номер аргумента.
let defaultValue =
descriptor.initializer();
Ничто не возвращается.
return descriptor; С метаданными можно работать через декоратор
класса, метода либо вовсе в какой-то логике фреймвор-
}
ка, который  знает про эти метаданные (как и делается
// TypeScript это в Angular 2).

function DecorateProperty(target, key) {


class Some {
constructor(@annotate x, @annotate y){}
// default value can get
foo(@annotate a, @annotate b){}
// with getter
}
return { new descriptor }

} Фабрика декораторов
Как говорилось мною ранее, декоратор может вернуть
Во-первых, в Babeljs есть метод для получения значения функцию. Это делается в случае реализации фабрики де-
по умолчанию, чего нет в TypeScript. В TS это придется де- коратора:
лать через реализацию геттеров и сеттеров.
Во-вторых, декоратор в TypeScript принимает только два function Factory(...params){
аргумента. Третьего – дескриптора – нет. При этом вы так- // do anything with params
return function Decorator(target, key, descriptor){
же можете вернуть дескриптор из метода, но вам придется // decorate or annotate target
его создать. // or descriptor
В-третьих, в Babeljs нет разницы при работе как со ста- // return any
тическими, так и не статическими свойствами и методами, }
}
в отличие от TypeScript.

60 май 2016 системный администратор


особенности языка Разработка

В таком случае в декоратор можно передать любое коли- @type mixBar(@cast `int` arg :any) :number {
чество аргументов. При этом фабричная функция возвра- return this.bar + arg;
}
щает функцию декоратор, подчиняющуюся всем правилам,
описанным ранее. @type({
'arguments' : ['string', 'number'],
Пример фабричного декоратора:
'return' : 'string'
})
@Component({ someDo(a :string, b :number) :string {
selector: 'my-app' return a + b;
template: '<h1>My angular :)</h1>' }
})
class MyComponent {} // return type string
@type `string` static someDo(@tstring a :string, ↵
@tnumber b :number) :string {
В Angular2 почти все декораторы представляют собой return a + b;
фабрики. }
}

Динамическая типизация в JavaScript


Изучая на раскопках следы AtScript, который предлагалось Таким образом, мы можем проверять типы на стадии ком-
использовать изначально как альтернативу TypeScript, пиляции, используя аннотации вида :тип, так и аннотации
а точнее даже, ECMAScript наткнулся на упоминание для рантайма, используя синтаксис @тип. Установить и по-
RTTS – RunTime Type System. Предлагалось использо- пробовать можно из npm:
вать аннотации типов, синтаксис которых взяли из стан-
дарта ECMASCript 4, который был реализован в версиях npm install rtts-ts
ActionScipt. Но в отличие от TypeScript эти аннотации долж-
ны были проверяться не IDE на стадии компиляции (точнее, Версия библиотеки, пока 0.1, я еще не реализовал
не только на стадии компиляции), а и во время исполне- все возможности. Если интересно – присоединяйтесь [1].
ния кода.
Некоторые скептики часто приводят такой аргумент CORE-DECORATORS.JS
не в пользу TypeScript – мол, а что толку-то от статиче- Если вдруг вы созрели для использования синтаксиса деко-
ской типизации? На стадии компиляции сделали провер- раторов в JavaScript, то вам не обязательно все реализовы-
ку, а во время выполнения уже не отследить, и приходится вать самому. Есть готовая библиотека core-decorators.js [2],
либо добавлять в бизнес-логику проверку типов, либо пу- в которой уже реализовано достаточно много интересных
стить все на самотек – JS умный, он все приведет к нужному декораторов:
типу сам. >> @readonly >> @enumerable
Мне стало интересно: а что если сделать самому свой >> @nonconfigurable >> @override
синтаксис описания типов, которые будут проверять- >> @nonenumerable >> @debounce
ся в рантайме? Разбираться с AST и писать свой парсер >> @lazyInitialize >> @throttle
не хочу. Хочу использовать стандартные инструменты. >> @autobind >> @time
О! В предыдущих статьях было много сказано про декора- >> @deprecate >> @decorate
торы, оператор декорирования и аннотации, т.е. мы можем >> @suppressWarnings >> @mixin
использовать декораторы для контроля типов наших пере-
менных, используя простой и лаконичный синтаксис. Также эту библиотеку можно использовать как наглядный
В итоге родилась библиотека rtts-ts. Это декораторы учебник по декораторам.
для TypeScript-кода, которые позволяют аннотировать свой-
ства, методы и параметры. Как это выглядит:
В JavaScript появилась возможность работать с декоратора-
///<require path="rtts/typings.d.ts" /> ми в функциональном стиле. Ими уже можно пользоваться.
import 'rtts'; В нашей компании мы используем TypeScript и уже начали
@type // annotate constructor применять декораторы в проекте.  EOF 
class A {
[1] Библиотека rtts-ts – https://github.com/frontdevops/rtts-ts.
@tstring foo :string = 'abc';
[2] Библиотека core-decorators.js – https://github.com/jayphelps/
@tnumber static bar :number = 123;
core-decorators.js.
@tfloat foo :float = 123.321; [3] Видео с моего доклада о декораторах на MoscowJS 28 – https://
@tint foo :int = 123;
it.mail.ru/video/465.
[4] Презентация о декораторах – http://moscowjs.majorov.su.
/* @type */ constructor(@tnumber x :number) { [5] Проверка JSON с помощью декораторов в TypeScript – https://
// ... habrahabr.ru/post/262105.
}
[6] Подборка статей на тему декораторов – https://medium.com/@
@type mixFoo(@tstring arg :string) :string { frontman/статьи-про-es7-декор-торы-6b8d519049e4.
return this.foo + arg;
}
Ключевые слова: JavaScript, декораторы, TypeScript, ООП.

системный администратор май 2016 61


Карьера/Образование alma mater российских ИТ

Нина Романчева:
«Совместная подготовка ИT-специалиста в паре
вуз – предприятие – это требование сегодняшнего дня»
В гостях у «Системного администратора» – декан факультета прикладной математики
и вычислительной техники МГТУ ГА, кандидат технических наук, доцент Нина Романчева

Подготовила Ирина Ложкина

–  Вчерашний школьник решил прийти к вам учить-


ся. Чем отличается преподавание ИТ-специальностей
в МГТУ ГА? Его плюсы? Особенности?
–  Наши отличия – это наши плюсы!
>> индивидуальный подход к обучающемуся;
>> комплексность – сочетание академического образова-
ния и практической направленности (преподаватели
факультета имеют опыт работы в ИТ-отрасли граждан-
ской авиации);
>> интеграция в международное образовательное про-
странство – МГТУ ГА зарегистрирован в реестре Меж-
дународной организации гражданской авиации (ICAO).
Данный факт подтверждает, что наши образователь-
ные программы полностью ориентированы на потреб-
ности гражданской авиации и соответствуют между-
народным требованиям, предъявляемым к учебным
заведениям;
>> вовлечение с первого курса в научно-исследователь-
скую и методическую работу.

Начиная с первого курса, студенты посещают лекции,


которые читают представители международной компании
SITA – мирового лидера в области информационных и теле-
коммуникационных систем для авиатранспортной отрасли.
Все это позволяет не только освоить ИT-специальность,
но и дает возможность студентам сразу «нырнуть» в специ-
Нина Романчева,декан факультета прикладной математики фику работы авиационной отрасли.
и вычислительной техники МГТУ ГА, кандидат технических
наук, доцент –  Сколько студентов вы готовите по ИТ-специальнос-
тям? Какие это специальности?
–  Факультет ведет обучение по направлениям подготовки
Cправка и специальностям, соответствующим приоритетным на-
В МГТУ ГА – 16 спортивных секций по 21 виду спорта. Начиная с 2010 года правлениям модернизации и технологического развития
студенты университета в общекомандном зачете выходят победителями российской экономики (Распоряжение Правительства РФ
на Московских студенческих играх, регулярно становятся победителями №17‑р от 6 января 2015 года):
на спартакиадах транспортных вузов России. Команда по мини-футболу – >> бакалавриат – прикладная математика, информатика
шестикратный победитель Общероссийской спартакиады транспортных и вычислительная техника;
вузов. Дважды, в 2012-м и 2014-м, футбольная команда университета ста- >> специалитет – информационная безопасность телеком-
новилась чемпионом Москвы среди студенческих коллективов России. муникационных систем.

62 май 2016 системный администратор


alma mater российских ИТ Карьера/Образование

В соответствии с контрольными цифрами приема, опре- Cправка


деляемыми учредителем вуза – Федеральным агентством В университете работают свыше 620 научно-педагогических сотрудников,
воздушного транспорта, выделяется 90 бюджетных мест. в том числе 56 докторов и 170 кандидатов наук, а также 103 аспиранта.
Количество студентов – более 10 000. В 2015 году университет закончи-
–  Как трудоустраиваются ваши выпускники? ли 1973 выпускника.
–  Более 70% выпускников работают на предприятиях от-
расли, оставшаяся часть – в госсекторе, ИT-компаниях
и ИT-подразделениях, а также в подразделениях, связанных Дважды студенты факультета занимали во втором туре
со сбором и обработкой информации (маркетинг, финансы, (зональном) Всероссийской олимпиады по иностранному
аналитические отделы и т.п.) производственных компаний. языку среди технических вузов второе командное место,
Кто-то продолжает учебу в аспирантуре и магистратуре. получив дипломы и сертификаты, и седьмое место в инди-
Студенты сегодня рано начинают свою трудовую де- видуальном соревновании заключительного третьего тура.
ятельность, совмещая учебу с работой. Например, к нам Команды студентов активно принимают участие
некоторые первокурсники приходят с опытом работы сис- в Московском фестивале спортивного программирования
темным администратором в небольших организациях. им. И.Н. Векуа, проводимом в рамках Международной олим-
В МГТУ ГА проходят Дни карьеры. Приезжают пред- пиады по программированию; в четвертьфиналах Междуна-
ставители предприятий отрасли, работодатели напрямую родной олимпиады ACM по программированию Северно-
общаются со студентами, происходит «кадровый отбор Западного региона.
со студенческой скамьи».
Очень часто результатом такой работы является вы-
полнение курсовых и выпускных квалификационных работ Все базовые принципы,
по заявкам данного предприятия с конкретными результа-
тами (акты о внедрении и практической значимости).
подходы, методы,
Сегодня все организации понимают, что ждать, когда вуз на которых построены
подготовит специалиста, а потом его переучивать под свои
требования, – очень дорогостоящий путь. Поэтому со-
современные технологии, –
вместная подготовка ИT-специалиста в паре вуз – предпри- это неотъемлемая часть
ятие (как базовая кафедра или сетевой партнер) – это тре-
бование сегодняшнего дня: повысить качество обучения
образовательного процесса
и снизить неэффективные трудозатраты. МГТУ ГА
–  Расскажите о самых значимых проектах, мероприяти-
ях, в которых принимают участие ваши студенты. В этом году впервые принимали участие как победители
–  Традиционное ежегодное мероприятие – Транспортная зонального тура во Всероссийском межвузовском чемпио-
неделя, которая проводится Министерством транспорта нате «Молодые профессионалы» (WorldSkills Russia) по ком-
РФ. В рамках Транспортной недели идут студенческие кон- петенции «ИТ-решения для бизнеса на платформе «1С:
ференции, а также конкурс «Молодые ученые транспортной Предприятие 8».
отрасли». Неоднократно наши студенты и аспиранты полу- Студенты факультета по специальности ИБТКС принима-
чали дипломы победителей и памятные подарки из рук ми- ли участие в межвузовских соревнованиях по информаци-
нистра транспорта РФ. Например, аспирантка Павлова Л.В. онной безопасности в формате CTF.
с работой на тему «Концепция построения систем инфор- Отличная учеба и активная научная деятельность по-
мационно-аналитической поддержки принятия управленче- зволяют в среднем 10-15 студентам факультета ежегодно
ских решений в авиакомпании», аспирантка Филонова А.А. становиться именными стипендиатами Президента и Прави-
с работой «Эволюция заполнения системы квантовых со- тельства РФ, а также обладателями стипендии имени Пер-
стояний для оценки пропускной способности аэродромного вого министра транспорта Петра Мельникова. Аспирантка
воздушного пространства» и другие. Лариса Павлова успешно прошла обучение в Swiss Space
На спартакиаде по компьютерному многоборью IT students Center (Женева), став победителем Всероссийского от-
e-cup’2011 – соревнования по различным прикладным дис- крытого конкурса на получение стипендий Президента РФ
циплинам среди команд вузов, – проводившейся в рам- для обучения за рубежом.
ках 23-й международной выставки «Связь-Экспоком» и моло- «Автоматизированная система информирования пасса-
дежного фестиваля «Цифровой мир», получили два вторых жиров о движении наземного городского пассажирского
места, пятое место и командный кубок. транспорта», разработанная при участии наших студентов
Александра Сивашева и Алексея Тарасенко, была апроби-
рована в Сочи в дни проведения Олимпиады. Научные рабо-
Cправка ты студентов Арсения Яковлева и Таисии Тестовой, аспиран-
В художественной самодеятельности университета принимает участие та Алексея Тарасенко получили дипломы Международного
каждый десятый студент. Ребята выступают на сценах Кремлевского двор- авиационно-космического салона МАКС- 2016.
ца съездов, Колонного зала дома Союзов, ЦДКЖ, Центрального музея И, конечно, конкурс грантов Ученого совета универси-
на Поклонной горе. А команда КВН неоднократно занимала призовые ме- тета на научные исследования студентов и аспирантов.
ста на соревнованиях среди транспортных вузов. На днях прошли защиты третьего заключительно этапа,

системный администратор май 2016 63


Карьера/Образование alma mater российских ИТ

были представлены результаты двух аспирантских и пяти –  Несколько слов о положении со специалистами граж-
студенческих работ, часть которых выполнялась в команде. данской авиации в отрасли. Есть ли проблемы с нехват-
кой/переизбытком специалистов, выпускников вуза. Ка-
–  Принято считать, что ИТ-знания, полученные в институ- кой «вес» имеет блок ИТ-специальностей среди прочих?
тах, сильно отстают от требований времени. Так ли это? –  Из общения с нашими выпускниками, занимающими в на-
–  Не совсем согласна. «Информация устаревает в момент стоящее время руководящие должности в ИT-сфере, можно
ее возникновения» – эту фразу знает каждый студент, об- сказать, что есть проблемы с квалифицированными специ-
учающий по ИT-направлению. Для ИT – это естественный алистами: ИT-технологами авиакомпаний, специалистами
процесс. Быстро меняющаяся часть любой технологии – в области электронной коммерции, аналитиками, архитек-
это средства технологии. Поэтому главное – хорошие ба- торами информационных систем. Сегодня можно говорить
зовые знания и способность к освоению новых технологий. и о необходимости SEO-специалистов.
Ведь невозможно предугадать, с чем именно будет работать В каждой организации определен собственный подход
выпускник, какая именно СУБД, какой язык или система и роль ИТ-службы. ИТ-блок в большинстве случаев позици-
программирования потребуются через год, два. Но все ба- онируется как сервисная организация, предоставляющая
зовые принципы, подходы, методы, на которых построены сервисы по информатизации бизнес-подразделениям ком-
современные технологии, – это неотъемлемая часть обра- пании. Отсюда и вес, и требования к специалистам полу-
зовательного процесса МГТУ ГА. Выпускник должен знать чаются разными. Единой метрики нет. Разрабатываемые
и иметь ключевые навыки. Обращаясь к аллегории: в вузе профессиональные стандарты, в том числе АПКИТ, помогут
учат пользоваться удочкой для ловли рыбы, а не просто по- в решении данной проблемы.  EOF 
дают рыбу. И не важно, из чего и как сделана удочка, важен
принцип ловли. Вся информация о вузе – на сайте http://www.mstuca.ru.

Борис Елисеев:
«Мы хотим сделать университет «экспертным
институтом» Федерального агентства воздушного
транспорта»
Борис Елисеев, доктор технических наук, доктор
юридических наук, профессор. Почетный профессор
Технологического университета Нинбо (КНР). Член Коллегии
Росавиации. С 1999 по 2007 год – заместитель
генерального директора авиакомпании «Аэрофлот»
по правовым вопросам. С 2007 года и по настоящее время
возглавляет Московский государственный технический
университет гражданской авиации (МГТУ ГА)

Подходя к своему 45-летию, МГТУ ГА числе в форме дистанционного и от- Наша стратегия развития предус-
разработал стратегию развития на пе- крытого обучения. матривает укрепление позиций МГТУ
риод 2016-2030 годов, главная цель ко- МГТУ ГА планирует предоставлять ГА как центра компетенции в области
торой – достижение мирового уровня каждому студенту возможности фор- гражданской авиации, а также в меж-
по основным направлениям деятель- мирования индивидуального профи- дународном образовательно-научном
ности вуза. ля компетенций посредством выбора сообществе. Мы хотим сделать универ-
Стратегия МГТУ ГА предполагает собственной образовательной тра- ситет опорным центром принятия и ре-
развитие инновационного подхода, ектории. Это потребует дальнейшего ализации решений в области граждан-
соединение образовательного и на- развития модульной системы орга- ской авиации на уровне Российской
учно-исследовательского процессов, низации учебного процесса, а также Федерации, своего рода «экспертным
обновление учебной и исследователь- расширения спектра предлагаемых институтом» Федерального агентства
ской лабораторной базы, активное программ дополнительного профес- воздушного транспорта.
использование интенсивных форм сионального образования, в том числе Сильными сторонами университета
обучения на основе компьютерных дистанционных. На старших курсах являются развитая филиальная сеть,
и инфокоммуникационных образо- бакалавриата и магистратуры опре- разнообразие направлений подго-
вательных технологий, расшире- деляющими формами обучения станут товки и специальностей, имидж клас-
ние спектра образовательных услуг научные семинары, различные проек- сического университета, а также вы-
за счет реализации непрерывного ты и мастер-классы ведущих ученых раженный транспортный компонент
многоуровневого образования, в том и практиков. деятельности вуза.  EOF 

64 май 2016 системный администратор


alma mater российских ИТ Карьера/Образование

Лариса Павлова:
«Каждый свой рабочий день я с благодарностью
вспоминаю Альма-матер»
Лариса Павлова, преподаватель МГТУ ГА.
Окончила аспирантуру МГТУ ГА в декабре 2015 года.
Сейчас завершает подготовку диссертации к защите

Мое знакомство с МГТУ ГА состоялось и информационным технологиям,


в 2006 году. Будучи ученицей выпуск- по ночам штудируя книжки и осваивая
ного класса сельской школы, уехать неведомые ранее языки программи-
для получения образования в столицу рования и информационные техноло-
казалось перспективой, весьма отда- гии. И в итоге в конце первого года
ленной. Однако бойкая школьная под- не представляла себя ни на одном
руга, твердо намеревавшаяся стать другом факультете вуза. Опытные пре-
студенткой Университета гражданской подаватели, которые буквально «пе-
авиации (по примеру старшего брата), рестраивали» мышление, прививали
и хорошая школьная база, увенчавша- логичность, системность и последова-
яся золотой медалью, сделали свое тельность в суждениях, обучали языку реализовать себя, предоставленной
дело – родители предложили попробо- информационных технологий. Мысли вузом, мне довелось получить бесцен-
вать свои силы в филиале университе- об изменении специальности покину- ный опыт работы в абсолютно новой
та в Ростове-на-Дону. ли меня навсегда. среде в Швейцарском космическом
Так как взгляд у старшего поколе- У ФПМВТ МГТУ ГА исключительная центре Лозаннского политехническо-
ния на образование был традицион- преподавательская и материальная го университета (Swiss Space Center
ный, должно было мне стать экономи- база. За время обучения у нас была EPFL).
стом, менеджером и т.п. Но при подаче возможность оттачивать большинство Каждый свой рабочий день я с бла-
заявления оказалось, что поступить навыков на практике благодаря пре- годарностью вспоминаю Альма-матер,
на бюджетное отделение по этим спе- красно обустроенной лаборатории т.к. моя профессиональная деятель-
циальностям нет возможности, и, «вы- кафедры и современному вычисли- ность тесно связана с самыми раз-
бирая из всех зол меньшее», я отдала тельному оборудованию, мы изучали личными направлениями в сфере ИТ:
предпочтение специальности ВМКСС различные аппаратные взаимодейст- я работник Департамента управления
ФПМВТ. При этом затаила надежду, вия, сетевые технологии, среды про- ИТ-проектами в ПАО «Аэрофлот»,
что годик отучусь и попробую переве- граммирования и автоматизированно- а тут – и развитие внешнего сайта,
стись на более «женскую» специаль- го проектирования. и разработка новых информационных
ность. В уровне качества полученного об- систем (коммерческих и производ-
И вот первого сентября 2006 года разования я смогла убедиться еще ственных), и множество инфраструк-
начались учебные будни новоиспечен- раз, когда, уже будучи аспиранткой турных проектов.
ной студентки факультета приклад- кафедры ВМКСС ФПМВТ МГТУ ГА, Очень рада, что в свое время жиз-
ной математики и вычислительной мне предложили принять участие ненная дорога привела меня имен-
техники. Чем больше этих будней в конкурсе на получение президент- но в МГТУ ГА и связала мою судьбу
оставалось позади, тем больше при- ской стипендии на обучение за рубе- с факультетом прикладной математи-
кипала я к вычислительной технике жом. Только благодаря возможности ки и вычислительной техники.  EOF 

45 лет истории По рейтинговой оценке ВУЗов Государствен- Егорьевске, Иркутске, Рыльске, Кирсанове и Тро-
16 апреля 1971 года было подписано постанов- ным комитетом по высшей школе в октябре  ицке – филиалов СПО, вследствие чего проис-
ление Совета Министров СССР «Об организации 1991 года МИИГА занял 3 место среди отрасле- ходит рост числа обучающихся в Университете
Московского института инженеров гражданской вых ВУЗов транспорта России. с почти 4000 до более чем 10000 человек.
авиации». В июле 1993 года приказом Председателя В 2015 году осуществляется переход
В начале июля 1971 года был объявлен пер- Госкомитета по высшему образованию Москов- на ГОС 3+.(федеральные образовательные стан-
вый набор студентов. В институте в первый ский институт инженеров гражданской авиации дарты нового поколения).
год его становления обучалось 2503 студента, (МИИГА) переименован в Московский государ- Сегодня Московский государственный техни-
из них 220 студентов дневного отделения и 2283 – ственный технический университет гражданской ческий университет гражданской авиации – един-
заочного. авиации (МГТУ ГА). С 2011 года Университет ственное учебное заведение высшего образо-
В июне 1981 года МИИГА отметил свое деся- переходит на подготовку бакалавров и магистров. вания, которое готовит специалистов широкого
тилетие. К этому времени институт имел 4 фа- В 2013 году была завершена работа спектра направлений для гражданской авиации
культета и 27 кафедр. по создании филиалов Университета в городах России, ближнего и дальнего зарубежья.

системный администратор май 2016 65


Карьера/Образование alma mater российских ИТ

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

Мария Евинова, студентка 2-го курса направления


подготовки «Информатика и вычислительная техника»

Для каждого абитуриента критерии Таким образом, ведущий универси-


выбора вуза свои. Все мы руковод- тет ГА в стране, в котором доступны
ствуемся различными принципами ИТ-специальности, был очевидным вы-
в процессе принятия такого непросто- бором.
го решения, имеем индивидуальные Немаловажным фактором в при-
запросы и приоритеты. Тем не менее нятии решения стали и рекомендации
основная цель у большинства все же знакомых, обучавшихся здесь и до-
одна: получение качественного обра- вольных качеством образования. На-
зования по интересующей специаль- конец, МГТУ ГА обладает репутацией
ности. одного из немногих свободных от кор- что студенческий коллектив МГТУ ГА –
В моем случае МГТУ ГА оказался рупции вузов, что имеет большое зна- куда более приятная компания, чем ти-
оптимальным вариантом по ряду при- чение. пичные представители других вузов,
чин. Меня давно привлекает авиация, Начав обучение, я не пожалела с которыми мне приходилось иметь
в особенности наземная составляю- о своем выборе. Могу не только с уве- дело.
щая индустрии; также мне интересна ренностью подтвердить качество об- Надеюсь, мои наблюдения помогут
ИТ-сфера как область будущей дея- разования и компетентность препо- нынешним абитуриентам принять ре-
тельности. давательского состава, но и заметить, шение.  EOF 

София Барткив:
«Учиться на факультете с таким грозным,
по мнению многих моих знакомых, названием
интересно и увлекательно»
София Барткив, студентка 2-го курса факультета
прикладной математики и вычислительной техники

Почему я выбрала МГТУ ГА? Можно терминами и красочно расписывал


было бы написать серьезную речь перспективы для будущих специалис-
о перспективах гражданской авиа- тов. В тот момент я решила, что мне
ции, о любви к небу или же о высокой это интересно, что я хотела бы этим
квалификации вуза. Но мой выбор заниматься.
был случайным, хотя кто-то называет И вот, спустя уже больше двух лет
это судьбой. с того дня, я учусь на втором курсе
Да, я никогда не связывала свою факультета прикладной математики
жизнь с авиацией, а на самолетах ле- и вычислительной техники. Я не могу
тала дважды и оба раза ужасно боя- сказать, что это просто, но трудности названием интересно и увлекательно.
лась. Но так получилось, что я попала всегда заставляли меня двигаться на- Тем более что преподаватели всегда
на день открытых дверей в МГТУ ГА. пролом. Да и кто сказал, что в жизни готовы помочь и объяснить еще раз
И вот тогда у меня вспыхнул интерес. бывает легко? то, что на первый взгляд кажется не-
Интерес к информационной безопас- Уже второй год я доказываю себе понятным.
ности. и окружающим, что могу справиться Учеба в университете – это всегда
Об этой специальности активно со сложными задачами, что учить- сложная, но наполненная незабыва-
рассказывал один из приглашенных ся на факультете с таким грозным, емыми моментами жизнь. И я рада,
студентов. Он оперировал сложными по мнению многих моих знакомых, что моя жизнь связана с МГТУ ГА.  EOF 

66 май 2016 системный администратор


лабораторная работа Карьера/Образование

Визитка

ВЛАДИМИР ЗАКЛЯКОВ,
советник налоговой службы 2-го ранга

Лабораторная работа
Исследуем сокеты. Часть 2 (продолжение)
В предыдущем номере [1] были описаны цели работы, схема исследований,
устройство и подготовка лабораторного стенда, ход проведения работы и отдельные
компоненты. В данной части познакомимся с оставшимися компонентами стенда

Браузер lynx сборки под Linux, Windows, UNIX. Включена практически


Один из первых текстовых браузеров. во все дистрибутивы GNU/Linux.
Недостатки: не поддерживает отрисовку таблиц HTML, Из полезного – умеет самостоятельно находить в HTML-
фреймы HTML и JavaScript. документах ссылки на другие документы, находящиеся
Плюсы: небольшой, консольный, то есть работающий на сервере, и также скачивать их, что используется в функ-
только через CLI-интерфейс, кроссплатформенный (Linux, ции «выкачивания сайтов», вплоть до указанного уровня
Windows, UNIX, OS/2, DOS и др.), умеет работать с простыми вложенности.
формами. Многие сторонние коммерческие программы предпочи-
Обратите внимание, что также имеется созвучный тают не изобретать велосипед и активно пользуются штат-
по названию lynx совершенно другой программный продукт: ными функциями wget, например, для получения файлов
Links. Это уже текстово-графический браузер с поддерж- обновлений.
кой фреймов, вкладок, таблиц и JavaScript. Также поддер-
живается широкая кроссплатформенность, и даже имеют- tcpdump
ся 64-битные сборки. Консольный анализатор трафика (сниффер) позволяет за-
Дополнительно в данный момент существуют две основ- хватывать и анализировать сетевой трафик, проходящий
ные ветки разработки на базе кода links: через сетевой интерфейс. Часто используется сетевыми
>> ELinks– для повышения функциональности имеет встро- администраторами для оценки сетевой активности и диагно-
енный язык программирования Lua. стики сетевых подключений.
>> Links2– поддерживает также графику. Поскольку доступ к сетевым интерфейсам имеется лишь
у администратора, то запуск программы в режиме подклю-
Пример обращения к веб-серверу по адресу 192.168.1.1: чения к сетевым интерфейсам системы (в том числе и lo)
возможен лишь с его правами.
$ lynx 192.168.1.1 Среди полезных (для данной работы) опций у программы
следует отметить следующие:
Использование текстовых браузеров может быть >> -e – выводит заголовки канального уровня для каждого
оправданно, в случае если на сервере по каким-то при- перехваченного кадра;
чинам отсутствует оконная система X Window System. На- >> -i имя_интерфейса – задаёт сбор пакетов с указанного
пример, домашний маршрутизатор или какое-либо иное интерфейса. Параметр any соответствует всем сетевым
бытовое устройство с сетевым интерфейсом и ОС Linux интерфейсам. Если интерфейс не задан, tcpdump ищет
«на борту». в системе список доступных интерфейсов и выбирает
Замечание. Обратите внимание, что существует библи- первый (исключая loopback, в том числе даже если ин-
отека AAlib [7], с помощью которой возможно просматри- терфейс находится в состоянии down). Также возможен
вание графических объектов посредством «ascii-графики» анализ данных, передаваемых по USB, например, через
непосредственно на текстовой консоли. обращение к интерфейсам usbmon1, usbmon2 и так да-
лее;
wget >> -c <число пакетов> – указывает завершить программу
Cвободная неинтерактивная консольная программа для за- по достижении заданного числа перехваченных кадров;
грузки файлов по сети. Поддерживает протоколы HTTP, FTP >> -n – отключает преобразование адресов в символьные
и HTTPS. Умеет работать через HTTP-прокси. Имеются имена;

системный администратор май 2016 67


Карьера/Образование лабораторная работа

>> -nn – отключает преобразование номеров портов в сим- >> -a условие_останова_перехвата – указывает условие,
вольные имена; при котором программа завершит своё выполнение; воз-
>> -X – задаёт вывод дампа в шестнадцатеричном и ASCII- можно задание разных условий, например по длительно-
форматах без заголовков канального уровня. Эта опция сти работы, если в качестве параметра в ключе указать
может быть очень удобна при анализе новых протоколов, duration:10, то это укажет программе завершить свою ра-
а также для просмотра передаваемых данных в рамках боту через 10 секунд после её запуска. Например, про-
данной работы; сматривание информации о приходе UDP-дейтаграмм,
>> -s xxx – указывает производить просмотр первых xxx имеющих порт получателя 1234 и адрес отправите-
байт от начала пакета (по умолчанию просматриваются ля 192.168.1.1 на интерфейсе eth0, в течение 30 секунд
лишь первые 68); с момента запуска можно осуществить командой:
>> -w имя_файла – указывает записывать все перехвачен-
ные кадры в файл в сыром (raw) виде. Указанный файл # tshark -i eth0 src host 192.168.1.1 and dst port 1234 ↵
впоследствии можно просмотреть с использованием and udp -a duration:30

ключа -r или передать сторонней программе, например


Wireshark Network Analyzer. >> -b опции_кольцевой_записи – позволяет производить
запись в несколько файлов. Представьте ситуацию,
Примеры запуска: что вам необходимо сохранять статистику трафика в те-
1) Просмотр всего трафика, проходящего через интер- чение длительного периода времени. Сохранить весь вы-
фейс lo: вод в одном файле в такой ситуации заведомо не полу-
чится. Использование сторонних механизмов ротации
# tcpdump -i lo файлов журналов возможно, но не очень удобно. Самое
простое, что можно сделать, – это производить сохране-
2) Просмотр всего TCP и UDP-трафика, приходящего ние информации о трафике в нескольких файлах, коли-
на сетевой интерфейс eth0 из сети 192.168.1.0/24, в котором чество и размер которых указываются пользователем.
порт получателя равен 80 или 1080: При заполнении одного файла запись продолжается
в следующий. Например, укажем 15 файлов размером
# tcpdump 'src net 192.168.1.0/24 and (dst port 80 or 1080)' по 100 КБ каждый:

3) Просматривать UDP-трафик, идущий на порты 1234 # tshark -b filesize:100 -a files:15 -w traffic_dump.pcap


и 1235 от хоста 192.168.1.3 через интерфейс eth0:
Запись будет производиться в файлы с именами вида:
# tcpdump -i eth0 'src 192.168.1.3 and udp ↵
and (dst port 1234 or 1235)' traffic_dump_00001_20160317185736.pcap
traffic_dump_00001_20160317185802.pcap
traffic_dump_00002_20160317185806.pcap
4) Просматривать содержимое UDP-дейтаграмм, имею- ...
щих порт получателя 1234 на интерфейсе eth0:
>> -R фильтр_отображения – позволяет производить
# tcpdump -X -s 1000 -i eth0 'udp and (dst port 1234)' фильтрацию полученных данных по различным критери-
ям (в том числе и на основе данных об уровнях приложе-
Замечание. Для ОС Windows доступна бесплатная пор- ний) и выводить лишь ту информацию, что соответству-
тированная версия tcpdump – WinDump [2]. ет заданному условию. Например, фильтр http.request
будет отображать лишь приходящие HTTP. Совместно
Tshark с другими параметрами можно рассматривать лишь за-
Программа tcpdump имеет довольно простой синтаксис просы, приходящие на 80-й порт протокола TCP на ин-
написания правил и фактически является своего рода «не- терфейсе eth1:
устаревающей классикой» среди снифферов. В большин-
стве случаев она продолжает удовлетворять потребности # tshark tcp dst port 80 and tcp -R http.request -i eth1
администраторов, и в ближайшее десятилетие также будет
это делать. >> -V– сообщает TShark выводить подробную информацию,
Однако TShark умеет работать с протоколом HTTPS, под- а не отчёты в одну строку на каждый фрейм (пакет, дей-
держивает огромное количество и других сетевых протоко- таграмму);
лов (более трёх сотен), имеет более информативный вывод >> -x – сообщает TShark также печатать содержимое (поле
информации о полученных данных. данных) из полученных пакетов (дейтаграмм, кадров)
Для целей данной лабораторной работы TShark не даст в шестнадцатеричном формате и в виде ASCII.
каких-либо существенных преимуществ по сравнению
с tcpdump, тем более обе программы используют одну Wireshark
и ту же библиотеку libpcap, реализующую API pcap (packet Wireshark (Wireshark Network Analyzer) – это достаточно из-
capture). вестный кроссплатформенный инструмент для захвата
Среди полезных ключей для запуска программы можно и анализа сетевого трафика, аналогичный tcpdump и tshark,
выделить следующие: но с графическим интерфейсом.

68 май 2016 системный администратор


лабораторная работа Карьера/Образование

Wireshark работает с подавляющим большинством из- $ ss -o state established '( dport = :http ↵
вестных протоколов, имеет понятный и логичный графи- or sport = :http )'
$ ss -o state established '( dport = :80 or sport = :80 )'
ческий интерфейс на основе GTK+ и мощнейшую систему
фильтров.
Использование графического интерфейса интуитивно 4) Отобразить все TCP-сокеты с адресом клиента из под-
понятно. Для начала захвата достаточно в окне Capture най- сети 192.168.1.0/24:
ти в списке Interface List нужный сетевой интерфейс, напри-
мер eth0, и нажать на него. $ ss -t -a src 192.168.1.0/24
После чего и начнётся процесс захвата, причём «при-
летевшие» на сетевой интерфейс пакеты (кадры, дейта- lsof
граммы) будут появляться в реальном времени, подобно Отображает список открытых файлов и псевдофайлов,
получению писем электронной почты. Имеется возможность в том числе и сокетов, как локальных, так и протоколов TCP
«щёлкнуть» на любую из строчек и открыть просмотр со- и UDP.
держимого, подобно письму электронной почты, после чего Примеры использования:
в нижней половине будут показаны структура заголовков, 1) Показать все TCP и UDP-сокеты:
представленная деревом, и побайтовое наполнение пакета,
как в hex-редакторах. $ lsof -i

netstat, ss 2) Показать все TCP и UDP-сокеты, связанные с адресом


netstat – консольная утилита для просмотра списка установ- 192.168.1.5:
ленных сетевых соединений, таблиц маршрутизации, ста-
тистики сетевых интерфейсов и другой полезной сетевой $ lsof -i@192.168.1.5
информации. $ lsof -i @192.168.1.5

На сегодняшний день считается устаревшей, а вме-


сто неё рекомендуется использовать утилиту ss (из ком- 3) То же самое, но при отображении не преобразовывать
плекта утилит iproute2). ss показывает ту же информацию, адреса хостов и номера портов в доменные имена и назва-
что и netstat, выдавая больше данных о состоянии и о TCP- ния сервисов:
сокетах, нежели какие-либо другие утилиты.
Среди полезных ключей для запуска обеих программ $ lsof -i@192.168.1.5 -n -P
можно выделить следующие:
>> -n – не преобразовывать имена хостов и номера портов 4) Показать все TCP-сокеты; при отображении не преоб-
в соответствующие им доменные имена и названия сер- разовывать адреса хостов и номера портов:
висов. Отображение в цифровом виде производится зна-
чительно быстрее; $ lsof -i TCP -n -P
>> -t – выводить информацию лишь по TCP-сокетам. Обра-
тите внимание, что прослушивающие сокеты по умолча- 5) Показать все UDP-сокеты, связанные с адресом
нию не отображаются, для получения полной картины ис- 192.168.1.5; при отображении не преобразовывать адреса
пользуйте совместно с ключом -а; хостов и номера портов:
>> -u– выводить информацию лишь по UDP-сокетам (анало-
гично, см. замечание про ключ -a выше); $ lsof -i UDP@192.168.1.5 -n -P
>> -a– выводить информацию по всем сокетам (то есть вне
зависимости от состояния сокета).
iptables
Примеры использования: Программа iptables используется для взаимодействия су-
1) Показать информацию обо всех TCP-сокетах (в том перпользователя со структурой и кодом ядра netfilter. Фак-
числе и слушающих): тически используется для управления правилами и цепочка-
ми правил, определяющими режимы фильтрации сетевого
$ netstat -t -a -n трафика. В рамках данной работы данная утилита интерес-
$ ss -t -a -n на тем, что позволяет просматривать счётчики, имеющиеся
у всех правил и цепочек, то есть получать статистическую
2) Показать информацию обо всех UDP-сокетах (в том информацию о количестве переданных (принятых) байт
числе и слушающих): и пакетов (дейтаграмм).
Для просмотра статистики используется следующий син-
$ netstat -u -a -n таксис вызова:
$ ss -u -a -n

# iptables -L -v -x -n --line-numbers
3) Отобразить все установленные TCP-соединения с веб-
сервером. (Соответствие названий сервисов их номерам То же самое, но только для цепочки INPUT:
согласно рекомендациям IANA смотрите в файле в /etc/
services): # iptables -L INPUT -v -x -n --line-numbers

системный администратор май 2016 69


Карьера/Образование лабораторная работа

Назначение ключей: Веб-сервер Apache


>> -L– отобразить статистическую информацию; В данной работе нужен лишь для придания «веса» процессу
>> -v– отобразить дополнительную информацию, в том чис- исследований, как солидное программное средство, рабо-
ле статистику; тающее с сокетами.
>> -x – отображать значения счётчиков с точностью Задумка заключается в том, чтобы понять и «прочувство-
до байта; вать», что только что им написанная и скомпилированная
>> -n – не преобразовывать при отображении адреса и но- программа на языке Си способна выступать в роли клиента
мера портов в доменные имена и названия сервисов; и получать данные от веб-сервера. При наличии постоянно-
>> --line-numbers – перед каждым правилом выводить го прямого подключения к интернету возможно использо-
его порядковый номер в цепочке. вание любых известных пользователю и работающих веб-
сайтов с этой целью.
Для обнуления значений счётчиков используется ключ -Z: «Прямое подключение» означает возможность обраще-
ния к сайтам на 80-й порт по протоколу TCP без исполь-
# iptables -Z зования прокси-серверов для этой цели. Использование
нелегитимных адресов (согласно RFC 1918) и/или транс-
Возможно совмещение с ключом -L для просмотра стати- ляция адресов для осуществления подключения не имеет
стики с последующим обнулением. значения.
Также из полезных функций iptables для исследования Запуск сервера:
сокетов можно отметить возможность создания фильтру-
ющих правил без указания действия (то есть без «-j дей- # service httpd start
ствие»), такие правила могут использоваться для ведения
статистического учёта. Для проверки работы исследования достаточно и тесто-
Например, следующая команда добавит в начало це- вой страницы.
почки INPUT правило для подсчёта пакетов протокола TCP По умолчанию в качестве корневой директории веб-
во входном трафике, идущих с адреса 192.168.1.4: сервера (то, куда помещать html, php и другие файлы) ис-
пользуется /var/www/html.
# iptables -I INPUT -p tcp -s 192.168.1.4 Замечание. При включённом SELinux и отсутствии
разрешающих доменов обратите внимание на использу-
Для удаления правил используется ключ -D: емый для файлов и директорий контекст безопасности.
(system_u:object_r:httpd_sys_content_t:s0)
# iptables -D INPUT -p tcp -s 192.168.1.4
Программы на Си
или Ниже приведены простые программы на Си, реализую-
щие клиентское и серверное использование TCP и UDP-
# iptables -D INPUT номер_правила сокетов.
В угоду краткости и понятности (важные требования,
При использовании модулей TCP и UDP (параметры чтобы не отпугнуть начинающих и сомневающихся в сво-
-p tcp и -p udp) возможно дополнительное указание портов их силах программистов) их простота заключается в том,
отправителя и получателя через ключи (--source-port XX, что в них во многих привычных местах отсутствуют проверки
--destination-port XX, либо --sport XX и --dport XX). получаемых статусов соединений, учёта переданных данных
и проверки самого факта передачи данных.
ps Несомненно, в реальных условиях эксплуатации подоб-
Используется для просмотра списка запущенных процес- ных программ не избежать различных доработок, а там,
сов в системе. Для просмотра всех процессов в системе глядишь, и... «лиха беда начало», и... «у совершенства нет
часто используется в следующих формах запуска: предела», и... «лучшее враг хорошего». Чувствуете свои
силы и имеете под рукой более сложный код? Тогда – дер-
$ ps aux зайте!
Всем же остальным, кто сомневается в своих силах ещё
и на старте, ниже даны примеры простого и работоспособно-
го кода.
$ ps ax tcp_client1.c – простой TCP-клиент:

Данная команда не отображает никакой информации #include <sys/types.h>


о сокетах. В рамках данной работы приведена лишь в целях #include <sys/socket.h>
#include <netinet/in.h>
более полного представления происходящих в операцион- #include <arpa/inet.h>
ной системе процессов. #include <stdio.h>
#include <stdlib.h>
Может быть полезна для получения дополнительной ин-
#include <string.h>
формации. Заметим, что утилита lsof в столбце «PID» ото-
бражает идентификаторы процессов, работающих с файла- void main(void)
{
ми и псевдофайлами (в нашем случае с сокетами).

70 май 2016 системный администратор


лабораторная работа Карьера/Образование

int s; #include <arpa/inet.h>


char buf[256]="Привет! Hello!\n"; #include <sys/socket.h>
struct sockaddr_in serv_addr;
bzero(&serv_addr, sizeof(serv_addr)); int main(void)
serv_addr.sin_family=AF_INET; {
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); struct sockaddr_in serv_addr, clnt_addr;
serv_addr.sin_port=htons((u_short) 1234);
int s, i, slen = sizeof(clnt_addr), nbytes;
s=socket(PF_INET, SOCK_STREAM, 0);
char buf[256];
connect(s, (struct sockaddr *)&serv_addr, ↵
sizeof(serv_addr));
send(s, buf, strlen(buf), 0); if ((s=socket(PF_INET, SOCK_DGRAM, 0)) == -1)
close(s); {
} perror("Ошибка вызова socket()");
exit(1);
}
tcp_client2.c – по сути, тот же клиент, что tcp_client1.c,
/* Очистка памяти структуры serv_addr. */
но после отправки своей порции данных на сервер memset((char *) &serv_addr, 0, sizeof(serv_addr));
он получает от него ответ и выводит его на консоль (не бо-
лее 255 байт, большее будет утрачено), для этого в коде serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(1234);
перед закрытием сокета (строчка close(s);) следует допи-
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
сать:
/* Привязка сокета к прослушиваемому порту и адресу. */
int nbytes; if( bind(s , (struct sockaddr*)&serv_addr, ↵
nbytes=recv(s, buf, sizeof(buf)-1, 0); sizeof(serv_addr) ) == -1)
if (nbytes>0) { buf[nbytes]='\0'; {
printf("%s",buf); } perror("Ошибка вызова bind()");
exit(2);
tcp_client3.c – в коде клиента tcp_client2.c самостоя- }

тельно поменяйте местами порядок получения и отправки /* Принимаем входящие соединения. */


данных. На практике существуют TCP-серверы, выдаю- while(1)
щие приветственное приглашение, прежде чем что-то по- {
printf("Ждём подключения.\n");
лучать от клиента. Что-то вроде жизненного случая, ког-
fflush(stdout);
да... вы определились с мыслями куда пойти («выбрали
заведение», по аналогии с «создали сокет»), вошли через if ((nbytes = recvfrom(s, buf, sizeof(buf)-1, 0, ↵
двери заведения (подключились к сокету), ещё не успели (struct sockaddr *) &clnt_addr, ↵
&slen)) == -1)
подумать, что сказать (отправить серверу), а вы уже слы- {
шите в свой адрес: «Свободная касса!» (получили пригла- perror("Ошибка вызова recvfrom()");
шение от сервера), либо более грубое, но чёткое «Чего exit(3);
}
надо?!».
Замечание. Посылаемые в программах сообщения спе- buf[nbytes]='\0';
циально выбраны содержащими как кириллицу, так и ла- printf("Дейтаграмма от %s:%d\n", ↵
тиницу. Сделано это по причине наиболее вероятного ис- inet_ntoa(clnt_addr.sin_addr), ↵
ntohs(clnt_addr.sin_port));
пользования кодировки Unicode и способа кодирования printf("Её содержимое: %s\n", buf);
UTF-8 для записи текстового сообщения. Поскольку сим-
волы кириллицы в этом случае кодируются двумя байтами, }
а латиницы – одним (с использованием ASCII), то при про-
close(s);
смотре сырых данных из сокета, полученных с помощью return 0;
сниффера, требуется изрядное искусство, чтобы разгля- }
деть великий и могучий русский язык в сообщениях. А вот
текстовые строки, закодированные с помощью ASCII, уви- Читайте продолжение лабораторной работы в следую-
дят все и сразу. А потом, если захотят, смогут раскоди- щем номере журнала.  EOF 
ровать и оставшуюся часть сообщения. Как это сделать –
см. [3]. [1] Закляков В. Лабораторная работа. Исследуем сокеты. Часть 1.
udp_client1.c – в коде tcp_client1.c самостоятельно заме- //«Cистемный администратор», №4, 2016 г. – С. 75-79 (http://
ните в строке: samag.ru/archive/article/3179).
[2] Сайт библиотеки WinPcap и программы WinDump – http://www.
s=socket(PF_INET, SOCK_STREAM, 0); winpcap.org.
[3] Грошев А., Закляков П. Информатика: учеб. для вузов – 3 е изд.,
тип сокета с SOCK_STREAM на SOCK_DGRAM. перераб. и доп. – М.: ДМК Пресс, 2015. – 588 с.: цв. ил.
udp_server1.c – простой UDP-сервер: ISBN 978-5-97060-304-8.
[4] Стивенс У. UNIX: разработка сетевых приложений. – СПб.:Пи-
#include <stdio.h> тер, 2003. – 1088 с. ISBN 5-318-00535-7.
#include <string.h>
#include <stdlib.h>
Ключевые слова: сокет, сетевые утилиты, CentOS, Linux.

системный администратор май 2016 71


Карьера/Образование рейтинг

Визитка

ИГОРЬ ШТОМПЕЛЬ,
инженер, системный администратор. Сфера профессиональных интересов –
свободное ПО, keepercoder@gmail.com

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

Получить представление об основах программирования >> Специальность:программист


на JavaScript позволяют онлайн-курсы. Мы подготовили >> Лекции:5 лекций
их соответствующий рейтинг. Но традиционно обращаем >> Материалы:текст, слайды
внимание, что курсы, вошедшие в рейтинг, имеют разную >> Уровень сложности:специалисты
сложность, преследуют различные цели. Какие из них под- >> Сертификат:нет
ходят для изучения – решать вам! >> Адрес:  https://mva.microsoft.com/ru/training-courses/​
-javascript-10479
Участники рейтинга
Наш подход
Основы программирования Для сравнения курсов мы определили несколько параме-
>> Авторы: А. Жариков (веб-разработчик с 10-летним ста- тров. Это интерфейс, содержание, иллюстративный мате-
жем, https://geekbrains.ru/users/1) риал, сертификация.
>> Учебное заведение: GeekBrains.ru (https://geekbrains.ru, Каждый из параметров предполагает присвоение оцен-
https://www.zharikov.pro) ки (от 1 до 5), а также каждый параметр имеет свой вес
>> Специальность:программист (от 1 до 5). Умножение оценки параметра на его вес дает
>> Лекции:15 лекций итоговый балл. Сумма итоговых баллов всех параметров
>> Материалы:видео определяет место в рейтинге.
>> Уровень сложности:начинающие Стоит отметить, что максимальный вес мы присвоили
>> Сертификат:да только параметру содержание – 5. На балл ниже был оце-
>> Адрес:https://geekbrains.ru/courses/58 нен параметр интерфейс – 4. А два оставшихся параме-
тра – иллюстративный материал и сертификация – получи-
Введение в JavaScript ли оценку 3.
>> Авторы: Р. Давлеткалиев (CEO проекта Hexlet, https://
ru.hexlet.io/pages/about, https://rakh.im/). Видеокурс «Основы программирования»
>> Учебное заведение:Проект Hexlet (https://ru.hexlet.io/) Образовательный проект GeekBrains (https://geekbrains.ru),
>> Специальность:программист посвященный ИТ-технологиям, опубликовал вводный курс
>> Лекции:7 лекций для программистов JavaScript (см. рис. 1). Его особенность
>> Материалы:видео в том, что в качестве языка программирования используется
>> Уровень сложности:начинающие JavaScript.
>> Сертификат:нет В ходе успешного освоения всех 15 лекций слушатели
>> Адрес:  https://www.youtube.com/playlist?list=PLo6puixMw получат основы программирования, представление о реали-
uSNxJCgadaaavKqq4-ocKPrR; https://ru.hexlet.io/courses/ зации алгоритмов, научатся создавать простые программы
javascript_101 и т.д. Таким образом, курс ориентирован на тех, кто хочет
получить представление о программировании, при этом
Экспресс-погружение в разработку приложений он базируется на возможностях языка JavaScript.
на JavaScript Лекции начинаются с введения, в котором дается пред-
>> Авторы:К. Кичинский (эксперт по стратегическим техно- ставление о назначении всего курса и проводится опреде-
логиям Microsoft, https://habrahabr.ru/users/kichik) ленная подготовка. В нем акцентируется внимание на том,
>> Учебное заведение:ИНТУИТ (http://intuit.ru) что для эффективного освоения курса необходимо изучать

72 май 2016 системный администратор


рейтинг Карьера/Образование

все уроки последовательно, иначе возникнет «каша в голо- Видеокурс «Введение в JavaScript»
ве». Это понятная установка для вводного курса в програм- Следующий курс от проекта Hexlet (https://ru.hexlet.io), пред-
мирование. Кроме того, предлагается в качестве домашнего лагающего для изучения практические курсы по программи-
задания пройти вебинар «Личные качества успешного про- рованию.
граммиста» [1]. Курс по JavaScript является вводным, отличается ши-
Далее обосновывается выбор JavaScript для изучения ос- роким охватом основных возможностей языка. При этом
нов программирования и показывается пример первой про- курс оставляет за пределами рассмотрения такие темы,
граммы («Hello, World!») на нем. как DOM, эффекты, анимация, библиотеки, фреймворки,
Затем обсуждается работа с переменными и исследуют- AJAX, взаимодействие с серверной частью, отладка, тести-
ся типы данных. рование и т.п. Всего в курсе семь лекций.
Далее изучаются все базовые инструменты и конструк- Слушатели начнут со знакомства с JavaScript (нестрогая
ции (алгоритмы, блок-схемы, оператор if, логические опера- типизация, прототипно-ориентированный язык, сценарный
ции, циклы do, while, for, массивы, функции). и т.п.), его истории.
Заключительные лекции посвящены созданию неболь- Вторая лекция посвящена строкам и объектам, прототи-
шой игры и обсуждению карьеры программиста. пам. В ней же уделяется внимание множеству сопутствую-
Лекции сопровождаются домашним заданием. Его вы- щих проблем (экранированию, различию между строками
полнение не контролируется, но, конечно, для лучшего по- и символами, конкатенации, работе со строками и числами,
нимания материала его необходимо выполнить. Кроме того, сравнению строк). Кроме того, рассматриваются операторы
автор уделяет внимание разбору домашних заданий. if, for, while, switch, break.
Интерфейс курса удобен. В центре экрана расположе- Следующие две лекции посвящены функциям и замыка-
но окно воспроизведения видео, для которого используется ниям, а также наследованию.
собственный движок. Он позволяет осуществлять стандарт- В заключительных лекциях рассматриваются массивы,
ные операции (воспроизводить/останавливать видео, регу- регулярные выражения и сравнения.
лировать громкость звука, показывать оставшееся до кон- В целом материал в уроках подается интересно и снаб-
ца время воспроизведения, разворачивать видео на весь жен хорошими иллюстрациями, но о них расскажу чуть
экран или возвращать в исходное состояние). Интересная ниже. Данный курс будет полезен начинающим разработ-
особенность – выбор скорости воспроизведения (от 0.25x чикам.
до 2x). Под окном доступна ссылка для скачивания видео.
Справа от окна с видео доступен выбор любой лекции кур-
Таблица 1. Рейтинг курса «Основы программирования»
са. Что очень удобно в плане навигации. Стоит отметить,
что пройденные лекции помечаются. Поставим интерфейсу
курса максимальный балл. Оценка Коэффициент Итоговый
«Содержание» (С) балл
Иллюстрации к курсу демонстрируются в видео лек-
ции, для самостоятельной загрузки отдельно от видео они Содержание 5 5 25
не доступны. Хотя доступно для загрузки само видео лек- Интерфейс 5 4 20
ций. Кроме того, в видео лекций демонстрируется работа Иллюстративный материал 5 3 15
с кодом, показывается результат выполнения его работы Сертификация 4 3 12
и т.п. Таким образом, за иллюстративный материал – мак-
72
симальный балл.
Несколько слов о сертификации.
После успешного прохождения кур-
Рисунок 1. Курс «Основы программирования»
са слушатели получают сертификат.
Он выдается только в электронном
виде. При просмотре сертификата
отображается ссылка на него, а также
ссылка на его PDF-версию.
Говоря о статусе сертификации не-
обходимо отметить, что в ИТ-секторе
широкого признания пока не полу-
чили различные сертификаты, вы-
данные не в результате успешного
освоения авторизованных курсов.
Но тем не менее они характеризуют
своего владельца как способного
к самообучению, пунктуального спе-
циалиста.
Итак, особенность курса в том,
что он ориентирован на освоение ос-
нов программирования на базе языка
программирования JavaScript.

системный администратор май 2016 73


Карьера/Образование рейтинг

Видеокурс проекта Hexlet размещен на портале ориентирован на начинающих в области веб-разработки


Youtube.com. На нем он доступен в виде плейлиста, что об- с использованием возможностей языка JavaScript. Обучаю-
легчает навигацию по лекциям. Так, у слушателей есть воз- щиеся, использующие продукцию Microsoft, получат общее
можность осуществлять переход из текущей лекции в любую представление о JavaScript и инструментах.
другую, с которой необходимо ознакомиться или изучить. В частности, слушатели начнут знакомство с основами
Это повышает удобство освоения и восприятия курса. В це- языка JavaScript, а продолжат исследованием создания
лом это единственный видеокурс в нашем рейтинге, кото- WinRT-приложений, кроссплатформенной разработки, соз-
рый размещен на одном из популярных видеосервисов. По- дания игр и расширенных возможностей. Основная осо-
ставим за интерфейс максимальный балл. бенность – использование технологий Microsoft (TypeScript,
Во время лекций осуществляется демонстрация пре- WinRT, WinJS, Visual Studio Tools for Apache Cordova, Node.js
зентаций прямо в видео, на которых присутствуют рисун- Tools for Visual Studio, Web Essentials for Visual Studio и др.).
ки, демонстрируется код, который выделяется особо (цве- Лекции разбиты на пять «разделов». Слушатели начнут
том) на фоне текста, производится демонстрация работы изучение с истории развития JavaScript и перспектив рабо-
программ и т.д. Кроме того, показывается работа с кодом, ты с ним. Далее автор знакомит с возможностями открытого
вывод результата его работы в терминале Mac OS. Таким языка TypeScript, который используется для создания мас-
образом, за иллюстративный материал – максимальный штабируемых приложений, показывается его соотношение
балл. с JavaScript. Кроме того, показывается процесс использова-
Возможность получить сертификат после успешного ния TypeScript в Node.js (установка, компиляция).
прохождения курса не предоставляется. Следующая лекция посвящена WinRT-приложениям. Рас-
Курс носит вводный характер, затронуты базовые воз- крывается значение универсальных приложений в термино-
можности JavaScript, который используется в большом ко- логии Microsoft (приложения для Windows и Windows Phone)
личестве современных веб-проектов. и контекст их появления. Затем более подробно рассма-
триваются WinRT (набор API, которые написаны с учетом
Видеокурс «Экспресс-погружение в разработку асинхронной модели взаимодействия) и WinJS (JavaScript-
приложений на JavaScript» библиотека для реализации Windows-приложений). Приво-
Курс «Экспресс-погружение в разработку приложений дятся примеры использования этого API (доступ к файлам,
на JavaScript» от Microsoft Virtual Academy [2] (см. рис. 3) взаимодействие с датчиками, взаимодействие с метками).
Показываются соотношение WinRT и JavaScript и возмож-
ности, которые в результате появляются у разработчиков
Таблица 2. Рейтинг курса «Основы разработки сайтов и веб-приложений»
(доступ к системным ресурсам, гибридные сценарии и т.д.).
Кроме того, показываются современное состояние и воз-
Оценка Коэффициент Итоговый можности WinJS.
«Содержание» (С) балл
Следующая большая тема – кроссплатформенность. Да-
Содержание 5 5 25 ется представление о том, что это такое. В том числе с учетом
Интерфейс 5 4 20 специфики нативных и веб-приложений, требований к крос-
Иллюстративный материал 5 3 15 сплатформенности раскрывается спектр веб-платформы
Сертификация 0 3 0
(веб-сайт, расширенные веб-сайты, хостинг веб-сайтов,
хостинг веб-приложений, упаковка приложений), в соот-
60
ветствующем контексте говорится и о веб-технологиях
(HTML5; CSS – легкая стилизация, от-
зывчивость дизайна для разных форм-
Рисунок 2. Курс «Введение в JavaScript»
факторов; возможность работы offline;
множество JavaScript-библиотек; со-
общество Open Source и др.). Кроме
того, выделяются проблемы (вендор-
ные префиксы, доступ к аппаратным
ресурсам при интеграции с ОС и др.).
Особое внимание уделено использо-
ванию Apache Cordova.
Предпоследняя лекция посвящена
созданию игр и работе с графикой
на базе JavaScript. Среди технологий
и инструментов, которые в центре вни-
мания: Babylon.js (работа с WebGL),
Platformer Game Starter Kit, Tower Game
Starte Kit. Отдельное внимание уде-
лено реализации работы с GamePad
на базе JavaScript и его расшире-
ний. В заключительной лекции дается
представление о том, на что обратить

74 май 2016 системный администратор


рейтинг Карьера/Образование

внимание (специфические возможности использования современного состояния и возможностей использования


JavaScript) при использовании Node.js на базе Node.js fot JavaScript и его расширений на базе технологий Microsoft,
Visual Studio, а также Web Essentialы for Visual Studio, рас- которые лежат в основе как нативных, так и веб-приложений.
сказывается о некоторых областях использования и месте Таким образом, курс ориентирован на начинающих
JavaScript в них: интернет вещей, устройства (например, JavaScript-разработчиков, специализирующихся на исполь-
Arduino), естественный ввод (NUI) – Kinnect и т.д., новые зовании технологий Microsoft.
экраны (OculusRift и WebGL).
В целом курс будет полезен тем, кто хочет получить об-
щее представление о современном состоянии JavaScript Два курса «Введение в JavaScript» и «Экспресс-погружение
и сферах его использования. В нем хорошо отражены в разработку приложений на JavaScript» уступили лидеру
эти вопросы, но необходимо учитывать специфику – ориен- рейтинга «Основы программирования» из-за того, что они
тацию на использование технологий и подходов Microsoft. не предоставляют возможность сертификации. В остальном
Интерфейс видеокурсов Microsoft Virtual Academy осно- курсы набрали равное количество баллов.  EOF 
ван на собственном движке. Верхняя часть экрана отведе-
на под воспроизведение материалов. Для видео доступна [1] Вебинар «Личные качества успешного программиста» на пор-
перемотка, выбор качества (для данного курса от 360p тале GeekBrains.ru – https://geekbrains.ru/events/36.
до 720p), кнопка загрузки текущего видео с выбором ка- [2] Портал Microsoft Virtual Academy – https://mva.microsoft.com.
чества (также от 360p до 720p), выбор скорости воспро-
изведения (от 1/4 до 2х), кнопка управления громкостью,
Таблица 3. Рейтинг курса «Экспресс-погружение в разработку приложений на JavaScript»
кнопка разворачивания видео на полный экран/сворачива-
ния видео.
Для отображения презентаций используется PowerPoint Оценка Коэффициент Итоговый
«Содержание» (С) балл
Online (открывается в той же части окна, что и видео). Сра-
зу под областью воспроизведения видео и отображения Содержание 5 5 25
презентаций размещаются три кнопки. Первая позволяет Интерфейс 5 4 20
получить сводную информацию о курсе, вторая – изучать Иллюстративный материал 5 3 15
курс, а третья – загрузить материалы курса (если доступны). Сертификация 0 3 0
Ниже полосы с этими кнопками отображается соответству-
60
ющее активной кнопке содержимое. Например, для второй
это будут «разделы» с материалами курса.
Таблица 4. Итоговый рейтинг курсов
Но движок не лишен и некоторых недостатков. Так, не до-
ступна возможность произвольного перехода из текущего
материала (видео, слайд, тест) на любой другой. Только Курс Итоговый
на один «шаг» (на лекцию или слайд) вперед или назад. балл

Для перехода в произвольную лекцию требуется прокрутить Основы программирования 72


страницу вниз и найти в списке необходимую, что, конеч- Введение в JavaScript 60
но, вызывает понятные неудобство, если нужно «прыгнуть»
Экспресс-погружение в разработку приложений 60
через три лекции на определенную презентацию. Несмотря на JavaScript
на то что отсутствует возможность произвольного перехода
на необходимую лекцию, слайд, тест,
интерфейс получает максимальный
Рисунок 3. Курс «Экспресс-погружение в разработку приложений на JavaScript»
балл, так как предоставляет возмож-
ность загрузки видео, слайдов, выбор
скорости воспроизведения.
Несколько слов об иллюстрациях.
Все лекции курса сопровождаются
презентациями, которые содержат
рисунки, таблицы и т.п., что улучшает
восприятие учебного материала. Пре-
зентации, как было сказано выше,
открываются в той же части окна,
что и видео, в PowerPoint Online, а так-
же доступны для загрузки в формате
.pptx. Поставим за иллюстративный
материал максимальный балл.
К сожалению возможность полу-
чить сертификат после прохождения
курса отсутствует.
Курс носит обзорный характер,
затронуты все основные аспекты

системный администратор май 2016 75


Карьера/Образование хроники ИТ

Визитка

ВЛАДИМИР ГАКОВ, писатель, специалист по научной фантастике, журналист, лектор. Окончил физфак МГУ. Работал в НИИ. С 1984 г. на творческой
работе. В 1990-1991 гг. – Associate Professor, Central Michigan University. С 2003 г. читает курс по истории бизнеса в Институте бизнеса и делового
администрирования (ИБДА) Российской академии народного хозяйства и государственной службы (РАНХиГС). Автор 8 книг и более 2000 публикаций

Семьдесят лет компьютерной эры


Первая декада: 1946 – 1956
Продолжаем публикацию хроник возникновения, становления и развития
информационных технологий*

Режим реального времени И только много десятилетий спустя обнаружился еще


Это десятилетие прошлого века вместило в себя столько один американский «отец компьютера» – болгарин по проис-
событий в интересующей нас области, сколько не приходи- хождению Джон Винсент Атанасов, преподававший физику
лось на предыдущие четыре вместе взятые. Но прежде не- и математику в Университете штата Айова. Не зная о рабо-
сколько слов о том, что произошло незадолго до описывае- тах Цузе, Атанасов независимо совершил революционный
мого периода – в конце 1930-х и в первой половине 1940-х. переход к двоичной системе и вместе со студентом-выпуск-
Как, надеюсь, стало уже привычным для читателей – а имен- ником Клиффордом Берри в 1939 году построил прототип
но в двух режимах, «реального времени» и «виртуальном». электронного цифрового компьютера ABC (Atanasoff Berry
Если в двух словах, то происходила «гонка за приоритет». Computer). И к 1942 году закончил работу над «апгрейдом» –
За право быть названным «отцом современного компьюте- машиной, способной решать системы линейных уравнений.
ра» – притом что соискатели (с некоторыми читатели «СА» Правда, эта счетная машина не была программируемой,
уже успели познакомиться подробнее в соответствующих и в ней отсутствовало CPU.
статьях, опубликованных за последние годы) в большинстве Изобретением Атанасова никто тогда не заинтересовал-
случаев понятия не имели об успехах коллег. Время было ся, и о нем вскоре забыли. Удивительно другое – об ABC
такое – предвоенное и военное. ни словом не обмолвился и Джон Мокли (или Маучли),
Немцы не без оснований считают пионером «своего» – ин- долгое время считавшийся (вместе с Преспером Эккертом)
женера Конрада Цузе. В 1937 году он, еще студент последне- создателем первого компьютера ENIAC, с которого мы и ве-
го курса Берлинского политехнического института, не знако- дем нашу летопись! А ведь именно встреча с Атанасовым
мый ни с проектом «дифференциальной машины» Бэббиджа, и осмотр его машины в действии натолкнули Мокли на ряд
ни с работами Джона Буля, на квартире родителей построил принципиальных технических идей, каковые были использо-
первую полностью программируемую механическую цифро- ваны в его машине...
вую машину – Z1. Она действовала на основе двоичного кода, В 1938 году два американца, прославивших свои фами-
содержала блок памяти, а программа вводилась с перфолен- лии, – Уильям Хьюлетт и Дэвид Паккард, создали первый
ты на барабане... В том же году Цузе приступил к постройке тоновый генератор. А затем и фирму с уставным капиталом
модели Z2 (закончил он ее спустя два года), которую многие $538 для производства электронного оборудования, назва-
считают первым в мире электромеханическим компьютером. ние которой, полагаю, озвучивать нет нужды. В том же 1938-м
Далее последовали первая в мире релейная ЭВМ с программ- был открыт принцип электрохимического копирования – ксе-
ным управлением – Z3 (закончена в 1941-м) и Z4 – единст- рография. Годом позже с помощью антенны, установленной
венная из машин Цузе, уцелевшая после бомбежек Берлина на верхушке нью-йоркского небоскреба Empire State Building,
авиацией союзников в последние месяцы войны. А еще не- была проведена первая публичная телепередача. А в по-
мецкий инженер в 1943-м создал первую цифровую специ- следний год декады, 1940-й, состоялась демонстрация цвет-
ализированную управляющую вычислительную машину – S2. ной телевизионной системы американца Питера Голдмарка.
За конкурентами на другом берегу Атлантики дело не ста- В том же году эксперименты по дистанционному управлению,
ло. За год до создания модели Z1 Джордж Стибитц из Bell проведенные сотрудниками Bell Telephone Laboratories, при-
Telephone Laboratories построил первую электромеханиче- вели к созданию первого терминала.
скую схему – «двоичный сумматор». А в 1940-м продемон- От практиков не отставали и теоретики. В 1936 году ан-
стрировал новую машину – Complex Number Calculator, так- глийский математик Алан Тьюринг, работавший в ту пору
же претендующую на право называться первым цифровым в Принстонском университете, ввел понятие абстрактного
компьютером. эквивалента алгоритма, или вычислимой функции, позже

76 май 2016 системный администратор


хроники ИТ Карьера/Образование

получившее название «машины Тьюринга». А когда началась до того, как к этой же идее пришли ученые и конструкторы,
война, Тьюринга привлекли к самой что ни на есть приклад- описаны дистанционно управляемые электромеханические
ной деятельности – к расшифровке немецких секретных ко- манипуляторы.
дов, передаваемых по радио капитанам субмарин (операция Под конец десятилетия увидело свет еще одно произве-
Enigma). Взломать коды удалось с помощью компьютера дение научной фантастики – одно, но какое! Автор его в от-
Colossus, созданного в Манчестерском университете под ру- личие от энтузиастов-инженеров задумался о неприятных
ководством Тьюринга. В 1944 году появился Colossus Mark II, и даже опасных возможных социальных последствиях,
который использовался при подготовке высадки союзников которые несут человечеству новые информационные тех-
в Нормандии... Наконец, в 1947-м Тьюринг уже опубликовал нологии. Этим автором был английский писатель Джордж
первую из серии статей об «искусственном интеллекте». Оруэлл, предвосхитивший в своей знаменитой антиутопии
«1984» (1949) многие «прелести» тоталитаризма. И среди
Переход в виртуальный режим прочих – всевидящее око Большого Брата: телескрин...
В предвоенное десятилетие перестала быть «литератур-
ной Золушкой» и научная фантастика. Но в интересующей Режим реального времени
нас теме откровения по-прежнему были редки. Тогдашняя Пока в Европе шла война, американские ученые могли срав-
фантастика была увлечена темой роботов, точнее, андрои- нительно спокойно работать над тем, в чем остро нуждались
дов – человекоподобных искусственных существ, о перспек- прежде всего военные: над вычислительной техникой.
тивах же «электронных мозгов» писали редко и неохотно... В 1942 году Ванневар Буш в MIT модифицировал свой
Тем не менее знаменитый цикл Айзека Азимова, завер- «дифференциальный анализатор» (новая модель веси-
шившийся изданием книги «Я, робот» (1950), как и дра- ла 200 тонн), а Атанасов и Берри в Университете штата Айова
матичный рассказ Лестера завершили постройку своей машины ABC. Но то были еще
Дель Рея «Руки твои» (1945) – робкие попытки одиночек,
об Адаме и Еве из «ветхого за- вызывавшие скепсис даже
вета» роботов! – много нового у тех, кому, как говорит-
сказали о психологии, мо- ся, на роду было написано
делях поведения созданных смотреть вперед. Напомню,
в лабораториях «железяк», что вошедшую в анналы про-
однако, явно обладавших ис- гнозов – точнее, «антипро-
кусственным интеллектом! гнозов» – фразу: «Я думаю,
То есть как раз о том, о чем мировой рынок компьюте-
размышляли в своих стать- ров вряд ли превысит пять
ях Тьюринг, Эшби, Винер штук», – произнес в 1943 году
и другие «отцы» кибернети- не кто-нибудь, а тогдашний
ки. По крайней мере своео- глава IBM Томас Уотсон-стар-
бразная этическая доктрина ший!
Азимова – Три Закона Робо- Ждать, когда он пожале-
техники – вполне применима Сотрудники Bell Telephone Laboratories Джон
Бардин, Уильям Шокли и Уолтер Браттейн ет о сказанном, пришлось
к любым формам «нечелове- недолго. И года не прошло,
ческого» интеллекта. как коллега Уотсона – Говард
Зато в рассказе Мюррея Лейнстера «Логик по имени Эйкен, так же не ведая об изобретении Атанасова и Берри,
Джо» (1946) главный «герой» – это самый настоящий ком- построил в Гарвардском университете (совместно с той же
пьютер! Железный ящик с вращающимися бобинами пер- IBM) первый компьютер широкого профиля – Marc 1 (IBM
фолент и мигающими лампочками на панелях, как и поло- ASCC). Первые программы для этой машины написала
жено уважающему себя оракулу, рассказывает людям все, Грейс Марри Хоппер, впоследствии одна из самых ярких
что им хочется услышать. Даже если это неправда... Остает- звезд Компьютерной эры. Хотя самый первый алгоритми-
ся только гадать, откуда писатель узнал о внешнем облике ческий язык программирования – Plancalcul – создал, по-
машин, которые тогда мог наблюдать воочию лишь весьма видимому, все тот же Цузе в 1945-1946 годах.
узкий круг специалистов с высшей формой допуска к во- И, наконец, 1 января 1946-го, как уже говорилось, стар-
енным секретам... товала собственно Компьютерная эра. В США состоя-
Также ясно «зрил в будущее» и Артур Кларк, не толь- лась презентация ENIAC (Electronic Numerical Integrator
ко предсказавший в статье «Внеземные коммуникации» and Computer) Мокли и Эккерта – компьютера, созданного
(1945) геостационарные орбитальные спутники связи, по заказу армии, нуждавшейся в более точных и высокоско-
но и отчетливо увидевший, сколь радикально новые комму- ростных средствах составления таблиц для баллистиков.
никации изменят нашу жизнь. Писатель потом неоднократ- В ином направлении двигалась мысль других первопро-
но пенял себе, что не сообразил вовремя запатентовать ходцев. Английский математик Джон фон Нейман в 1945 году
идею: не пришлось бы всю жизнь зарабатывать научной разработал первую машину, которая могла сохранять про-
фантастикой! Хотя с ним мог бы поспорить за приоритет граммы и базы данных в памяти, – EDVAC (Electronic Discrete
и американец Джордж Смит, также описавший в рассказе Variable Computer). Годом позже Джон Тьюки впервые ис-
«QRM-Межпланетная» (1942) орбитальные спутники свя- пользовал термин «бит», а еще через год англичанин Росс
зи. А в повести Роберта Хайнлайна «Уолдо» (1942) задолго Эшби ввел термин «самоорганизующаяся система».

системный администратор май 2016 77


Карьера/Образование хроники ИТ

Переход в виртуальный режим Для решения всех этих задач требовались кадры. На пер-
Первое послевоенное десятилетие не случайно было назва- вых порах главной кузницей их стало отделение прикладной
но критиками Золотым веком англо-американской science математики МИАН (создано в 1953 году, позднее выделилось
fiction: произведения этого жанра, новый взлет которому в одноименный НИИ, который возглавил Мстислав Келдыш,
дало вхождение человечества в три эры сразу – Космиче- впоследствии – президент Академии наук). В 1955 году был
скую, Атомную и Компьютерную, полились бурным потоком. создан Вычислительный центр АН, чуть позже аналогичные
В интересующей нас теме тон по-прежнему задавали центры открылись в Киеве и Ереване.
не компьютеры, а роботы. Они все так же вступают в конф-
ликт с человеком (мучимые извечным «франкенштейновым» Переход в виртуальный режим
комплексом по отношению к Cоздателю) в рассказе «Контур Что касается собственно кибернетики, то чаще всего в фан-
сострадания» (1955) Джона Уиндэма, служат «карательными тастике первой половины 1950-х попадаются на глаза опи-
органами» в тоталитарном обществе – Страж-Птица из одно- сания (или просто упоминания мельком) бортовых ЭВМ кос-
именного рассказа Роберта Шекли (1952) и Стальной Пес мических кораблей. Иногда, впрочем, в роли компьютеров
из романа Рэя Брэдбери «451 по Фаренгейту» (1953). выступают какие-то маловразумительные «управляющие
Есть и более мирные профессии для «стальных братьев на- полетом звездолета роботы», а курс порой прокладывал-
ших меньших»: боксеры (рассказ Ричарда Мейтсона «Сталь- ся с помощью... логарифмической ли-
ной человек», 1956), торговцы (рассказ нейки, после чего расчеты на бумаге
Фрица Лейбера «Дрянной день для тор- отдаются на проверку бортовой ЭВМ!
говли», 1953), актеры (повесть Уолтера Примеры можно выписывать до беско-
Миллера «Рабочий сцены», 1955). нечности: повесть «Поколение, достиг-
И у этих механических созданий – шее цели»  (1953) Клиффорда Саймака,
те же проблемы, что и у их творцов. «Сво- романы «Пески Марса» (1951) Кларка,
бодный» робот не может получить ни ра- «Астронавты» (1951) и «Магелланово об-
боты, ни кредита (рассказ Дэниэла Киза лако» (1955) Станислава Лема, трилогия
«Роботов просим не обращаться», 1952), Георгия Мартынова «Звездоплаватели»
в отношении роботов проводится по- (1954-1959). Правда, в дилогии послед-
литика апартеида (рассказ Альфреда него, «Каллисто» (1957) и «Каллистяне»
Коппела «Только для белковых», 1953). (1960), инопланетная цивилизация уже
А в повести Шекли «Билет на планету активно использует «вычислительные
Транай» (1955) домашние роботы наме- машины» в управлении «народным хо-
ренно выпускаются с дефектами, что- зяйством».
бы люди могли выместить на них злость ом Сергея Лебедева строили Кроме того, суперкомпьютеры на-
Под руководств
– МЭСМ
и ощутить собственное превосходство. универсальную ЭВМ с хранимой программой чинают и выигрывают (или проигрыва-
ют – другому «лому», то есть еще более
Режим реального времени мощной ЭВМ!) войны, как это описал Шекли в рассказе
Западные ученые, разумеется, не знали, что и их коллеги «Детский мат» (1953), распутывают преступления (рассказ
за «железным занавесом» тоже не сидели сложа руки. Хотя Фрэнка Райли «Кибер-Холмс», 1955). В худшем вариан-
о первых успехах советских электронщиков понятия не име- те – его описал Курт Воннегут в романе «Механическое пи-
ли и соотечественники: вычислительную технику строили анино» (1952) – человечество добровольно перекладывает
«втихаря», в обстановке строжайшей секретности, а вслух на плечи машины все свои проблемы, включая управлен-
со всех трибун громили «буржуазную лженауку» киберне- ческие и экономические. А Лем в рассказе «ЭДИП» (1954)
тику... предупреждает насчет возможности создания в будущем
Начало Компьютерной эры в СССР относится к первым кибернетического Большого Брата, который через сети
послевоенным годам. В 1947 году под руководством Сергея (Лем есть Лем – 1954 год!) сможет узнавать мысли и настро-
Лебедева начали строить универсальную ЭВМ с хранимой ения граждан и «стучать» куда надо на неблагонадежных!
программой – МЭСМ (Малая электронная счетная машина).
Спустя год в Москве был создан Институт точной механи- Режим реального времени
ки и вычислительной техники (ИТМиВТ) АН СССР, первым Буквально каждый год первого десятилетия Компьютерной
директором которого стал Николай Бруевич. В том же году эры приносил прорыв за прорывом.
вышло Постановление Совмина о создании специального 1947 год. В США основана научно-образовательная Ас-
конструкторского бюро СКБ-245 при московском заводе социация по вычислительной технике (ACM – Association
САМ. Задача перед новым «почтовым ящиком» ставилась for Computing Machinery). Сотрудники Bell Telephone
предельно конкретная: строительство вычислительной тех- Laboratories Уильям Шокли, Уолтер Браттейн и Джон Бардин
ники для нужд обороны. Именно из цехов и лабораторий продемонстрировали свое изобретение, обеспечившее вы-
СКБ-245 вышли первые советские серийные ламповые числительной технике решающий толчок вперед: точечный
машины «Стрела», «Полет» и «Оператор», а также пер- транзисторный усилитель (в следующем году вся троица
вые электронные – М-20, «Урал-1», «Погода», «Кристалл», приобрела патент на его изобретение). И англичанин Рог
М-205 и М-206. И в 1950 году в Энергетическом институте Мурз создал первый радиомикрофон.
АН СССР под руководством Исаака Брука начались работы 1948 год. Том Килберн и Фредди Уильямс в Манчесте-
по созданию первой отечественной ЭВМ – М-1. ре запустили первую программу на компьютере «Малыш»

78 май 2016 системный администратор


хроники ИТ Карьера/Образование

(Baby). Их коллега Морис Уилкс построил в Кембридже «обеспечивает» выборы (для этого машине хватает мнения
EDSAC (Electronic Delay Storage Automatic Calculator) вычис- лишь одного среднестатистического избирателя!), но и...
лительную машину, почти вшестеро более производитель- останавливает рост энтропии во Вселенной! Наконец, в рас-
ную, чем все предшественницы. сказе «Чувство силы» (1958) обленившееся человечество
1949 год. Джей Форрестер впервые использовал маг- вынуждено заново вспомнить арифметику, чтобы установить
нитные железные сердечники в качестве основной памяти. контакт со своими электронными благодетелями...
(Патент был получен только в середине 1950-х, сама же маг- Суперкомпьютер обнаруживает истинное имя Всевышне-
нитная пленка создана в США в 1942-м.) А создатель теории го в парадоксальной новелле Кларка «Девять миллиардов
информации Клод Шеннон из MIT построил первую в мире имен Бога» (1953). А на вопрос ученых: «Есть ли Бог?» – дру-
машину для игры в шахматы! гая машина отвечает: «Теперь – есть» (рассказ Фредерика
И, наконец, в последний год декады компьютер SEAC Брауна «Ответ», 1954). И уж совсем грустную историю –
(Standards Eastern Automatic Computer) купило для сво- будущее, в котором неразумное человечество уничтожило
их нужд Американское национальное бюро стандартов. себя, а созданная им «умная» техника продолжает функ-
В том же году в США начались разработки одного из пер- ционировать по инерции, – рисуют уже упомянутые Миллер
вых «военных» компьютеров – SAGE (Semi Automatic Ground и Брэдбери в рассказах «Тупой официант» (1952) и «Будет
Environment), предназначенного для сбора и обработки ин- ласковый дождь» (1950) соответственно.
формации с радарных станций. Впрочем, не все были настроены столь мрачно. Напри-
За первое десятилетие Компьютерной эры возникли мно- мер, в рассказе Фрица Лейбера «Бедный супермен» (1951)
гие компании, чьи имена сегодня у всех на слуху, в частнос- за суперкомпьютер, к которому почтительно обращаются
ти Wang Laboratories (1951; в том же году созданная ранее экономисты, ученые, правительство и военные, все ответы
Coronado Corporation стала называться Texas Instruments пишет спрятанный в недрах машины мужичок, употевший
Incorporated) и Commodore (1954). В 1955-м слияние от натуги и охлаждающий себя пивком!
Remington-Rand и Sperry Gyroscope привело к образованию Обозначились и первые серьезные подходы к теме, которая
Sperry-Rand, а еще через два года от нее отпочковалась десятилетиями позже станет одной из магистральных: чудеса
Control Data Corporation. и опасности виртуальной реальности. Это и «говорящие сте-
Почти ежегодно обновлялся парк действующих машин. ны» (нечто вроде «чата» и социальных сетей!) в романе Брэд-
Начало положил запущенный в 1951 году первый коммер- бери «451 по Фаренгейту», и своего рода «виртуальная пор-
ческий компьютер – английский MARK 1 (чтобы не спутали нография» в рассказе Кларка «В ожидании патента» (1954).
с американским «гарвардским» тезкой, британскую машину Потрясающий философский образ «почти живой» электрон-
как только ни называли: Manchester Mark II, MUDC, MUEDC, ной спутницы космических странников (она моделирует «но-
даже MADAM!). В том же году Мокли и Эккерт, продав свою вые реальности», опекает, утешает, ведет философские ди-
компанию фирме Remington (ныне Unisys), завершили по- алоги) в фантастической поэме «Аниара» (1956) шведского
стройку первого американского коммерческого компью- классика, нобелевского лауреата Харри Мартинсона. Коро-
тера – UNIVAC. «Новичка» сразу же проверили: во время че, литературная фантастика приняла вызов ученых.
президентской кампании 1952 года, спустя всего час после
закрытия избирательных участков UNIVAC точно предсказал, Режим реального времени
с каким процентом Эйзенхауэр сокрушит своего конкурента! В первой половине 1950-х увидела свет компьютерная пе-
В том же 1951-м Джей Форрестер и Кен Олсен в MIT построи- риферия. В 1952 году появились накопитель на магнитной
ли первый компьютер, работавший в режиме реального вре- ленте и первый высокоскоростной принтер, разработан-
мени, – Whirlwind («Вихрь»). Годом позже появился EDVAC, ный в Remington-Rand для UNIVAC. Кроме того, в 1954 году
еще через год – первый (если не считать модель SSEC) ком- под руководством Джина Амдала в IBM создали первую
пьютер фирмы IBM с системой хранения команд: модель 701. операционную систему для первой машины с плавающей
Параллельно стремительно развертывалась «кремние- арифметикой. И спустя два года – первый жесткий диск
вая революция». В 1954 году Texas Instruments объявила RAMAC 305 с памятью 5 Mб.
о начале коммерческого производства кремниевых тран- Семимильными шагами шло и развитие «софта». Уже
зисторов, годом позже один из «отцов» полупроводников, в 1952 году упоминавшаяся ранее Грейс Марри Хоппер соз-
Уильям Шокли, основал компанию Shockley Semiconductor. дала язык Assembly и в том же году разработала современ-
А путь от первых экспериментальных моделей ЭВМ на тран- ную концепцию компилятора. И двумя годами позже Джон
зисторах до полностью транзисторного суперкомпьютера Бэкус из IBM начал работу над языком FORTRAN, последняя
CDC 1604, построенного Сеймуром Крэем для Control Data модификация которого увидела свет в 1995-м!
Corporation, занял всего два года, с 1956-го по 1958-й! И еще в 1955 году родились два мальчика, имена которых
говорят сами за себя: Стив Джобс и Билл Гейтс.
Переход в виртуальный режим На дворе стоял «полдень» ХХ века. В 1950 году населе-
Любопытно, что уже в начале 1950-х фантасты задумались ние Земли составило чуть более 2,5 миллиарда человек.
и над такими «фантазиями», как суперкомпьютеры. В три- А совокупный «компьютерный парк» насчитывал лишь не-
логии «Основание» (1951-1954) Азимова ученые могут про- сколько десятков машин – включая экспериментальные мо-
считывать даже ход истории – разумеется, с помощью ЭВМ. дели... Но лиха беда начало!  EOF 
А в серии азимовских же рассказов о гигантском компьютере
Мультиваке – «Выборы» (1955), «Последний вопрос» (1956), * Продолжение. Начало – см. «СА», №1-2, №3, №4, 2016.
«Все грехи мира» (1958) – электронный «герой» не только Продолжение следует

системный администратор май 2016 79


В номере

НАУКА
И ТЕХНОЛОГИИ

81 Исследование воздействия
некоторых параметров теста
LINPACK для гибридного кластера
на производительность вычислений
в зависимости от размерности задачи

86 Взаимосвязь отраслевой специфики


бизнеса и уровня решаемых для него
ИТ-задач

90 Создание ботов для Telegram:


с использованием языка
программирования Python и облачной
операционной системы Corezoid

80 октябрь 2015 системный администратор


Наука и технологии

Куликов В.А., аспирант кафедры прикладной математики, информатики и вычислительной техники факультета электроники
и системотехники Московского государственного университета леса, Vladimir.Kulikov@rsce.ru
Чернышов А.В., к.т.н., доцент кафедры прикладной математики, информатики и вычислительной техники факультета
электроники и системотехники Московского государственного университета леса, sch@mgul.ac.ru

Исследование воздействия некоторых


параметров теста LINPACK
для гибридного кластера на производительность
вычислений в зависимости от размерности задачи
При решении систем линейных алгебраических уравнений на современных гибридных
(CPU + GPU) кластерах перед пользователем возникает задача выбора значений ряда
параметров, оказывающих существенное, но неочевидное влияние на производительность
вычислений и, как следствие, на временные, а следовательно, и технические затраты
на решение задачи. Существующие рекомендации по выбору значений этих параметров
носят оценочный характер и не гарантируют достижения максимальной производительности
вычислений при заданной размерности системы линейных алгебраических уравнений.
Целью работы является экспериментальное исследование влияния значений
параметров Nb и CUDA_DGEMM_SPLIT теста LINPACK, представляющего собой
решение модельной системы линейных алгебраических уравнений методом LU‑разло‑
жения, на производительность вычислений на гибридных узлах кластера «Ломоносов»
(МГУ, Москва). Получены рекомендательные данные значений параметров Nb и CUDA_
DGEMM_SPLIT в зависимости от размерности системы линейных алгебраических
уравнений для достижения максимальной производительности при решении системы
линейных алгебраических уравнений методом LU-разложения на гибридных
вычислительных узлах кластера «Ломоносов». Построенная в работе рекомендательная
таблица для кластера «Ломоносов» позволяет однозначно выбирать значения параметров
Nb и CUDA_DGEMM_SPLIT в зависимости от размерности системы линейных алгебраических
уравнений для достижения максимальной производительности вычислений

Введение Практический опыт показывает, что нестационарная задача


Параллельные вычисления – современная, бурно развивающаяся движения вязкой жидкости в рамках двухпараметрической модели
область вычислительной науки. Актуальность данной области турбулентности на промежутке времени в 10 секунд с исполь-
складывается из множества факторов, и в первую очередь из по- зованием сеточной модели в 60 млн ячеек на 8 расчетных узлах
требности в больших вычислительных ресурсах для решения (2хCPU – Intel Sandy Bridge-EP E5-2665 – 16 расчетных ядер)
расчетных задач в различных областях науки и техники. решается с использованием стандартного решателя OpenFOAM
Например, при создании перспективных образцов авиацион- примерно 6 месяцев.
ной и космической техники возникает необходимость в модели- Одно из направлений в повышении эффективности параллель-
ровании сложных процессов внешнего обтекания твердых тел ных вычислений – использование параллельных вычислительных
различной формы и течения в сложных каналах, вычисления поля кластеров на основе графических процессоров (GPU), что на по-
давлений и температур потока, расчета коэффициентов сопротив- рядок повышает вычислительные возможности и минимизирует
ления и потерь полного давления в широком диапазоне скоро- архитектуру и энергопотребление.
стей – «дозвук», «трансзвук», «сверхзвук» и «гиперзвук». Для до- Например, компания «Т-Платформы» (производитель класте-
стижения наилучших возможностей по параллельному режиму ра «Ломоносов») показала, что более 80% расчетного времени
счета и по количеству внедренных в код математических моделей при решении указанной выше задачи занимает решение СЛАУ,
физических явлений при обработке наиболее ресурсоемких задач и в случае применения гибридного вычислителя (CPU + GPU)
требуется использовать программное обеспечение OpenFOAM. удается достигнуть сокращения сроков вычисления до 3 недель.

системный администратор май 2016 81


Наука и технологии

Одной из важных проблем при решении СЛАУ на гибридном Публикация [3] раскрывает имплементацию алгоритма
вычислительном кластере является подбор параметров рас- LINPACK для систем высокопроизводительных вычислений.
параллеливания алгоритма вычисления, в частности, распреде- Основным автором исходного кода LINPACK для GPU (CUDA-
ление количества вычислительной работы между CPU и GPU. enabled version of HPL 2.0 optimized for Tesla 20-series GPU Fermi
В качестве модельной задачи, позволяющей исследовать эту version 1.5) является доктор Массимилиано Фатика (doctor M.
проблему, хорошо подходит стандартный тест LINPACK, широко Fatica, NVIDIA).
применяемый для оценки производительности вычислительных Основное отличие LINPACK для GPU заключается в том,
кластеров. что в исходном коде HPL 2.0 ядра и CPU, и GPU с небольшими
В статье [1] были описаны исследования производительно- модификациями или без модификаций используются совокупно
сти теста LINPACK в версии для гибридных узлов (CPU + GPU) (эффективность совокупности CPU и GPU превышает сумму
на кластере «Ломоносов» МГУ им. М.В. Ломоносова для разных их индивидуальных эффективностей):
размерностей задачи N (от 20 000 до 60 000) и стандартных (реко- • Библиотека узла прерывает вызовы к DGEMM и DTRSM
мендованных) остальных значений параметров теста. и выполняет их одновременно на ядрах CPU и GPU, где:
В настоящей статье приведены результаты дальнейших иссле- »» DGEMM – Double-precision General Matrix Multiply –
дований, касающиеся эффективности вычислений теста LINPACK умножение матриц с двойной точностью;
при изменении параметров Nb (величина размерности логиче- »» DTRSM – Double-precision TRiangular Solve Multiple
ских блоков Nb × Nb, на которые разбивается исходная матрица) (solution of the triangular systems of linear equations) –
и CUDA_DGEMM_SPLIT (процент работы, загружаемой в GPU решение треугольных систем линейных уравнений
для умножения матриц с двойной точностью), тесно связанных с двойной точностью.
с аппаратной структурой вычислительных узлов кластера. При- • Использование pinned memory для быстрых передач
чем, как и в статье [1], под эффективностью понимается достиже- данных по компьютерной шине PCI Express со скоростью
ние максимальной производительности вычислений, выражаемое до 5.7 GB/s на слотах x16 gen2.
в общепринятых единицах GFlops.
Полученные экспериментальные зависимости могут быть Схема вычислений в LINPACK для GPU показана на рис. 1.
полезны для выбора значений этих параметров при решении Из него видно, что после факторизации текущего блока (красный
реальных систем линейных уравнений конкретных размерно- цвет) обновляются части зеленого и желтого цвета. Чем больше
стей N с максимальной производительностью. значение размерности N, тем больше времени расходуется на об-
В статье сознательно не рассматриваются вопросы обусловлен- новление (DGEMM).
ности самой математической системы, точности решения, выбора • DGEMM – область умножения матриц с двойной точно-
разрядности вычислений, поскольку они должны быть матема- стью;
тически обоснованы и решены постановщиком задачи до выхода • DTRSM – область решения треугольных систем линейных
на вычислитель. уравнений с двойной точностью.

Описание теста В версии теста LINPACK для GPU мы опираемся на два пре-
Тест LINPACK представляет собой задачу решения системы образования с матрицами – DGEMM и DTRSM. Для их ускорения
линейных алгебраических уравнений (СЛАУ) методом LU-разло- мы используем все вычислительные возможности CPU и GPU.
жения и считается на сегодня классическим способом определе- Эффективное распределение расчетной нагрузки и минимизация
ния производительности кластера, поскольку к решению СЛАУ времени обмена данными позволят получить наибольшую произ-
сводятся очень многие реальные расчетные задачи. водительность.
Тест и его основные параметры, а также характеристики Один из разработанных методов оптимизации для получения
кластерного вычислителя «Ломоносов» подробно рассмотрены наибольшей производительности – оптимальное разделение рабо-
в статье [1]. чей нагрузки, которое состоит в следующем.
В работе [2] полностью описываются теоретические основы Если мы имеем матрицы с размерностями A (M , K), B (K , N)
теста LINPACK, а также его возможные варианты для оценки про- и C (M , N) (см. рис. 2), то при выполнении DGEMM-преобразова-
изводительности различных компьютерных систем. ния выполняется 2 × M × K × N операций.
Временно́е равенство вычислений для CPU и GPU:
Рисунок 1. Факторизация текущего блока Tcpu (M , K , N2) = Tgpu (M , K , N1)
N = N1 + N2

где:
• Tcpu – время вычислений на CPU;
• Tgpu – время вычислений на GPU.

Если для DGEMM-преобразования GCPU – значение произво-


дительности CPU, а GGPU – значение производительности одного
из GPU в размерности GFlops, то оптимальным разделением будет:
GGPU
η=
GCPU + GGPU

82 май 2016 системный администратор


Наука и технологии

Схема метода показана на рис. 2, где: • ALPHA – переменная двойной точности, на входе ее значение
• зеленым отмечена область GPU, а розовым цветом – CPU; определяет скалярную величину α, не изменяется на выходе;
• A, B, C – матрицы; • A – массив двойной точности с размерностью (LDA, ka), где
• M – величина, определяющая число строк матрицы op(A) ka – это k, когда TRANSA = 'N'||'n' или, во всех других случа-
и матрицы C; ях, m. Перед вхождением с TRANSA = 'N'||'n', ведущая часть
• N1 – величина, определяющая число столбцов матрицы массива A размером m на k должна содержать матрицу A,
op(B1) и число столбцов матрицы C1 в области GPU; иначе ведущая часть массива A размером k на m должна со-
• N2 – величина, определяющая число столбцов матрицы держать матрицу A. Не изменяется на выходе;
op(B2) и число столбцов матрицы C2 в области CPU; • LDA – переменная целого типа, на входе определяет первич-
• K – величина, определяющая число столбцов матрицы op(A) ную размерность матрицы A, когда TRANSA = 'N'||'n', то LDA
и число строк матрицы op(B). должно быть не меньше max(1,m), иначе LDA должно быть
не меньше max(1,k). Не изменяется на выходе;
Остановимся на преобразовании DGEMM [4], которое пред- • B – массив двойной точности с размерностью (LDB, kb),
ставляет собой следующую процедуру мультипликации матриц: где kb – это n, когда TRANSB = 'N'||'n' или, во всех других
случаях, k. Перед вхождением с TRANSB = 'N'||'n', ведущая
C := α×op(A)×op(B) + β×C часть массива B размером k на n должна содержать матри-
цу B, иначе ведущая часть массива B размером n на k должна
где op(X) принимает одно из следующих значений: содержать матрицу B. Не изменяется на выходе;
• LDB – переменная целого типа, определяет первичную раз-
op(X,) = X или op(X) = X T мерность матрицы B, когда TRANSB = 'N'||'n', то LDB должно
быть не меньше max(1,k), иначе LDB должно быть не мень-
Здесь: ше max(1,n). Не изменяется на выходе;
• α, β – скалярные величины; • BETA – переменная двойной точности, на входе ее значение
• A, B, C – матрицы; определяет скалярную величину β, когда значение BETA ноль,
• op(A) – матрица с числом строк m и столбцов k; то для C не определяются входные данные. Не изменяется
• op(B) – матрица с числом строк k и столбцов n; на выходе;
• C – матрица с числом строк m и стобцов n; • C – массив двойной точности с размерностью (LDC, n).
• X T – транспонированная матрица X. До входа ведущая часть массива С размером m на n должна
содержать матрицу C, кроме случая, когда значение β ноль
Преобразование DGEMM оформлено в виде функции: и для этого случая для C не определяются входные данные.
На выходе массив C перезаписывается m на n матрицей
DGEMM = (TRANSA, TRANSA, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
(α×op(A)×op(B) + β×C);
Здесь: • LDC – переменная целого типа, на входе определяет первич-
• TRANSA – переменная символьного типа, на входе ее зна- ную размерность матрицы C; LDC – должна быть не меньше
чение определяет формат матрицы op(A), который будет max(1,m). Не изменяется на выходе.
использоваться в мультипликации матриц:
В отличие от классического теста LINPACK в его «кластер-
TRANSA = 'N'||'n' , op(A) = A ном» варианте требуется подбор параметра Nb и ряда других
TRANSA = 'T'||'t' , op(A) = AT параметров в целях достижения максимальной производитель-
TRANSA = 'C'||'c' , op(A) = AT ности [5]. В частности, представляет интерес подбор значения
параметра CUDA_DGEMM_SPLIT (процент работы, загружаемой
Не изменяется на выходе; в GPU для умножения матриц с двойной точностью).
• TRANSB – переменная символьного типа, на входе ее зна-
чение определяет формат матрицы op(B), который будет
Рисунок 2. Оптимальное разделение рабочей нагрузки
использоваться в мультипликации матриц:

TRANSB = 'N'||'n' , op(B) = B


TRANSB = 'T'||'t' , op(B) = BT
TRANSB = 'C'||'c' , op(B) = BT

Не изменяется на выходе;
• M – переменная целого типа, на входе ее значение опреде-
ляет число строк матрицы op(A) и число строк матрицы C,
не изменяется на выходе;
• N – переменная целого типа, на входе ее значение определя-
ет число столбцов матрицы op(B) и число столбцов матрицы
C, не изменяется на выходе;
• K – переменная целого типа, на входе ее значение опреде-
ляет число столбцов матрицы op(A) и число строк матрицы
op(B), не изменяется на выходе;

системный администратор май 2016 83


Наука и технологии

Описываемый эксперимент сводился к выполнению теста • Вычисленное значение N = 69511,425. Для «укладки» раз-
LINPACK на выделенных узлах кластера «Ломоносов» для сетки мерности задачи N c использованием Nb = 1024 в начальные
исходных значений, задаваемой параметрами N, Nb, и при реко- условия запуска LINPACK для GPU, с учетом аппаратной кон-
мендованных значениях остальных параметров теста. фигурации узлов, чтобы не происходило переполнение памя-
В частности, значение параметра Nb зависит от характери- ти при работе программы, принимается значение N = 60000.
стик параллельной вычислительной системы в целом и должно
подбираться индивидуально для каждой системы. Для полу- Коэффициент CUDA_DGEMM_SPLIT может определяться
чения результатов, близких к пиковым, М. Фатика [6] рекомен- по различным методикам для запуска теста LINPACK на гибрид-
дует использовать значение Nb = 768 для гибридных кластеров ных узлах кластера CPU + GPU. С ним также тесно связан пара-
CPU + GPU. Также он указывает, что иногда большую производи- метр CUDA_DTRSM_SPLIT (процент работы, загружаемой в GPU
тельность можно достигнуть при Nb = 1024: «…768 typically gives для решения треугольных систем линейных уравнений с двойной
best results, larger values may give better results (1024) if several точностью. Получается вычитанием из CUDA_DGEMM_SPLIT
GPUs share the same PCIe connection…» [7]. значения 0,1):
Максимально допустимое значение параметра N – размерность 1) По эмпирическим значениям, предложенным М. Фатика [6]:
задачи, рассчитывается по формуле:
CUDA_DGEMM_SPLIT = 0,836
CUDA_DTRSM_SPLIT = 0,736

2) По методике М. Фатика [7]:


Общая память узлов = Число узлов × Память узла Гб × 1024 ×
× 1024 × 1024 CUDA_DGEMM_SPLIT =
В нашем случае: 350
=
• Память узла – равняется 24 Гб; 350 + MKL _ NUM _ THREADS × 4 × CPU _ FREQ
• Коэффициент размера – сколько памяти от Общей памяти
узлов необходимо для расчетов теста, чтобы операционная где:
система могла выполнять необходимые операции. Для кон- • MKL_NUM_THREADS – число используемых ядер CPU
фигурации используемой экспериментальной установки этот на одно GPU;
коэффициент 0,75; • CPU_FREQ – частота CPU в ГГц.
• Объём памяти для каждого элемента с двойной точно‑
стью – равняется 8 байт; В нашем случае:
350
CUDA _ DGEMM _ SPLIT = = 0,81214
350 + 8 × 4 × 2,53
Рисунок 3. Зависимость производительности вычислений GFlops
CUDA _ DTRSM _ SPLIT = CUDA _ DGEMM _ SPLIT − 0,1 = 0, 71214
от размерности задачи N

3) По методике расчета Ш. Тарлетон [8]:


GPU _ PEAK _ FLOPS × 0, 75
CUDA _ DGEMM _ SPLIT =
GPU _ PEAK _ FLOPS × 0, 75 + ( MKL _ NUM _ THREADS ×
×CPUFLOPS _ PER _ CLOCK × CPU _ FREQ) × 0,9
где:
• GPU_PEAK_FLOPS – теоретическое пиковое значение про-
изводительности GFlops для GPU;
• CPUFLOPS_PER_CLOCK – число операций за 1 такт про-
цессора, позволяющее теоретически достичь пиковой про-
изводительности. Для данного типа процессора Intel Xeon
L5630 значение CPUFLOPS_PER_CLOCK = 4;
• MKL_NUM_THREADS – число используемых ядер CPU
на одно GPU;
• CPU_FREQ – частота CPU в ГГц.

Тогда:
515 × 0, 75
CUDA _ DGEMM _ SPLIT = = 0,8413
515 × 0, 75 + (8 × 4 × 2,53) × 0,9
CUDA _ DTRSM _ SPLIT = CUDA _ DGEMM _ SPLIT − 0,1 =
= 0,8413 − 0,1 = 0, 7413

Результаты теста и выводы


Построим графики зависимости производительности кластера
GFlops от размерности задачи N для вычисленных CUDA_DGEMM_
SPLIT и CUDA_DRSM_SPLIT при Nb = 768 и Nb = 1024 в соответ-
ствии с полученными результатами (см. рис. 3).

84 май 2016 системный администратор


Наука и технологии

По графикам на рис.3 можно видеть, что: [5] Petitet, R. C. Whaley, J. Dongarra, A. Cleary. HPL 2.0.Innovate Computer
• наблюдается картина увеличения производительности Laboratory (University of Tennessee, Computer Science Department), 2008. –
для CUDA_DGEMM_SPLIT = 0,8413 при малом значении URL: http://www.netlib.org/benchmark/hpl/tuning.html (дата обраще-
N с Nb = 1024 в сравнении с другими результатами, получае- ния 20.05.2015).
мыми с CUDA_DGEMM_SPLIT, равными 0,81214 и 0,836; [6] E. Phillips, M. Fatica. CUDA-enabled version of HPL 2.0 optimized
• для значения CUDA_DGEMM_SPLIT = 0,8413 скорость for Tesla 20 series GPU Fermi version 1.5. Nvidia Corp., 2012. – URL:
роста производительности с увеличением N по сравнению https://devtalk.nvidia.com/default/topic/500340/cuda-accelerated-
с другими значениями CUDA_DGEMM_SPLIT является LINPACK-code-available (дата обращения 23.05.2015).
максимальной. [7] M. Fatica. Accelerating LINPACK with CUDA on heterogenous clusters.
// ACM International Conference Proceeding Series. Vol. 383.
По верхней огибающей группы построенных графиков была [8] S. Tarleton. Power Efficient LINPACK on GPUs, 2012. – URL: http://
построена рекомендательная таблица (см. таблицу 1) для выбора www.shanetarleton.com/power-efficient-LINPACK-on-gpus (дата об-
параметров Nb и CUDA_DGEMM_SPLIT в зависимости от раз- ращения 17.06.2015).
мера задачи N для получения максимальной производительности
GFlops при решении СЛАУ методом LU-разложения на гибрид- Ключевые слова: графический процессор, кластер, высокопроизводитель-
ных узлах кластера «Ломоносов»: ные вычисления, размерность задачи, гибридный вычислительный узел,
Проведение экспериментов с различными рекомендо- LINPACK, решение СЛАУ, GFlops.
ванными разработчиком значениями размера блока Nb рав-
ным 768 и 1024 и вычисленными по разным методикам значе- The research values of certain parameters of the LINPACK benchmark
ниями CUDA_DGEMM_SPLIT, равными 0,81214, 0,8413, 0,836, for hybrid cluster effects on the compute performance as a function
показало, что максимальной производительности GFlops of the problem sizes
на гибридных узлах кластера «Ломоносов» удается достичь
при выборе значения CUDA_DGEMM_SPLIT = 0,8413, полу- Kulikov V. A., Post-Graduate Student, Department of Applied Mathematics,
ченного с использованием методики Ш. Тарлетон [8]. При этом Computer Science and Computer Engineering Faculty of Electronics
значения параметра Nb изменяются в зависимости от размерности and Systems Engineering of the Moscow State Forest University (MSFU),
поставленной задачи.  EOF  Vladimir.Kulikov@rsce.ru
Chernyshov A. V., PhD, Tech., Associate Professor, Department of Applied
[1] Куликов В. А. Исследование возможностей GPU в высокопро- Mathematics, Computer Science and Computer Engineering Faculty
of Electronics and Systems Engineering of the Moscow State Forest
изводительных вычислениях. // «В мире научных открытий»,
University (MSFU), sch@mgul.ac.ru
№12.2(60), 2014 г. – C. 639-650.
[2] J. Dongarra, P. Luszczek, A. Petiet. The LINPACK Benchmark: past,
Summary: When solving systems of linear algebraic equations
present and future. // Concurrency and Computation: Practice and
with modern, hybrid (CPU GPU) clusters to the user, there
Experience. 2003. Vol. 15(9). P. 803-820. doi:10.1002/cpe.728.
arises the problem of selecting values of a number of parameters
[3] Petitet, R. C. Whaley, J. Dongarra, A. Cleary. HPL Algorithm. Innovate
that have a significant, but unobvious subjection on computing
Computer Laboratory (University of Tennessee, Computer Science
performance and, as a consequence, on time, and, therefore,
Department), 2008. – URL: http://www.netlib.org/benchmark/hpl/
and technical resources for the solution of the problem. The existing
algorithm.html (дата обращения 20.05.2015).
recommendations on the selection of values for these parameters
[4] J. Dongarra, I. Duff, J. D. Croz, S. Hammarling. Subroutine
are evaluatives and do not guarantee the best performance
DGEMM, 1989. – URL: http://www.netlib.org/lapack/explore-3.2-html/
computing for a given dimension of the system of linear algebraic
dgemm.f.html (дата обращения 20.05.2015).
equations. The purpose of this work is experimental research
of the subjection of the values of the parameters Nb and CUDA_
Таблица 1. Рекомендательная таблица DGEMM_SPLIT LINPACK benchmark, representing a solution
of model system of linear algebraic equations by the method
N CUDA_DGEMM_SPLIT Nb GFlops of LU decomposition, for the performance computing of hybrid
9600 0,8413 1024 128,7
nodes of the cluster «Lomonosov» (Moscow State University,
Moscow, Russia Federation). Recommendatory data of the values
16128 0,8413 768 322,5
of the parameters Nb and CUDA_DGEMM_SPLIT LINPACK
16129 0,8413 768 323,7
depending on the dimension of system of linear algebraic equations
20737 0,8413 768 420,2 for achievement of the maximum performance for solving system
20960 0,8413 768 416,4 of linear algebraic equations are obtained by LU decomposition
23040 0,8413 768 454,3 method on hybrid computing nodes of a cluster «Lomonosov».
25000 0,8413 768 480,6 The recommendatory data table constructed in this research
30000 0,8413 1024 555,4
work for a cluster «Lomonosov» allows to select unambiguously
values of the Nb and CUDA_DGEMM_SPLIT parameters
39000 0,8413 1024 686,5
depending on dimension of system of linear algebraic equations
39007 0,8413 1024 685,8
for achievement of the maximum computing performance.
40000 0,8413 1024 698,5
50000 0,8413 1024 799 Keywords: GPU, cluster, high-performance computing, problem size, hybrid
60000 0,8413 1024 873,3 computing node, solving linear systems of equations, GFlops.

системный администратор май 2016 85


Наука и технологии

Славин Б.Б., к.ф.-м.н., Финансовый университет при Правительстве РФ, профессор кафедры «Бизнес-информатика»,
bbslavin@gmail.com
Максимова Е.В., Союз ИТ-директоров России, директор, Maksimova@rucio.ru

Взаимосвязь отраслевой специфики


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

Введение имосвязи ИТ с отраслевыми потребностями бизнеса. Известно,


Индустрия информационных технологий (ИТ) порождает множе- что роль ИТ на промышленном предприятии всегда ниже роли ИТ
ство мифов и легенд. Они возникают и умирают с той же часто- в организациях розничной торговли и тем более в организациях
той, как и интерес к игрушкам у ребенка. Но есть один миф, кото- финансовой отрасли (например, в банке) или в отрасли телеком-
рый «живет» уже довольно долго и будет существовать, видимо, муникационных услуг. Понимание такой зависимости роли ИТ
столько же, сколько и сами ИТ. Это миф об особой стратегической от отрасли позволит более четко ставить задачи для ИТ-служб
роли информационных технологий в бизнесе, да и в деятельности предприятий.
любой организации [1]. Долгожительство этого мифа понятно,
ведь осознание важности ИТ – это залог успеха и, соответствен- ИТ и технологические эпохи
но, условие получения сверхприбылей высокотехнологичных Статья американского публициста Николаса Карра в Harvard
компаний на корпоративном рынке. Даже если иссякает интерес Business Review в мае 2003 года (см. [2]) с хлестким названием
к тем или иным инновациям, особая роль ИТ «должна» как мини- «IT Doesn't Matter» («ИТ не имеет значения»), в котором обыгры-
мум не снижаться. вается совпадение аббревиатуры ИТ (IT) с местоимением «это»
Однако в росте роли ИТ в деятельности предприятий нет («it»), наделала много шуму. В этой статье и последующих за ней
ничего мистического. Вся экономика претерпевает в последние публикациях Карр говорит о том, что информационные техно-
десятилетия существенную метаморфозу. Доли добавленной логии, становясь все более доступными и стандартизованными,
стоимости отраслей существенно перераспределяются от инду- теряют функцию конкурентного преимущества и, следовательно,
стрий, связанных с производством товара и услуг, к индустриям, свою особую роль в стратегии компании (аналогично, по его мне-
производящим информацию и знание. И поэтому целесообразно нию, снижается и роль ИТ-директора). Нетрудно догадаться,
говорить не столько о возрастании роли ИТ вообще, сколько о вза- что автор этих идей подвергся всеобщей обструкции как со сторо-
ны ИТ-директоров, так и со стороны поставщиков ИТ-решений.
Вместе с тем Николас Карр прав – ИТ как инструмент авто-
Рисунок 1. Соотношение между технологическими эпохами, сорсингом
и системами управления ИТ матизации управления все меньше и меньше дают конкурентные
преимущества бизнесу (по крайней мере для компаний, не специ-
ализирующихся на предоставлении услуг в сфере информацион-
ных технологий). Уместно провести параллель между задачами,
решаемыми ИТ-службой, и деятельностью финансового под-
разделения компании. Технологии финансовой службы (учет
и планирование денежных потоков, привлечение инвестиций
через кредиты, векселя, ценные бумаги и др.) не являются сами
по себе конкурентным преимуществом, они стандартны и доступ-
ны всем компаниям, но управление этими технологиями – особое
искусство, которое требует соответствующего уровня руково-
дителя. Аналогично и в случае ИТ-службы – ее основная роль
заключается в умении использовать информационные технологии,

86 май 2016 системный администратор


Наука и технологии

имплементировать их в существующий бизнес так, чтобы достичь и системой, что позволило классифицировать все трудовые
наибольшей эффективности сейчас и в перспективе, с учетом функции менеджера по ИТ. Такая универсальность взаимосвязи
стратегического развития предприятия. уровней управления ИТ, технологических эпох, сорсинга и систем
Инструменты, позволяющие оценить степень взаимосвязи управления может быть подтверждена исследованиями реальной
стратегического управления ИТ с бизнесом, хорошо описаны практики управления ИТ.
в своде стандартов и рекомендаций CobiT (Control Objectives for
Information and Related Technologies). Однако существует взаимос- Исследование взаимосвязи
вязь на уровне технологии организации труда, которая позволя- Для подтверждения взаимосвязи уровней управления с технологи-
ет понять, как связаны приоритеты ИТ и отраслевая специфика ческими эпохами был проведен опрос ИТ-директоров, в котором
бизнеса. В работе [3] было показано, что все отрасли экономики они выбирали наиболее типичные для своей деятельности методы
можно разделить на четыре группы, соответствующие технологи- решения задач, инструменты планирования, фокус отношений
ческим эпохам: внутри компании, наиболее приоритетные цели. Предлагаемые
• индустриальная эпоха, куда входят промышленность, сель- ответы ранжировались в соответствии с уровнями трудовых
ское хозяйство и добывающие отрасли; обобщенных функций из профессионального стандарта менед-
• постиндустриальная эпоха, куда входят энергетика, торговля, жера по ИТ. С другой стороны, оценивался уровень требований
транспорт; к задачам со стороны бизнеса, связанный как с численностью
• информационная эпоха, куда входят финансы, телеком, организации и уровнем в иерархии управления менеджера по ИТ,
СМИ; так и с отраслевой спецификой в соответствии с четырьмя техно-
• и, наконец, четвертая группа отраслей, соответствующая логическими эпохами, описанными выше.
эпохе знаний, куда входят наука, образование, профессио- В таблице 1 показано, как задачи, решаемые менеджером
нальные сервисы, медицина и социальное обеспечение. по ИТ, связаны с уровнями обобщенных трудовых функций
управления. ИТ-директору предлагалось дать ответы в порядке
Эти же четыре группы отраслей можно сопоставить как с раз- убывания от 4 до 1 (без повторов и пропусков) в четырех во-
личными типами управления (управление ресурсами, услугами, просах:
информацией и знаниями соответственно), так и с соответству- • «в Вашей компании в области ИТ на что Вы тратите боль-
ющими видами сорсинга (инсорсинг, аутсорсинг, краудсорсинг шую часть времени» – (a);
и сорсинг интеллектуальной деятельности). По типам управления • «в Вашей компании в области ИТ Вы планируете работы
можно соотнести и корпоративные информационные технологии, при помощи каких инструментов» – (b);
имеющие различный приоритет, начиная с ERP-систем и MES1 • «в области ИТ Вы обсуждаете планы развития в первую
(управление ресурсами) и заканчивая системами управления зна- очередь с кем» – (d);
ниями. На рис.1 изображены соответствующие взаимосвязи. • «в области ИТ в Вашей компании за что Вы отвечаете в пер-
Предложенная классификация технологических эпох была ис- вую очередь» – (e).
пользована в работе [4] для обоснования классификации уровней
обобщенных трудовых функций менеджеров по ИТ, которая легла Вопросы специально задавались не в том порядке, как они со-
в основу соответствующего профессионального стандарта. В част- ответствуют уровням управления ИТ-менеджера (см. таблицу 1 –
ности, четыре типа управления (ресурсами, сервисами, информа- номера при буквах, обозначающих вопросы), чтобы получить
цией и инновациями) были рассмотрены в разрезе использования наиболее достоверный ответ.
инструментов планирования, управления временем, людьми Показатель уровня решаемых ИТ-директором задач QCIO оцени-
вался по формуле:
1  Здесь и ниже использованы аббревиатуры: MES – Manufacturing
Execution System, ERP – Enterprise Resource Planning, MRP – Requirements
Planning, CRM – Customer Relationship Management, SCM – Supply Chain
Management, B2B – Business to Business, BI – Business Intelligence, CPM – где S = (a1∙1 + a2∙3 + a3∙4 + a4∙2 + b1∙1 + b2∙4 + b3∙2 + b4∙3 + c1∙2 +
Corporate Performance Management, PLM – Product Lifecycle Management, c2∙3 + c3∙4 + c4∙1 + d1∙2 + d2∙3 + d3∙4 + d4∙1) – сумма баллов за от-
KM – Knoweledge Management. веты.

Таблица 1. Задачи, решаемые менеджером по ИТ, и уровни управления

1-й уровень: управление 2-й уровень: управление 3-й уровень: управление 4-й уровень: управление
ресурсами услугами информацией знаниями и инновациями
Основная деятельность планирование задач (a1) планирование сервисов (a4) реализация ИТ-стратегии (a2) развитие бизнес-стратегии
с использованием ИТ (a3)
Инструменты планирования управления временем (b1) управления проектами (b3) управления портфелями инструментарий дорожных
проектов (b4) карт (b2)
Выстраивание отношений с сотрудниками ИТ-службы (c4) с внутренними заказчиками с руководством основных под- с клиентами и партнерами
услуг (c1) разделений (c2) компании (c3)
Приоритеты в управлении поддержка ИТ-инфраструктуры качество услуг пользователям архитектура информационной управление знаниями, идеями
и ПО (d4) (d1) системы (d2) и т.п. (d3)

системный администратор май 2016 87


Наука и технологии

Величина S меняется от 80 до 120 в зависимости от того, на- логики бизнеса переходит от руководителей бизнес-подразделе-
сколько ответы ИТ-директора совпадают с последовательностью ний к архитектору информационной системы – ИТ-директору.
уровней из стандарта ИТ-менеджера. Уровень требований со сто- К сожалению, не всегда в компании руководитель ИТ-службы
роны бизнеса, связанный как со спецификой, так и с его размера- способен адаптироваться к новой роли, из специалиста по продук-
ми, оценивался как среднегеометрическое значение трех показате- там стать руководителем, понимающим тонкости бизнеса своего
лей (A, B, C), меняющихся от 1 до 4: предприятия, использующим возможности информационных
• численность организации, которую обслуживает ИТ-служба: технологий в той мере, в какой они должны быть востребованы.
менее 1000 человек (A=1); от 1000 до 5000 человек (A=2); Взаимосвязь роли ИТ на предприятии с технологическими эпо-
от 5000 до 30 000 человек (A=3); свыше 30 000 человек хами позволяет сделать еще один вывод. Поскольку доля отраслей
(A=4); первых двух эпох в общей добавленной в экономику стоимости
• уровень руководства в системе управления ИТ-службой: ря- снижается, можно сказать, что на первый план выдвигается новая
довой менеджер (B=1); руководитель подразделения (B=2); культура – умение эффективно использовать информационные
заместитель руководителя (B=3) и CIO (B=4); технологии в инновационном развитии предприятий, органи-
• принадлежность организации к той или иной технологиче- заций, да и всего общества. Эта культура только формируется,
ской эпохе (см. выше): C=1, 2, 3 или 4 (в случае холдинга – носителей ее очень мало, и в реальности ее проводниками часто
средневзвешенный показатель). становятся, увы, не ИТ-директора, а руководители предприятий
или начальники отдельных бизнес-подразделений. Тенденция
На рис. 2 показаны результаты анкетирования ИТ-директоров. ухода от внедрения ИТ-систем к формированию инновационной
Нетрудно видеть, что большинство ответов ложатся в прямоу- ИТ-культуры определит на ближайшие годы основные пути раз-
гольную область, определяющую линейную зависимость уровня вития индустрии высоких технологий. Культура ведения бизнеса
решаемых ИТ-директором задач от уровня задач, связанных с использованием ИТ-инструментов освоена пока только передо-
со спецификой и размерами бизнеса. Больше всего отклонений выми компаниями, которые поняли, что современные инновации
от линейной зависимости наблюдается для предприятий, соот- также основываются на информационных технологиях.
ветствующих технологической эпохе знаний. По всей видимости Проблема заключается в том, что инновации невозможно
низкий уровень реально решаемых задач в области ИТ на пред- запланировать, нельзя научиться их производить массовым
приятиях, занятых исследованиями и разработкой, в вузах и орга- тиражом. Друкер писал: «Инновационные возможности обнару-
низациях социального обеспечения обусловлен тем, что системы живаются не в правилах, с которыми планировщику приходится
управления знаниями, идеями и компетенциями не получили иметь дело в силу необходимости, а в исключениях из правил –
широкого распространения в России, роль ИТ на таких предприя- в неожиданном, в несоответствии, в разнице между «наполовину
тиях явно занижена. полным» и «наполовину пустым» стаканом, в слабой связи, обна-
руживающейся в том или ином процессе. Когда отклонение станет
От управления ресурсами «статистически значимым» и, следовательно, хорошо заметным,
и к управлению инновациями уже слишком поздно планировать инновацию. Инновационные
Один из основоположников методологии процессного управле- возможности не приходят на ураганной волне – их приносит лег-
ния и автор нотации ARIS Август-Вильгельм Шеер, полемизируя кое дуновение ветерка» (см. [5], с. 386).
с Николасом Карром, говорил в одном из своих выступлений пе- В некотором смысле инновации – это вершина творческого
ред CIO, что роль ИТ-директора все больше становится востребо- или мыслительного процесса, когда возникает совершенно новая
вана в сфере, связанной с технологией бизнеса. По мере расшире- идея, способная изменить существующий порядок вещей. Именно
ния области автоматизированных бизнес-процессов, компетенция такие идеи все больше и больше будут востребованы экономикой,
именно они станут аналогами товаров в обществе знаний. Несмо-
тря на то что инновации невозможно запланировать, существуют
Рисунок 2. Соотношение уровней решаемых CIO задач и уровня
требований к задачам, связанным с отраслевой спецификой стандарты на инновационную деятельность. Одним из важных
элементов инноваций является их взаимосвязь с научной дея-
тельностью: «инновация возникает в результате использования
результатов научных исследований и разработок, направленных
на совершенствование процесса производственной деятельности,
экономических, правовых и социальных отношений в области
науки, культуры, образования, в других сферах деятельности
общества» (см. [6], с. 6).
Крупные компании создают у себя исследовательские центры,
но для средних и тем более малых компаний это неподъемно, им
приходится пользоваться внекорпоративными научными лабора-
ториями (как правило, университетами). И такой подход подчас
приносит больший эффект в силу его гибкости. Это свидетель-
ствует о том, что для предприятий становится все больше вос-
требованной взаимосвязь с экспертными сообществами, которые
могут выполнять исследовательскую и инновационную функцию.
И примеров такого сотрудничества уже достаточно много.
Сегодня информационные системы разрабатываются в ос-
новном под те процессы, которые установились на предприятии.

88 май 2016 системный администратор


Наука и технологии

Таких процессов множество, причем доля вспомогательных, [4] Аншина М., Вольпян Н., Олейник А., Славин Б. Разработка
как правило, превосходит долю основных бизнес-процессов. нового профессионального стандарта «Менеджер по информа-
Это несоответствие говорит о несовершенстве деятельности пред- ционным технологиям». // «Качество. Инновации. Образование»,
приятия, и оно сохранится до тех пор, пока все процессы, не свя- Vol. 105, №2, 2014 г. – С. 36-41.
занные с основным бизнесом, не будут выведены на аутсорсинг, [5] Друкер П. Энциклопедия менеджмента. – М.: Издательский дом
а основная деятельность не структурируется так, чтобы ее можно «Вильямс», 2004. – 432 с.
было легко изменять. Но как бы успешно вспомогательные [6] Казанцев А., Миндели Л. Основы инновационного менеджмен-
бизнес-процессы ни передавались партнерам, как бы ни стандар- та. – М.: «Экономика», 2004.
тизировался основной бизнес, всегда останется необходимость ор-
ганизации человеческих ресурсов с учетом их компетенций и тре- Ключевые слова: роль ИТ, управление ресурсами, управление услугами,
бований производства. Необязательно, чтобы эти человеческие управление информацией, управление знаниями, инновации.
ресурсы были постоянными работниками предприятия. Напротив,
в условиях инновационной экономики все чаще компании будут
привлекать профессионалов и экспертов на временной основе
либо вовсе через сетевые экспертные сообщества. Но всем этим The relationship of specific of industry and level IT problems solved
for business
необходимо управлять. Коммуникации с людьми, обеспечивающи-
ми работу предприятия, станут одним из основных приоритетов Slavin Boris, PhD, Financial University under the Government of RF,
в деятельности ИТ-службы в будущем.  EOF  professor, bbslavin@gmail.com
Maksimova Elena, Russian Union of CIO, director, Maksimova@rucio.ru
[1] Славин Б. Эпоха коллективного разума: О роли информации Summary: In this paper, we show that the level of the IT tasks depends on the
в обществе и о коммуникационной природе человека. – М.: specifics of the business industry in the context of the four eras of technological
(industrial, post-industrial, information age and knowledge), in addition to the
«Ленанд», 2013. size of the organization and management level in it. The results of the survey of
[2] Carr N. IT Doesn’t Matter.//Harvard Business Review. 2003. May. – CIOs of various companies confirm this relationship. The proposed method of
determining the level of requirements to solving IT problems can be used in the
P. 5-12.
organization of IT services companies.
[3] Славин Б. Взаимосвязь этапов развития информационных техно-
логий и экономики. // «Информационное общество», №6, 2015 г. – Key words: the role of IT management, service management, information
management, knowledge management, innovation.
С. 4-13.

Есть что сказать? Публикуйся!


+7 (499) 277-12-41 sa@samag.ru

А ты знаешь, что ты можешь публиковать свои статьи


по ИТ-тематике в журнале «Системный администратор»?
И получать за них гонорары?

Что нужно для этого сделать:


Шаг первый. Ты пишешь письмо в редакцию с темой своей статьи.

Шаг второй. В случае положительного ответа от редакции


присылаешь статью.

Шаг третий. Редакция дает (или не дает) разрешение на публикацию.

Шаг четвертый. Статья размещается в номере журнала «Системный


администратор».

Шаг пятый. Ты получаешь авторский экземпляр номера со своей


статьей. И гонорар!

системный администратор май 2016 89


Наука и технологии

Колосков В.Л., студент 4-го курса бакалавриата, НИУ ВШЭ, Москва, vlkoloskov@edu.hse.ru
Павлов И.Ю., студент 4-го курса бакалавриата, НИУ ВШЭ, Москва, pavlov.ilya.y@gmail.com
Иванов Е.Б., студент 4-го курса бакалавриата, НИУ ВШЭ, Москва, ebivanov@edu.hse.ru

Создание ботов для Telegram:


с использованием языка программирования Python
и облачной операционной системы Corezoid
В наше время бурного развития ИТ-технологий огромную популярность набирают
мессенджеры для телефонов и планшетов. Одним из самых совершенных и технологически
продвинутых мессенджеров является Telegram Messenger, который получает все большее
распространение в русскоязычной части интернета. Одна из особенностей этого приложения,
отличающая его от конкурентов, – это боты, или «умные помощники». В данной статье
описывается процесс создания ботов для Telegram с помощью языка программирования
Python и операционной системы Corezoid. В начале работы рассматривается процесс
регистрации бота и некоторые простейшие команды. Заканчивается статья рассмотрением
преимуществ и недостатков двух этих способов разработки

Общие сведения о ботах в Telegram Ограничения ботов на данный момент:


В современном обществе возможность оставаться на связи, • Принимает аудио только в одном формате, а именно (.ogg).
обмениваться фотографиями и видео привлекает миллионы • Бот не может отправлять сообщение другому боту (к при-
людей. Практически у каждого владельца смартфона установлен меру, реализовать ситуацию, когда вы пишите боту, а тот
как минимум один мессенджер по умолчанию. Вместе с подоб- отправляет это сообщение другому боту, на данный момент
ными сервисами появились и роботы (или просто боты) для них, невозможно).
которые могут выполнять практически любые задачи – напри- • Бот не умеет «забирать» фото от пользователей.
мер, рассылать новости, регистрировать пользователей на сайте • Бот не может писать первым, он должен обязательно ото-
и многое другое. На заре развития данной технологии создание зваться на команду пользователя.
бота было прерогативой программистов, но в связи с широким
распространением мессенджеров, а также усовершенствованием Это сделано для того, чтобы усложнить жизнь различным
технологии некоторые мессенджеры предлагают каждому создать мошенникам и спаммерам и предотвратить неконтролируемый
свой бот. Одним из таких приложений является Telegram. флуд множества ботов в чатах. Создавая программу, всегда нужно
Боты в Telegram представляют собой специальные аккаунты, помнить об этих ограничениях.
которые могут автоматически обрабатывать и отправлять сообще-
ния. Раньше они, так же как и большинство ботов, создавались Регистрация бота
программистами, но в одном из обновлений была добавлена Перед тем как приступить к созданию бота, нужно установить
функция создания ботов с помощью простых команд, что дало Telegram и зарегистрироваться в этом сервисе. Далее в поисковой
возможность пользователям, не обладающим навыками програм- строке находим Manybot и набираем команду:
мирования, также создавать себе «умных помощников».
/start
Возможности ботов
Прежде всего бот для Telegram – это приложение, которое запу- выбираем язык и вводим команду добавления бота:
щенно на стороне пользователя и осуществляет отправку запросов
к Telegram Bot API [1]. Обычно боты отвечают на специальные /addbot
команды, а также они способны производить поиск в интернете
и выполнять иные интересные задачи. На официальном сайте Теперь перед началом программирования бота нужно зарегис-
Telegram представлен онлайн-каталог ботов Telegram. Возможно- трировать его и получить уникальный ID, который одновременно
сти ботов возрастают с каждым днем, и в будущем вполне реальна будет являться и токеном для бота.
ситуация, когда эта технология вытеснит другие продукты со схо- Для этого нужно перейти или найти BotFather, послать ему
жими идеями. команду для создания бота:

90 май 2016 системный администратор


Наука и технологии

/newbot общение из блока Send info about bot и начинает выполняться блок
Location?. Если в ответ бот получит локацию, то в ответ отсыла-
после чего бот попросит придумать имя новому боту. ется погода с учетом вашей локации, в противном случае, если
В принципе ограничений на имя бота не существует, кроме ввести город, будет выслана погода в этом городе.
одного – имя в конце должно заканчиваться на «bot». Вводим Принцип работы блока. В качестве примера возьмем блок нача-
название бота и его имя, к примеру, «Бот для теста» (это сообще- ла работы бота – блок /start. Нужно выбрать тип блока в редакторе
ние-приветствие) и test141bot. блоков. Блок проверяет, пришла ли команда /start от нашего бота,
В случае успеха действий BotFather присваивает боту HTTP для такой проверки потребуется блок Condition. На рис. 4 пред-
API token и возвращает его вместе со ссылкой для быстрого до- ставлен интерфейс выбора типа блока.
бавления бота в контакты, в противном случае нужно подумать Блок создан, теперь в него нужно добавить проверочное
над другим именем для бота. В нашем случае токен, полученный условие и объединить с предыдущим блоком, чтобы он мог
от BotFather, имеет вид: 189563781:AAEgM3Jog39WScLnUTK7fe_ получать информацию для проверки. Для этого выбираем блок
oI2SeSildubI. Condition. Справа в редакторе появится контекстное меню, в нем
Теперь переходим в Manybot и подтверждаем, что API token и будет наше условие. На рис. 5 представлено контекстное меню
скопирован, и получаем подтверждение вместе со ссылкой на бот для настройки блока. Если пришло сообщение /start, значит, блок
@test141bot. Manybot предлагает протестировать вновь создан- выполняется. На рис. 6 показан пример реализации запроса.
ный бот – тестируем его, убеждаемся, что бот реагирует на наши
действия. Выбираем наш бот для теста и «просим» его отправить Создание простого погодного бота с помощью кода
наш первый пост «Hello World!» с помощью команды: Как язык разработки был выбран Python [3]. В связи с его адап-
тивностью алгоритмы, написанные на этом языке, достаточно
/newpost легко переносятся на любой другой язык. В данной работе
для разработки бота будет использована библиотека для Python
и, т.к. мы являемся подписчиками, видим, что он отправляет наше pyTelegramBotAPI, которая существенно упрощает процесс
сообщение всем подписчикам. Убедившись в этом, продолжаем. программирования, взяв на себя все нюансы отправки и полу-
Боты могут автоматически постить из Twitter, YouTube или VK. чения запросов и позволяя сконцентрироваться непосредственно
Для примера продемонстрируем репостинг из VK (все делается на логике. Для написания скрипта используется среда разработки
по аналогии). Посылаем нашему боту команду: PyCharm. Прежде чем приступить к написанию кода, нужно уста-
новить последнюю версию Python, а также компилятор PyCharm.
/autoposting После установки среды разработки необходимо установить две
библиотеки, необходимые для правильного функционирования
и выбираем, откуда мы хотим получать репосты – у нас это VK. бота, – библиотеку pyTelegramBotAPI и библиотеку pywapi [4].
Теперь нужно отправить боту ссылку на человека, сообщество Перейдем к делу. Напишем бот, который будет сообщать нам
или группу. После этого бот начинает «мониторить» эту страницу. погоду в двух столицах – Москве и Санкт-Петербурге. Для начала

Создание погодного бота с помощью Corezoid


Рисунок 1. Рабочая среда Corezoid
Corezoid – облачная операционная система на основе теории ко-
нечных автоматов, которая позволяет создавать боты (и не только)
с помощью блок-схем, без программирования [2]. Преимущество
Corezoid в том, что не нужно держать отдельный сервер для бота,
потому что вся информация хранится в облаке.
Бот создан, теперь для начала работы нужно зарегистрировать-
ся в Corezoid на официальном сайте ОС. Качать ничего не нуж-
но – все действия происходят в браузере. На рис. 1 представлена
рабочая среда Corezoid.
Далее заходим во вкладку Processes и находим шаблоны
для Telegram, в данном случае мы будем делать погодный бот,
поэтому выбираем WeatherBot v1 и копируем его во вновь создан-
ную папку.
После всех этих действий бот привязывается к WeatherBot,
для этого открываем информационное окно и в нем находим поле
Add a Channel.
Затем нажимаем на Telegram, и появляется окно добавления
канала, в него вставляем токен бота и сохраняем его. Окно добав-
Рисунок 2. Окно добавления канала
ления канала представлено на рис.2.
Теперь рассмотрим, как работает WeatherBot. На рис. 3 пред-
ставлена блок- схема алгоритма работы бота.
Начнем с Telegram bot key. Этот блок нужен для связки
Telegram-бота с блок-схемой, в поле код снова вводится токен
бота. Далее следует блок, который работает в режиме ожидания
команды /start. Если она приходит, то в ответ отправляется со-

системный администратор май 2016 91


Наука и технологии

создаем новый проект в PyCharm. Внутрь этого проекта помещаем Перейдем к main.py. Для начала импортируем все необходимые
два файла: main.py и constants.py. В первом из них будет находить- нам файлы и создадим объект нашего бота:
ся скрипт нашего бота, а второй, в свою очередь, будет содержать
все константы (такие как приветственное сообщение, сообщение import telebot
для команды /help и другие), чтобы не засорять код в main.py. import constants
import pywapi
Токен позволяет управлять ботом как угодно, а мы не хотим,
чтобы управление нашим ботом случайно оказалось в руках
какого-либо злоумышленника, поэтому лучше не вставлять токен где:
в основной код программы, а вынести его в отдельный файл. В на- • Telebot – файл, который существенно упрощает нам процесс
шем случае мы поместим его вместе с константами в constants.py. создания бота.
Сейчас constants.py имеет следующий вид: • Constants – созданный нами файл с константами и токеном
бота.
# Здесь введите токен бота, который вам вернул botFather • Pywapi – поможет нам получить новостную сводку [4].
token = 'BotToken'

startAnswer = "Ну что же, приступим. Погоду в каком городе вы Для начала создадим объект бота, через который будет
хотели бы узнать?" осуществляться обращение к API Telegram с использованием
helpAnswer = """Доброго времени суток!
методов, о которых рассказано на сайте Telegram в описании Bot
Меня зовут TwoCapitalsWeatherBot! Я – самый лучший погодный
бот во всем Telegram! API. Для создания нужно вызвать его конструктор и в качестве
Я знаю все о погоде, но… только в двух городах… двух параметра передать токен бота.
столицах – Москве и Санкт-Петербурге
Для получения сводки о погоде в Москве нажмите /moscow
Вы хотите знать, что приготовила для вас питерская погода? bot = telebot.TeleBot(constants.token)
Нажмите /piter""
По мере усложнения функций бота код начинает расти,
На этом файл constants.py можно сохранить и закрыть, что становится проблемой. Чтобы не загромождать код огром-
т.к. к нему больше возвращаться не будем. ным количеством циклов и конструкций if-elif-else, в библиотеке

Рисунок 3. Блок-схема работы бота

92 май 2016 системный администратор


Наука и технологии

pyTelegramBotAPI существует хэндлеры или декораторы, которые pywapi.get_weather_from_weather_com(cityCode)


помогают справиться с этой проблемой. Декораторы указывают # формирование сообщения с погодой из json-объекта,
# полученного от сайта
библиотеке, что следующая дальше функция должна быть вызвана, weatherReport = "It is " + weather_com_result ↵
когда боту приходит сообщение с подходящим типом содержимо- ['current_conditions']['text'].lower() + " and " + ↵
weather_com_result['current_conditions']['temperature'] + ↵
го. Хэндлеры существуют для всех типов сообщений, что удобно "°C now in " + message.text + "." + "\n" + ↵
и позволяет разделить код на логичные части, не нагромождая "Feels like " + weather_com_result['current_conditions'] ↵
его в одном месте, повышая читабельность. Важно отметить, что со- ['feels_like'] + "°C. \n" + "Last update - " + ↵
weather_com_result['current_conditions']['last_updated']
общение будет обработано только в одном декораторе. Декораторы bot.send_message(message.chat.id, weatherReport)
будут проверяться в порядке их следования в коде. Использоваться
будет тот, который подошел под тип сообщения первым [5]. Разберемся для начала с тем, каким образом боты принимают
Внутри декораторов мы будем производить работу с текстом сообщения. Первый и наиболее простой вариант заключается
входящих сообщений. Для того чтобы отправлять сообщение, нам в периодическом опросе серверов Telegram на предмет наличия
нужно знать id чата или пользователя. Id чата и id пользователя, новой информации. Осуществляется этой с помощью механизма,
которому планируется отправить сообщение, совпадут только называемого Long Polling, при котором на непродолжительное
в том случае, если переписка осуществляется в приватном чате время открывается соединение и все обновления тут же прилета-
типа «пользователь – бот». Поэтому рекомендуется использовать ют боту. Этот способ прост, но не очень надежен. Первая причина,
from_user.id вместо chat.id, но в нашем примере бот пишется почему этот метод не надежен, – это проблемы с серверами
для приватного чата, поэтому можно воспользоваться chat.id. Telegram. Cерверы Telegram периодически могут возвращать
Напишем три декоратора: первый предназначен для отправ- ошибку 504 (Gateway Timeout), из-за чего некоторые боты впада-
ления «вступительного сообщения» при начале работы с ботом, ют в ступор. Даже использование библиотеки pyTelegramBotAPI
когда пользователь отправит команду /start, второй будет посылать не всегда может помочь избежать такой ситуации. Второй при-
сообщение при получении команды /help, третий станет с помо- чиной может стать одновременный запуск нескольких ботов,
щью pywapi получать погоду с сайта weather.com и преобразовы- что повышает вероятность столкнуться с ошибками.
вать полученный json-объект в удобный для пользователя вид: Альтернативой первому варианту являются веб-хуки, которые
работают несколько иначе. При установке веб-хука отпадает необ-
# декоратор для отправки сообщения при получении команды /help ходимость периодически самому опрашивать серверы, тем самым
@bot.message_handler(commands=['help']) исчезает неприятная причина падений ботов. Однако за это при-
def handle_text(message):
bot.send_message(message.chat.id, constants.helpAnswer) ходится платить необходимостью установки полноценного веб-
log(message, constants.helpAnswer) сервера на ту машину, на которой планируется запускать боты.
#декоратор для отправки приветственного сообщения
Для примера погодного бота мы воспользуемся самым простым
@bot.message_handler(commands=['start']) вариантом на основе Long Polling [5].
def handle_start(message): Для того чтобы наш код не останавливался после одного
bot.send_message(message.chat.id, constants.startAnswer)
выполнения, нужно заставить скрипт постоянно опрашивать
# декоратор для получения прогноза погоды с сайта weather.com сервер об обновлениях. Для этой цели можно использовать
@bot.message_handler(content_types=['text'])
def handle_text(message):
цикл, но Telebot позволяет нам обойтись без цикла. Библиотека
# получаем словарь всех городов в мире, подходящих pyTelegramBotAPI предоставляет нам функцию polling. Функ-
# под отправленный пользователем запрос ция polling запускает Long Polling, а параметры none_stop=True
city = pywapi.get_location_ids(message.text)
# перебираем словарь в целях получения последнего элемента и interval = 0 говорят, что бот должен стараться не прекращать
for i in city: работу при возникновении каких-либо ошибок и обновляться
cityCode = i
без задержек. При этом за ботом все равно нужно следить, по-
# отправляем запрос на сайт, чтобы получить нужную нам
# метеорологическую сводку. cityCode содержит id нужного скольку серверы Telegram периодически перестают отвечать
# нам города на запросы или делают это с большой задержкой, приводя
weather_com_result = ↵
к ошибкам 5xх.

Рисунок 4. Выбор типа блока Рисунок 5. Настройка блока Рисунок 6. Пример работы запроса

системный администратор май 2016 93


Наука и технологии

bot.polling(none_stop=True, interval=0) #декоратор для клавиши /moscow


@bot.message_handler(commands=['moscow'])
def handle_start(message):
Проверяем в Telegram работу нашего бота. На рис. 7 показан weather_com_result = ↵
пример работы бота. Все отлично работает. Теперь разберем одну pywapi.get_weather_from_weather_com('RSXX0063')
weatherReport = "It is " + weather_com_result ↵
из особенностей Bot API, а именно кастомные клавиатуры. Такие
['current_conditions']['text'].lower() + " and " + ↵
клавиатуры представляют собой обычные шаблоны сообщений. weather_com_result['current_conditions']['temperature'] + ↵
Важной особенностью таких клавиатур является то, что команда, "°C now in " + weather_com_result['location']['name'] + ↵
"." + "\n" + "Feels like " + weather_com_result ↵
отправляемая кнопкой клавиатуры, полностью соответствует
['current_conditions']['feels_like'] + "°C. \n" + ↵
ее названию. К примеру, если кнопка называется /hellobot, то ко- "Last update - " + weather_com_result ↵
манда, которая отправляется при нажатии на эту кнопку, будет / ['current_conditions']['last_updated']
bot.send_message(message.chat.id, weatherReport)
hellobot. В связи с этим использовать кастомные клавиатуры нуж- print(weather_com_result)
но осторожно. Для создания кастомной клавиатуры нужно создать
объект типа ReplyKeyboardMarkup(). Далее добавляем построчно # декоратор для клавиши /piter
@bot.message_handler(commands=['piter'])
элементы (также существует возможность сделать автоматиче- def handle_start(message):
ское разделение на строки, используя аргумент row_width), после weather_com_result = ↵
чего передаем в метод send_message(). Для того чтобы убрать pywapi.get_weather_from_weather_com('RSXX0091')
weatherReport = "It is " + weather_com_result
кастомную клавиатуру, к примеру, заменив ее на кнопку [/], не- ['current_conditions']['text'].lower() + " and " + ↵
обходимо вместо объекта ReplyKeyboardMarkup() создать объект weather_com_result['current_conditions']['temperature'] + ↵
ReplyKeyboardHide() и также передать его в send_message() [1]. "°C now in " + weather_com_result['location']['name'] +
"." + "\n" + "Feels like " + weather_com_result ↵
Добавим кастомную клавиатуру, состоящую из трех клавиш: /help, ['current_conditions']['feels_like'] + "°C. \n" + ↵
/moscow и /piter. Немного изменим код декоратора для команды / "Last update - " + weather_com_result ↵
['current_conditions']['last_updated']
start, который теперь будет выглядеть следующим образом:
bot.send_message(message.chat.id, weatherReport)

#декоратор для отправки приветственного сообщения


@bot.message_handler(commands=['start']) Наш бот готов. Осталось проверить его работоспособность.
def handle_start(message):
user_markup = telebot.types.ReplyKeyboardMarkup(True, False) На рис. 8 представлен пример реализации бота с кастомной кла-
user_markup.row('/moscow', '/piter') виатурой.
user_markup.row('/help')
Все отлично работает. Пример простого погодного бота
bot.send_message(message.chat.id, constants.startAnswer, ↵
reply_markup=user_markup) для Telegram реализован успешно!
log(message, constants.startAnswer)
Заключение
Теперь при отправке боту команды /start, кроме приветственного В данной статье были разобраны два способа создания бота.
сообщения, мы получим еще и кастомную клавиатуру с клави- Нельзя абсолютно точно сказать, что какой-то из этих методов
шей /help в нижнем ряду и клавишами /moscow и /piter в верхнем. определенно лучше другого. Оба этих метода имеют свои преиму-
Для клавиши /moscow и /piter добавим декораторы, которые при на- щества и свои недостатки.
жатии на эти клавиши отправят запрос на сайт в целях получения Метод Corezoid основан на использовании облачной операци-
прогноза погоды для Москвы и Санкт-Петербурга соответственно: онной системы Corezoid. Основными преимуществами являются:

Рисунок 7. Пример работы бота Рисунок 8. Пример реализации бота с кастомной клавиатурой

94 май 2016 системный администратор


Наука и технологии

• В этом случае не требуется никаких серверов, [5] Сайт библиотеки pyTelegramBotAPI – https://pypi.python.org/pypi/
так как все хранится в облаке. Облако всегда обработает pyTelegramBotAPI.
нужную информацию, вне зависимости от нагрузки.
• Возможность сбора аналитических данных, в этом случае Ключевые слова: Python, Corezoid, Telegram, bot, бот, разработка.
Corezoid собирает всю статистику по количеству посещений,
а также по переходам от одного блока к другому. Следо- Bot development for Telegram: by using Python programming language
вательно, можно выявить непопулярные блоки и убрать and cloud operating system Corezoid
их или переделать, тем самым оптимизировав бот.
Koloskov V.L., a student of the 4th year undergraduate, vlkoloskov@edu.hse.ru
Недостатком Corezoid является то, что разработчики все же Pavlov I.Y., a student of the 4th year undergraduate, pavlov.ilya.y@gmail.com
хотят зарабатывать. В связи с этим при использовании облачной Ivanov E.B., a student of the 4th year undergraduate, ebivanov@edu.hse.ru
ОС плата взимается за каждый переход от одного блока к другому, Higher School of Economics, Moscow
следовательно, при большой нагрузке на бот сильно возрастает
его цена. Summary: In our time of rapid development of IT technologies,
Главным преимуществом метода «классического» программи- messenger for phones and tablets are gaining immense popularity. One
рования (Python) являются гибкость процесса создания и функции of the most sophisticated and technologically advanced messengers
бота, а недостатком – необходимость установки полноценного is Telegram Messenger, which gained popularity in Runet. The main
веб-сервера на машину с запущенным ботом. Также надо иметь feature of this application are bots, or «intelligent assistant» which
собственный SSL-сертификат, т.к. веб-хуки в телеграмме рабо- distinguishe it from competitors. This article describes the process
тают только по HTTPS. К счастью, сейчас появилась поддержка of bot development for Telegram by using Python programming
самоподписанных сертификатов.  EOF  language and cloud operating system Corezoid. The process of the
bot registration and some simple commands are considered in the
[1] Сайт с описанием Bot API – https://core.telegram.org/bots/api.
beginning of the work. This paper ends with an information about pros
[2] Сайт облачной операционной системы Corezoid – https://www.
and cons of these two development approaches.
corezoid.com.
[3] Документация Python – https://www.python.org/doc.
Keywords: Python, Corezoid, Telegram, bot, development.
[4] Сайт с библиотекой pywapi – https://pypi.python.org/pypi/pywapi.

«Студент, лови момент!» +7 (499) 277-12-41 sa@samag.ru

Ребята! Наша редакция проводит акцию для студентов.


Подписывайся на печатную версию журнала «Системный администратор» на год или на полгода
по специальной студенческой скидке за 50% от стоимости и получай электронную версию в подарок!
Сделать это очень просто:
1. Нужно зарегистрироваться на сайте http://samag.ru/registration.
2. Выслать на адрес subscribe@samag.ru:
 скан студенческого билета;
 e-mail, который использовался при регистрации.
3. После подтверждения получения этих данных ты сможешь использовать
на странице http://samag.ru/subscribe код на скидку: МАЙ2016

Студент, лови момент!


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

для студентов есть разделы «Карьера/Образование»


вхо
дит
вп
ереч
ень
ВА
КМ
ино
№05(1 брн

и «Наука и технологии».
май 62) аук
2016 и РФ

Шаб
в Vir лон
ык
tuoz
zo онте
йне
Как ров
прил писать
ожен м
ия бы обил
Тех стре ьны
н е
Авт ологи
е
омат я
изир Cucu
ES Д уе м от mber
Раз екор
четн
ато ость
бира
емся ры
в дет
алях

системный администратор май 2016 95


За
по щи
др
учн та
ым от
Нау
ка и
ис
ред DD
техн
олог ств oS
Иссл
неко едован
LINP торых ие во
з
ии ам
и -а
Зал славы «СА»

Человек и машина
Издается с 2002 года
«Системный администратор» включен в перечень веду-
щих рецензируемых журналов ВАК Минобрнауки РФ

Включен в Российский индекс


научного цитирования www.elibrary.ru
Представляя читателю очередной «экспонат» нашего вирту- Научный руководитель журнала –
ального музея компьютерных и информационных технологий, председатель Редакционной коллегии
А.Н. Тихонов, научный руководитель, директор
ключевое слово приходится брать в кавычки. Потому что речь МИЭМ НИУ ВШЭ, д.т.н., профессор, академик РАО
пойдет о человеке и вычислительной машине, носящих одно
Главный редактор
и то же имя. Об английском математике Алане Мэтисоне Тью- Галина Положевец, chief@samag.ru
ринге и созданной им «машине Тьюринга». Это определение Генеральный директор
Владимир Положевец
тоже требует кавычек, потому что это скорее абстрактная Шеф-редактор журнала
математическая схема. Впрочем, под руководством Тьюринга «Системный администратор»
Владимир Лукин, lukin@samag.ru
были созданы и вполне материальные – «в железе» – вычис- Заместитель главного редактора
Ирина Ложкина, lozhkina@samag.ru
лительные устройства, сыгравшие важную роль в ходе Второй мировой войны. Заместитель главного редактора,
О жизни Тьюринга – недолгой, замечательной и трагической – написаны книги и сняты филь- официальный представитель редакции в Украине
Сергей Яремчук, grinder@samag.ru
мы. И она того стоила. Математический гений – со всеми присущими такому типу людей стран- Директор по развитию
ностями. Прекрасный спортсмен, автор рекордов в беге на длинные дистанции. Создатель не- Ирина Пушкина, i.pushkina@samag.ru
превзойденной для своего времени схемы «взлома» немецких секретных радиограмм, за свои Главный бухгалтер Юридический отдел
военные заслуги награжденный высшей государственной наградой – Орденом Британской им- Надежда Кан Владимир Столяров
buch@samag.ru stolyarov@samag.ru
перии. Автор чисто умозрительных «машины Тьюринга» и «теста Тьюринга» (последний стал
одной из пионерских работ в исследовании искусственного интеллекта). Как писали в старину Реклама Распространение
в официальных биографиях: и прочая, и прочая… А еще – преданный забвению и остракизму из- reklama@samag.ru Олег Иванов
subscribe@samag.ru
гой и преступник, не выдержавший травли и покончивший жизнь самоубийством, едва разменяв
пятый десяток. Преступлением Тьюринга стала его «нетрадиционная ориентация», за которую Дизайн обложки Дизайн-макет
Михаил Лебедев Марина Рязанцева,
на его родине (и не только там) в середине прошлого века полагалась уголовная статья.
Дмитрий Бессонов
Он родился в Лондоне в 1912 году в аристократической семье и с раннего детства обнару- Иллюстрация
жил выдающиеся математические способности. Закончил с отличием школу и престижный Ко- Виктор Чумачев

ролевский колледж в Кембридже. В возрасте 24 лет переформулировал знаменитую теорему Редакционная коллегия
Геделя о неполноте и предложил первую модель компьютера общего назначения – абстракт- Д. Ю. Гудзенко, к.т.н., директор Центра компьютерного
обучения «Специалист» при МГТУ им. Н.Э. Баумана
ную «машину Тьюринга», позволившую формализовать понятие алгоритма. По сути, это была Д. Ю. Динцис, д.т.н., ведущий преподаватель Центра
впервые ясно выраженная идея Универсальной машины, способной вычислить все, что можно компьютерного обучения «Специалист» при МГТУ
им. Н.Э.Баумана
было вычислить в принципе. О.В. Китова, д.э.н., доцент, зав. кафедрой информатики
РЭУ им. Г.В.Плеханова, директор Академического
А когда началась война, талантливого математика привлекли к работе, самой
центра компетенции IBM «Разумная коммерция»
что ни на есть практической. Жизненно важной для британских военных: разгадывать немецкие в РЭУ им. Г.В.Плеханова
А. С. Крюковский, д.ф-м.н., профессор, лауреат
шифры и коды, с помощью которых, в частности, подлодки противника наводились на морские Государственной премии СССР, декан факультета
цели англичан и их союзников. Немецкое командование шифровало свои сообщения с помо- информационных систем и компьютерных технологий
Российского нового университета
щью лучшей на то время шифровальной машины Enigma. И именно Тьюринг предложил взло- Э. С. Клышинский, к.т.н., доцент департамента компьютерной
мать коды немецкой машины с помощью машины же – но собственной. Под его руководством инженерии НИУ ВШЭ
Л.А. Крукиер, д.ф-м.н., профессор, главный научный
такая машина – Bombe – была создана и успешно справилась с поставленной задачей. Начиная сотрудник кафедры высокопроизводительных вычислений
с 1942 года британское Адмиралтейство было в курсе всех намечавшихся морских операций и информационно-коммуникационных технологий
Южного федерального университета
противника. Хотя использовало эту информацию строго дозировано – чтобы ни в коем слу- С. Р. Тумковский, д.т.н., профессор департамента
чае не дать противнику понять, что его секретные радиограммы прочитаны. «Статистическую» компьютерной инженерии НИУ ВШЭ, лауреат Премии
Правительства РФ в области науки и техники
схему контрмер разработал, кстати, тот же Тьюринг – не без моральных колебаний. Потому А. В. Тетюшев, к.т.н., доцент Вологодского государственного
что, следуя его схеме, Адмиралтейство какие-то свои корабли – и жизни находившихся на них технического университета

солдат – спасало (изменив маршруты следования, или усиливая охрану конвоев, или заблаго- Экспертный совет
временно топя вражеские подлодки и сбивая вражеские самолеты), другие же суда продолжали Рашид Ачилов, главный специалист по защите информации
Сергей Барамба, эксперт по системным решениям
следовать своим курсом, попадая под удары немецких субмарин или авиации… Алексей Бережной, эксперт по администрированию и ИБ
Андрей Бирюков, ведущий системный инженер по ИБ
До конца войны Тьюринг успел еще много чего – разработал портативный дешифратор
Алексей Вторников, эксперт по вопросам разработки ПО
Delilah, а также расшифровал еще более сложные коды для немецкой машины Lorentz, пред- Константин Кондаков, старший директор по ИТ
Кирилл Сухов, ведущий специалист направления интернет-
назначенной для шифровки сообщений высшего командования вермахта. Для решения по- разработки
следней задачи Тьюринг привлек в свою команду опытного инженера-электронщика Томаса Леонид Шапиро, эксперт по ИБ и инфраструктурным проектам
Сергей Яремчук, эксперт по ИБ
Флауэрса, с помощью которого была создана одна из первых в мире ЭВМ – Colossus.
А после войны ученый разрабатывал первый в мире компьютер с хранимой в памяти про- Издатель
ООО «Издательский дом Положевец и партнеры»
граммой – ACE, принимал участие в создании компьютера Mark I, опубликовал пионерские Адрес редакции
работы по проблеме искусственного интеллекта (тот самый «тест Тьюринга», позволяющий 129075, г. Москва, Шереметьевская ул., д. 85, стр. 2, офис 405,
тел.: (499) 277-12-41, факс: (499) 277-12-45
ответить на вопрос, может ли машина мыслить) и математической биологии, придумал первую Сайт журнала: www.samag.ru
шахматную программу для компьютера…
Отпечатано в типографии
Он бы еще, наверное, многое успел, если бы не проблемы с собственной «биологией», OOO «Периодика»Тираж 17000 экз.
каковые тогда трактовались исключительно как уголовно наказуемое извращение. Бездушной
Все права на материалы принадлежат журналу «Системный
машиной, лишенной интеллекта и человечности, оказалось британское правосудие. Только администратор». Перепечатка и использование материалов
спустя полвека глава правительства Великобритании официально извинился перед давно в любой форме, в том числе и в электронных СМИ,
без разрешения запрещена. При использовании материалов
умершим человеком, который посмертно был признан «одним из 100 величайших британцев ссылка на журнал «Системный администратор» обязательна.
Материалы отмеченные знаком ADV публикуются на коммерческой
в истории».  EOF 
основе. Редакция не несет ответственности за достоверность
Владимир Гаков информации в материалах, опубликованных на правах рекламы.

96 май 2016 системный администратор


x (1) , , x(N ) OPT
⎛ ⎞  xn (x( ) x(N )

Новый статус
eiN = ⎜ 0, , 0,1, 0, , 0 ⎟
⎜    
  ⎟ eN ( ) RN
журнала
⎝ i N −i ⎠
⎛ 1
⎜N , , N −1 , kN −1
,N ,
1
,N
X {x ( ) x ( N )} ⎝ Ndomv

n

N N ША
ε e ( x ) = ∑ eiN χ ( x = x ( i ) )

новые возможности!
domv i =1

ваши SK { }

n1
( ) n 2, 3, 1, 4, 5
ШАГ
www.samag.ru
xn x (i ) pn pn − γ n R ( xn pn n )
N
STAT ε
GR
q πεN q i −1

∑ p ( j) ≤
i
< ∑ pn ( j )

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


n n
j =1 j =1

вошел в перечень
S ST рецензируемых научных
S AT
изданий Высшей аттестационной комиссии – ВАК!
ERR
⎧ N

SεN ⎨p = ( p pN ) p R N , ∑ pi = 1 pi ≥ ε ( i N )⎬

N
⎩ i =1 ⎭

Высокий уровень авторского контента «Системного администратора», давно


ценимый
(
нашими
pn )
читателями, официально признан государством и российским
Rn x xn p pn n

научным сообществом.

Мы получили статус издания, в котором публикуются основные научные


результаты на соискание ученой степени кандидата наук, доктора наук.
n γ >0
N
π
ε {q} q = mi
m nN p q R ( xn , pn ,ξ n ) Rn
p S
Редакция p
журнала
ε
⎧⎪
π ⎨p −γ
ξ −Δ приглашает
⎫⎪
e ( x )⎬
к сотрудничеству всех тех, N n

e (x ) p
n +1 ε n+1 n n T n

чьи профессиональные интересы связаны с научными изысканиями


⎩⎪ ⎭⎪
в сфере
⎡ N −1
n n

информационных
N технологий. ε ∈ ⎣ 0,
pn +1 πε n+1 pn − n
n R xn pn n
Требования к публикациям научных статей размещены на сайте журнала
n  1, 2, 
«Системный администратор»: http://samag.ru/main/part/49
ξn ξ n xn ω n
1 n
Φn = ∑ ξt ;
n t =1

n FGUI
⎧⎪ ⎛ ξ − ξn − Δ ξn − Δ ⎞⎫
) ⎟⎟ ⎬⎪
⎜ e ( x ) p ( n ) eT ( x ) p d ( n − ) eT ( x ) p d ( n
lim Φ n → υ .
pn +1 πεNn+1 pn − γ n ⎜ T n
⎨ e x + e x + e x
⎩⎪ ⎝ n n n n n n ⎠ ⎭⎪
n →∞

(− − )

Заявки на публикацию статей в раздел


(1, 2,«Наука
1, 2, 1) OPT
и технологии»
присылайте на e-mail: vak@samag.ru N
Специальная акция
для системных администраторов
«Малина для админа»

Регистрируйте новые базовые


лицензии Kaspersky Internet
Security для всех устройств,
Kaspersky Endpoint Security для
бизнеса (Стартовый, Стандартный,
Расширенный) и Kaspersky Total
Security для бизнеса с защитой
до 249 узлов, получайте баллы
каждую пятницу и выбирайте
подарки! И не забывайте
рассказывать об акции своим
друзьям-сисадминам! Ведь новые
участники, указавшие при
регистрации в акции промо-код
OF823, получают на свой счет 100
приветственных баллов. Эти баллы
активируются после одобрения
первой лицензии, отвечающей
условиям акции.

По просьбам более 3 тысяч


постоянных участников акции
«Малина для админа» мы продлили
акцию до 31 декабря 2016 года.

MALINA.KASPERSKY.RU

© АО «Лаборатория Касперского», 2016. Зарегистрированные товарные знаки и знаки обслуживания являются собственностью их правообладателей. Реклама

Вам также может понравиться