РО ТИ РАС РА КУ Ж ПИ
НИ НО К У ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ С
ЛИ
Ь
Так видит журнал читатель, который забыл оформить подписку:
Так видит журнал читатель, оформивший подписку:
№11(60) ноябрь 2007
КО НЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И ЗА
П АВ ОС РА ЛЕ Л ОТ НА П У РА СК БО А ТЕ
УЕ ХА Л
ВО ТП УС К
КА
БЫ СТ
№11(60) ноябрь 2007 подписной индекс 20780 www.samag.ru
Знакомимся с PowerShell – новой командной оболочкой Управляем Active Directory из командной строки Строим систему видеонаблюдения и охраны на основе ZoneMinder Убить «Билла», вторая попытка, или Novell OES 2 Mandriva Corporate Server 4.0: Linux-сервер от мастеров десктопа Каковы первые впечатления от работы с openSUSE 10.3
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60
Используем Bugzilla в качестве ServiceDesk Выгружаем данные из «1С» в Excel
в номере 3 ТЕНДЕНЦИИ
52 Каталоги бизнес-данных – интеграция легким движением руки
РЕПОРТАЖ 4 В Москве прошла выставка-форум ИнфоКом-2007 Впечатления от выставки.
Дмитрий Шурупов
6 «Perl сегодня»: первый российский воркшоп
В рамках секции InfoLinux VII международной выставки «Инфоком» прошел первый российский воркшоп, призванный показать текущее состояние языка Perl и его возможности для создания хороших сайтов. Дмитрий Шурупов
АДМИНИСТРИРОВАНИЕ 8 Убить «Билла», вторая попытка, или Novell OES 2
Компания Novell начала продажи продукта с завлекающим названием Open Enterprise Server 2. Тем самым был завершен перенос специфичных сервисов Novell для рабочих групп на платформу Linux. А сам OES 2 фактически занял место флагманского продукта, сместив вниз по шкале ценностей SUSE Linux Enterprise Server. Алексей Барабанов
14 Каковы первые впечатления от работы с openSUSE 10.3
В начале октября компания Novell представила следующую версию свободного дистрибутива openSUSE. Этому дистрибутиву, прочно обосновавшемуся в первой пятерке рейтинга DistroWatch.com, и посвящен обзор. Сергей Яремчук
18 Mandriva Corporate Server 4.0: Linux‑сервер от мастеров десктопа Обзор серверного дистрибутива.
Дмитрий Шурупов
24 Используем Bugzilla в качестве ServiceDesk
«Программу хочу, – однажды заявляет вам начальник, – чтобы пользователи заявки не по телефону делали, а в ней, чтобы можно было исполнителя назначить, выполненную работу описать, отчеты видеть... Да! И чтоб бесплатная или недорогая!». Даже не задумавшись, вы говорите – «Bugzilla». Рашид Ачилов
32 Строим бюджетный сервер для малых или средних компаний. Часть 2
Сегодня поговорим о почтовом сервере Exim и обо всём, что связано с почтой в нашем комплексе. Павел Семенец
40 Управляем Active Directory из командной строки
Командная строка всё ещё является мощнейшим инструментом, обеспечивающим гибкость управления ресурсами. Служба каталогов не исключение. Александр Емельянов
44 Знакомимся с PowerShell – новой командной оболочкой
По сравнению с UNIX, Windows-системы не обладают разнообразием языков сценариев, поэтому появление PowerShell – примечательное событие. Андрей Бирюков
№11, ноябрь 2007
Удобные средства работы с информацией из разнообразных источников предлагает мощный инструмент в составе MOSS 2007 – BDC. Нелли Садретдинова
ОБРАЗОВАНИЕ 60 Изменения в сертификации Microsoft: новые статусы MCTS и MCITP для системных администраторов
Узнайте подробности о статусах MCTS и MCITP. Дмитрий Павлов
БЕЗОПАСНОСТЬ 62 Строим систему видеонаблюдения и охраны на основе ZoneMinder
Люди любят окружать себя материальными благами цивилизации. Дорогие вещи и машины, о которых нужно заботиться и охранять. Сделаем нашу жизнь немного легче – поставим виртуального сторожа, который никогда не спит. Виталий Банковский
68 Контролируем интернет-активность пользователей с Kerio WinRoute Firewall
«Паутина» является удобной средой коммуникаций и источником информации, но при отсутствии контроля Интернет становится источником проблем. Сергей Яремчук
ЧЕЛОВЕК НОМЕРА 72 Перекресток IT-дорог, вот и я…
Предлагаем вам стать свидетелями очередной IT-судьбы и понаблюдать за перекрестками в жизни Юрия Колесова, главы представительства компании Avocent в странах СНГ. Оксана Родионова
АДМИНИСТРИРОВАНИЕ «1С» 76 Выгружаем данные из «1С» в Excel
Как быть, когда требуется получить некоторую информацию из базы данных «1С:Предприятие» в виде стандартной книги Excel или документа Word? Поможет в этом использование технологии OLE Automation. Андрей Луконькин
ПРОГРАММИРОВАНИЕ 80 Что мы знаем о стеке?
Предпримем попытку систематизировать собственные знания о стеке и подробно рассмотрим, какую роль играет стек в процедурном программировании. Владимир Мешков
РЕТРОСПЕКТИВА 86 Окно в электронный мир: история развития графического пользовательского интерфейса. Часть 1
Хроники почти пятидесяти лет разработок графического интерфейса операционных систем – перед вами. Дмитрий Мороз
92 КНИЖНАЯ ПОЛКА 23, 79, 85
BUGTRAQ
Подведены итоги викторины! В прошлом номере журнала (№10 за 2007 год, стр. 2) были опубликованы вопросы викторины, проводимой журналом и учебным центром «Академия Корпоративных Систем». Благодарим всех участников, приславших свои ответы. Пришло время подвести итоги и объявить победителей!
1-е место – Сергей Жуматий. Получает в подарок подписку-2008 на журнал «Системный администратор» и возможность пройти бесплатное обучение на двух авторизованных курсах по администрированию и безопасности ОС Linux в московском учебном цент-
ре «Академия Корпоративных Систем». 2-е место – Сергей Морозов. Получает в подарок подписку-2008 на журнал «Системный администратор» и возможность пройти бесплатное обучение на одном из авторизованных курсов по ОС Linux в московском учебном центре «Академия Корпоративных Систем». 3-е место – Константин Верба. Получает в подарок подписку-2008 на журнал «Системный администратор» и 50% скидку на обучение на любом из авторизованных курсов по ОС Linux или FreeBSD в московском учебном центре «Академии Корпоративных Систем».
Ответы на вопросы викторины:
* Внимание иногородним участникам и победителям викторины – оплата проезда и проживания не входит в стоимость приза.
минуты можно с помощью команды «shutdown -c».
1. Переключения уровней запуска, разнообразные скрипты (многие из них делают одно и то же) и использование интерфейса sysrq (Alt+Sysrq+S, Alt+Sysrq+U, Alt+Sysrq+B). 2.
Кроме того, учебный центр дарит 30% скидку на любой курс или программу обучения по Linux и FreeBSD до конца 2007 года Пчелинцеву Александру за правильный ответ на 11-й вопрос. Всем остальным участникам викторины московский учебный центр «Академия Корпоративных Систем» дарит 25% скидку на любой курс или программу обучения* по Linux и FreeBSD до конца 2007 года.
8. Снято с рассмотрения из-за опечатки в постановке вопроса.
9. lsof, fuse. Принимались и другие похожие решения. Как небезопасное было отвергнуто решение, основанное не на pipeline, 10. В конечном счёте способов два. Способы, основанные на анализе файла /etc/mtab: а на сохранении данных в промежуточные файлы. cat /dev/urandom | tr -dc [:print:] | head -c 12
# cat /etc/mtab # mount -l
3. root имеет все права. Владелец не может создавать и удалять файлы в каталоге, пока не сменит права доступа, остальное может. Члены группы могут читать файлы из каталога, если знают, как эти файлы называются. Право на выполнение для каталога означает возможность получить номер inod по имени.
Эти способы плохи тем, что могут выдавать устаревшую информацию. Например, если партиция / смонтирована в режиме «только чтение», то данный файл не может обновляться. Это приводит не только к неправильному информированию администратора, но и к сбоям в работе прграммы mount. Например, команда «mount ‑a» не смонтирует содержимое /etc/fstab, если в /etc/mtab написано, что партиции уже смонтированы. И системе совершенно неважно, что это не так, mount не делает запросов к ядру. Второй способ состоит в том, чтобы задать вопрос непосредственно ядру, через интерфейс /proc:
4. а) удалены имена inod, но не сами inod'ы. Некоторые процессы всё ещё работают с файлами. Перезапукать процессы необязательно, во многих случаях можно обойтись сигналом HUP. б) # killall -1 syslogd Также можно перезапустить syslog.
cat /proc/mounts
5. Надо искать запущенную программу: ps ax | grep mysql
Некоторые читатели предлагали так же изучить партицию /proc: grep mysql /proc/[0-9]*/cmdline
11. Это неисправный интерфейс. Такое бывает, хотя и редко. Драйвер интерфейса получает неправильный MACадрес. Для лечения этой проблемы надо программно переопределить аппаратный адрес на DHCP-сервере: # ifconfig eth0 hw ether 00:11:22:33:44:55
Фактически это то же самое. Изучение .bash_history – неудачная идея, так как этот файл имеет строгие права доступа, а может и вообще не ведётся.
После этого интерфейс начинает работать корректно. Но прежде всего надо конечно попытаться интерфейс заменить!
6. /dev/hdd6. 7. В файле /etc/inittab в команде /sbin/shutdown меняем параметр «now» на «+1». Отменить перезагрузку в течение
12. У осьминога нет ног, у него 8 щупальцев. Чем глубже были у читателей познания в пингвинах, тем хуже они разбирались в осьминогах!
Академия Корпоративных Систем Центр обучения и сертификации ИТ-специалистов
тенденции События в мире Open Source В начале ок тября в блоге Майка Шрепфера (Mike Schroepfer), вице-президента по проектированию Mozilla Corporation, появился развернутый план Mozilla по расширению своего присутствия на рынке мобильных устройств. Основные его аспекты сводятся к следующему: мобильные устройства должны войти в список приоритетных для Mozilla платформ, и вскоре появится соответствующая редакция веб-браузера Firefox («Mobile Firefox»). Кроме того, Mozilla собирается активно инвестировать в свой online-сервис Joey и уже начала расширять штат сотрудников, занимающихся вопросами, связанными с мобильными устройствами. Норвежская компания Trolltech объявила о существенном прогрессе в портировании своей графической библиотеки Qt/Qtopia на платформу Windows CE. В текущий порт Qt/WinCE, основанный на Qtopia Core 4.3, вошли почти все 400 библиотек классов на C++ (в состав не включены только два API: QtOpenGL и Qt3Support). Примечательно, что вскоре Trolltech объявила о конце жизни Greenphone, своего Linux-смартфона для разработчиков. В компании это объяснили тем, что настало время для новой платформы и новых устройств с открытым кодом, а также подтвердили сотрудничество с другим смартфоном на базе Linux – Neo1973 от FIC (проект OpenMoko). Но главным в череде последних событий из мира Open Source и мобильных платформ стало сообщение, появившееся в начале ноября. Интернет-гигант Google объявил о создании Open Source-альянса Open Handset Alliance (OHA), который займется разработкой основанного на Linux программного стека Android для мобильных телефонов. В альянс OHA вошли такие гиганты, как Intel и NVIDIA, LG, Motorola и Samsung, мобильные операторы NTT DoCoMo и T-Mobile. Появление стека Android запланировано на ближайшие 8 месяцев, и, по словам исполнительного директора Google Эрика Шмидта (Eric Schmidt), в альянсе ожидают, что эта программная платформа станет основной для «тысяч моделей телефонов». Летом в интернете уже появлялись слухи о том, что Google готовит свой смартфон («GPhone»), который должен стать достойной альтернативой Apple iPhone, а в начале этого года был сформирован схожий альянс для создания программной платформы на базе Linux для мобильных устройств (см. «LiMo Foundation: мобильное будущее с Linux открыто» в журнале «Системный администратор» за февраль 2007 г.).
1 ноября компания MontaVista, известная своими разработками в области встраиваемых решений на базе Linux, выкупила у партнеров корейское совместное предприятие для расширения своего бизнеса в этом регионе. Рискованное предприятие MontaVista Software Korea было основано в 2003 году компанией MontaVista и другими инвесторами. Заявляется, что теперь, когда оно полностью принадлежит MontaVista, это подразделение займется удовлетворением растущего спроса на встраиваемое Linux-ПО в Корее.
Две лицензии Microsoft признаны OSI как Open Source Еще в сентябре Майкл Тименн (Michael Tiemann), президент OSI, сообщал, что по крайней мере одна из лицензий Microsoft, поданных на одобрение в его организацию, не может быть признана Open Source. Однако после того, как Microsoft пошла навстречу пожеланиям OSI и внесла соответствующие правки, Microsoft Public License (Ms‑PL) и Microsoft Reciprocal License (Ms-RL) были одобрены как лицензии на Open Source, поскольку полностью удовлетворяют 10 критериям принятого OSI определения Open Source («Open Source Definition»). В OSI утверждают, что Microsoft подала заявку на одобрение лицензий в обычном режиме, как это регулярно делают все желающие снискать официального признания OSI, не требуя к себе «особого отношения».
Подготовил Дмитрий Шурупов по материалам www.nixp.ru
В Азии растет спрос на Open Source Во второй половине октября глава Red Hat Мэтью Шулик (Matthew Szulik) заявил, что его компания намерена к концу 2009 года получать более половины дохода за пределами США. При этом в качестве ключевого региона, который поможет Red Hat добиться этой цели, он назвал азиатский: Южная Корея, Япония и Китай. По словам Шулика, многие предприятия этих стран уже находятся в процессе перехода с UNIX и устаревших ОС на GNU/Linux, причем зачастую заказчики работают в области финансовых услуг, в телекоммуникациях, технологическом секторе и в правительстве.
№11, ноябрь 2007
репортаж
В Москве прошла выставка-форум ИнфоКом-2007 24-27 октября в «Крокус Экспо» (Москва) при поддержке Мининформсвязи РФ прошла VII международная выставка-форум «Инфокоммуникации России – XXI век».
К
сожалению, первые впечатления посетителей проходящих в «Крокус Экспо» мероприятий – это традиционные транспортные затруднения непосредственно на пути к международному выставочному центру (на всех доступных видах транспорта). Такое обстоятельство не мешает в очередной раз удивиться толпам желающих добраться до заветного места действий, однако уже в самом комплексе от ожидаемого аншлага не остается и следа, стенды зачастую пустуют. Государственная поддержка мероприятия обусловила наличие сразу нескольких наглядных для обыденного посетителя следствий, связанных между собой. Первое и главное – присутствие таких высокопоставленных лиц, как Виктор Зубков, председатель Правительства РФ и Леонид Рейман, министр информационных технологий и связи РФ. Оба сделали
Посетители экспозиции InfoLinux
ряд важных заявлений, касающихся ный сам по себе Алекс Экслер. Среди радужных перспектив развития как рассматриваемых проблем наибольПочты России лично, особо выделив шую популярность снискали блоги развитие ПКД (пунктов коллективно- и социальные сети. го доступа в Интернет), так и отечесЛинуксцентр и Mandriva.Ru вновь твенных «инфокоммуникационных собрали вокруг себя сторонников протехнологий» в целом. Это, несомнен- граммного обеспечения с открытым но, позволило организаторам обес- кодом на экспозиции InfoLinux. Здесь печить повышенное внимание со сто- важнейшая роль была отведена ряду роны публики еще в день открытия, мастер-классов, проводимых по анано и наложило непривычно офици- логии с представленными в начале окальный отпечаток на все последую- тября на Softool. Даже общее раздещие события. ление мероприятий соответствовало Для интересующихся современны- уже отработанной в рамках LinuxLand/ ми тенденциями в российском и гло- Softool программе: Linux и Open Source бальном интернет-мире проводились для государственных структур, Linux мастер-классы и круглый стол, по- для бизнеса, Linux для образования лучившие общее название «Школа и Linux на домашнем ПК. Впрочем, не обошлось и без суИнтернета». В них принимали участие представители таких популяр- щественного отличия: 26 октября на ных в рунете веб-проектов, как рос- InfoLinux прошел первый российский сийская часть LiveJournal (Антон Но- воркшоп «Perl Today», обзор которого сик из СУП), Odnoklassniki, LiveInternet, читайте на стр. 6 нашего журнала. Рамблер-планета, и не менее известОдним из новшеств ИнфоКома стало появление «Ярмарки вакансий» – специальной экспозиции, организованной МИТС РФ при поддержке HeadHunter, лидеров индустрии IT и телекоммуникаций, а также учебных центров. Ее ключевая цель – помощь для заинтересованных в трудоустройстве специалистов по инфокоммуникационным технологиям и, соответственно, привлечение в отрасль талантливых новичков. Выставка-форум ИнфоКом-2007 запомнилась своим по-государственному широким размахом на фоне слабого для такого мероприятия отклика со стороны профессионального сообщества. Искренне надеюсь, что в следующий раз организаторы смогут добиться большей эффективности, не утратив собственной оригинальности.
Текст: Дмитрий Шурупов, фото: Владимир Лукин
репортаж
«Perl Today»: первый российский воркшоп
26 октября в комплексе «Крокус Экспо» (Москва) в рамках секции InfoLinux седьмой международной выставки-форума «ИнфоКом» прошел первый российский воркшоп «Perl Today», призванный «показать текущее состояние Perl и его возможности для создания хороших сайтов».
Формат и организация Мероприятие «Perl Today» [1] было проведено в формате так называемого воркшопа – мини-конференции с элементами мастер-класса. Его организаторами выступили Андрей Шитов, бывший сотрудник Студии Артемия Лебедева, и компания «ЛинуксЦентр», которая совместно с Mandriva.Ru руководила всей Open Source-секцией InfoLinux на «ИнфоКоме». Участие в «Perl Today» было бесплатным, но ввиду ограниченного количества мест за компьютерами требовало отдельной регистрации, после которой каждому выдавался «свой
собственный уникальный индивидуальный персональный личный неповторимый код». Таким образом, распечатавшие его посетители получали на мероприятии личный бейдж и «сумку участника». В последнюю помимо рекламных вкладок спонсоров и партнеров входили такие полезные вещи, как выпуск журнала «Системный администратор», компакт-диски с Mandriva One 2008 и с набором утилит от ActiveState (среди них – Perl Dev Kit 7 и ActivePerl Pro Studio), 24-страничный буклет «Знакомство с языком Perl 6» (автор текста – Андрей Шитов).
Воркшоп проводился в открытом зале выставки (из-за этого, к сожалению, сторонний шум иногда отвлекал и докладчиков, и слушателей), оснащенном 40 компьютерами с предустановленной ОС Mandriva Linux 2008, презентация которой проводилась ранее на «ИнфоКоме». В компьютерных рядах были предусмотрены и обычные свободные места, где многие разместились со своими ноутбуками. Главным в таком случае было позаботиться о предварительной установке Pugs [2] – интерпретатора и компилятора Perl 6, написанного на Haskell. Именно он ис-
репортаж пользовался посетителями для знакомства с новыми возможностями Perl во время мероприятия. Благо об этом всех предупреждали заранее. Российский воркшоп «Perl Today» был официально зарегистрирован на сайте европейского отделения YAPC (Yet Another Perl Conference – цикл конференций по Perl, проводимых с 1999 года по всему миру).
Доклады Наиболее содержательными, полезными и интересными, на мой взгляд, оказались первые три доклада. Первый из них – это «Знакомство с Perl 6» (Андрей Шитов). Поскольку до сих пор я так и не знал о новшествах, представленных в Perl 6, а увлекаюсь этим языком программирования давно (и не нахожу в этом ничего странного), подобного введения в новую версию языка ожидал с энтузиазмом. И докладчик, он же организатор, это ожидание полностью оправдал. Из массы изменений в новой версии Perl, над которой сообщество трудится вот уже восьмой год, были выделены важнейшие и самые наглядные. На каждом примере автор останавливался, предлагая слушателям лично убедиться в работоспособности приводимого кода, выполнив его на своих машинах. Такой подход позволил слушателям быстро сформировать общее представление о том, в каком направлении движется развитие рассматриваемого языка программирования, чего уже удалось достичь и как все это функционирует на практике. Следующим выступающим стал сотрудник Рамблера Алексей Капранов, который сразу обрадовал всех присутствующих многообещающей презентацией с введением «у меня 129 слайдов и ни одной картинки». Однако, как и ожидалось, вскоре стало ясно, что первый слайд – это лишь попытка предупредить слушателей о хорошем чувстве юмора докладчика и лаконичности его тезисов. Выступление было построено в форме логического продолжения знакомства с Perl 6: на сей раз примеров было еще больше и сами они стали сложнее. И последний, заслуживающий отдельного внимания доклад – это «Сайт на Perl и XSLT» (вновь от Андрея Шитова). В нем были освещены общие концепции использования XSLT и приведен ряд примеров создания шаблонов с помощью этой технологии.
Один из организаторов воркшопа Андрей Шитов
о Perl 6 доступна в статье Андрея Шитова, опубликованной в нашем журнале [4], и на веб-ресурсе Perl6.ru. Но на этом хорошие новости для всех поклонников языка программирования Perl не заканчиваются. Официально объявлено о начале подготовки второго российского воркшопа, получившего название «May Perl» и запланированного на май 2008 года [5]. Прием заявок для желающих выступить на будущей конференции уже открыт. 1. Сайт «Perl Today» – http://perlrussia.ru. 2. Проект Pugs – http://www.pugscode.org. 3. Рассказ о воркшопе от А.Шитова – http://perlrussia.ru/en/story. 4. Шитов А. Чего ждать от Perl 6. //Системный администратор, №11, 2006 г. – С. 78‑84. 5. Сайт «May Perl» – http://2008.perlrussia.ru.
Текст: Дмитрий Шурупов, фото: Владимир Лукин
Вместо заключения Презентации вс ех выс т упавших на «Perl Today» выложены для свободного скачивания на сайте мероприятия [1]. Там же [3] можно найти «рассказ о том, как готовился и проходил воркшоп» от организатора (правда, на английском языке). Благодаря афишированному «официальному тегу» мероприятия – perlrus07, – по этому ключевому слову теперь можно легко найти в сети отзывы о произошедшем. Дополнительна я информация
№11, ноябрь 2007
Доклад «Знакомство с Perl 6»
администрирование
Убить «Билла», вторая попытка, или Novell OES 2
Алексей Барабанов В октябре 2007 года компания Novell, Inc. начала продажи продукта с завлекающим названием Open Enterprise Server 2. Тем самым был завершен перенос специфичных сервисов Novell для рабочих групп на платформу Linux. А сам OES 2 фактически занял место флагманского продукта, сместив вниз по шкале ценностей SUSE Linux Enterprise Server.
В
конце прошлого века невозмож- пор. За прошедшие годы имидж комно было встретить системного пании ничем не омрачился, но заметно администратора, не знакомо- поистерся, так как в силу разных приго с продукцией компании Novell, Inc. чин Novell, Inc. покинула группу техноМногие тогда начинали карьеру с по- логических лидеров, а рыженький зайлучения профессионального сертифи- чик, еще недавно многих радовавший ката CNA (Certified Novell Administrator), хаотичными перемещениями по экрану а красный значок с золотым треуголь- монитора в серверной, даже в «Красником в среде сисадминов по статусу ной книге» редко встречаемых просоответствовал медали «За боевые грамм вот-вот попадет в черный спизаслуги». Я свой значок храню до сих сок исчезнувших экземпляров.
Но сказать, что о компании забыли за малозначимостью, невозможно. Более того, Novell, Inc. оказалась в самом центре событий, еще недавно будораживших не только среду специалистов по информатике [1]. И нельзя воспринимать движение Novell в сторону продуктов с открытым кодом как спонтанное действие. Это весьма продуманный план, претворяемый в жизнь с тщательностью и упорством. Оче-
администрирование редным этапом этого плана стал выпуск второго релиза Open Enterprise Server (OES 2).
Первое знакомство Не скрою, загадочный продукт! Как и следует, общественность была подготовлена к правильному восприятию официальным пресс-релизом [2]. Многочисленные кросс-публикации анонсов и цитат речей руководителей Novell прочно занимают первые страницы поисковых систем. Не буду их повторять. Кто хочет, легко найдет. Но там нет технических подробностей и уж очень много повторов. Попробуем взглянуть на последнее детище софтверного гиганта глазами, не зашоренными официальной пресс-конференцией с традиционным фуршетом. Для тестовой установки я воспользовался дисками, любезно предоставРисунок 1. Страница параметров установки SLES 10 SP1 ленными редакцией журнала «Системный администратор», но проверил, что все желающие легко могут загрузить их с сайта компании [3] после регистрации. В моем распоряжении оказались SUSE Linux Enterprise Server 10 SP1 64‑bit DVD 1 (SLES 10 SP1) и Novell Open Enterprise Server 2 64-bit CD 1 (OES 2). Этого достаточно для установки OES 2 на компьютер с архитектурой x86_64. Итак, приступим. Из двух указанных дисков лишь носитель SLES 10 SP1 имел возможность загрузки. Затем это был не какой-то особенный SLES-дистрибутив, а самый что ни на есть стандартный. То есть его установка могла производиться совершенно независимым образом как самостоятельного продукта. А для того чтобы получить обещанный OES 2, надо подключить его дистрибутивный диск или в процессе установки, или потом, как доРисунок 2. Дополнительные наборы пакетов из OES 2 бавочный продукт. Можно и вообще обойти данную процедуру и подклю- по установке [5] на странице 25 так на- например, «Порядок жесткоих дисчить этот диск, как добавочный репо- писано. Хотя никто не мешает даже ков» на странице параметров установзиторий, или просто «слить» оба дис- концерну VAG продавать автомобиль ки (см. рис. 1). Есть и небольшие отличия, нака в один, согласно рецепту [4]. Следо- Bora как приложение к фирменным сапример, по умолчанию предполагавательно, в процедуре установки никак лонным коврикам. Описывать установку SLES 10, ется ReiserFS для корневого раздела. не отражается тот факт, что эти диски объединены в продукт Open Enterprise да еще иллюстрировать её скриншо- Вспомним, что поддержку ReiserFS Serever 2. Иначе говоря, это опровер- тами нет никакого смысла, это совер- как рекомендованной для использогает навязываемую пресс-релизом [1] шенно очевидная процедура, незна- вания в качестве корневой файловой мысль о том, что OES 2 включает в се- чительно отличающаяся, от установки системы изъяли еще в версии 10.2 дистрибутива openSUSE из-за технибя SLES 10. На самом деле все с точ- openSUSE, описанной в статье [6]. В SLES, как и в openSUSE, повто- ческих проблем и сложностей с подностью до наоборот. И это не мое «гениальное» открытие – в руководстве ряются те же ляпы и огрехи перевода, держкой [7].
№11, ноябрь 2007
администрирование та, что дало возможность установки новых дистрибутивных профилей из OES 2 (см. рис. 2). Для проверки выбрал все! Как и следовало ожидать, установилось также все, и в результате в меню YaST2 появились новые иконки (см. рис. 3). И вот тут еще один сюрприз. Посмотрите на рис. 3 внимательно – 7 из 10 новых иконок в разделе OES отвечают за разные формы миграции. Предлагаю запомнить это важное наблюдение.
Новый функционал
Рисунок 3. Раздел Open Enterprise Server в меню YaST2
Рисунок 4. Веб-портал управления OES
Неужели могучая команда, разраКак видно на рис. 1, установбатывающая SLES, смогла вдруг пре- ка производится внутри Xen. Замеодолеть все трудности? Верить этому чу, мне для этого не пришлось переили смеяться? Но есть и одно специ- собирать установочный диск для дафичное для OES замечание. В процессе унгрейда Grub. То есть разработчики установки SLES необходимо отказать- openSUSE и SLES так и не пообщались ся от настройки и запуска OpenLDAP, на эту тему за прошедший год с появтак как он будет конфликтовать с Novell ления такой проблемы. И возможно, eDirectory, служащим базой учетных за- это не и ошибка вовсе, а, как сейчас писей в OES 2. Если этого не сделать, говорят, «фича»! то ничего страшного, YaST2 предлоКак только установка SLES 10 SP1 жит устранить его путем деинсталля- завершилась, я подключил OES 2 в качестве дополнительного продукции OpenLDAP самостоятельно.
10
Но, конечно, изменилось не только меню YaST2. Согласно пресс-релизу в системе появились многочисленные и чрезвычайно важные службы. Самое интересное – управление через веб-портал. Тема эта бесконечная. И на самом деле способна сильно удивить тех, кто не знаком с проектом Webmin [8] (чтобы не конкурировать с YaST, этот веб-администратор был предусмотрительно удален несколько лет назад из SuSE Linux, как тогда назывался предок openSUSE). Можно отметить продвинутую манеру подключения этой возможности: на основном сетевом адресе создается http-ресурс, содержащий ссылки на другие веб-панели управления, что позволяет не запоминать их порты и адреса. Опять же это так очевидно, что, предполагаю, входит в стандартный перечень настроек не только у меня, но и у многих других системных администраторов. Но ведь, чем-то должен отличаться SLES от openSUSE, кроме нормальной версии Grub? Чтобы завершить тему веб-панелей, приведу скриншот, содержащий основную панель управления сервером, и названия нескольких других в области вкладок браузера (см. рис. 4). Первая из вкладок соответствует основной странице созданного сервера, а остальные открыты по ссылкам. Функциональность основной панели позволяет контролировать выполнение ключевых сервисов, изменять параметры многих подсистем и перезапускать сам сервер. Можно утверждать, что веб-портал позволит системным администраторам во многих случаях не замечать в OES 2 того, что он выполняется в среде GNU/Linux. Что тоже важный
администрирование фактор, облегчающий миграцию и позволяющий снизить нагрузку на системного администратора, если GNU/Linux для него является чуждой средой. В тех случаях, когда миграция контента затруднена, OES 2 поддерживает выполнение кода NetWare 6.5 в Xen в режиме паравиртуализации. Чтобы это было правильно понято, объясню, именно запуск в режиме паравиртуализации позволяет до минимума сократить системные затраты на обслуживание слоя инкапсуляции виртуальной среды. То есть это надо понимать не как недостаток, а как серьезное достижение, позволяющее не только увеличить производительность виртуальных машин, но и одновременно воспользоваться такими благами Xen, как онлайновая миграция доменов для обеспечения балансировки нагрузки и повышения отказоустойчивости. С другой стороны, существование подобной возможности свидетельствует о том что, скорее всего, достичь полной взаимозаменяемости NetWare и OES 2 не получилось. Возможно, пока. Еще одним заявленным новшеством является служба Domain Service for Windows (DSFW). Согласно пресс-релизу [2] дословно – «эта технология позволит Linux-серверам вести себя так, как если бы это были серверы Active Directory». Увы, в представленной версии этого нет. Чтобы убедиться, достаточно просканировать созданный сервер по портам. Вот что получилось у меня: Not shown: 1683 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 389/tcp open ldap 443/tcp open https 445/tcp open microsoft-ds 524/tcp open ncp 631/tcp open ipp 636/tcp open ldapssl 5801/tcp open vnc-http-1 5901/tcp open vnc-1 8009/tcp open ajp13 MAC Address: 00:16:3E:53:57:5D (Xensource) Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.13 - 2.6.18 Uptime: 0.068 days (since Sat Oct 27 18:43:55 2007) Network Distance: 1 hop
верить в тестовых условиях это невозможно. Верим на слово, что работает.
Закулисье Конечно, можно описывать все «закрыженные» опции на рис. 2 в подробностях, но снова воспользуюсь акцентами из пресс-релиза [2] – «осуществляет окончательный перевод всех служб [...] в число ключевых компонентов входят серверы DNS/DHCP с поддержкой службы каталога». Вот никогда бы не подумал, что bind и dhcpd, настроенные на использование LDAP, могут играть такую важную роль! Это повод присмотреться к ним повнимательнее. Начем с dhcpd. Единственный пакет, подходящий на роль dhcpd сервера, это novell-oes-dhcp-conf. Посмотрим содержимое: > rpm -qpl novell-oes-dhcp-conf-1.0.0-41.x86_64.rpm /etc/apparmor.d/usr.sbin.dhcpd /opt/novell /opt/novell/dhcp /opt/novell/dhcp/bin /opt/novell/dhcp/bin/create_default_object /opt/novell/dhcp/bin/dhcp_config.sh /opt/novell/dhcp/bin/ncs_dir.sh /opt/novell/dhcp/bin/uninstall.sh /opt/novell/sch /opt/novell/sch/dhcpschema.sch /var/opt/novell/schema /var/opt/novell/schema/ldif /var/opt/novell/schema/ldif/dhcpschema.ldif
Внутри нет бинарных файлов, представляющих сервер dhcpd. Сервер берется из SLES. Так в чем заключался перевод? В создании бинарника create_defauit_object? Далее проверм DNS. Здесь повезло: > rpm -qpl novell-bind-9.3.2-50.x86_64.rpm /etc/apparmor.d/opt.novell.named.bin.novell-named /etc/init.d/novell-named /etc/opt/novell/named /etc/opt/novell/named/root.hint /opt/novell/man /opt/novell/man/man8 /opt/novell/man/man8/novell-named.8.gz /opt/novell/named /opt/novell/named/bin /opt/novell/named/bin/dns-inst /opt/novell/named/bin/ncs_dir.sh /opt/novell/named/bin/novell-named /opt/novell/named/schema /opt/novell/named/schema/DNIP.SCH /usr/sbin/rcnovell-named /usr/share/omc /usr/share/omc/svcinfo.d /usr/share/omc/svcinfo.d/novell-named.xml /var/opt/novell/log/named /var/opt/novell/run/named
Сравните преведенное со списком открытых портов реального сервера с функцией AD PDC, найдите «15 отличий» и сделайте вывод сами. То есть наиболее ожидаемое функциональное расширение отсутствует. И как следствие скорее всего не получится полностью избавиться от установки специализированного пакета Novell Client на рабочие станции. Приятно лишь то, что клиент есть и для Windows Vista. В пакет входит и исполняемый бинарный файл, и новый Завершить перечень знакомых и теперь портированных скрипт для sysinit. И вот что внутри исполняемого файла: на SLES 10 сетевых служб можно традиционным, точнее > strings $(which novell-named) | grep "named version" сказать, фирменным, Novell NCP (NetWare Core Protocol). Далее начинаются сплошные новшества. Самое знаnamed version: BIND 9.3.2 (Sep 23 2007) чительное Novell Dynamic Storage Technology. В двух словах – средство, ранжирующее хранимые данные по степеИначе говоря, это модернизированный Bind от ISC ни важности и частоте использования и организующее пе- Software, в оригинале распространяемый по лицензии BSD, рераспределение их согласно произведенному подсчету что дает право не размещать исходные тексты на дистрив иерархической системе хранения и резервирования. Про- бутивных носителях, а всем тем, кто использует этот пакет,
№11, ноябрь 2007
11
администрирование
Рисунок 5. Изменение взаимосвязи архитектур
основания задуматься над причинами их сокрытия. Подобное было бы невозможно, если в качестве прототипа использовалось бы GPL-ПО.
Кто виноват… Теперь, когда основные особенности OES 2 рассмотрены, можно проанализировать перспективы этого продукта в целом и то место, которое он может занять на рынке сетевых платформ. Попробуем представить взаимосвязь архитектур UNIX/Linux, MS Windows и NetWare в графическом виде до появления OES 2 и после (см. рис. 5). Развитие Novell NetWare и MS Windows производилось в основном за счет сервисов рабочих групп. Для того чтобы интегрировать в их среду системы на платформах UNIX и GNU/ Linux приходилось в последних создавать совместимые средства. Но и Novell NetWare с MS Windows не избежали внедрения подсистем, сделанных по стандартам, пришедшим из среды *NIX, так как обе эти архитектуры претендовали на самостоятельную активность в среде Глобальной Сети. Что скрывать, в настоящий момент присутствие на рынке Novell NetWare ощущается слабо. Я сужу только по своему опыту. Безусловно, предприятия использующие этот продукт, исторически продолжают это делать скорее и сей-
12
час, но вряд ли следует ожидать, что не ми проприетарными аналогами! То связанная корпоративными стандарта- есть меняет бизнес-модель. В чем прими новая организация начнет создание влекательность решений OSS (Open информационной инфраструктуры на Source Software): n покупатель получает демонополиоснове Novell NetWare. Итак, признаем, что рынок в настозированную услугу поддержки; ящее время поделен между Windows- n после внедрения OSS невозможен шантаж технологиями; платформами и *NIX-платформами. В среде GNU/Linux, а значит, n применение OSS снижает для преди в openSUSE, а также и в SLES 10 приятия риск неверного решения по внедрению. SP1, уже имеются средства интеграции и поддержки функциональности Именно в силу перечисленных вырабочих групп MS Windows. Конечно, эти реализации пока уступают ориги- ше преимуществ многие произвональным системам от Microsoft, в чем дители ПО впускают «облегченные», собственно и заключается интрига но полнофункциональные версии своих продуктов под открытыми лицензияпротивостояния этих платформ. И вот внутри открытых платформ ми, снабжая лишь специфическими опсоздается OES 2, распространяемый циями коммерческие релизы. Но у функционала OES 2 нет откпо проприетарному принципу и декларирующий полную совместимость как рытых прототипов. Напротив, его внедс архитектурой систем на основе Novell рение «закроет» даже часть потенNetWare, так и MS Windows. Задумаем- циально бесплатных и ранее открыся, есть ли перспектива у такого синте- тых подсистем, таких как упомянутые тического решения? Или, говоря прос- DNS/DHCP. И уж совершенно безрассудным то, зачем потребителям SLES 10 SP1 нужно добавлять функциональность, выглядит внедрение Dynamic Storage Technology, так как оно приведет вносимую OES 2. Для начала обоснуем необходимость к перемещению огромных массии уместность перехода от openSUSE вов данных в систему, будущее коток SLES. Кстати сказать, эти рассуж- рой под большим сомнением. Есть ли дения применимы и к взаимоотноше- смысл строить корпоративное хранилище на закрытом технологическом ниям Fedora Core vs RHEL. С точки зрения технологии пре- стандарте? Ведь такое решение должимущества практически несуществен- но не только просуществовать приемные. Даже напротив, жесткие ограни- лемое для возврата инвестиций вречения на модернизацию кодов ключе- мя, но и не загнать его владельца в ловых компонентов (например, ядра) де- вушку, сделав зависимым от произволают малопривлекательным использо- дителя... примерно так, как «попались» вание лицензированных версий SLES. владельцы Novell NetWare! Но Enterprise Linux может понадобиться как способ получения сертифици- …и кому это нужно рованного и стандартизованного ре- Попробуем предположить, что может шения с гарантией преемственности появиться в SLES/openSUSE и OES 2 предоставления услуги. И вот тогда, в самом ближайшем будущем. Начкак правило, работодателем или вла- нем с открытых продуктов – там больдельцем бизнеса принимается реше- ше ясности. Понятно, что развитие будет проние о ... модернизации открытой версии до уровня «предприятия», то есть исходить в направлении повышения совместимости со стандартами сетедо SLES. Еще раз обратимся к рис. 5. OES 2 вых служб для рабочих групп Microsoft, не является самостоятельным продук- так как позволит занять ключевой сектом, значит, по той же логике, реше- тор рынка. И на платформе GNU/Linux ние о его использовании должно при- есть такое решение, всем известный ниматься в точной последователь- проект Samba 4 [9]. Этот продукт связывает воедино ности после перехода на SLES. И вот здесь логика перестает работать, так целую группу подсистем, заменяя некак OES 2 не развивает открытые ре- которые вопреки даже принятым дисшения, а ЗАМЕНЯЕТ их собственны- трибутивным стандартам. В частнос-
администрирование ти, Samba 4 cтроится на основе кода мых элементарных рассуждений, приHeimdal Kerberos, того самого, что не- верженцам OSS мало интересны редавно был выкинут из openSUSE и за- шения, лишь в дань моде названные менен на MIT Kerberos. открытыми, как OES 2, если они осноЗатем для увеличения скорости ваны на закрытых стандартах и исходработы и поддержки sessionless про- ных текстах. токола работы с LDAP внутри проекта Тогда, задумаемся, на какую же Samba 4 создается собственная реа- аудиторию ориентирован этот продукт, лизация LDAP-сервера. который для платформы GNU/Linux, Кроме того, этот проект лицензи- развиваемой в Novell, является, скоруется по GPL 3, что, возможно, со- рее, помехой? здаст трудности для интеграции его Ответ очевиден. Open Enterprise даже в SLES. Server – это единственная возможНо игнорировать эту разработку не- ность не бросить на произвол тех невозможно, и точно так же, как не полу- счастных корпоративных клиентов, кочилось в угоду непонятно кем в Novell, торые не успели избавиться от Novell Inc. принятому решению избавиться NetWare, перейдя на MS Windows. Поот KDE, точно так же можно утверж- тому-то вопросам миграции уделено дать, что Samba 4 обязательно будет столько внимания. Потому-то создав openSUSE. А значит, рано или поздно ны средства, скрывающие платфорбудет и в SUSE Enterprise Linux. Но мо- менные особенности GNU/Linux. Потожет ли такое решение попасть в OES? му-то так нещадно из SLES удаляются Разберемся. целые подсистемы. Ясно, что в условиВ OES совместимость с Active ях спасательной операции просто неDirectory предполагается достичь пу- когда миндальничать. тем, вероятно, на основе портироваВыход второго релиза OES следуния лицензированных исключительно ет считать второй попыткой устранеNovell, Inc. технологий Microsoft [10], ко- ния Novell NetWare, ставшей всем в тяторые никогда и никоим образом не по- гость. Этот «Билл» должен быть убит, падут в OSS. если не с выходом OES 2, то к появлеТеперь вопрос! Если ради сохра- нию OES 3 уже непременно! нения eDirectory позволено выкидыВыражу надежду, что пресловувать OpenLDAP, то можно ли пред- тый Билл, или, если угодно, Novell положить, что рано или поздно, точ- NetWare, будет ликвидирован раньше, но так же, как сейчас, работа по про- чем успеет окончательно превратитьтоколам SMB/CIFS строится на ос- ся в «неуловимого Джо», который ненове Samba 3, будет создано реше- уловим лишь потому, что никого не инние на основе Samba 4, сохраняющее тересует! eDirectory в качестве аутентификационной базы. Может, еще не все Возьму на себя смелость предполо- потеряно? жить, что нет! Иначе говоря, OES уже И все-таки попробуем завершить стасейчас является конкурентом SLES, тью на позитивной ноте. а после появления Samba 4 станет конКомпания Novell, выпустив OES 2, фликтовать в открытую. демонстрирует все симптомы раздвоВторая серия риторических воп- ения сознания и фактически ставит росов: могут ли в рамках одной ком- потребителей перед выбором: предпании развиваться два конкурентных почесть ли пока несовершенный OSS продукта, претендующих на один сек- вместе с openSUSE и SLES, или встать тор рынка? Какое из этих несовмести- на путь конформизма и снова платить мых решений будет финансироваться Microsoft за технологии, но через касв первую очередь? Ну и совсем забав- су Novell, Inc. Причем одна часть комное предположение, быть может, дан- пании агитирует за OSS, а другая такный расклад является неожиданным же настойчиво за Microsoft. для маркетологов Novell, Inc.? Одна часть приобретает бизнес Вот теперь самое время поговорить SUSE AG, возвращает на работу Хуо ловушках. Напомню, 7 из 10 добавоч- берта Мантеля (Hubert Mantel), отных иконок YaST2 посвящены вопро- казывается прекращать поддержсам миграции. Затем, как видно из са- ку KDE, выкидывает надоедливый
№11, ноябрь 2007
и кривой ZMD (ZENworks Management Daemon)... А другая увольняет Хуберта Мантеля (основателя SUSE), пытается, слепо подражая RHEL, сделать Gnome приоритетным менеджером окон, навязывает ZMD, как штатный демон обновления, создает прецедент патентного соглашения с Microsoft и, наконец, выпускает OES 2! Я использую в своей работе SUSE Linux с версии 6.1, то есть достаточно долго, поэтому высказываю заинтересованность в той части компании Novell, что пытается строить бизнес на основе OSS. Второму же alter ego Novell не следует забывать, что Open Source по свойствам близок к легендарному восточному тигру, оседлав которого, затем очень трудно спрыгнуть обратно. И такой прыжок для одной, близкой Novell, Inc. компании, а именно SCO Group, уже закончился банкротством. 1. Михаил Рамендик. Тайны Linux-сканадала: суды, кражи и самоубийства. CNews, 17.10.07 – http://cnews.ru/reviews/ index.shtml?2007/10/17/270829. 2. Официальный пресс-релиз Novell OES2 – http://www.novell.com/russia/ news/?news=93. 3. Страница загрузки дисковых имиджей Novell OES2 – http://www.novell.com/ documentation/oes2/esd/di_oes2.html. 4. Create an Integration OES2/SLES10SP1 DVD Image. Novell Cool Solutions. By Glen Davis – http://www.novell.com/ coolsolutions/tools/19748.html. 5. Novell Open Enterprise Server. Linux Installation Guide. (c) 2005-2007 Novell, Inc. 22.10.07. 6. Яремчук С. Каковы первые впечатления от работы с openSUSE 10.3. //Системный администратор, №11, 2007 г. – С. 14-17. 7. Письмо Джефа Махони (Jeff Mahoney) из SUSE Labs о прекращении поддержки ReiserFS. 27.09.2006 – http:// linux.wordpress.com/2006/09/27/suse102-ditching-reiserfs-as-it-default-fs. 8. Домашняя страница проекта Webmin – http://www.webmin.com. 9. Домашняя страница проекта Samba – http://www.samba.org. 10. С е н с а ц и я : W i n d o w s п о д р у ж и л а с ь с L i n u x . C N ews , 0 3 .11.0 6 – http://www.cnews.ru/news/top/index. shtml?2006/11/03/216169.
13
администрирование
Каковы первые впечатления от работы с openSUSE 10.3
Сергей Яремчук Как и было обещано, в начале октября компания Novell представила следующую версию 10.3 свободного дистрибутива openSUSE. Этому дистрибутиву, прочно обосновавшемуся в первой пятерке рейтинга DistroWatch.com, и посвящен обзор.
К
омпания Novell уже более 20 лет лем со стороны Novell. Таким образом, Предыдущая версия openSUSE занимается разработкой опе- к разработке привлекаются дополни- была выпущена в декабре 2006, тарационных систем, и покупка тельные силы и обкатываются новов- ким образом, отмечаем первое отлив конце 2003 года немецкого произ- ведения, переносимые затем в ком- чие нового выпуска от предыдущего – водителя дистрибутива SuSE Linux – мерческий дистрибутив. изменение цикла разработки. Для поэто один из шагов по освоению рынка Сегодня предлагаются три ва- вышения качества конечного продукпрограммных продуктов с открытыми рианта дистрибутива: SUSE Linux та alpha/beta-тестирование затянулось исходными кодами. При этом Novell Enterprise, SUSE Linux Enterprise почти на год. использовала почти ту же схему, что Desktop и openSUSE. Последний можи RedHat. То есть создается коммер- но свободно скачать и использовать Установка openSUSE ческая версия дистрибутива, подде- без каких-либо отчислений разработ- Для загрузки на домашней странице [1] рживаемая компанией, и одновремен- чикам. Несмотря на некоторую степень через BitTorrent или HTTP, FTP доступно существует свободная, разрабаты- свободы в его разработке, в нем можно ны CD- и DVD-образы, обозначенные ваемая при поддержке общества Open увидеть, каким путем пойдет развитие как GM (Gold Master, то есть преднаSource, хотя и под постоянным контро- корпоративного варианта. значенные для записи на диск), соб-
14
администрирование ранные для архитектур i386 (i586 оп- онно, вставив диск с дисттимизация), x86_64 и Power PC (толь- рибутивом в привод и зако DVD). 2 ноября была представлена грузившись с него, или иси LiveCD-версия. пользуя PXE-загрузку по сеПричем следует учитывать, что ти. Также внутри образа есть в случае CD-варианта необходимо исполняемый файл, запусвыбирать между образом с KDE 3.5.7 тив который, можно начать или Gnome 2.20. процесс установки прямо В DVD -верс ии дос т упна бета из Windows. KDE 4.0, предназначенная для ознаПоследний вариант докомительных целей, кроме этого вклю- статочно интересен. Появивчены и некоторые стабильные прило- шийся мастер сначала попжения из KDE4, которые можно уста- росит выбрать язык установить без самой среды. новки (русского в большом Рисунок 1. Мастер установки из Windows В CD-варианте openSUSE под- списке нет), затем следует держивается только английский язык, принять условия GNU GPL v2 (на диске шагом абсолютно без каких-либо запросов сделает попытку соединиться в DVD – 16 языков, среди которых есть есть и третья версия лицензии). и русский. Другие локализации можНа третьем шаге можно отметить с репозитарием openSUSE, и если тано установить из репозитария или ис- пункт «Display Advanced Options», ко- кого не обнаружит, то предложит пропользовать дополнительный диск – торый по идее должен на следующем должить установку с локального реExtra Languages. шаге открыть доступ к расширенным позитория на DVD или CD. Непонятно, Отдельный образ Add-On CD, ко- настройкам, под которыми понимается почему не сделали наоборот, ведь есторый отмечен как optional, содержит выбор другой архитектуры (см. рис. 1). ли пользователь скачал целый диск, то вполне вероятно и собирается устаПО, распространяемое по ограничен- Вот собственно и все. После этого в файл boot.ini бу- новку производить именно с него. ным, несвободным лицензиям. Кроме Далее выбираем раскладку клавитого, желающие могут приобрести дис- дет прописана новая строка:«C:\ ки в комплекте с сопутствующей доку- grldr="openSUSE 10.3 installer (LOCAL)"», атуры и в следующем окне то, чем соментацией (на момент написания этих выбор которого при загрузке позво- бираемся в данный момент заниматьстрок пока можно было только сделать лит начать процесс установки систе- ся. Зайдя в пункт «Setting», можно измы, а в указанном каталоге появят- менить язык интерфейса на русский. предзаказ). После указания «Запустить устаВ коробочной версии доступны два ся файлы, обеспечивающие загрузку. двухслойных односторонних устано- Такой вариант установки на первом новку или систему», будет предложевочных диска DVD-9 для 32 и 64‑раз- этапе несколько отличается от тради- но запустить собственно установку или обновить систему, загрузить устарядных систем (без разделения по ар- ционного. хитектурам) с 16 Гб информации, плюс Диск, например, уже можно из при- новленную систему и запустить спаса90-ти дневная поддержка после уста- вода извлечь потому, что первым же тельную систему. новки. Причем следует отметить, что документация, идущая с SUSE, всегда хорошего качества. Здесь уже каждый выбирает то, что ему действительно необходимо. Если планируется установка по сети с HTTP, FTP, NFS, SMB или жесткого диска, можно использовать мини‑CD, включающий минимальный набор, обеспечивающий загрузку и установку системы через сеть. Для знакомства я выбрал CD-вариант с рабочим окружением KDE, размер файла чуть больше 690 Мб. Кстати, следует отметить, что практически одновременно с релизом стала доступна и русскоязычная документация по дистрибутиву [2], на которой можно познакомиться с основными нововведениями. Запустить процесс установки можно несколькими способами. ТрадициРисунок 2. Рабочий стол и меню KDE
№11, ноябрь 2007
15
администрирование
Рисунок 3. YaST
Далее выбираем носитель, и тольYaST, при помощи которого произко после этого будет загружен YaST. водятся установка и дальнейшая наПроблем с загрузкой в таком варианте стройка системы, по-прежнему прост, у меня не было, но это не значит, что их логичен и понятен. не может быть. Но никаких дополниЛицензионное соглашение с Novell, тельных параметров указать при та- с которым необходимо ознакомитьком варианте невозможно. ся перед установкой, уже переведено При загрузке с диска в первом ок- на русский язык. не можно указать некоторые дополниСразу же бросается в глаза наиметельные установки: выбрать язык, ви- нование DVD-привода /dev/sr0, вслед деорежим, указать источник, передать за Fedora openSUSE перешел на иснекоторые параметры ядру. пользование libata, поэтому никаких Есть и пункт «Rescue System», поз- /dev/hda уже не будет. воляющий восстановить систему. ПриВ процессе анализа устройств YaST чем с различными предложениями выдает запросы на активацию некопо восстановлению системы по ходу торых модулей найденных устройств, установки придется сталкиваться не- например, для работы с USB-накопиоднократно. Это несомненно большой телями. плюс, пользователь любого уровня смоВ процессе установки можно добажет без проблем привести в порядок вить сетевые репозитарии и включить упавшую систему. Особенно если срав- дополнительный диск. В первом слунить с Ubuntu, где вообще нет ничего по- чае на следующем шаге будет преддобного, пользователю которого даже ложено настроить сеть. для того, чтобы восстановить загрузчик, После анализа системы YaST предложит свой вариант установки, в том требуются некоторые знания. Если производится установка числе разметку жесткого диска, вы64‑битного варианта на 64-битную бор приложений, региональные устаплатформу, нажав клавишу <F7>, мож- новки. Если он устраивает пользоватено изменить архитектуру устанавлива- ля, достаточно нажать «Принять», все емой системы на 32-битную. остальное YaST сделает сам. Кстати, разработчики не измениПри ручной разметке разделов ли своим традициям и подарили сво- можно указать любую из файловых им поклонникам очередное «пасхаль- систем – ext2/3, ReiserFS, XFS, JFS ное яйцо». При нажатии клавиши <F8> или своп-раздел. Хотя при выборе JFS появляется переливающееся изобра- появляется сообщение о том, что эта жение фирменного хамелеона, убрать файловая система не поддерживается который можно, нажав <F9>. openSUSE, так как недостаточно про-
16
тестирована и может неправильно интегрироваться в систему. Есть возможность указать дополнительные параметры монтирования, зашифровать файловую систему, в том числе и корневую. Сам процесс установки даже на далеко не самом современном оборудовании проходит быстро; хотя индикатор и показал в начале 1 час 15 минут, установка длилась всего минут 20. Далее следуют перезагрузка и первичная настройка системы. Причем, в отличие от установки, интерфейс YaST здесь уже исключительно на английском (в CD-варианте). Обратите внимание на сетевые настройки по умолчанию – протокол IPv6 включен, брандмауэр включен, доступ по SSH закрыт. При этом весьма полезной является возможность переназначить назначение сетевых карт, указав в настройках во вкладке «General → Firewall Zone» его принадлежность ко внутренней или внешней сети, DMZ или No Zone (весь трафик блокируется). Здесь же выбирается вариант активации устройства и параметры MTU. Удобно также, что во время установки можно настроить другие виды соединений DSL, ISDN, PPPoE и модем, разрешить доступ по VNC, а также метод аутентификации (локальный, AD, LDAP, NIS). ОpenSUSE предоставляет два способа управления сетевыми интерфейсами: традиционный (ifup) и KNetworkManager. Если выбран последний вариант, пользователю предоставляются права включать и отключать сетевые интерфейсы по его желанию. Также обратите внимание на флажок «Clone This System for AutoYaST», который сохранит профиль установки в файл /root/autoyast.xml.
Впервые впечатления Как неоднократно сообщалось, скорость загрузки системы увеличилась. Я не производил специальных замеров, но загружается openSUSE заметно быстрее, чем установленный на том же компьютере KUbuntu. Интерфейс openSUSE в очередной раз изменил цвет. Все, начиная от загрузчика Grub (в меню которого нашлись все системы установленные на
администрирование моем компьютере), приглашения KDM и рабочий стол выполнены в единой зеленоватой гамме (см. рис. 2). Как уже говорилось, пакеты для локализации интерфейса необходимо доустанавливать отдельно, но некоторые меню YaST уже переведены. Приятно, что работает клавиатурная раскладка, переключение производится по <Ctrl+Shift>, причем сразу предложен вариант winkeys. На компьютерах с картами ATI Radeon 7000 и 8500 вывод «glxinfo | grep rendering» показал, что 3D-ускорение работает, поэтому сразу же можно посмотреть возможности идущего в комплекте Compiz 0.5.4. Как и было обещано, полностью переработана система управления пакетами, уже нет обработки метаданных, загружающей систему регулярной малополезной работой, улучшена совместимость с yum и smart. В меню YaST (cм. рис. 3) – «Программное обеспечение → Репозитарии сообщества» можно дополнительно выбрать репозитарии – Packman, Guru, OSS, non-OSS. В состав CD-версии вошел только минимальный набор приложений так, что к репозитарию обратиться в любом случае придется. Также если выбрать настройку одного из пунктов YaST, пакеты обеспечивающие функциональность которого еще не установлены, последует предложение доустановить недостающее. Наличие обновлений покажет полностью переработанный аплет, помещенный в «Панель задач». В новом openSUSE 10.3 впервые реализована возможность «1-Сlick install», для установки приложения достаточно одного щелчка мышкой. Вообще-то щелчка часто сделать нужно целых три, но пользователям Linspire/ Freespire, устанавливающих приложения с помощью «Click'N'Run» (CNR), гордиться особо уже и нечем. Установка с командной строки производится при помощи zypper. Обновить все пакеты с его помощью очень просто:
терфейсом. Последнее нововведение «My Computer», выбор которого покажет улучшает интеграцию с этой средой. системную информацию (sysinfo:/). Традиционно в дистрибу тивах Вставленный USB-флэш-диск был Novell защиту от сетевых атак и виру- распознан и смонтирован, безопассов обеспечивает комплекс AppArmor. но размонтировать его можно как раз Выбрав одноименный пункт в YaST из «My Computer», хотя если он неко(см. рис. 4), можно добавить профиль торое время не использовался, он разприложения вручную или используя монтируется автоматически. мастер, обновить профили с репозиВ отличие от Fedora и Ubuntu тария, исправить или удалить. openSUSE 10.3 изначально поддерМеню KDE построено несколько живает воспроизведение композиций необычно, оно разбито на несколь- в формате МР3. ко вк ладок (Favorites, Application, Видеопроигрыватель Kaf feine Computer, History и Leave), в каждом при запуске сообщил, что не нашел подпункты по назначению, чтобы пе- Win32-кодеки и libdvdcss, а при попытрейти дальше, необходимо щелкнуть ке просмотреть фильм в формате DivX мышкой, и так дальше. предложил загрузить нужный кодек. В итоге, чтобы запустить Amarok, Аналогично ведет себя и Amarok, если мне понадобилось сделать три щелч- попробовать проиграть музыкальный ка, Kopete вызывается за 4, хотя час- файл неизвестного формата. то используемые приложения затем Остается добавить, что в состав появляются в Favorites, и добраться openSUSE 10.3 вошли последние до них проще. Вероятно, это на люби- на момент выхода дистрибутива вертеля, но мне больше нравится тради- сии приложений. В частности ядро ционное меню KUbuntu. 2.6.22.5, OpenOffice 2.3 и другие. Кстати, хамелеон, заменяющий Итак, релиз состоялся. Каждый детрадиционную букву К в меню KDE, лает свой выбор и ставит свои оценпри наведении на него мышки меня- ки. Дистрибутив, выходящий под марет цвет. кой SUSE, как и прежде, отличают неСам KDE устанавливается в /opt, мецкая аккуратность, продуманность судя по различным обзорам Gnome и качество. и KDE 4.0 в /usr. Кроме аплета openSUSE Updater 1. Страница загрузки дистрибу тива и KNetworkManager в панели задач доopenSUSE – http://software.opensuse.org. ступен Kerry Beagle и KPowersave. 2. Русскоязычная версия портала – http:// На рабочем столе размещен ярлык ru.opensuse.org/10.3.
zypper update -t package
В YaST полностью переработан модуль настройки сетевых карт, а если используется рабочее окружение Gnome, то вы встретитесь с новинкой OpenSUSE 10.3 – YaST с GTK-ин-
№11, ноябрь 2007
Рисунок 4. Настройки AppArmor в YaST
17
администрирование
Mandriva Corporate Server 4.0: Linux‑сервер от мастеров десктопа
Дмитрий Шурупов Французская компания Mandriva снискала в Linux-сообществе славу поставщика популярных десктоп-решений, ориентированных в первую очередь на новичков. Однако ее бизнес вовсе не ограничивается продукцией подобного рода. Это и логично: даже небольшой успех на корпоративном рынке способен окупить существенные затраты. В статье речь пойдет об одном из ключевых решений Mandriva для предприятий – ее «корпоративном сервере» четвертой версии.
Краткая предыстория Несмотря на прочную и устоявшуюся ассоциацию Mandriva с красивыми и «дружелюбными» дистрибутивами для настольных компьютеров, компания еще 4 сентября 2000 года [1] выпустила свой первый Corporate Server – причем сразу версии 1.0.1. К сожалению, найти в Интернете официальный анонс этого релиза или хоть какие-нибудь проверенные подробности о нем оказалось затруднительной задачей, а все упоминания сво-
18
дятся к выдержкам об уязвимостях в тех или иных пакетах данного дистрибутива из архивов рассылок по безопасности. Однако в любом случае напрашивается вывод, что релиз Mandriva CS1 основывался на Mandrakelinux 7.x, а по счастливому стечению обстоятельств эта система – мое первое и до недавних пор последнее знакомство с продукцией Mandriva. Отличный повод оценить достижения французов за минувшие годы на фоне других
многочисленных проектов Linux/Open Source, не правда ли? За 7 лет компанией было выпущено всего четыре версии своего сервера для предприятий, и до текущего момента временные промежутки между релизами неустанно сокращались: между CS 1.0.1 и 2.1 прошло почти два с половиной года, с 2.1 до 3.0 – около 2 лет, а до 4.0 – чуть более полутора лет. В связи с этим появились основания полагать, что последний интервал станет во главе нормального цикла
администрирование разработки Mandriva CS. А это в свою очередь означает, что наконец-то пришло время, когда можно аргументированно ожидать от продукта зрелости и стабильности. Что ж, приступим к сбору урожая...
Встречайте: Mandriva Corporate Server 4.0! Mandriva объявила о выпуске Corporate Server 4 в конце сентября прошлого года [2]. Поскольку выход актуального на тот момент десктоп-дистрибутива Mandriva версии 2007.0 состоялся несколько позже, в состав системы вошли пакеты «промежуточной свежести» (между релизами 2006 и 2007). Основа Mandriva CS 4 – это, конечно же, стандартный набор свободных компонентов [3]: n ядро Linux 2.6.12; n средства виртуализации Xen 3.0.1 и OpenVZ; n с л у жба ката л о го в OpenLDAP 2.3.27; n СУБД MySQL 5.0.24 и PostgreSQL 8.1.4; n веб-сервер Apache 2.2.3; n свободная реализация протоколов SMB/CIFS Samba 3.0.22; n FTP-серверы Proftpd 1.2.10 и Pureftp 1.0.20; n сервер печати CUPS 1.2.3, агенты транспортировки почты Postfix 2.2.11 и Sendmail 8.13.4; n IMAP-серверы Cyrus-IMAP 2.2.13 и Courier-IMAP 3.0.8; n DNS-сервер BIND 9.3.2; n DHCP- сервер ISC dhcp -ser ver 3.0.4; n серверы J2EE-приложений Tomcat, Jonas и Websphere CE. Как и положено «корпоративным» решениям, продукт официально работает с распространенным проприетарным программным обеспечением. В числе оного, обозначенного как «широкий спектр корпоративного серверного ПО», называются СУБД от Oracle и IBM (DB2), средства резервного копирования и восстановления данных от Arkeia, а также сюда стоит отнести технологию виртуализации от VMware. При этом Mandriva CS4 сертифицирован для работы с перечисленной продукцией. Кроме того, достоинством системы является сертифицированная и про-
№11, ноябрь 2007
Коробка с Mandriva CS 4.0 и руководство пользователя
веренная поддержка современного, опять же актуального в корпоративной среде, оборудования, к которому относятся двухъядерные чипы Intel, bladeсерверы, загрузка через SAN (для машин HP), SAN от NEC, сетевые принтеры RICOH и Xerox. И последнее – сервер Mandriva CS 4.0 соответствует популярному стандарту для Linux-дистрибутивов LSB (Linux Standard Base). Но все это – информация для рекламных буклетов и впечатлительных, непроницательных менеджеров. Истинное лицо любой операционной системы познается в условиях эксплуатации. Итак, начинаем практические испытания.
Установка
ти, помимо привычных параметров для ядра Linux представлен выбор режима установки: текстовый, графический с меньшим разрешением и обычный графический. Мой выбор пал на последний вариант (именно он предлагается по умолчанию). Первым делом (что, конечно, логично) инсталлятор Corporate Server ищет возможность не установить систему с нуля, а найти действующий дистрибутив (разумеется, «родной», от Mandriva) и обновить его до текущей версии. На этом этапе у меня произошел забавный казус: инсталлятор счел хорошей идеей обновить до Mandriva CS 4.0 установленный на машине ALT Linux 4.0 Server. Историческая обоснованность такого предложения радует (ALT Linux изначально базировался на Mandrake), но его актуальность сомнительна. Последо-
Гл а в н ы м с о д е р ж и м ы м к о р о б к и Mandriva Corporate Server 4.0 являются два DVD-диска (об остальном см. далее в статье). Первый содержит пакеты для архитектуры x86_32, а второй – x86_64. При загрузке с DVD пользователя приветствует экран с традиционной развилкой: запустить инсталлятор сразу или изучить возможные дополнительные опции. Среди последних, кстаРеклама OpenVZ во время установки системы
19
администрирование n среди «степеней безопасности» удивило присутствие двух вариантов использования дистрибутива в качестве клиента (со слабым уровнем защищенности): хоть и допускаю актуальность оных в некоторых случаях, оставлять один из них выбранным по умолчанию – плохая рекомендация; n скудные возможности в выборе устанавливаемых пакетов: фактически все ограничивается галочками у пакетов графической среды KDE и ее легковесной альтернативой IceWM, а также сервера OpenSSH (необходимость его включения впоследствии дополнительно проверяют, поскольку к нему сразу предоставляется удаленный доступ) – впрочем, скоро будет понятно, почему так. KDE и Konqueror в Mandriva CS 4.0
После перезагрузки и ввода логина и пароля пользователя встречает KDE 3.5 (при настройках по умолчанию)...
Система и ее настройка
Список «стеков» в FIBRIC
вавшая процедура мало чем отличалась от аналогичных в других дистрибутивах. Однако несколько особенностей стоит выделить: n установка проходит действительно быстро, и для ее проведения, по большому счету, не требуется серьезных познаний как в Linux, так и в компьютерах вообще (не могу назвать это существенным плюсом для корпоративной серверной операционной системы, но определенная аудитория, наверное, такое оценит);
20
n не с лучшей стороны показала себя русская локализация инсталлятора: переведено не всё (в частности, пропущены и важные моменты), а сами русские тексты местами плохо воспринимаются (несомненно, использовать слово «фиксы» в официально-деловом стиле речи недопустимо, но наибольшее впечатление все-таки произвели локализованные обозначения уровней «важности» устанавливаемых пакетов: «должно присутствовать», «важно», «весьма желательно»);
Первым делом захотелось настроить подключение сети, которое осуществляется через Wi-Fi. Понятно, что такой случай, мягко говоря, не очень типичен для серверов, однако, раз уж он формально допустим, хотелось бы увидеть адекватную реакцию системы – не получилось... В Harddrake2 было быстро обнаружено отвечающее за это устройство, но попытки активизировать его не увенчались успехом. Для карты потребовался пакет ipw3945-kernel. При его установке сообщили, что «некоторые пакеты необходимы и недоступны», зато «их можно найти в Mandriva Club или коммерческих релизах Mandriva». Заявление, прямо скажем, странноватое... Но окончательно сразил результат обращения к альтернативному варианту – «использовать драйвер Windows (с ndiswrapper)». Система на это действие ответила, что установить необходимый пакет ndiswrapper попросту «невозможно». Но ничего – посмотрим на CS4 без Интернета... И время, требуемое для установки системы, и первые ощущения от графического окружения явным образом указывают на одно: изначальная конфигурация Mandriva CS 4.0 минималь-
администрирование на. Но здесь все оказалось очень логично: в системе предусмотрены удобные средства для восполнения этого кажущегося пробела и инсталляции необходимых пакетов ПО буквально в 2 клика. Для установки распространенных наборов серверного программного обеспечения в CS 4.0 присутствует веб-приложение FIBRIC, оперирующее модными нынче «стеками». Среди доступных наборов: файловый и принтсервер (Samba, NFS, FTP), почтовый сервер (SMTP, POP/IMAP, Webmail, Sympa), сетевые сервисы (DHCP, DNS, NTP, PXE), сервер идентификации (авторизация пользователей через OpenLDAP или Kerberos), СУБД (MySQL, PostgreSQL), связка LAMP (Apache, PHP, Perl, mnoGoSearch), инСвязка LAMP в FIBRIC струменты системного администратора (Nagios, Webmin), сетевые утилиты. частую первостепенны техническая тельного языка (на будущее) в списке Для инсталляции любого «стека» поддержка и обслуживание в целом. формы по непонятным причинам вариант «Russian» упоминается дважили его компонентов достаточно клик- Что же нам предлагает Mandriva? «Коробка» CS4, разумеется, не ог- ды. После этого меня решили удивить нуть на «Install», отметить нужные элементы, по желанию определиться с до- раничивается двумя DVD и, как по- еще больше, сообщив, что на указанполнительными опциями (например, ложено, содержит книжку и ключ ре- ный e‑mail уже кто-то был зарегиств LAMP можно выбрать между PHP 4 гистрации. Прилагаемое «полное ру- рирован, хотя я на этом сайте вперководство пользователя» посвяще- вые. Впрочем, операции сброса парои 5) и запустить процесс. А во-вторых, в системе здравству- но Mandriva Linux в целом, и как след- ля и заведения нового аккаунта на тот ет «Центр управления Mandriva Linux», ствие преимущественно в нем рас- же ящик прошли быстро. Вслед за введением регистрацигде есть и управление пакетами. Этот сматриваются далекие от админист«Центр» служит главным средством рирования вопросы, как то: веб-сер- онного ключа в аккаунте мне предстаобщей настройки системы, объединяя финг с помощью Firefox или работа вили доступность двух сервисов: 1 год в себе все множество drak'ов Mandriva. с мультимедийными приложениями. скачивания/обновления Mandriva CS Причем выполнена данная нетриви- Есть и более интересные в контексте 4.0 и 1 год в Mandriva Expert (в рассматальная работа по созданию глобаль- Corporate Server материалы (например, риваемой в обзоре коробке обещали ного и «дружелюбного» к «обычным установка с помощью DrakConf, служ- техническую поддержку на 1 год). Еспользователям» конфигуратора весь- бы Mandriva Online), однако, к сожале- ли с первой услугой все понятно, то со ма качественно. Вполне предсказуе- нию, и здесь авторов не покидает ори- второй опцией я решил познакомитьмо, учитывая, что это является одним ентация на десктопы. В качестве плю- ся поплотнее. Веб-ресурс Mandriva Expert локаиз козырей Mandriva перед другими са книги можно выделить неплохой лизован на уже упомянутые три языка Linux-решениями для десктопов, но уровень перевода. Объяснимый интерес должна вызы- плюс немецкий и испанский, т.е. руссзаслуги сие не умаляет. «Центр управления» действительно предоставляет вать поддержка от Mandriva – тем бо- кого по-прежнему нет. Одно из клюдоступ ко многим настройкам, удобен лее что не так давно компания офи- чевых назначений сервиса – решение и прост в использовании, да и проблем циально «пришла в Россию», открыв проблем (называемых здесь «инцицентр разработок в Санкт-Петербур- дентами») пользователей систем комс ним не возникло. Последнее, что стоит здесь отме- ге [4]. В российском магазине доступтить: расстроило отсутствие каких- ны три редакции Mandriva CS 4.0, от- Внешний вид KDE либо специализированных доступ- личающиеся сроком поддержки: это Касательно внешнего вида KDE есть лишь одно замечание. При всем моем уважении ных «из коробки» средств для рабо- 1 год, 3 года и 5 лет [5]. Но на практике с технической под- к попыткам Mandriva сделать процесс адты с хвалеными технологиями виртудержкой все оказалось достаточно министрирования полностью доступным ализации. странно... Регистрацию ключа необхо- через GUI, вынужден признать, что пока димо проводить на сайте с англоязыч- до этого еще далеко, а поэтому расстроиСервис и поддержка Самостоятельная работа с системой – ным интерфейсом (опционально есть ло отсутствие на рабочем столе иконки каэто даже не полдела для корпоратив- французская и португальская локали- кого-либо терминала (третий уровень влоных серверных решений. Здесь за- зации), причем при выборе предпочти- женности меню KDE не считается).
№11, ноябрь 2007
21
администрирование но предлагают по всем вопросам обращаться к веб-ресурсам или заполнить форму с сообщением. Непонятно, почему у корпоративного клиента вообще должна возникать неразбериха в голове из-за таких простых вещей – все должно быть на видном месте и прозрачно, иначе людям это банально не понравится. В общем, пусть у каждого свои взгляды на то, насколько удобно решать все вопросы по использованию подобных продуктов через интернет, но со своей стороны хочу назвать такой подход со стороны производителя как минимум не очень удачным.
Итоги
Центр управления Mandriva Linux
Одной только численности слабых мест Mandriva Corporate Server 4, упомянутых в статье, должно быть достаточно для того, чтобы догадаться, какое общее впечатление на меня произвел этот продукт. Главный минус Mandriva – их решение для корпоративных заказчиков не выглядит как законченная, целостная и надежная система. Все это больше напоминает первые пробные шаги небольшой компании выйти на совершенно новый для себя рынок. Возможно, у французов в будущем и получится добиться успеха в области корпоративных серверов, но по состоянию на текущий момент это не представляется реальным. P.S. Важно понимать, что не очень позитивные «итоги» отображают лишь взгляд из России. Mandriva к нам пришла не так давно, и есть предпосылки к тому, чтобы ситуация исправилась. Но для этого придется проделать огромный объем работы, которая не должна ограничиваться техническими аспектами.
пании Mandriva. Общение допустимо на различных языках: помимо английского встречается французский, а в нескольких случаях были замечены испанский и португальский. Общее число рассмотренных инцидентов по корпоративному серверу совсем не впечатлило: например, в рубрике «Администрирование» для CS 4.0 на x86_32 был найден лишь один инцидент, а для архитектуры x86_64 – и вовсе ни одного. А ведь с момента выхода CS 4.0 прошло больше года... Другим важным компонентом Mandriva Expert является электронное обучение. На отдельном сайте Mandriva eTraining (к слову, все веб-сервисы Mandriva – самостоятельные сайты, на которых каждый раз нужно проходить авторизацию, вводя одни и те же данные, что не производит 1. http://de.wikipedia.org/wiki/Mandriva_Linux#Versionen. впечатления «красивой» целостности) представлено мно- 2. http://club.mandriva.com/xwiki/bin/view/Main/corporateserver4? жество курсов, призванных обучать пользователей базоlanguage=ru. вым вещам. Всего на момент моего посещения было заяв- 3. http://www.mandriva.com/enterprise/en/products/corporateлено 37 бесплатных курсов и 2 дополнительных для членов server‑4-0. Mandriva Club, но учитывая тот факт, что почти все курсы 4. http://www.linuxcenter.ru/lib/press/mandriva-ru-2007-1.phtml. повторяются на английском и французском языках, это чис- 5. http://shop.mandriva.ru/mandriva_corporate_server_4_box_ ло можно смело сокращать вдвое. Курсы – это по сути наdly_pl. боры слайдов с комментариями. Среди рассматриваемых тем: работа в командной строке, OpenOffice.org Writer, OpenLDAP, Apache, Samba, Webmin, сертификация от Mandriva и от LPI (Linux Professional Institute). Все это может оказаться полезным, но осмелюсь предположить, что российского потребителя, купившего корпоративное Linux-решение от Mandriva, будут волновать несколько другие проблемы. А судя по многочисленным признакам, про такое удобное средство общения с технической поддержкой, как телефон, можно забыть. Несмотря на то что этот способ упоминается в нескольких местах, на сайте Mandriva.Ru, подходящего номера найдено не было, на карточке с ключом про телефоны никакой информации нет, а на my.mandriva.com активУправление пакетами в Центре Mandriva
22
bugtraq Множественные уязвимости в Xpdf Программа: Xpdf 3.02 с установленным xpdf-3.02pl1.patch, возможно, более ранние версии. Опасность: Критическая. Описание: 1. Уязвимость существует из-за ошибки индексирования массива в методе DCTStream::readProgressive DataUnit() в файле xpdf/Stream.cc. Удаленный пользователь может с помощью специально сформированного PDF-файла вызвать повреждение памяти и выполнить произвольный код на целевой системе. 2. Целочисленное переполнение обнаружено в методе DCTStream::reset() в файле xpdf/Stream.cc. Удаленный пользователь может с помощью специально сформированного PDF-файла вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. 3. Уязвимость существует из-за ошибки проверки границ данных в методе CCITTFaxStream::lookChar() в файле xpdf/Stream.cc. Удаленный пользователь может с помощью PDF-файла, содержащего специально сформированный CCITTFaxDecode-фильтр, вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.foolabs.com/xpdf. Решение: В настоящее время способов устранения уязвимости не существует.
Переполнение буфера в Novell BorderManager Программа: Novell BorderManager 3.8, возможно, более ранние версии. Опасность: Высокая. Описание: Уязвимость существует из-за того, что приложение Client Trust (clntrust.exe) некорректно обрабатывает запросы на подтверждение подлинности, отправленные на порт 3024 UDP. Удаленный пользователь может вызвать переполнение динамической памяти с помощью специально сформированного запроса, содержащего дерево имен Novell без обратного слеша или нулевого символа, и выполнить произвольный код на целевой системе. U R L п р о и з в о д и т е л я : w w w. n o v e l l . c o m / p r o d u c t s / bordermanager. Решение: Установите исправление с сайта производителя – http://download.novell.com/Download?buildid= AuOWp2Xsvmc~.
Несколько уязвимостей в Opera
Программа: Opera версии до 9.24. Опасность: Высокая. Описание: 1. Уязвимость существует из-за того, что Opera может некорректно запускать внешние клиенты для почтовых и новостных сообщений. Удаленный пользователь может с помощью специально сформированного сайта выполнить произвольные команды на системе. Для успешной эксУязвимость в реализации DTLS плуатации уязвимости требуется, чтобы у жертвы был сконв OpenSSL фигурирован почтовый клиент. Программа: OpenSSL версии до 0.9.8f. 2. Уязвимость существует из-за ошибки при обработОпасность: Высокая. ке фреймов с различных веб сайтов. Удаленный пользоОписание: Уязвимость существует из-за неизвестной ватель может обойти ограничения безопасности, переошибки в реализации DTLS. Удаленный пользователь мо- записать функции в фрейма и выполнить произвольный жет выполнить произвольный код на целевой системе. код сценария в браузере жертвы в контексте безопасносПримечание: уязвимость существует только на системах, ти другого сайта. использующих DTLS. URL производителя: www.opera.com. URL производителя: www.openssl.org. Решение: Установите последнюю версию 9.24 с сайта проРешение: Установите последнюю версию 0.9.8f с сайта изводителя. производителя и пересоберите все приложения, использующие OpenSSL. Множественные уязвимости
в Verity Keyview SDK
Уязвимость при обработке апплетов в Sun JRE Программа: JDK and JRE 6 Update 2 и более ранние версии, JDK and JRE 5.0 Update 12 и более ранние версии, SDK and JRE 1.4.2_15 и более ранние версии, SDK and JRE 1.3.1_20 и более ранние версии. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки при обработке Java-апплетов. Удаленный пользователь может с помощью специально сформированного апплета просмотреть и записать произвольные файлы и выполнить произвольные локальные приложения на системе. URL производителя: www.sun.com. Решение: Установите исправление с сайта производителя.
№11, ноябрь 2007
Программа: Verity KeyView Export SDK 7.x, Verity KeyView Export SDK 8.x, Verity KeyView Export SDK 9.x, Verity KeyView Filter SDK 7.x, Verity KeyView Filter SDK 8.x, Verity KeyView Filter SDK 9.x, Verity KeyView Viewer SDK 7.x, Verity KeyView Viewer SDK 8.x, Verity KeyView Viewer SDK 9.x. Опасность: Высокая. Описание: Уязвимости существуют из-за различных ошибок в просмотрщиках файлов (в компонентах mifsr.dll, awsr.dll, kpagrdr.dll, exesr.dll, rtfsr.dll , mwsr.dll, exesr.dll, wp6sr.dll и lasr.dll). Удаленный пользователь может вызвать переполнение буфера и выполнить произвольный код на целевой системе. URL производителя: www.verity.com/products/oem/keyview. Решение: В настоящее время способов устранения уязвимости не существует.
Составил Александр Антипов
23
администрирование
Используем Bugzilla в качестве ServiceDesk
Рашид Ачилов «Программу хочу, – однажды заявляет вам начальник, – чтобы пользователи нам заявки не по телефону делали, а в ней, чтобы время фиксировалось, чтобы можно было исполнителя назначить, чтобы выполненную работу можно было описать, поиск, отчеты видеть, чтобы разные люди видели разные задачи... Да! И чтоб бесплатная или недорогая!». Даже не задумавшись, вы говорите одно слово: «Bugzilla».
Сделано в Mozilla ление этим тестерам и девелоперам Что же это за зверь такой – Bugzilla? информации о том, кто этой ошибкой В диком виде Bugzilla – система со- будет заниматься, каково текущее сопровождения исходного кода крупных стояние и т. д. программных продуктов, как правиBugzilla используется, кроме Mozilla, ло, с открытым кодом. Была разрабо- такими гигантами Open Source, как тана изначально в Mozilla, в те време- Samba, OpenOffice.org (там она назына, когда на базе браузера Netscape вается IssueZilla, но сути это не месоздавался открытый браузер Mozilla, няет). В ней есть система продуктов распавшийся впоследствии на Firefox, и компонентов, позволяющая назнаThunderbird, Sunbird... Назначение ее – чить ответственного за некоторый просбор информации от тестеров и деве- дукт или компонент, система раздачи лоперов о замеченных в работе про- прав на задачи (в Bugzilla они называграммы ошибках, а также предостав- ются тикетами), система информиро24
вания всех заинтересованных в решении такого-то тикета лиц посредством электронной почты, система отчетов и согласований, мощный и гибкий поиск по базе данных тикетов. Отображение списка ошибок можно в известной степени настроить под нужды конкретного пользователя – задать язык шаблонов (если установлено несколько), изменить формат списка, параметры оповещения... Сама Bugzilla написана на языке Perl с применением языка шаблонов из пакета p5-Template, что позволя-
администрирование ет легко адаптировать ее к конкретным нуждам. Вся информация хранится в базе данных. В качестве сервера базы данных могут выступать MySQL или PostgreSQL. Пользовательский интерфейс существует только один – через браузер. «Но позвольте, – скажете вы, – одно дело система, рассчитанная на профессионалов, другое дело – на офисный персонал». И будете неправы. Хоть Bugzilla создавалась изначально для программистов, людей квалифицированных, с помощью несложных пассов над конфигурационными файлами и исходными текстами можно превратить ее в более-менее полноценный ServiceDesk. Здесь сразу следует оговориться, что это будет только «более-менее» полноценный ServiceDesk. В нем не будет ни нарядов на работы, ни учета аппаратной конфигурации. Хотя интеграция с Active Directory будет. Зато бесплатно.
Внешний вид окна просмотра задачи после настроек
Найди десять отличий Каким же образом мы можем «скрыть программистское предназначение» Bugzilla и убедить пользователя, что это – просто такой ServiceDesk? Внутренних изменений для этого будет проведено немного, зато будет широко применяться главный принцип животного мира – мимикрия. Чтобы скрыть свое «прошлое», нам необходимо: n локализовать интерфейс; n всюду заменить слово «ошибка» на слово «задача»; n избавиться от непонятных пользователю параметров «ОС» и «Платформа»; n избавиться от непонятных обозначений типа P1, P2.., а также от обозначений серьезности «critical», «major» и прочее; n настроить Bugzilla так, чтбы она проверяла учетные записи по Active Directory; n ну и, конечно, заменить эмблему Bugzilla на корпоративный значок. Как видите, работы не так уж и много, и в основном она вся сводится к полной локализации системы, а также к удалению ненужных полей и внесению нужных в случае необходимости, а также перестановке этих полей в шаблонах отображения. Приступаем.
Установка и локализация Bugzilla Устанавливаем ее из пакета devel/bugzilla. Для работы Bugzilla потребуются MySQL и поистине огромная куча модулей на Perl, которая может быть чуть больше или чуть меньше, в зависимости от опций сборки, которые вы выберете. Обязательно отметьте опцию «WITH_LDAP», для того чтобы иметь возможность подключаться к серверу Active
№11, ноябрь 2007
Directory для проверки регистрационных имен и паролей. Понадобится также веб-сервер Apache. Bugzilla может быть оформлена как виртуальным хостом, так и просто установлена в отдельный каталог. Вот как будет выглядеть описание Bugzilla внутри тегов VirtualHost (домен shelton.net, а также подсетка 192.168.0.0/16 используются только в качестве примера). Не следует относится к этому примеру как к эталону – это просто один из способов, возможно, существуют и лучшие: <VirtualHost _default_:80> ServerAdmin webmaster@bugzilla.shelton.net DocumentRoot /usr/local/www/vhosts/bugzilla ServerName bugzilla.shelton.net ServerAlias bugs.shelton.ru ErrorLog /var/log/httpd/bugzilla/httpd-error TransferLog /var/log/httpd/bugzilla/access <Directory /usr/local/www/vhosts/bugzilla/> # ACL's for site Order deny,allow Deny from all Allow from 192.168.0.0/255.255.0.0 # Displaying options Options +ExecCGI AllowOverride Limit DirectoryIndex AddHandler cgi-script
index.cgi .cgi
</Directory> AddDefaultCharset
utf-8
</VirtualHost>
После установки Bugzilla выполняем скрипт checksetup.pl, который находится в корневом каталоге установки Bugzilla (будем предполагать, что это каталог, как в примере – /usr/ local/www/vhosts/bugzilla). Если скрипт обнаружит какую-то неразрешенную зависимость, то необходимо будет установить пакет, который содержит требуемый софт.
25
администрирование Редактируем файл localconfig, находящийся здесь же. в шаблонах до того, как Дополнительные поля Целиком его можно не просматривать (хотя, конечно, мож- их перенести в основную в Bugzilla но и просмотреть) – достаточно изменить значения трех па- часть. Bugzilla имеет возможность раметров: n db_name – имя базы данных Bugzilla; Кроме того, крайне же- расширять структуру базы данn db_user – имя пользователя для подключения к базе; лательно установить какую- ных за счет добавления доn db_pass – пароль для подключения к базе. нибудь программу визу- полнительных полей и соответствующего списка значеального управления СУБД ний. Эти дополнительные поПосле этого нужно запустить выбранную СУБД, если она MySQL – phpMyAdmin или еще не запущена, создать в ней учетную запись указанного подобную ему; в данной ста- ля выводятся по одному друг пользователя (не забыв установить ему записанный в кон- тье очень часто будут да- под другом в том месте, где фигурационном файле пароль), базу данных с выбранным ваться рекомендации сде- определено разработчиками, именем и дать пользователю все права на базу даных. лать что-либо, непосредс- хотя, конечно, можно это поменять. После этого снова запускаем checksetup.pl. Скрипт под- твенно редак тируя базу ключается к только что созданной базе и создает там не- Bugzilla. Разумеется, тем, обходимую структуру таблиц. Сейчас же нам будет предло- кто хорошо работает с консолью mysql, ничего такого не пожено ввести адрес электронной почты (который использу- надобится, ну а всем остальным настоятельно рекомендую ется по умолчанию в качестве логина) и пароль админист- phpMyAdmin, который и сам использовал для этой цели. ратора Bugzilla. Основная инсталляция готова. Перед тем, как начать самостоятельно вносить изменеДалее идем на сайт http://www.bugzilla.org/download/ ния в шаблоны, следует немного разобраться в том, как ус#localizations и загружаем комплект русифицированных троена Bugzilla изнутри. шаблонов для Bugzilla 3.0. Распаковываем полученный архив в каталог установки Bugzilla. Он не переписыва- Настройка Bugzilla ет никаких файлов, хотя нам все равно придется это сде- Как я уже говорил, вся Bugzilla написана на языке Perl с ислать потом вручную. После распаковки снова запускаем пользованием пакета p5-Template. Любителей объектноchecksetup.pl. Обращаю внимание вот именно на это – ло- ориентированного программирования, несомненно, поракализация Bugzilla должна проводиться до того, как в ней дует тот факт, что Bugzilla написана исключительно с испоявятся записи о задачах, потому что checksetup.pl, об- пользованием ООП. Шаблоны, необходимые для форминаружив локализованный комплект шаблонов, необрати- рования страниц, находятся в каталоге template. В зависимо перестраивает базу Bugzilla, откат к английской версии мости от локализации выбирается подкаталог, соответспосле этого невозможен. твующий локализации. Если запрошенный файл не может Что ж, большая часть работы по локализации выполне- быть найден, он ищется в каталоге en, так что все каталона. Я не зря сказал «большая часть». На самом деле уста- ги локализаций на самом деле не являются полными коновленная нами локализация неполная – она не изменяет пиями каталога en. Непосредственно файлы с Perl-класнекоторые элементы интерфейса, параметры задач, тек- сами находятся в каталоге Bugzilla. Их нам тоже придется сты в оповещениях, отправляемых по электронной почте. править, но не очень сильно, основная часть исправлений Все это нам предстоит сделать самостоятельно. придется на шаблоны. Сразу же после локализации можно обнаружить два Шаблоны представляют собой текстовые файлы, в коочень разочаровывающих недостатка: торых могут содержаться директивы пакета p5-Template n В сообщениях электронной почты в поле «Тема» вписы- или HTML/CSS/Javascript-код, который транслируется в вывается название задачи. Поскольку вся Bugzilla-ru пос- ходную страницу без изменений. троена с применением кодировки UTF-8, то и название Не забывайте, что все файлы шаблонов содержат текст будет вписано в кодировке UTF-8. Но дело в том, что все на языке, отличном от английского, лишь в кодировке UTF-8, наиболее популярные почтовые программы не понима- поэтому для их редактирования следует использовать тольют этой кодировки в поле темы и отображают ее непо- ко редактор, поддерживающий такую возможность. Например, я использую Quanta, хоть это и не совсем редактор. нятными значками! n Если используется браузер Konqueror, то можно с удивДиректив пакета p5-Template достаточно много, для их лением обнаружить, что несмотря на проведенную ру- полного описания смотрите документацию по пакету. Начсификацию русским интерфейс не стал. Bugzilla полу- нем мы с очевидного – замены слова «ошибка» на слово чает информацию от браузера о поддерживаемых язы- «задача» – ведь в ServiceDesk именно задача является баках и использует локализацию только в том случае, если зовым обьектом: браузер передает информацию (в Browser-Identication) --- /tmp/bugzilla-ru-3.0/template/ru/default/global/ ↵ о том, что он поддерживает русский язык. Если вы исvariables.none.tmpl Sat Jun 2 08:26:12 2007 пользуете нерусифицированный KDE, то, чтобы исполь+++ global/variables.none.tmpl Fri Jul 13 11:01:00 2007 @@ -44,33 +44,33 @@ зовать локализацию безусловно, придется переписать #%] файлы из каталога templates/ru в каталог templates/en. [% terms = { Хотя в этом тоже можно найти положительный момент – - "bug" => "ошибка", Konqueror, использующий каталог шаблонов templates/ - "bug_gen" => "ошибки", - "bug_dat" => "ошибке", en, можно использовать для тестирования изменений
26
администрирование - "bug_acc" => "ошибку", - "bug_abl" => "ошибкой", - "bug_obj" => "ошибке", - "Bug" => "Ошибка", - "Bug_gen" => "Ошибки", - "Bug_dat" => "Ошибке", - "Bug_acc" => "Ошибку", - "Bug_abl" => "Ошибкой", - "Bug_obj" => "Ошибке", # Стараемся не использовать в Bugzilla-ru - "abug" => "ошибка", # Стараемся не использовать в Bugzilla-ru - "ABug" => "Ошибка", - "bugs" => "ошибки", - "bugs_gen" => "ошибок", - "bugs_dat" => "ошибкам", - "bugs_acc" => "ошибки", - "bugs_abl" => "ошибками", - "bugs_obj" => "ошибках", - "Bugs" => "Ошибки", - "Bugs_gen" => "Ошибок", - "Bugs_dat" => "Ошибкам", - "Bugs_acc" => "Ошибки", - "Bugs_abl" => "Ошибками", - "Bugs_obj" => "Ошибках", - "zeroSearchResults" => "Ошибок не найдено", + "bug" => "задача", + "bug_gen" => "задачи", + "bug_dat" => "задаче", + "bug_acc" => "задачу", + "bug_abl" => "задачей", + "bug_obj" => "задаче", + "Bug" => "Задача", + "Bug_gen" => "Задачи", + "Bug_dat" => "Задаче", + "Bug_acc" => "Задачу", + "Bug_abl" => "Задачей", + "Bug_obj" => "Задаче", # Стараемся не использовать в Bugzilla-ru + "abug" => "задача", # Стараемся не использовать в Bugzilla-ru + "ABug" => "Bug", + "bugs" => "задачи", + "bugs_gen" => "задач", + "bugs_dat" => "задачам", + "bugs_acc" => "задачи", + "bugs_abl" => "задачами", + "bugs_obj" => "задач", + "Bugs" => "Задачи", + "Bugs_gen" => "Задач", + "Bugs_dat" => "Задачам", + "Bugs_acc" => "Задачи", + "Bugs_abl" => "Задачами", + "Bugs_obj" => "Задач", + "zeroSearchResults" => "Задач не найдено", "Bugzilla" => "Bugzilla" } %]
То, что переменная terms.ABug имеет значение «Bug» – не ошибка. Эта переменная используется только при формировании темы сообщения при отправке оповещения по электронной почте. Поскольку тема письма в UTF-8 отображается некорректно, мы изменим шаблон письма таким образом, что в теме будет писаться нейтральная английская фраза «New or changed task» («Новая или изменившаяся задача»). Да, я знаю, что это выглядит неудобно. Вы можете попробовать разобраться сами, как подправить функционал так, чтобы тема перекодировалась, допустим, в Windows‑1251, или подождать, пока это сделают другие и в шаблоне будет нормальная тема. Ну и можно просто смириться и оставить так, как сделано сейчас. Пока что приходится выбирать между строкой непонятного вида значков и английским текстом: --- /tmp/bugzilla-ru-3.0/template/ru/default/email/ ↵ newchangedmail.txt.tmpl Thu May 24 20:59:52 2007 +++ newchangedmail.txt.tmpl Fri Jul 13 11:10:40 2007
№11, ноябрь 2007
@@ -24,7 +24,7 @@ [% PROCESS "global/variables.none.tmpl" %] From: [% Param('mailfrom') %] To: [% to %] -Subject: [[% terms.Bug %] [%+ bugid %]] ↵ [% neworchanged %][%+ summary %] +Subject: [[% terms.ABug %] [%+ bugid %]] ↵ [% neworchanged %] new or changed task! Content-Type: text/plain; charset=utf-8 X-Bugzilla-Reason: [% reasonsheader %] X-Bugzilla-Type: newchanged @@ -41,6 +41,7 @@ X-Bugzilla-Changed-Fields: [% changedfields %] [%+ threadingmarker %] +[%+ summary %] [%+ Param('urlbase') %]show_bug.cgi?id=[% bugid %] [%+ diffs %]
Вместо темы письма мы выносим полное и читаемое наименование задачи в начало текста письма. Поскольку задача не может быть «исправлена», зато должна быть «завершена», мы вводим такой статус задачи. По-хорошему, конечно, статус должен звучать «нормально завершена» или «успешно завершена», но для интерфейса такое выражение слишком длинное. Статус же «исправлена» исчезает – зачем он нам? --- /tmp/bugzilla-ru-3.0/template/ru/default/global/ ↵ field-descs.none.tmpl Tue May 29 07:09:51 2007 +++ global/field-descs.none.tmpl Wed Jun 27 16:21:00 2007 @@ -111,7 +111,7 @@ "VERIFIED" => "Принята", "CLOSED" => "Закрыта" } %] -[% resolution_descs = { "FIXED" +[% resolution_descs = { "FIXED" "INVALID" "WONTFIX" "DUPLICATE"
=> "Исправлена", => "Завершена", => "Аннулирована", => "Отказано", => "Дублирующая",
Поскольку задачи будут ставиться не только относящиеся к компьютерам, убираем поля «ОС» и «Платформа» и заменяем их полями «Город» и «Подразделение» (в предположении, что наша компания достаточно крупная и имеет отделения различного типа, например, оптовые склады и розничные магазины) в других городах. На самом деле, мы, конечно, ничего не меняем, мы просто переименовываем само поле и заменяем его значения нужными нам (см. раздел 3 с описаниями изменений в базе данных). Кроме того, мы добавляем отображение дополнительного поля cf_addr («Адрес») в том месте, где нам этого хотелось бы (см. рисунок): --- /tmp/1/template/ru/default/bug/create/ ↵ create.html.tmpl Thu May 24 01:11:07 2007 +++ default/bug/create/create.html.tmpl ↵ Mon Aug 13 11:22:04 2007 @@ -231,7 +232,7 @@ [% sel = { description => 'Серьезность', ↵ name => 'bug_severity' } %] [% INCLUDE select %] [% sel = { description => 'Платформа', ↵ name => 'rep_platform' } %] + [% sel = { description => 'Город', ↵ name => 'rep_platform' } %] [% INCLUDE select %] </tr> @@ -245,10 +246,20 @@ </td> [% END %] [% sel = { description => 'ОС', ↵ name => 'op_sys' } %]
27
администрирование + [% sel = { description => 'Подразделение', ↵ name => 'op_sys' } %] [% INCLUDE select %] </tr> + <tr> + <td style="background-color: white; ↵ color: white">test</td> + <td align="right" valign="top" id="addr"> + [% USE Bugzilla %] + [% SET field = Bugzilla.get_fields({ name => ↵ "cf_addr" }) %] + [% SET value = ${field.name} ↵ IF ${field.name}.defined %] + [% PROCESS bug/field.html.tmpl editable=1 ↵ value_span=2 disabled=0 %] + </td> + </tr> + [% IF Param('usetargetmilestone') && ↵ Param('letsubmitterchoosemilestone') %] <tr> [% sel = { description => 'Запланировано', ↵ name => 'target_milestone' } %] @@ -394,10 +406,12 @@ [% FOREACH field = Bugzilla.get_fields({ obsolete => ↵ 0, custom => 1, enter_bug => 1 }) %] [% SET value = ${field.name} IF ${field.name}.defined %] + [% IF field.name != 'cf_addr' %] <tr> [% PROCESS bug/field.html.tmpl editable=1 value_span=2 %] </tr> [% END %] + [% END %] <tr> <td align="right"><strong>Аннотация:</strong></td>
Разберем приведенный патч поподробнее. Этот патч изменяет шаблон, используемый при создании новой задачи. Первая часть (строки 231-232) меняет отображение параметра «Платформа» на «Город». Вторая часть (строки 245‑246) меняет отображение параметра «ОС» на «Подразделение» и добавляет отображение дополнительного поля cf_addr непосредственно под полем «Подразделение». Третья часть (строки 394-406) пропускает отображение дополнительного поля cf_addr в том месте, где Bugzilla обычно отображает дополнительные поля. Исправляем описания полей в перечне глобальных переменных: --- /tmp/1/template/ru/default/global/ ↵ field-descs.none.tmpl Tue May 29 07:09:51 2007 +++ default/global/field-descs.none.tmpl ↵ Wed Aug 8 12:39:04 2007 @@ -36,6 +36,7 @@ "bug_status" => "Состояние", "changeddate" => "Дата последнего изменения", "cc" => "Подписчики", + "cf_addr" => "Адрес", "classification" => "Раздел", "cclist_accessible" => "Список подписчиков?", "component_id" => "Код компонента", @@ -50,7 +51,7 @@ "groupset" => "Группы", "keywords" => "Ключевые слова", "newcc" => "Подписчики", "op_sys" => "ОС", + "op_sys" => "Подразделение", "opendate" => "Дата открытия", "percentage_complete" => "% выполнения", "priority" => "Приоритет", @@ -58,7 +59,7 @@ "product" => "Продукт", "qa_contact" => "Приемка", "remaining_time" => "Осталось времени", "rep_platform" => "Платформа", + "rep_platform" => "Город", "reporter" => "Инициатор", "reporter_accessible" => "Инициатор доступен?", "resolution" => "Решение",
28
Исправляем описания полей в форме поиска задач: --- /tmp/1/template/ru/default/search/form.html.tmpl ↵ Tue May 29 06:45:55 2007 +++ default/search/form.html.tmpl Wed Aug 8 12:40:17 2007 @@ -406,7 +406,7 @@ <table> <tr> <th align="left"> <label for="rep_platform" accesskey="h"> ↵ <a href="page.cgi?id=fields.html# ↵ rep_platform">Платформа</a></label>: + <label for="rep_platform" accesskey="h"> ↵ <a href="page.cgi?id=fields.html# ↵ rep_platform">Город</a></label>: </th> </tr> <tr valign="top"> @@ -419,7 +419,7 @@ <table> <tr> <th align="left"> <label for="op_sys" accesskey="o"> ↵ <a href="page.cgi?id=fields.html# ↵ op_sys">ОС</a></label>: + <label for="op_sys" accesskey="o"> ↵ <a href="page.cgi?id=fields.html# ↵ op_sys">Подразделение</a></label>: </th> </tr> <tr valign="top">
Исправляем описания полей в форме одновременного редактирования нескольких задач: --- /tmp/1/template/ru/default/list/ ↵ edit-multiple.html.tmpl Tue May 22 00:44:10 2007 +++ default/list/edit-multiple.html.tmpl ↵ Tue Aug 7 18:59:53 2007 @@ -93,7 +93,7 @@ <th> <label for="rep_platform"> <a href="page.cgi?id=fields.html# ↵ rep_platform">Платформа</a>: + <a href="page.cgi?id=fields.html#rep_platform"> ↵ Город</a>: </label> </th> <td> @@ -116,7 +116,7 @@ <tr> <th> <label for="op_sys"> <a href="page.cgi?id=fields.html#op_sys">ОС</a>: + <a href="page.cgi?id=fields.html#op_sys"> ↵ Тип подразделения</a>: </label> </th> <td [% " colspan=\"3\"" ↵ IF !Param("usetargetmilestone") %]>
Исправляем описания полей и параметры отображения для списка задач: --- /tmp/1/template/ru/default/list/table.html.tmpl ↵ Tue May 22 01:03:48 2007 +++ default/list/table.html.tmpl Wed Aug 8 14:57:45 2007 @@ -42,24 +42,24 @@ [% abbrev = { "bug_severity" => { maxlength => 8 } , "priority" => { maxlength => 3 , ↵ title => "Прт" } , "rep_platform" => { maxlength => 3 , ↵ title => "Плф" } , "bug_status" => { maxlength => 10 } , "assigned_to" => { maxlength => 30 , ↵ ellipsis => "..." } , + "bug_severity" => { maxlength => 22 , ↵ title => "Серьезн" } , + "priority" => { maxlength => 16 , ↵ ellipsis => "...", title => "Приор" } ,
администрирование + "rep_platform" => { maxlength => 25 } , + "bug_status" => { maxlength => 24 } , + "assigned_to" => { maxlength => 30 , ↵ ellipsis => "..." , title => "Исполнитель" } , "assigned_to_realname" => { maxlength => 20 , ↵ ellipsis => "..." } , "reporter" => { maxlength => 30 , ↵ ellipsis => "..." } , "reporter_realname" => { maxlength => 20 , ↵ ellipsis => "..." } , "qa_contact" => { maxlength => 30 , ↵ ellipsis => "..." , title => "Приемка" } , "qa_contact_realname" => { maxlength => 20 , ↵ ellipsis => "..." , title => "Приемка" } , "resolution" => { maxlength => 8 } , + "resolution" => { maxlength => 40 } , "short_desc" => { wrap => 1 } , "short_short_desc" => { maxlength => 60 , ↵ ellipsis => "..." , wrap => 1 } , "status_whiteboard" => { title => "Заметки" , ↵ wrap => 1 } , "component" => { maxlength => 8 , ↵ title => "Компонент" } , "product" => { maxlength => 8 } , + "component" => { maxlength => 50 , ↵ title => "Компонент", wrap => 1 } , + "product" => { maxlength => 40, ↵ wrap => 1 } , "version" => { maxlength => 5 , ↵ title => "Версия" } , "op_sys" => { maxlength => 10 } , + "op_sys" => { maxlength => 16 , ↵ title => "Подразд" } , "target_milestone" => { title => "Запланировано" } , "percentage_complete" => { format_value => "%d %%" } , }
На последнем патче я бы хотел опять остановиться более подробно. Этот патч не только изменяет описание столбцов, но и меняет параметры их отображения. Проблемой Bugzilla является то, что некоторые столбцы отображаются не полностью, когда они содержат «не-английский» текст. Происходит это потому что «не-английский» текст записывается в кодировке UTF-8, в которой один символ занимает два байта. Поэтому параметры отображения были значительно изменены – длина отображения (maxlength) взята с учетом удвоения, заголовок (title) в некоторых местах задается вручную, для некоторых полей задается автоматический перенос текста (wrap), для других полей задается генерация между полем и соседними полями пробелов (ellipsis). Последний патч, который мы применяем – для изменения отображения уже созданной задачи: --- edit.html.tmpl 2007-06-02 09:15:14.000000000 +0700 +++ /usr/home/shelton/edit.html.tmpl ↵ 2007-09-09 22:28:29.000000000 +0700 @@ -218,9 +218,11 @@ [% IF fields %] [% FOREACH field = fields %] <tr> + [% IF field.name != 'cf_addr' %] [% PROCESS bug/field.html.tmpl ↵ value=bug.${field.name} editable = bug.check_can_change_field ↵ (field.name, 0, 1) value_span = 2 %] + [% END %] </tr> [% END %] [% END %] @@ -615,23 +617,23 @@ <table cellspacing="1" cellpadding="1"> <tr> <td align="right"> <label for="rep_platform" accesskey="h"> ↵ <b>Платформа</b></label>: + <label for="rep_platform" accesskey="h"> ↵ <b>Город</b></label>: </td> [% PROCESS select selname => "rep_platform" %]
№11, ноябрь 2007
</tr> <tr> <td align="right"> <label for="op_sys" accesskey="o"> ↵ <b>ОС</b></label>: + <label for="op_sys" accesskey="o"> ↵ <b>Подразделение</b></label>: </td> [% PROCESS select selname => "op_sys" %] </tr> <tr> <td align="right"> <label for="version"><b>Версия</b></label>: </td> [% PROCESS select selname => "version" %] + [% USE Bugzilla %] + [% SET field = Bugzilla.get_fields({ name => ↵ "cf_addr" }) %] + [% SET value = ${field.name} ↵ IF ${field.name}.defined %] + [% PROCESS bug/field.html.tmpl editable=1 ↵ value_span=2 disabled=0 %] </tr> <tr>
Здесь первым исправлением мы отключаем отображение поля cf_addr там, где отображаются дополнительные поля, а вторым – меняем описания полей, а также добавляем вывод дополнительного поля cf_addr непосредственно под полем «Подразделение». Что ж, с шаблонами покончено.
Пишите письма Правок в исходном коде Perl мы будем делать существенно меньше – только в модуле Bugzilla/BugMail.pm, который отвечает за отправку оповещений по почте о новых или изменившихся задачах. Текст письма формируется этим модулем целиком, без использования шаблонов, поэтому исправлять сообщения нам придется тоже непосредственно в модуле. Разумеется, при этом мы теряем совместимость с каким-нибудь «уругвайским» языком, но, мне кажется, это небольшая потеря. Разумеется, если вы стремитесь к чистоте кода, можно насоздавать еще языковых констант – группа поддержки Bugzilla вам только спасибо скажет. --- /tmp/1/BugMail.pm Wed Feb 28 20:42:22 2007 +++ BugMail.pm Tue Aug 14 19:45:05 2007 @@ -229,11 +229,11 @@ $lastwho = $who; $fullwho = $whoname ? "$whoname <$who" . ↵ Bugzilla->params->{'emailsuffix'} . ">" : ↵ "$who" . Bugzilla->params->{'emailsuffix'}; $diffheader = "\n$fullwho changed:\n\n"; $diffheader .= FormatTriple("What ", ↵ "Removed", "Added"); + $diffheader = "\n$fullwho внес ↵ изменения:\n\n"; + $diffheader .= FormatTriple("Что ", ↵ "Удалено", "Добавлено"); $diffheader .= ('-' x 76) . "\n"; } $what =~ s/^(Attachment )?/Attachment ↵ #$attachid / if $attachid; + $what =~ s/^(Attachment )?/Вложение ↵ #$attachid / if $attachid; if( $fieldname eq 'estimated_time' || $fieldname eq 'remaining_time' ) { $old = format_time_decimal($old); @@ -298,10 +298,10 @@ $lastbug = $depbug; my $urlbase = Bugzilla-> ↵ params->{"urlbase"}; $thisdiff = "\nBug $id depends on bug $depbug, ↵ which changed state.\n\n" . "Bug $depbug Summary: $summary\n" .
29
администрирование + +
"\nЗадача $id, зависит от задачи ↵ $depbug, которая изменила ↵ статус.\n\n" . "Описание задачи $depbug: $summary\n" . "${urlbase}show_bug.cgi?id=$depbug\n\n"; $thisdiff .= FormatTriple("What ", ↵ "Old Value", "New Value"); + $thisdiff .= FormatTriple("Что ", ↵ "Старое значение", ↵ "Новое значение"); $thisdiff .= ('-' x 76) . "\n"; $interestingchange = 0; } @@ -703,7 +728,7 @@ my $result = ""; foreach my $comment (@$raw_comments) { if ($count) { $result .= "\n\n--- Comment #$count from "; + $result .= "\n\n--- Комментарий #$count от "; if ($comment->{'name'} eq $comment->{'email'}) { $result .= $comment->{'email'}; } else {
Наш товарищ – острый нож Переходим к непосредственному исправлению содержимого базы данных. Это необходимо для завершения локализации, так как некоторые вещи (например, описания системных групп) не могут быть исправлены через интерфейс настройки Bugzilla, а могут быть изменены только внешним редактором базы данных. При этом редактор должен поддерживать редактирование строк в кодировке UTF-8. Программа phpMyAdmin удовлетворяет этим требованиям. Внимание! Перед началом каких-либо изменений, проводимых непосредственно в базе данных, сделайте ее резервную копию! Следуйте этому правилу, как минимум до тех пор, пока не разберетесь со структурой базы данных и не сможете исправлять ошибки прямой корректировкой данных в базе. Итак, устанавливаем phpMyAdmin, настраиваем подключение к базе данных и подключаемся. Какова же внутренняя структура Bugzilla? База данных Bugzilla состоит из 54 основных таблиц и произвольного количества для хранения дополнительных полей, по одной таблице на каждое поле. Все таблицы, предназначенные для хранения дополнительных полей начинаются с 'cf_'. Наиболее важными для нас таблицами являются: n bugs – основная таблица базы, описывающая зарегистрированную задачу. Запись по задаче содержит множество полей, из которых вручную чаще всего придется редактировать поля assigned_to (идентификатор пользователя, назначенного исполнителем) и reporter (идентификатор пользователя, инициировавшего задачу). n bug_severity – таблица, описывающая параметр «Серьезность» задачи. n fielddefs – таблица, описывающая определения полей задачи – как существовавших изначально, так и добавленных после, по одной записи на поле. n groups – таблица, описывающая системные и пользовательские группы, по одной записи на группу. n op_sys – таблица, изначально содержащая параметр «ОС», которую мы приспосабливаем под «Подразделение». n priority – таблица, содержащая параметр «Приоритет» задачи.
30
n profiles – таблица, содержащая список пользователей. Именно индексы из этой таблицы вставляются в поля assigned_to и/или reporter таблицы bugs. n rep_platform – таблица, содержащая изначально параметр «Платформа», которую мы приспосабливаем под «Город». Начинаем. В таблице bug_severity изменяем значение поля value – просто переводим его на русский язык. На порядок сортировки это не повлияет – для этого есть поле sortkey. В таблице groups переводим на русский язык поле description у всех системных групп – ни одну системную группу нельзя отредактировать через интерфейс администратора Bugzilla. В таблице op_sys в поле value для всех записей заменяем присутствующие там значения на необходимые, лишние записи удаляем, нужные – добавляем. При добавлении записей устанавливаем нужный порядок сортировки при помощи поля sortkey. В таблице priority переводим на русский язык поле value. С таблицей rep_platform поступаем точно так же, как с таблицей op_sys – удаляем лишнее, вписываем нужное. Собственно говоря, все. Хотя в случае каких-либо ошибок не исключено, что придется возвращаться к редактированию базы вручную.
Подключаемся к Active Directory Разумеется, ценность нашей системы была бы довольно низкой, если бы она не умела получать учетные записи пользователей из Active Directory или другого LDAP-сервера. Перед тем, как начинать настройку подключения, следует создать некоторого «особо бесправного» пользователя, от имени которого будем выполнять подключение. Сделать это необходимо, поскольку Active Directory не допускает анонимное подключение. Бесправным же он должен быть потому, что его пароль будет записан в конфигурационном файле Bugzilla открытым текстом. Приступаем к настройке. Необходимо зарегистрироваться в Bugzilla под учетной записью администратора (она уже создана скриптом checksetup.pl) и войти в «Настройки». Я не буду рассматривать здесь все настройки Bugzilla, после локализации они все подробно описаны в комментариях, опишу только те настройки, которые необходимо установить для подключения к LDAP. В разделе «Аутентификация пользователей»: n Параметр user_verify_class установить в «DB,LDAP». Этот параметр задает последовательность методов для проверки учетной записи пользователя. Использование метода LDAP имеет ту особенность, что на самом деле информация не проверяется по базе LDAP, а копируется из нее в локальную базу и в дальнейшем проверяется именно по ней. Это может иметь такие, возможно недопустимые для вас сторонние эффекты, как после смены пароля в AD, если пользователь уже хоть раз заходил в Bugzilla, в ней все еще будет храниться старый пароль, изменить который можно только вручную. Все пароли постепенно мигрируют в базу Bugzilla, что нарушает безопасность AD.
администрирование n Параметр emailregexp установить в «^[^@]+$». Этот па-
name="Bugzilla_login">
[% Param('emailsuffix') FILTER html %] раметр в установке по умолчанию проверяет формат + &nbsp;[% Param('emailsuffix') FILTER html %] </td> регистрационного имени – оно обязано быть допусти</tr> мым адресом электронной почты. В корпоративной сис<tr> теме в этом нет необходимости, и мы «переворачиваем» проверку наоборот – имя учетной записи не должКак проверить, что подключение к LDAP работает? Доно содержать знака @. статочно попробовать зарегистрироваться в Bugzilla с учетn В качестве значения параметра emailregexpdesc задать ной записью из домена – если регистрация прошла успешлюбое сообщение. Это сообщение будет выдаваться тог- но – значит подключение есть. да, когда будет выполняться попытка зарегистрировать пользователя с неверной учетной записью. Корпоративный стиль n В качестве значения параметра emailsuffix задать Ну и последний штришок, который мы наложим на нашу «@ваш.домен» (например, если ваш домен – shelton.net, систему – это замена логотипа Bugzilla на первой странито установить в «@shelton.net»). Адрес электронной поч- це на корпоративную эмблему. ты для оповещения пользователя в таком случае будет В каталог skins/standard/index мы помещаем файл формироваться простым слиянием строк имени учет- с изображением корпоративной эмблемы (в нашем слуной записи и параметра emailsuffix. чае ask_big.png) и исправляем файл skins/standard/index.css следующим образом: В разделе «LDAP»: div#page-index .intro n Параметру LDAPserver присвоить значение IP-адреса { контроллера домена AD. width: 250px; height: 200px; n Параметрy LDAPbinddn присвоить в качестве значения строчку формата «username@DOMAIN.NAME:password». margin-top: 2.3em; margin-right: 2.3em; Комментарий к параметру игнорировать – он предлагаfloat: right; ет неверный формат. DOMAIN.NAME – это переведенное background: transparent no-repeat url(index/ask_big.png); } в верхний регистр имя домена AD. Username и password – это имя и пароль «особо бесправного» пользователя, созданного для подключения к AD. n Параметр LDAPBaseDN установить в строчку формата Нерешенные проблемы «dc=domain,dc=name», где domain.name – это имя доме- На момент написания статьи еще не были решены следуна AD. ющие проблемы: n Параметр LDAPuidattribute установить в значение n Формирование темы письма. Как упоминалось вы«sAMAccountName». Внимание! Записать именно так, ше, тема формируется в кодировке UTF-8. Задача состоит в том, чтобы добавить код, который перед форкак показано! n Параметр LDAPmailattribute стереть – он должен быть мированием темы перекодирует ее из UTF-8, например в Windows‑1251. Для того чтобы вообще не иметь проблем пустым. с заголовками, их надо кодировать в 7-битный формат. Теперь на главной странице можно вводить только ло- n При формировании письма о новой задаче длингин из AD – доменное имя к нему уже приписано. Для пуные значения полей описания задачи и прочих мощей красоты можно наложить вот этот патч, который встагут «ломаться» – произвольно переноситься на следувит пробел между полем ввода и именем домена: ющую строку. n Не выделяются критические задачи. Задача, которой --- /tmp/1/template/ru/default/account/auth/ ↵ присваивается приоритет «критическая» или «блокируlogin-small.html.tmpl Thu May 17 03:48:42 2007 ющая», должна отмечаться в списке красным и жирным +++ default/account/auth/login-small.html.tmpl ↵ Wed Jun 27 15:41:18 2007 красным соответственно. Делается это с помощью CSS, @@ -40,7 +40,7 @@ но при этом имя стиля соответствует тексту приорите<tr> <th align="right"><label for="Bugzilla_login"> ↵ та. Не знаю, может, для английского текста это и было Пользователь:</label></th> изящным решением, но для «неанглийского» выглядит <td><input size="20" id="Bugzilla_login" ↵ name="Bugzilla_login"> довольно глупо. +
[% Param('emailsuffix') FILTER html %]</td> &nbsp;[% Param('emailsuffix') FILTER html %]</td>
</tr> <tr> <th align="right"><label for="Bugzilla_password"> ↵ Пароль:</label></th> --- /tmp/1/template/ru/default/account/auth/ ↵ login.html.tmpl Thu May 17 03:48:42 2007 +++ default/account/auth/login.html.tmpl ↵ Wed Jun 27 15:41:26 2007 @@ -46,7 +46,7 @@ <th align="right"><label for="Bugzilla_login"> ↵ Пользователь:</label></th> <td> <input size="35" id="Bugzilla_login" ↵
№11, ноябрь 2007
Заключение Bugzilla в качестве ServiceDesk – это жизнеспособное решение для компаний, которые не предъявляют к нему чрезмерно больших требований, хотят сэкономить деньги на покупке платной версии или отказаться от Windows. В ней реализована большая часть того, что требуется от службы ServiceDesk, а того, чего в ней не хватает (учет аппаратной конфигурации, наряды на работу), зачастую на том уровне, где эксплуатируется Bugzilla, и не требуется.
31
администрирование
Строим бюджетный сервер для малых или средних компаний Часть 2
Павел Семенец В предыдущей статье я рассказал о настройке Samba в качестве Primary Domain Controller. Сегодня мы поговорим о почтовом сервере Exim и обо всём, что связано с почтой в нашем комплексе.
Собираем антиспам-фильтр DSPAM srv# cd /usr/posts/mail/dspam srv# make config
[X] SYSLOG [X] DEBUG [X] VERBOSE_DEBUG [X] SQLITE3 [X] HASH [X] TRUSTED_USERS [X] VIRT_USERS [X] DOMAIN_SCALE [X] EXIM_LDA
Logs via syslog Enable debugging logging Enable debug in LOGDIR/dspam.debug Use SQLite v3.x as back-end Use hash driver Disable trusted user security Enable virtual users (needs SQL back-end) File structure for multiple domains Use Exim as local delivery agent
После выставления опций компиляции требуется отредактировать Makefile. Данная операция необходима для изменения некоторых параметров компиляции, которые невозможно поменять через «make config».
32
Открываем Makefile в той же директории и ищем следующие строчки: DSPAM_OWNER?= DSPAM_GROUP?= DSPAM_HOME?=
root mail ${_VAR_DIR}/db/dspam
и меняем их следующим образом: DSPAM_OWNER?= DSPAM_GROUP?= DSPAM_HOME?=
exim exim /usr/local/dspam
Собираем DSPAM: srv# make all install clean
администрирование Настраиваем DSPAM srv# cat > /usr/local/etc/dspam.conf << EOF Home /usr/local/dspam StorageDriver /usr/local/lib/libsqlite3_drv.so TrustedDeliveryAgent "/usr/local/sbin/exim ↵ -oMr spam-scanned" # Exim OnFail error Trust root Trust exim Trust mail Trust mailnull Trust smmsp Trust daemon
TestConditionalTraining on Feature chained Feature tb=5 Feature whitelist Algorithm graham burton PValue graham Preference "spamAction=quarantine" Preference "signatureLocation=message" Preference "showFactors=on" Preference "spamAction=tag" Preference "spamSubject=SPAM" AllowOverride trainingMode AllowOverride spamAction spamSubject AllowOverride statisticalSedation AllowOverride enableBNR AllowOverride enableWhitelist AllowOverride signatureLocation AllowOverride showFactors AllowOverride optIn optOut AllowOverride whitelistThreshold "synchronous = ON"
HashRecMax 98317 HashAutoExtend on HashMaxExtents 0 HashExtentSize 49157 HashMaxSeek 100 IgnoreHeader X-Spam-Status IgnoreHeader X-Spam-Scanned IgnoreHeader X-Virus-Scanner-Result Notifications off PurgeSignatures 14 PurgeNeutral 90 PurgeUnused 90 PurgeHapaxes 30 PurgeHits1S 15 PurgeHits1I 15 LocalMX 127.0.0.1 SystemLog on UserLog on Opt out MaxMessageSize 307200 ProcessorBias on EOF
Дирек тивы всех последующих файлов настройки были описаны мной в статье «Строим мультидоменный почтовый сервер с защитой от вирусов и спама» опубликованной в журнале «Системный Администра-
№11, ноябрь 2007
Собираем и конфигурируем Exim Для того чтобы правильно настроить рассматриваемый MTA, нам понадобятся некоторые дополнительные опции в /etc/make.conf: srv# pw groupadd exim srv# pw useradd exim -g exim -d /dev/null ↵ -s /usr/sbin/nologin
Debug * TrainingMode notrain
SQLitePragma
тор» №1 за 2006 год (он-лайн версия доступна по ссылке: http://www.samag.ru/cgi‑bin/go.pl?q=articles;n=01.2006;a=03). Обращу ваше внимание лишь на вопросы, имеющие отношение к OpenLDAP.
Выясняем uid и gid созданного нами пользователя: srv# id exim uid=1001(exim) gid=1001(exim) groups=1001(exim)
Далее редактируем файл /etc/make.conf, вставляя в конец следующие строки: PORTSDIR? = /usr/ports .if ${.CURDIR} == {$PORTSDIR}/mail/exim # Включаем поддержку OpenLDAP WITH_OPENLDAP = yes # Включаем автоматическое определение # установленной версии OpenLDAP WITH_OPENLDAP_VER = auto # Включаем логирование через Syslog LOG_FILE_PATH?= syslog # Включаем поддежку сканирования сообщений # через content_scan WITH_CONTENT_SCAN = yes # Включаем поддержку перекодировки WITH_ICONV = yes # Включаем поддержку по методу AUTH PLAIN и AUTH LOGIN WITH_AUTH_PLAINTEXT = yes # Устанавливаем кодировку по умолчанию # для заголовков письма WITH_DEFAULT_CHARSET?= koi8-r # Отключаем поддержку IPV6 WITHOUT_IPV6 = yes # Указываем, какую версию Berkley DB используем WITH_DBD_VER? = 4 # Включаем поддержку Perl для внешних скриптов WITH_PERL = yes .endif
Собираем Exim: srv# cd /usr/ports/mail/exim srv# make all install clean
А теперь начинается самое сложное во всем этом комплексе – это настройка почтового MTA-агента на нормальную работу с OpenLDAP. Первое, что нужно сделать, – это создать сертификат SSL для шифрования передаваемой информации между клиентом и сервером: srv# cd /usr/local/etc/exim srv# mkdir ssl srv# cd ssl srv# openssl req -x509 -newkey rsa:1024 ↵ -keyout mail.pem -out mail.pem -days 3650 -nodes
Отвечаем на вопросы, после чего меняем права доступа на сертификат: srv# chmod 0400 mail.pem srv# chown exim:exim mail.pem
33
администрирование Следующим этапом настройки будет создание собственной схемы в OpenLDAP для MTA Exim. Так как стандартной схемы не существует и Exim можно настроить как вздумается (в гибкости настройки разработчики MTA Exim нас не ограничивают) создаем схему следующего вида: srv# cat > /usr/local/etc/openldap/schema/exim.schema ↵ << EOF #$Id: exim.schema, v 0,2 2007/09/25 #(C) Created by Darkman # Attributes # Тут мы описываем атрибуты, куда будем записывать # информацию о пользователях, перенаправлениях # и всему прочему # Имя домена. attributetype ( 1.3.6.1.4.1.100058.1.1.1 NAME 'DName' DESC 'Mail Domain Name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Тип домена (virtual,relay) attributetype ( 1.3.6.1.4.1.100058.1.1.2 NAME 'DType' DESC 'Mail Domain Type' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # MX-запись для доменов с типом relay attributetype ( 1.3.6.1.4.1.100058.1.1.3 NAME 'MXHost' DESC 'Forward Host Name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # ID-аккаунт attributetype ( 1.3.6.1.4.1.100058.1.1.4 NAME 'EUid' DESC 'Exim user id default 1001' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # GID-акаунт attributetype ( 1.3.6.1.4.1.100058.1.1.5 NAME 'EGid' DESC 'Exim group id default 1001' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Пароль акаунта attributetype ( 1.3.6.1.4.1.100058.1.1.6 NAME 'Pass' DESC 'User Clear Password' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} ) # Имя акаунта attributetype ( 1.3.6.1.4.1.100058.1.1.7 NAME 'UName' DESC 'Mail username' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{50} ) # Домашняя директория аккаунта attributetype ( 1.3.6.1.4.1.100058.1.1.8 NAME 'HomeDir' DESC 'MailStore Home Dir' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) # Статус акаунта (active,disable) attributetype ( 1.3.6.1.4.1.100058.1.1.9 NAME 'AcStatus' DESC 'User Account Status (active,disable)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) # Размер почтового ящика значения, заносится в Мб attributetype ( 1.3.6.1.4.1.100058.1.1.10 NAME 'QuotaSize' DESC 'User Quota Size Megabytes' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) # Запись о перенаправлениях почты (используется # в таблице aliases) attributetype ( 1.3.6.1.4.1.100058.1.1.11 NAME 'Rcpt' DESC 'Aliases To' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
34
# Описание записи attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'Descr' DESC 'Description Message' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Запись об антиспам-фильтре (active,disable) attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'AntiSpam' DESC 'Active AntiSpam Service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Object class # В этой секции файла мы описываем 4 объекта # (EximVirtualForward, EximVirtualDomain, EximVirtualUser, # EximVirtualAliases) и группируем атрибуты, описанные # выше к каждому создаваемому объекту. Атрибуты, указанные # в секции MUST (), обязательны к заполнению, атрибуты # указанные в секции MAY (), не обязательны. # Объект хранения виртуальных перенаправлений, # обслуживаемых сервером objectclass (1.3.6.1.4.1.100058.1.2.1 ↵ NAME 'EximVirtualForward' SUP top STRUCTURAL DESC '' MUST ( Uname $ DName $ MXHost ) MAY ( Descr )) # Объект хранения виртуальных доменов # обслуживаемых сервером objectclass (1.3.6.1.4.1.100058.1.2.2 ↵ NAME 'EximVirtualDomain' SUP top STRUCTURAL DESC '' MUST ( DName $ DType ) MAY ( Descr )) # Объект хранения виртуальных пользователей почтовой системы objectclass (1.3.6.1.4.1.100058.1.2.3 ↵ NAME 'EximVirtualUser' SUP top STRUCTURAL DESC '' MUST ( EUid $ EGid $ Pass $ UName $ HomeDir $ DName ↵ $ AcStatus $ QuotaSize $ AntiSpam) MAY ( Descr )) # Объект хранения алиасов пользователей почтовой системы objectclass (1.3.6.1.4.1.100058.1.2.4 ↵ NAME 'EximVirtualAliases' SUP top STRUCTURAL DESC '' MUST ( UName $ Rcpt $ DName ) MAY ( Descr )) EOF
Так как более детальное описание данного файла выходит за пределы этой статьи и представляет самостоятельную тему для обсуждения, обратитесь к официальной документации по настройке сервера OpenLDAP за более подробной информацией.
Добавляем схему к OpenLDAP-серверу srv# cd /usr/local/etc/openldap
Окрываем файл slapd.conf на редактирование и добавляем после строчки: include /usr/local/etc/openldap/schema/dnsdomain2.schema
еще одну строку: include /usr/local/etc/openldap/schema/exim.schema
сохраняем файл и перезапускаем сервисы: srv# cd /usr/local/etc/rc.d/
администрирование srv# ./010.slapd.sh restart srv# ./020.pdns.sh restart srv# ./015.pdnsr.sh restart srv# ./025.samba.sh restart
Создаем файл для заполнения хранилища почтового сервера srv# cat > /usr/local/etc/ldapfiles/mail_base.ldiff << EOF # Ветка для хранения записей почтового сервера dn: ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: mail # Ветка для хранения записей о доменах, обслуживаемых MTA dn: ou=domains,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: domains # Ветка для хранения записей о виртуальных аккаунтах # почтового сервера dn: ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: users # Ветка для хранения записей о алиасах почтового сервера dn: ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: aliases # Ветка для хранения записей о перенаправлениях # почтового сервера dn: ou=forward,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: forward # Виртуальный домен example.com dn: DName=example.com,ou=domains,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualDomain DName: example.com DType: virtual Descr: Example Mail Domain # alias перенаправления почты # (postmaster@exampl.com to root@exampl.com) dn: UName=postmaster,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: postmaster Rcpt: root Dname: example.com # alias перенаправления почты # (abuse@exampl.com to postmaster@exampl.com) dn: UName=abuse,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: abuse Rcpt: postmaster DName: example.com # alias перенаправления почты # (info@example.com to postmaster@exampl.com) dn: UName=info,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: info Rcpt: postmaster Dname: example.com # Виртуальный пользователь root@example.com dn: UName=root,ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualUser UName: root DName: example.com EUid: 1001 EGid: 1001
№11, ноябрь 2007
Pass: passwd HomeDir: /usr/local/vmail/example.com/root AcStatus: active AntiSpam: active QuotaSize: 300 # Виртуальный пользователь test@example.com dn: UName=test,ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualUser UName: test DName: example.com EUid: 1001 EGid: 1001 Pass: passwd1 HomeDir: /usr/local/vmail/example.com/test AcStatus: active AntiSpam: active QuotaSize: 300 EOF
Добавляем записи в OpenLDAP: srv# ldapadd -x -D "cn=root,dc=example,dc=com" ↵ -w password -f mail_base.ldiff add new entry "ou=mail,dc=example,dc=com" ...........
После этого мы получили в базе OpenLDAP данные, взаимосвязанные следующим образом: dc=exmaple,dc=com |--ou=mail,dc=example,dc=com |--ou=domain,ou=mail,dc=example,dc=com | |--Dname=example,ou=domain,ou=mail,dc=example,dc=com | |--ou=aliases,ou=mail,dc=example,dc=com | |--Uname=postmaster,ou=aliases,ou=mail,dc=example,dc=com | |--Uname=abuse,ou=aliases,ou=mail,dc=example,dc=com | |--Uname=info,ou=aliases,ou=mail,dc=example,dc=com | |--ou=foreward,ou=mail,dc=example,dc=com | |--ou=users,ou=mail,dc=example,dc=com |--Uname=root,ou=users,ou=mail,dc=example,dc=com |--Uname=test,ou=users,ou=mail,dc=example,dc=com
Далее нам надо настроить MTA Exim для поиска учетной информации в этой структуре. Создаем файл конфигурации MTA: srv# cat > /usr/local/etc/exim/configure << EOF
Листинг файла вы найдете в разделе «Исходный код» на сайте www.samag.ru. Давайте разберем, почему это все выглядит так страшно на первый взгляд. Для начала расскажу об особенностях поиска в OpenLDAP. Существует три типа поиска LDAP в MTA Exim. Они ведут себя по-разному, когда обрабатывают результаты запроса: n ldap – результат поиска должен возвращать только один элемент, иначе выдается ошибка; n ldapdn – результат запроса содержит только один элемент, но при этом запрос должен вернуть dn, а не любые атрибуты со значением; n ldapm – результат может содержать множество элементов, запрос возвращает все найденные элементы. С запросами немножко сложнее. Для понимания приведу аналогию с SQL-запросом выборки из моей статьи. Выборка обслуживаемых доменов:
35
администрирование SQL:
Кофигурируем CamAV:
# Начало поиска ${ # Указываем, какой драйвер использовать для поиска lookup mysql{ # Запрос в MySQL проверяет, существует ли запись # в таблице domains о домене подключившегося # пользователя с типом virtual SELECT domain FROM domains ↵ WHERE domain='${domain}' AND type='virtual' } } # Конец поиска
srv# cat > /usr/local/etc/clamd.conf << EOF LogFile /var/log/clamav/clamd.log PidFile /var/run/clamav/clamd.pid DatabaseDirectory /var/db/clamav
LDAP: # Начало поиска ${\ # Указываем серверу о дополнительной обработке # полученных результатов sg{\ ${\ # Указываем, какой драйвер использовать # для поиска lookup ldapm{\ # Макрос подключения LDAP_AUTH \ # Указываем, в какой ветке OpenLDAP ищем ldap:///ou=domains,ou=mail,dc=example,dc=com?\ # Указываем серверу, какой атрибут искать DName?\ # Указываем серверу дополнительные критерии # поиска sub?\ # Описываем фильтр поиска в атрибутах записи (&(objectClass=EximVirtualDomain) ↵ (DType=virtual))\ }\ }\ }\ # Выполняем обработку полученных результатов в данном # случае заменяем символы конца строки «\n» # на двоеточие « : » {\n}{ : }\ } # Конец запроса
Дополнительная обработка результатов требуется для приведения возвращаемых данных в надлежащий формат: ou=domains,ou=mail,dc=example,dc=com. Будет содержаться 2 и более записей о доменах к примеру: DName=example.com,ou=domains,ou=mail,dc=example,dc=com DName=test.com,ou=domains,ou=mail,dc=example,dc=com
Отсюда тип поиска ldapm вернет их в следующем виде: example.com test.com
что в свою очередь не приемлемо для MTA Exim в директиве «domainlist local_domains». Для этого мы и производим замену конца cтроки на двоеточие, в конечном итоге получая: domainlist local_domains = example.com : test.com
Собираем ClamAV srv# cd /usr/ports/secutiry/clamav srv# make all install clean
[X] ARC Enable Arch arcvihe support [X] ARJ Enable Arj arcvihe support [X] LHA Enable LHA arcvihe support
36
FixStaleSocket yes TCPSocket 3310 TCPAddr 127.0.0.1 User clamav AllowSupplementaryGroups yes ScanOLE2 yes ScanMail yes ScanHTML yes ScanArchive yes ArchiveMaxFileSize 15M ArchiveMaxRecursion 10 ArchiveMaxFiles 1500 EOF srv#cat > /usr/local/etc/freshclam.conf << EOF DatabaseDirectory /var/db/clamav UpdateLogFile /var/log/clamav/freshclam.log LogVerbose yes PidFile /var/run/clamav/freshclam.pid DatabaseOwner clamav AllowSupplementaryGroups yes DatabaseMirror database.clamav.net NotifyClamd /usr/local/etc/clamd.conf Debug yes EOF
Запускаем ClamAV и Exim: srv# cd /usr/local/etc/rc.d srv# mv clamav_freshclam.sh 030.freshclam.sh srv# mv clamav-clamd.sh 035.clamd.sh srv# mv exim 040.exim.sh
Добавляем в файл /etc/rc.conf строчки для запуска антивирусного фильтра и почтового сервера: clamav_freshclam_enable="YES" clamav_clamd_enable="YES" exim_enable="YES"
Запускаем сервисы: srv# /usr/local/etc/rc.d/030.freshclam.sh start srv# /usr/local/etc/rc.d/035.clamd.sh start srv# /usr/local/etc/rc.d/040.exim.sh start
Cоздаем директорию, в которой будем хранить почту наших пользователей: srv# mkdir /usr/local/vmail srv# chown exim:exim /usr/local/vmail ↵ /var/spool/clientmqueue /var/spool/mqueue
Прверяем правильность настройки MTA. Для этого отправим письмо сами себе: srv# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.test.com ESMTP Exim 4.53 Wed, 19 Oct 2005 16:49:58 +0400 ehlo mail.example.com
администрирование 250-mail.example.com Hello localhost.example.com [127.0.0.1] 250-SIZE 10485760 250-PIPELINING 250-AUTH PLAIN LOGIN 250 HELP mail from:user@example.com 250 OK rcpt to:user@example.com 250 Accepted data 354 Enter message, ending with "." on a line by itself test . 250 OK quit
Следующим этапом проверяем методы аутентификации. Для каждой проверки с помощью Perl будем кодировать аутентификационный запрос согласно используемому методу. Метод AUTH PLAIN: srv# perl -MMIME::Base64 -e 'print encode_base64 ↵ ("root\@example.com\0root\@example.com\0passwd");' DXNlckB0ZXN0LmNvbQB1c2VyQHRlc3QuY29tAHBhc3N3b3Jk==
Полученная строка и является нашей строкой аутентификации. Проверим это: srv# telnet localhost 25 Trying localhost... Connected to localhost. Escape character is '^]'. 220 mail.example.com ESMTP Exim 4.53 Wed, 19 Oct 2005 16:49:58 +0400 ehlo mail.example.com .................. .................. AUTH PLAIN DXNlckB0ZXN0LmNvbQB1c2VyQHRlc3QuY29tAHBhc3N3b3Jk== 235 Authentication succeeded quit
Метод AUTH LOGIN: # perl -MMIME::Base64 -e 'print ↵ encode_base64("root\@example.com");' dXNlckB0ZXN0LmNvbQ==
# perl -MMIME::Base64 -e 'print encode_base64("passwd");' dXNlckB0ZXN0LmNvbQ==
Проверяем: srv# telnet localhost 25 Trying localhost... Connected to localhost. Escape character is '^]'. 220 mail.example.ru ESMTP Exim 4.68 Fri, 28 Sep 2007 18:12:15 +0400 ehlo mail.example.com .................. .................. AUTH LOGIN 334 VXNlcm5hbWU6 dXNlckB0ZXN0LmNvbQ== 334 UGFzc3dvcmQ6 cGFzc3dvcmQ= 235 Authentication succeeded quit
№11, ноябрь 2007
Проверяем SSL: srv# openssl srv# OpenSSL > s_client -host localhost -port 465
Если SSL-соединение прошло упешно, то мы с вами увиди приглашение Exim: 220 mail.example.ru ESMTP Exim 4.68 Fri, 28 Sep 2007 18:12:15 +0400
Собираем и конфигурируем Courier-IMAP srv# cd /usr/ports/mail/courier-imap srv# make all install clean [X] OPENSSL [X] TRASHQUOTA [X] AUTH_LDAP
Build with OpenSSL support Include deleted mails in the quota LDAP support
srv# cat > /usr/local/etc/auth-lib/authdaemonrc << EOF authmodulelist="authldap" authmodulelistorig="authldap" daemons=5 authdaemonvar=/var/run/authdaemond subsystem=mail DEBUG_LOGIN=2 DEFAULTOPTIONS="wbnodsn=1" LOGGEROPTS="" EOF srv# cat > /usr/local/etc/auth-lib/authldaprc << EOF # Указываем, где находится OpenLDAP LDAP_URI ldap://localhost # Указываем, какую версию протокола используем LDAP_PROTOCOL_VERSION 3 # Указываем, где искать информацию об акаунтах # пользователей почтового сервера LDAP_BASEDN ou=users,ou=mail,dc=example,dc=com # Указываем, под каким пользователем подключаемся # к OpenLDAP LDAP_BINDDN cn=root,dc=example,dc=com # Указываем, какой пароль у вышеуказанного пользователя LDAP_BINDPW password LDAP_TIMEOUT 5 # Так как пользователи виртуальные, отключаем # авторизацию всех остальных пользователей на сервере LDAP_AUTHBIND 0 # Указываем, в каком атрибуте находится логин пользователя LDAP_MAIL UName # Указываем фильтр для поиска LDAP_FILTER (objectClass=EximVirtualUser)(AcStatus=active) # Указываем uid и gid пользователей глобально # для всего сервера LDAP_GLOB_UID exim LDAP_GLOB_GID exim # Указываем атрибут домашней директории пользователя LDAP_HOMEDIR HomeDir # Указываем атрибут почтовой директории пользователя LDAP_MAILDIR HomeDir # Указываем атрибут, где хранится Квота на использование # почтового ящика LDAP_MAILDIRQUOTA QuotaSize # Указываем атрибут хранения пароля LDAP_CLEARPW Pass LDAP_DEREF never # Отключаем SSL-соединение с сервером LDAP_TLS 0 # Разбиваем логин пользователя на составляющие, # к примеру root@example.com будет разбит # на #Uname=root,DNAme=example.com LDAP_EMAILMAP (&(UName=@user@)(DName=@realm@)) # Указываем где и как искать информацию о почтовом # ящике пользователя LDAP_EMAILMAP_BASEDN ou=users,ou=mail,dc=example,dc=com LDAP_EMAILMAP_ATTRIBUTE UName LDAP_EMAILMAP_MAIL Uname EOF
Добавляем строки в rc.conf для запуска Courier-IMAP:
37
администрирование courier_authdaemond_enable="YES" courier_imap_pop3d_enable="YES" courier_imap_imapd_ssl_enable="YES" courier_imap_imapd_enable="YES" courier_imap_pop3d_ssl_enable="YES"
Настраиваем pop3: srv#cat > pop3d << EOF PIDFILE=/var/run/pop3d.pid
Конфигурируем сервисы pop3 и imap:
MAXDAEMONS=40 MAXPERIP=4
srv# cd /usr/local/etc/courier-imap
POP3AUTH="" POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
Настраиваем imap:
POP3AUTH_TLS="" POP3AUTH_TLS_ORIG="LOGIN PLAIN"
srv# cat > imapd << EOF
POP3_PROXY=0 PORT=110
# Вписываем в файл следующее содержимое ADDRESS=0 PORT=143
ADDRESS=0 TCPDOPTS="-nodnslookup -noidentlookup"
MAXDAEMONS=40 MAXPERIP=4
LOGGEROPTS="-name=pop3d" POP3DSTART=YES
PIDFILE=/var/run/imapd.pid
MAILDIRPATH=Maildir EOF
TCPDOPTS="-nodnslookup -noidentlookup" LOGGEROPTS="-name=imapd" IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE ↵ THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT ↵ QUOTA IDLE" IMAP_KEYWORDS=1 IMAP_ACL=1 IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE ↵ THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA ↵ AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE" IMAP_PROXY=0 IMAP_PROXY_FOREIGN=0 IMAP_IDLE_TIMEOUT=60 IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN" IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN" IMAP_DISABLETHREADSORT=0 IMAP_CHECK_ALL_FOLDERS=0 IMAP_OBSOLETE_CLIENT=0 IMAP_UMASK=022 IMAP_ULIMITD=65536 IMAP_USELOCKS=1 IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index IMAP_ENHANCEDIDLE=0 IMAP_TRASHFOLDERNAME=Trash IMAP_EMPTYTRASH=Trash:7 IMAP_MOVE_EXPUNGE_TO_TRASH=0 SENDMAIL=/usr/sbin/sendmail HEADERFROM=X-IMAP-Sender IMAPDSTART=YES MAILDIRPATH=Maildir EOF
Настраиваем imap-ssl: srv#cat > imapd-ssl << EOF SSLPORT=993 SSLADDRESS=0 SSLPIDFILE=/var/run/imapd-ssl.pid SSLLOGGEROPTS="-name=imapd-ssl" IMAPDSSLSTART=YES IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=0 COURIERTLS=/usr/local/bin/couriertls TLS_PROTOCOL=SSL3 TLS_STARTTLS_PROTOCOL=TLS1 TLS_CERTFILE=/usr/local/etc/courier-imap/shared/imapd.pem TLS_VERIFYPEER=NONE TLS_CACHEFILE=/usr/local/var/couriersslcache TLS_CACHESIZE=524288 MAILDIRPATH=Maildir EOF
38
Конфигурируем pop3-ssl: srv#cat > pop3d-ssl << EOF SSLPORT=995 SSLADDRESS=0 SSLPIDFILE=/var/run/pop3d-ssl.pid SSLLOGGEROPTS="-name=pop3d-ssl" POP3DSSLSTART=YES POP3_STARTTLS=YES POP3_TLS_REQUIRED=0 COURIERTLS=/usr/local/bin/couriertls TLS_PROTOCOL=SSL3 TLS_STARTTLS_PROTOCOL=TLS1 TLS_CERTFILE=/usr/local/etc/courier-imap/shared/pop3d.pem TLS_VERIFYPEER=NONE TLS_CACHEFILE=/usr/local/var/couriersslcache TLS_CACHESIZE=524288 MAILDIRPATH=Maildir EOF
Настраиваем сертификаты ssl: srv# cat > imapd.cnf << EOF RANDFILE = /usr/local/share/courier-imap/imapd.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=RU ST=RU L=Moscow O=Exim Super Secure Server OU= IMAP SSL Key CN=mail.baby-country.ru emailAddress=postmaster@example.com [ cert_type ] nsCertType = server EOF srv#cat > pop3d.cnf << EOF RANDFILE = /usr/local/share/courier-imap/pop3d.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn
администрирование x509_extensions = cert_type prompt = no [ req_dn ] C=RU ST=RU L=Moscow O=Exim Super Secure Server OU= POP3 SSL Key CN=mail.baby-country.ru emailAddress=postmaster@example.ru [ cert_type ] nsCertType = server
Создаем сетрификаты: srv# cd /usr/local/share/courier-imap srv# ./mkimapdcert srv# ./mkpop3dcert
Копируем созданные сертификаты: srv# cp imapd.pem /usr/local/etc/courier-imap/shared srv# cp pop3d.pem /usr/local/etc/courier-imap/shared
Меняем права доступа: srv# cd /usr/local/etc/courier-imap/shared srv# chmod 0600 *
Запускаем Courier-IMAP Переименовываем скрипты для запуска: srv# cd /usr/local/etc/rc.d srv# mv courier_authdaemond.sh 045.courier-auth.sh srv# mv courier_imap_imapd.sh 050.courier-imap.sh srv# mv courier_imap_pop3d.sh 055.courier-pop3d.sh srv# mv courier_imap_imapd_ssl 060.courier-imaps.sh srv# mv courier_imap_pop3d_ssl 065.courier_pop3ds.sh
Запускаем сервисы: srv# ./045.courier-auth.sh start srv# ./050.courier-imap.sh start srv# ./055.courier-pop3d.sh start srv# ./060.courier-imaps.sh start srv# ./065.courier_pop3ds.sh start
Проверяем конфигурацию Courier-IMAP Проверяем работу Courier-IMAP по протоколу POP3: srv# telnet 127.0.0.1 110 Trying 127.0.0.1... Connected to mail.example.com. Escape character is '^]'. +OK Hello there. user root@example.com +OK Password required. pass password +OK logged in. list quit
Проверяем работу Courier-IMAP по протоколу IMAP: srv# telnet 127.0.0.1 143 Trying 127.0.0.1... Connected to mail.example.com. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready.
№11, ноябрь 2007
Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information. a001 login user@example.com passwd a001 OK LOGIN Ok. # ответ сервера a001 logout * BYE Courier-IMAP server shutting down a001 OK LOGOUT completed Connection closed by foreign host.
Проверяем работу Courier-IMAP по протоколу POP3 через SSL-соединение: srv# openssl OpenSSL> s_client -host localhost -port 995 ..... ..... ..... Connected to mail.example.com. +OK Hello there. quit
Проверяем работу Courier-IMAP по протоколу IMAP через SSL-соединение: OpenSSL> s_client -host localhost -port 993 ...... * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information. a001 login root@example.com passwd a001 OK LOGIN Ok. // ответ сервера a001 logout * BYE Courier-IMAP server shutting down a001 OK LOGOUT completed closed
Ну вот и все, теперь можно создавать учетные записи пользователей почтовой системы. Предупреждение! В данной конфигурации у антиспама отключена возможность автоматического обучения. Это сделано потому, что наблюдение за работой антиспамфильтра в режиме автоматического обучения привело к выводу, что пользователи забывают следить за своим антиспам-фильтром или себя этим не утруждают, а настраивать фильтр глобально на весь сервер некорректно, поскольку у каждого пользователя разные понятия что такое спам, а что не спам. В связи с этим следует предупредить ваших пользователей, что все письма, которые являются спамом для них, требуется пересылать на почтовый ящик spam@example.com, а ошибочно помеченные как спам – на ящик nospam@example.com (в соответствие с настройками данной конфигурации).
Заключение Итак, давайте разберем, что же мы получили в результате наших действий: n гибкий в настройке и управлении почтовый сервер; n защиту от вирусов; n защиту от спама. В следующей статье мы с вами поговорим про настройку proxy-сервера с собственной системой авторизации, разграничения доступа к сети Интернет, с ограничением трафика.
39
администрирование
Управляем Active Directory из командной строки
Александр Емельянов Всего пару десятков лет назад мониторы компьютеров были монохромными, а ресурсами рабочих станций и серверов повелевал черный экран с мигающим курсором. Сегодня GUI десктопных, да и серверных, операционных систем поражает глаз разнообразием красок и количеством графических средств управления. Тем не менее командная строка все еще является мощнейшим инструментом, обеспечивающим гибкость управления ресурсами. Служба каталогов в этом плане не является исключением.
К
онец прошлого века и начало нынешнего ознаменовались бурным развитием сферы информационных технологий. Участников действа прекрасно знают многие, даже не имеющие отношения к IT-отрасли, люди. Большое количество софтверных компаний выпускает готовые решения для управления сетевой инфраструктурой с интуитивно понятным графическим интерфейсом. Такие игроки рынка, как Systemtools Software (выпускающая продукт под названием Hyena), например, могут в некоторой степени составить конкуренцию в этом плане компании Microsoft. Однако существуют фундаментальные вещи, которые до сих пор помогают IT‑специалистам с успехом решать задачи различной сложности. Одной из них явля-
40
ется командная строка Windows, речь о которой будет вестись ниже. Сразу стоит оговориться, что я ограничу область рассмотрения утилитами, помогающими осуществлять наблюдение и управление ресурсами службы каталогов. Разговор о средствах консольного управления будет полезен в свете готовящегося выхода новой серверной платформы от Microsoft – Server Core, которая не имеет графических средств управления. Тем более что Microsoft пошла дальше. Используемый в новой платформе интерпретатор Power Shell, разработанный в первую очередь для системных администраторов, имеет свой собственный синтаксис и значительно расширенные возможности администрирования из консоли (подроб-
нее о PowerShell читайте на стр. 44-50 журнала). Таким образом, в Windows Server 2008 инструменты управления командной строки получат дальнейшее развитие. Большинство утилит, которые будут описаны, работают с объектами службы каталогов, а именование этих объектов осуществляется по определенным стандартам. Поэтому вполне уместным будет посвятить несколько строк правилам именования объектов Active Directory.
Схема Active Directory Схема службы каталогов – это набор классов. Учетные записи пользователей, компьютеров, группы, общие ресурсы – все это классы объектов. Каждый объект имеет определенный набор
администрирование атрибутов. Например, для учетных записей это имя, фамилия сотрудника, имя входа в домен и другая информация. Конкретно взятый объект, например, учетная запись пользователя Иван Иванов, называется экземпляром класса. Атрибуты и классы определяются независимо, поэтому один атрибут может быть связан с несколькими классами. Каждый атрибут класса имеет свой синтаксис – набор символов, которые могут использоваться в описании атрибута. Существуют также объекты контейнерного типа. Они могут содержать в себе другие объекты и, как правило, используются для объединения объектов, имеющих одинаковые атрибуты.
Что в имени тебе моем… Опишем принятые в службе каталогов форматы имен. UPN (User Principal Name) – формат имени, схожий с адресом электронной почты (описанным в RFC 822); такое именование может использоваться для входа пользователя в домен (например, ivanov@domain.com). Следующее в рассмотрении – имена в формате LDAP (Lightweight Directory Access Protocol, облегченная версия протокола X.500 для доступа к каталогу). Каждый объект службы каталогов имеет свое, так называемое уникальное имя (DN, Distinguished Name). Стандарт такого именования описан в RFC 1779 и определяет однозначное нахождение объекта в каталоге. В свою очередь в RFC 2247 описано отображение пространства имен DNS службы каталогов в формате LDAP. Таким образом, пользователь Иван Иванов, принадлежащий группе Managers организационной единицы Office домена domain.com, может иметь следующее DN: cn=Ivanov, cn=Managers, ou=Office, dc=domain, dc=com;
здесь cn – Common Name, простое имя объекта; ou – Organizational Unit, организационная единица; dc – Domain Component, домен, которому принадлежит объект. Относительное уникальное имя объекта (RDN, Relative Distinguished Name) идентифицирует непосредственно сам объект относительно объекта-контейнера, которому он принадлежит. Здесь RDN объекта Ivanov будет выглядеть как cn=Ivanov, а для родительского объекта Managers – cn=Managers. RND является атрибутом объекта и хранится в каталоге вместе с объектом. Вместе с этим каждый объект имеет атрибут, который является указателем на объектродитель. Таким образом, имеется возможность создания RDN для любого объекта в каталоге. Аналогично с уникальными именами для однозначного определения местоположения объекта в каталоге можно использовать так называемое каноническое имя. Оно схоже с URL страницы или объекта на веб-сервере и для указанного выше примера выглядит следующим образом: domain.com/Office/Managers/Ivanov
Есть еще одна вещь, которая однозначно определяет объект в каталоге, – глобальный уникальный идентификатор (GUID, Global Unique Identifier). Это 128-разрядное число, которое является обязательным атрибутом любого объ-
№11, ноябрь 2007
Утилиты ds* и объекты, с которыми они могут работать Объект
dsquery
dsget
dsadd
dsmod
dsmove
dsrm
User
+
+
+
+
+
+
Contact
+
+
+
+
+
+
Group
+
+
+
+
+
+
Computer
+
+
+
+
+
+
OU
+
+
+
+
+
+
Server
+
+
–
+
+
+
Site
+
+
–
–
+
+
Subnet
+
+
–
–
+
+
Partition
+
+
–
+
+
+
Quota
+
+
+
+
+
+
екта. GUID присваивается объекту при его создании, является уникальным и не может измениться ни при каких обстоятельствах. Мы можем переместить объект в схеме, при этом изменится уникальное имя объекта, но его идентификатор останется прежним.
Утилиты для поиска, добавления и модифицирования объектов Операционные системы Windows Server 2003 и Windows XP имеют встроенный набор утилит для осуществления операций над объектами службы каталогов из командной строки. Это утилиты, начинающиеся с латинских букв ds (синтаксис всех команд можно посмотреть, введя в качестве параметра /?): n dsquery – ищет объект по заданным условиям; n dsget – получает свойства объекта; n dsadd – добавляет объект; n dsmod – изменяет атрибуты объекта; n dsmove – перемещает объект внутри домена; n dsrm – служит для удаления объектов из каталога. Каждая утилита командной строки работает с определенным набором объектов службы каталогов. В таблице указано, c каким объектом может работать утилита, а с каким нет. Некоторые команды имеют систему подкоманд, в которых явным образом указывается, с каким объектом вы будете работать, а также перечень параметров. Рассмотрим запрос к службе каталогов. >dsquery computer -name buh*
Результатом выполнения данного запроса будет список имен компьютеров в домене, начинающихся с buh. Например: "cn=buh01,cn=computers,dc=domain,dc=com" "cn=buh02,cn=computers,dc=domain,dc=com" "cn=buhgalter,ou=buhgalters,dc=domain,dc=com"
Как видите, результаты выводятся в формате DN. Синтаксис подкоманд dsquery на первый взгляд может показаться сложным, хотя большинство параметров одинаково, а различаются они лишь расширениями, специфичными для заданного типа объекта.
41
администрирование Рассмотрим пример применения утилит dsadd и dsmod (в отличие от dsquery и dsget и наряду с dsmove и dsrm они вносят изменения в Active Directory):
n используя специальный ключ, можно увидеть парамет-
>dsadd user "cn=Ivanov,cn=Users,dc=domain,dc=com" -pwd *
Рассмотрим простой пример ее применения. Пусть нам нужно найти все компьютеры, имена которых начинаются с buh в организационной единице buhgalteria домена domain.com:
Команда создает пользователя с именем пред-Windows 2000 Ivanov в группе Users домена domain.com. При этом будут запрошены пароль и его подтверждение, потому как в параметре -pwd указана звездочка. Может сложиться ситуация, когда введенный пароль не будет удовлетворять требованиям безопасности вашего домена (см. настройки политики паролей объекта GPO для домена). В этом случае учетная запись будет создана заблокированной и останется таковой до тех пор, пока вы не смените пароль на такой, который будет отвечать политикам вашего домена. >dsmod user "cn=Ivanov,cn=Users,dc=domain,dc=com" ↵ -upn ivanov@domain.com
Данная команда добавляет логин пользователя в формате UPN. Утилиту dsquery можно использовать конвейером с другими утилитами, и тогда в качестве входных данных для них будет браться результат команды dsquery. Приведу пример: >dsquery user -name Ivanov | dsmod user -disabled yes
ры выполнения запроса, что в свою очередь способствует анализу эффективности конкретного запроса.
>adfind –b "ou=buhgalteria,dc=domain,dc=com" ↵ -f "(&(objectcategory=computer)(name=buh*))"
Здесь мы указываем область поиска и параметры искомого объекта. Вторая утилита от Джо Ричардса, admod, является расширенным аналогом стандартной dsmod (точнее некой смесью dsmod + dsmod + dsrm). В отличие от стандартных команд admod может работать с любыми объектами каталога. Нетрудно догадаться, что с ее помощью можно изменять, перемещать, переименовывать, удалять объекты, используя соответствующие параметры. Также эта утилита позволяет восстанавливать объекты после удаления, однако эта функция действует только в доменах Windows 2003. Стоит отметить, что результаты запроса команды adfind могут быть использованы в качестве входных параметров команды admod.
Утилиты диагностики неисправностей службы каталогов и сетевой среды
Помимо начального планирования, разворачивания и наDsmod в этом случае отключает учетную запись поль- стройки службы каталогов администраторы должны обесзователя Ivanov, получая в качестве входных параметров печивать работоспособность и правильное взаимодействие результат выполнения запроса dsquery. В итоге вход в до- всех компонентов Active Directory. Для решения задач отслемен с использованием этой учетной записи будет невоз- живания и устранения неисправностей существует ряд утиможен. лит, которые при обнаружении некорректной работы какоПомимо встроенных средств Windows Server 2003 го-либо компонента должны быть запущены в первую очеи Windows XP существует также ряд утилит, выпущен- редь. Такие инструменты входят в состав Support Tools (наных сторонними разработчиками – экспертами в области ходятся на диске с операционной системой) и Resource Kit Active Directory. Одним из них является Джо Ричардс – автор Tools (их вы найдете на сайте компании Microsoft). целого ряда утилит для мониторинга и управления службой каталогов. Мы рассмотрим лишь две из них. Желаю- Dcdiag щие могут подробнее ознакомиться с остальными на сай- Эта утилита, входящая в состав Support Tools, позволяет те Джо (www.joeware.net). провести диагностику контроллеров домена на предмет Первая утилита, adfind, фактически является расширен- обнаружения ошибок в работе служб. Запустить ее можно ным аналогом стандартной dsquery (скорее даже «солян- как с компьютера под управлением Windows XP (при этом кой» из dsquery, dsget, ldp и других полезных вещей) и позво- указав в параметрах целевой контроллер домена), так и ляет осуществлять различные запросы к каталогу. Для ус- непосредственно на самом контроллере. При запуске без тановки нужно лишь скачать архив с программой и распа- ключей будет выведен результат 27 тестов, предназначековать ее в системный каталог \Windows\system32. Для бо- ние каждого из которых можно узнать, запустив dcdiag лее подробного ознакомления с параметрами закидываем с ключом /?. Однозначно можно сказать, что эта утилита файл справки в текстовый документ: является одной из важнейших для администраторов службы каталогов. >adfind -?? > c:\adfind_help.txt
Netdiag
От стандартных команд, формирующих запросы к ка- «Инструмент», также входящий в состав Support Tools, слуталогу, ее отличает следующее: жит скорее для диагностики проблем в сети, чем напрямую n она позволяет выполнять запросы любой сложности; относится к средствам для выявления и устранения неполаn полученные с ее помощью результаты запроса можно док в работе службы каталогов. При его запуске будет проотсортировать, используя специальные ключи; веден ряд проверок, таких как проверка DNS, тест доступности контроллера домена, проверка конфигурации IP‑адn она позволяет увидеть удаленные объекты;
42
администрирование реса, проверка LDAP, основного шлюза и таблиц маршрутизации и другие важные тесты.
GPOtool Одна из утилит Resource Kit, которая служит для проверки целостности объектов групповых политик. В предыдущей статье [1] были рассмотрены групповые политики. Напомню, что каждый объект GPO состоит из двух частей – контейнера и шаблона групповой политики. Контейнер хранится в каталоге и содержит параметры объекта GPO, шаблон хранится в папке \Windows\sysvol\ и содержит настройки безопасности, административные политики, скрипты и приложения, которые публикуются при помощи групповых политик. Если версии контейнера и шаблона групповой политики по каким-то причинам не совпадают либо один из них поврежден, групповая политика применена не будет.
Repadmin Одним из важнейших процессов при функционировании службы каталогов является репликация. Утилита из состава Support Tools, позволяющая увидеть, что происходит при репликации, и выявить возможные причины неполадок.
NTDSutil Это контекстный инструмент, предназначенный для работы с базой данных службы каталогов, а также для управления ролями FSMO (Flexible Single-Master Operation, одиночный хозяин операций) и удаления метаданных, неправильно вышедших из состава службы каталогов контроллеров
№11, ноябрь 2007
домена. С ее помощью можно, например, принудительно захватить роли FSMO, которые принадлежали вышедшему из строя контроллеру домена. Но в этом случае нужно быть уверенным, что этот контроллер уже не вернется к работе, иначе возникнут проблемы в работе службы каталогов, так как некоторые роли FSMO требуют уникальности обладателя в рамках домена. Использование утилиты требует от администратора четкого понимания происходящего, иначе действия, произведенные с помощью NTDSutil, могут повлечь за собой неприятные последствия.
Заключение В рамках журнальной статьи описать все инструменты командной строки, предназначенные для повседневной работы со службой каталогов. Тем более что подход каждого администратора к управлению индивидуален. Здесь вам предложены те базовые утилиты, которые будут полезны, если вы имеете дело с Active Directory. Нетрудно догадаться, что многие из команд могут использоваться в пакетных файлах для автоматизации процесса управления службой каталогов. Это во многом может облегчить выполнение повседневных рутинных задач. Для детального ознакомления с инструментами командной строки используйте базу знаний Microsoft TechNet, а также веб-блоги специалистов по внедрению и поддержке службы каталогов. 1. Емельянов А. Групповые политики в доменах Active Directory. //«Системный администратор», №7, 2007 г. – С. 4-9.
43
администрирование
Знакомимся с PowerShell – новой командной оболочкой
Андрей Бирюков По сравнению с UNIX, Windows-системы не обладают разнообразием языков сценариев, поэтому появление PowerShell стало примечательным событием.
Чем PowerShell отличается от других оболочек Задачи автоматизации различных операций, выполняемых системными администраторами, существуют со времен появления первых локальных сетей. Для решения этих задач используются разные программные средства, однако самым распространенным является написание сценариев, например, на языке VBScript или Perl. Но в последнее время все большую популярность получает Windows PowerShell, новая командная оболочка Windows, разработанная в первую очередь для системных администраторов. Она вклю-
44
чает интерактивную командную строку и среду исполнения сценариев, которые можно использовать вместе или по отдельности. Ранее PowerShell именовался Monad и поставлялся в виде отдельного приложения, но в Windows Server 2008 (который, по официальным данным, выйдет в феврале следующего года) данный инструмент будет установлен по умолчанию. Также стоит отметить, что Powershell будет работать не только на Server 2008, но и на любой системе, где есть .Net 2.0 (Windows XP, Vista, Server 2003). В отличие от большинства оболочек, которые принимают и возвращают текст, оболочка
Windows PowerShell, разработанная на основе среды CRL .NET и платформы .NET Framework, принимает и возвращает объекты .NET, а также использует в своей работе только объекты. Это фундаментальное изменение делает возможным применять совершенно новые средства и методы администрирования и конфигурирования систем Windows. Как и многие другие оболочки, Windows PowerShell обеспечивает доступ к файловой системе на компьютере. Кроме того, в состав оболочки Windows PowerShell входят поставщики, позволяющие столь же легко рабо-
администрирование тать с другими хранилищами данных, такими как реестр и сертификаты цифровых подписей. Поговорим о том, какие средства предлагает данный инструмент системным администраторам и какие задачи можно решать с его помощью. Большинство оболочек, в том числе знакомая каждому админу Cmd.exe и оболочки SH, KSH, CSH и BASH систем UNIX, выполняют команду или служебную программу в новом процессе и представляют результаты пользователю в виде текста. За время существования этих оболочек были разработаны многие программы обработки текста, поддерживающие этот механизм взаимодействия, такие как sed, AWK и PERL. Некоторые команды встроены в эти оболочки и выполняются в процессе самой оболочки. Примерами могут служить команды typeset и dir в оболочках KSH и Cmd.exe соответственно. В большинстве оболочек встроенных команд немного, поэтому для них создано большое число служебных программ. Однако Windows PowerShell сильно отличается от других оболочек: n Windows PowerShell обрабатывает не текст, а объекты платформы .NET. Также PowerShell позволяет напрямую вызывать объекты .Net и таким образом управлять любыми Com ActiveX сущностями. n Windows PowerShell включает множество встроенных команд, имеющих унифицированный интерфейс. Таких, например, как команды для работы с WMI (Get-WmiObject). n Все команды оболочки обрабатываются одним синтаксическим анализатором, в то время как во многих других оболочках каждому средству соответствует отдельный анализатор. Это значительно облегчает изучение команд. n Powershell позволяет запускать унаследованные VBS-сценарии, так что вы без труда сможете использовать уже имеющиеся наработки. И что самое важное: в оболочке Windows PowerShell можно использовать традиционные средства Windows, такие как Net, SC и Reg.exe. Думаю, всем администраторам приходилось неоднократно сталкиваться с данными средствами, и возможность использо-
№11, ноябрь 2007
Рисунок 1. Команды PowerShell
вать их в своих сценариях будет также не лишней.
Основные понятия
терфейсом командной строки, с другой, использовать мощный функционал работы с объектами. Windows PowerShell расширяет концепцию пересылки данных между командами, позволяя пересылать объекты, а не просто текст, что является порой очень полезным.
В PowerShell существует несколько важных понятий. Одно из них это командлет – команда Windows PowerShell, предназначенная для работы с объектами и выполняющая определенные Установка функции. Обсудив основные понятия PowerShell, Командлеты можно идентифици- прист упим к установке. Требоваровать по их именам, которые состав- ния к системе достаточно стандартлены из глагола и существительного, ны: Windows XP с пакетом обновлеразделенных дефисом (-), например ний 2, Windows 2003 с пакетом обновGet-Help, Get-Process и Start-Service. лений 1 или более поздние версии Большинство командлетов Windows Windows. Также требуется Microsoft PowerShell очень просты, и предпола- .NET Framework 2.0, который можгается, что они будут использоваться но скачать по адресу [1]. Процесс усвместе с другими командлетами. На- тановки на локальную машину станпример, командлеты категории «get» дартен, необходимо лишь запустить только возвращают данные, команд- установочный файл. Также авторы леты «set» только задают или изме- PowerShell предусмотрели возможняют значения элементов данных, ко- ность автоматической установки обомандлеты «format» только форматиру- лочки. Для этого необходимо запусют данные, а командлеты «out» только тить файл дистрибутива с параметром направляют вывод в указанное место /quiet. Например: назначения. PowerShellSetup_x86_enu.exe /quiet Хотя взаимодействие с оболочкой Windows PowerShell осуществляется при помощи ввода команд в виде Так что вы можете без труда разтекста, оболочка Windows PowerShell верну ть оболочк у сразу на больоснована не на тексте, а на объектах. шом количестве машин. После устаВыходным элементом любой команды новки PowerShell вам достаточно наявляется объект. Объект, полученный брать в командной строке Windows на выходе одной команды, можно пос- PowerShell, и вы окажетесь в командлать на вход другой команды. В резуль- ной строке данной оболочки. Наберитате оболочка Windows PowerShell поз- те «help», как видите, PowerShell соволяет, с одной стороны, администра- держит множество различных команд торам работать с хорошо знакомым ин- (см. рис. 1).
45
администрирование пользовательских данных и целостности операционной системы в оболочке Windows PowerShell реализованы некоторые средства обеспечения безопасности, в том числе политика выполнения. Политика выполнения определяет, можно ли выполнять сценарии, и если да, должны ли они быть подписаны цифровой подписью. Кроме того, она определяет, можно ли загружать конфигурационные файлы. Прежде всего посмотрите текущий статус политики выполнения. Сделать это можно с помощью команды: get-executionpolicy
Рисунок 2. Команды PowerShell, пришедшие из UNIX
Отдельно хотелось бы отметить те команды, которые пришли из мира UNIX. На самом деле эти команды являются только алиасами к реальным командам Power Shell. Сделано это специально для удобства работы администраторов, привыкших к UNIX-среде. Для того чтобы получить список таких алиасов, наберите команду alias (см. рис. 2). Строго говоря, это еще не все, при необходимости вы можете создавать свои командлеты (команды), специальные оснастки позволят вам без труда добавить их в оболочку. Но пока напишем несколько простых сценариев с помощью имеющегося набора команд: Листинг 1. Получение времени на локальной машине $strComputer = "." $colItems = get-wmiobject -class "Win32_UTCTime" ↵ -namespace "root\CIMV2" -computername $strComputer foreach ($objItem in $colItems) { write-host "Day: " $objItem.Day write-host "Day Of Week: " $objItem.DayOfWeek write-host "Hour: " $objItem.Hour write-host "Milliseconds: " $objItem.Milliseconds write-host "Minute: " $objItem.Minute write-host "Month: " $objItem.Month write-host "Quarter: " $objItem.Quarter write-host "Second: " $objItem.Second write-host "Week In Month: " $objItem.WeekInMonth write-host "Year: " $objItem.Year write-host }
Как видите, синтаксис похож на VBScript, так что особых проблем с изучением возникнуть не должно. Сохраняем в текстовом файле с расширением PS1.
Настройка Однако, если вы сейчас попробуете запустить данный сценарий, то получите сообщение об ошибке. Причиной этому является то, что по умолчанию выполнение сценариев в PowerShell запрещено. Это сделано специально для предотвращения возможных проблем с безопасностью. По умолчанию после установки вам доступно только выполнение команд в интерактивном режиме. Для защиты
46
В случае установки по умолчанию вы должны получить статус Restricted. Для того чтобы сменить этот статус, воспользуйтесь командой: set-executionpolicy статус_политики
Рассмотрим, какие статусы политики выполнения возможны: n Restricted – эта политика выполнения по умолчанию. Допускает отдельные команды, но сценарии выполнять нельзя. n AllSigned – здесь выполнение сценариев разрешено, но необходимо наличие цифровой подписи надежного издателя на всех сценариях и файлах конфигураций, включая сценарии, написанные на локальном компьютере. Также при такой политике запрашивают подтверждение перед выполнением сценариев надежных издателей. Однако при этом существует опасность того, что подписанные, но вредоносные сценарии выполняются. n RemoteSigned – при таком статусе политики выполнение сценариев также разрешено. Необходимо наличие цифровой подписи надежного издателя на всех сценариях и файлах конфигураций, загруженных из Интернета (включая электронную почту и программы мгновенного обмена сообщениями). Нет необходимости в цифровых подписях на сценариях, запускаемых с локального компьютера. Не запрашивают подтверждения перед выполнением сценариев надежных издателей. Подписанные, но вредоносные сценарии также выполняются. n Unrestricted – самая демократичная политика, позволяет запускать неподписанные сценарии. Сценарии и файлы конфигурации, загруженные из Интернета (включая Microsoft Outlook, Outlook Express и Windows Messenger), выполняются после предупреждения, что данный файл был загружен из Интернета. Как и следовало ожидать, при таком статусе также возможно выполнение вредоносных сценариев. Думаю, использование данного статуса политики выполнения возможно только на тестовых машинах, так как в реальных сетях это крайне небезопасно.
администрирование В зависимости от специфики выполняемых серверами задач я бы рекомендовал использовать RemoteSigned, в случаях, когда выполняются преимущественно сценарии собственного написания, и AllSigned, когда выполняются сценарии, полученные из внешних источников. Итак, устанавливаем статус политики RemoteSigned: set-executionpolicy RemoteSigned
Запускаем PS1-файл. Для этого достаточно просто набрать в командной строке PowerShell имя файла. Результатом выполнения сценария будет информация о времени на локальной машине. Итак, на примере такого незамысловатого сценария мы настроили систему политики выполнения сценариев PowerShell и убедились в работоспособности интерпретатора. Пришло время рассмотреть более сложные, прикладные сценарии.
Мониторинг событий Начнем с «классики» применения сценариев, а именно с задач мониторинга и сбора статистики. Например, с получения информации обо всех событиях в журнале. Для этого нам необходимо обойти все записи в журнале и получить их свойства: Листинг 2. Получение информации о событиях $strComputer = "." //Выполняем на локальной машине $colItems = get-wmiobject -class "Win32_NTLogEvent" ↵ -namespace "root\CIMV2" -computername $strComputer # Обходим все записи в журнале foreach ($objItem in $colItems) { # Категория write-host "Category: " $objItem.Category # Значение категории write-host "Category String: " $objItem.CategoryString # Имя компьютера write-host "Compute rName: " $objItem.ComputerName write-host "Data: " $objItem.Data # данные # Код события write-host "Event Code: " $objItem.EventCode # Идентификатор события write-host "Event Identifier: " $objItem.EventIdentifier # Тип события write-host "Event Type: " $objItem.EventType # Добавленные комментарии (если есть) write-host "Insertion Strings: ↵ " $objItem.InsertionStrings # Файл журнала write-host "Logfile: " $objItem.Logfile # Текст сообщения write-host "Message: " $objItem.Message # Номер записи write-host "Record Number: " $objItem.RecordNumber # Имя источника write-host "Source Name: " $objItem.SourceName # Время создания сообщения write-host "Time Generated: " $objItem.TimeGenerated # Время записи write-host "Time Written: " $objItem.TimeWritten write-host "Type: " $objItem.Type # Тип write-host "User: " $objItem.User # Имя пользователя write-host }
Как видите, сценарий прост в написании. В репозитории Microsoft [4] вы найдете большое количество сценариев PowerShell, предназначенных для работы с объектами Active Directory, файлами, операционной системой, сетью и т. д. Однако все эти сценарии ориентированы на получе-
№11, ноябрь 2007
ние свойств различных объектов и не осуществляют создание каких-либо объектов средствами PowerShell.
Работаем с групповыми политиками Итак, давайте создадим новый объект групповых политик (GPO), используя Windows PowerShell. Такой сценарий будет иметь следующий вид: Листинг 3. Создание нового объекта групповой политики Dim GPM # Объявляем массив GPM # Объект класса GPMgmt.GPM Set GPM = CreateObject("GPMgmt.GPM") # Переменная данного класса $gpm = New-Object -ComObject GPMgmt.GPM # Получаем константы данного класса $gpmConstants = $gpm.GetConstants() $gpmDomain =$gpm.GetDomain("Mydomain.local", "", ↵ $gpmConstants.UseAnyDC) # Подключаемся к домену, замените Mydomain.local на нужный # Создаем новую политику $gpmNewGpo = $gpmDomain.CreateGPO() # С именем PowerShell GPO $gpmNewGpo.DisplayName = "PowerShell GPO"
Рассмотрим более подробно данный сценарий, так как в нем отражены преимущества PowerShell. В начале сценария мы создаем экземпляр класса GPMgmt.GPM, который дает доступ к большинству функций GPMC: $gpm = New-Object -ComObject GPMgmt.GPM
Строка является точкой входа, которая позволяет нам редактировать групповые политики. В этом случае нам нужно создать новый объект групповой политики, для этого мы подключаемся к домену командой: $gpmDomain =$gpm.GetDomain("Mydomain.local", "", ↵ $gpmConstants.UseAnyDC)
И затем, собственно, создается новый объект групповой политики: $gpmNewGpo = $gpmDomain.CreateGPO() $gpmNewGpo.DisplayName = "PowerShell GPO"
Теперь, когда вы знаете, как создать объект GPO, давайте откроем существующий объект. Для этого нам придется немного модифицировать уже имеющуюся программу. У вас все еще есть ссылка на домен, $gpmDomain, поэтому добавьте следующее: Листинг 4. Получение информации о групповой политике $gpmExistingGpo = $gpmDomain.GetGPO( ↵ "{31B2F340-016D-11D2-945F-00C04FB984F9}") # Открываем уже существующую групповую политику, # используя ее GUID $gpmExistingGpo.DisplayName # Получаем имя данной политики. Сохраняем отчет в файл $gpmExistingGpo.GenerateReportToFile( ↵ $gpmConstants.ReportHTML, ↵ ".\DefaultDomainPolicyReport.html")
Вы получите полный отчет в формате HTML о параметрах политики домена по умолчанию, но вы можете использовать любой из методов и свойств, например, ModificationTime, который сообщит вам, когда объект GPO в последний раз изменялся, чтобы узнать, когда изменялись какие-либо из параметров объекта GPO.
47
администрирование Напишем еще один небольшой сценарий на PowerShell, который предоставит нам сведения об объектах групповой политики, изменявшихся за последние сутки: Листинг 5. Получение информации об изменениях GPO за последние сутки $gpmSearchCriteria = $gpm.CreateSearchCriteria() # Мы хотим получить информацию обо всех групповых политиках # в домене, поэтому критерий поиска нам вводить не нужно $gpmAllGpos = $gpmDomain.SearchGPOs($gpmSearchCriteria) # Ищем все групповые политики в домене foreach ($gpmGpo in $gpmAllGpos) { if ($gpmGpo.ModificationTime -ge (get-date).AddDays(-1)) ↵ {$gpmGpo.DisplayName} # Проверяем, какие групповые политики изменялись # за последние 24 часа }
Обратите внимание на знак операции -ge, означающий «больше или равно». Он может показаться вам странным, если вы привыкли к знакам операций «и» в других языках написания сценариев или программирования. Однако эти знаки операций используются для перенаправления, например, для перенаправления выходных данных в файл, и поэтому не могут использоваться в качестве знаков операций сравнения в Windows PowerShell.
Интересные нововведения Кроме описанных выше синтаксических конструкций, позволяющих автоматизировать различные задачи системного администрирования, PowerShell обладает также и рядом принципиально новых решений, таких как демонстрации возможных последствий работы сценария. То есть с помощью конструкции -whatif демонстрируется то, что будет сделано, и предсказывается эффект, но никаких изменений в системе и действий над объектами не производится. Приведу пример работы небольшого сценария, в котором рекурсивно обходится папка c:\Program Files, ищет файлы *.ini и пытается их удалить: > get-childitem "c:\Program Files" -include *.ini ↵ -recurse | remove-item –whatif
What if: Performing operation "Remove File" on Target "C:\Program Files\ABBYY Lingvo 12\LingvoCE\Setup.ini". What if: Performing operation "Remove File" on Target "C:\Program Files\ABBYY Lingvo 12\LingvoPalm\SetupPalm.ini". What if: Performing operation "Remove File" on Target "C:\Program Files\ABBYY Lingvo 12\BITSetup.ini". What if: Performing operation "Remove File" on Target "C:\Program Files\Adobe\Acrobat 7.0\Setup Files\RdrBig709\ENU\ 0x009.ini". What if: Performing operation "Remove File" on Target "C:\Program Files\Adobe\Acrobat 7.0\Setup Files\RdrBig709\ENU\ Abcy.ini".
В результате работы сценария система сообщает нам о найденных файлах и действиях, которые могли бы быть применены к этим файлам, но сами файлы не удаляются. Другой пример: > get-childitem "c:\Program Files" -include *.ini ↵ -recurse | remove-item –confirm Confirm Are you sure you want to perform this action? Performing operation "Remove File" on Target "C:\Program Files\ABBYY Lingvo 12\LingvoCE\Setup.ini".
48
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Здесь вместо -whatif используется команда -confirm. В результате перед выполнением действия на консоль выводится запрос на подтверждение выполнения указанного действия. Стоит отметить, что параметры -whatif и ‑confirm можно применять практически к любым командам Powershell. Также хотелось бы сказать несколько слов об объектности интерпретатора PowerShell. Вот, например, поиск процесса по маске notep*: > get-process notep* Handles NPM(K) ------- -----47 3 47 3
PM(K) ----1724 1704
WS(K) VM(M) ----- ----3772 33 3732 33
CPU(s) -----0,41 0,30
Id ProcessName -- ----------236 notepad 2900 notepad
Все внутри PowerShell – это объекты на примере поиска в памяти процесса notepad и присвоения объекта переменной $prc: > $prc= get-process notep*
Получаем содержимое объекта $prc: > $prc* Handles NPM(K) ------- -----47 3 47 3
PM(K) ----1724 1704
WS(K) VM(M) ----- ----3772 33 3732 33
CPU(s) -----0,41 0,30
Id ProcessName -- ----------236 notepad 2900 notepad
К любому атрибуту объекта PowerShell можно обратиться. Возьмем, например, атрибут Id: > $prc.Id 236 2900
Также стоит обратить внимание на то, что Powershell поддерживает режим автодополнения команд и параметров, как в bash. К примеру, напечатав в командной строке $prc и нажав клавишу <TAB>, получим $prc.Id. При этом автозаполнение действует не только для объектов, но и для параметров команд и путей файловой системы. Далее рассмотрим свойства объекта и его методы. Знак «|», знакомый администраторам, работавшим с Shell и Perl, в PowerShell передает не просто текст, а настоящие объекты по конвейеру. Причем здесь можно создавать конвейеры любой длины. Например: > $prc| format-list -property * __NounName Name Handles VM WS PM NPM …
> $prc| get-member
: Process : notepad : 47 : 34541568 : 3862528 : 1765376 : 2920
администрирование TypeName: System.Diagnostics.Process Name ---Handles Name NPM PM VM WS …
MemberType ---------AliasProperty AliasProperty AliasProperty AliasProperty AliasProperty AliasProperty
Definition ---------Handles = Handlecount Name = ProcessName NPM = NonpagedSystemMemorySize PM = PagedMemorySize VM = VirtualMemorySize WS = WorkingSet
Существует также несколько способов уничтожения процесса. Для примера остановим процесс notepad: > $prc| stop-process
ProviderName : FreeSpace : Size : VolumeName :
Нам нужны диски, на которые можно писать. У них type=3: > gwmi win32_logicaldisk -filter "drivetype = 3" DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 15472779264 Size : 52427898880 VolumeName : DeviceID : D: DriveType : 3 ProviderName : FreeSpace : 58742120448 Size : 107611336704 VolumeName : Новый том
или > get-process notep* | stop-process
или Затем нужно получить параметры deviceid, freespace:
> get-process notep* | kill
В результате выполнения любой из этих команд процесс notepad будет закрыт. Приведу еще несколько примеров работы с конвейерами в PowerShell. Произведем сортировку объектов по свойству WS (working set) и выбор 5 процессов, занимающих больше всего памяти: > get-process | sort-object -property WS –descending | ↵ select-object -first 5 Handles NPM(K) ------- -----605 27 637 24 445 17 975 38 283 5
PM(K) ----52820 37692 28676 44960 26748
WS(K) VM(M) ----- ----38652 226 32380 165 25672 490 20776 350 20392 136
CPU(s) -----476,11 79,25 187,44 14,13 2,78
Id ProcessName -- ----------2268 ICQLite 1716 IEXPLORE 2588 WINWORD 3120 OUTLOOK 1580 powershell
Другая задача – проверить, сколько свободного места есть на дисках, на которые возможна запись: > gwmi win32_logicaldisk DeviceID : A: DriveType : 2 ProviderName : FreeSpace : Size : VolumeName : DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 15472779264 Size : 52427898880 VolumeName : DeviceID : D: DriveType : 3 ProviderName : FreeSpace : 58742120448 Size : 107611336704 VolumeName : Новый том DeviceID DriveType
> gwmi win32_logicaldisk -filter "drivetype = 3" | ↵ select deviceid,freespace
deviceid -------- C: D:
freespace --------15472590848 58742120448
Данные выводятся в байтах, что неудобно, поэтому переводим их в гигабайты: > gwmi win32_logicaldisk -filter "drivetype = 3" | ↵ % { $_.deviceid; $_.freespace/1GB }
C: D:
14,4099731445313 54,7078628540039
Для примера выберем все файлы, размер которых больше, чем 200 Кб, и отсортируем их в нисходящем порядке: > Get-ChildItem C:\Windows | Where-Object {$_.Length ↵ -gt 200KB} | Sort-Object Length –Descending
Mode ----a---a---a---a---ar--a---ar--a---a---a---a---a-------a---a---a---a---a---a---a---a---a---a---
LastWriteTime ------------05.05.2005 4:28 04.05.2005 5:16 04.05.2005 21:01 26.10.2007 16:59 04.08.2004 16:00 29.05.2007 15:01 04.08.2004 16:00 04.08.2004 16:00 16.11.2006 17:22 17.04.2006 10:54 10.07.2007 11:17 29.05.2007 15:01 17.04.2005 9:20 29.05.2007 15:01 22.10.2007 10:58 29.05.2007 15:01 22.10.2007 15:08 29.10.1998 15:45 04.08.2004 16:00 04.08.2004 16:00 29.05.2007 15:01 29.05.2007 14:53 18.06.2007 10:38
Length Name ------ ---14396416 RTHDCPL.EXE 9697280 RTLCPL.EXE 2805248 ALCWZRD.EXE 2012987 WindowsUpdate.log 1086058 SET4.tmp 1051257 iis6.log 1042903 SET3.tmp 1032192 explorer.exe 1030102 setupapi.log.0.old 786065 setuplog.txt 737280 iun6002.exe 708085 FaxSetup.log 487424 RtlExUpd.dll 364112 ocgen.log 363933 setupapi.log 336583 tsoc.log 316640 WMSysPr9.prx 306688 IsUninst.exe 283648 winhlp32.exe 256192 winhelp.exe 248705 comsetup.log 239096 msmqinst.log 236773 svcpack.log
: E: : 5
Приведу еще один небольшой пример сценария
№11, ноябрь 2007
49
администрирование ботали только с текстовыми данными, это не означает, что Powershell не умеет работать с графикой. Если нам требуется создать и отобразить из скрипта какой-либо графический интерфейс, можно воспользоваться WPF (Windows Presentation Framework), встроенным в .NET. Следующий скрипт на Powershell создает экранную форму с кнопкой «Push me» (см. рис. 4): [void][reflection.assembly]::LoadWithPartialName( "System.Windows.Forms") $form = new-object Windows.Forms.Form $form.Text = "My First Form" $button = new-object Windows.Forms.Button $button.text="Push Me!" $button.Dock="fill" $button.add_click({$form.close()}) $form.controls.add($button) $form.Add_Shown({$form.Activate()}) $form.ShowDialog()
Заключение
Рисунок 3. Список служб в HTML-формате
PowerShell, позволяющий получить список всех служб, зарегистрированных на компьютере, а также получить информацию об их статусе. Однако выводится данная информация будет уже не на консоль, а в HTML-файл: get-service | ConvertTo-Html -Property Name,Status | ↵ foreach { if ($_ -like "*<td>Running</td>*") {$_ -replace "<tr>", "<tr bgcolor=green>"} else {$_ -replace "<tr>", "<tr bgcolor=red>"}} > ↵ .\get-service.html
Результатом выполнения данного сценария будет HTML‑файл, аналогичный изображенному на рис. 3.
Немного о поиске справочной информации Powershell обладает широкими возможностями по поиску справочной информации, получать которую можно находясь непосредственно в интерпретаторе, с помощью get‑help. Вот несколько примеров:
Итак, вы рассмотрели основные элементы PowerShell, примеры использования команд и сценариев. В качестве примеров в статье использовались сценарии с сайтов [3-5], на которых также имеется множество других примеров, так что при необходимости вы можете самостоятельно изучить средства создания сценариев на языке PowerShell. 1. Дистрибутив .NET Framework 2.0 – http://www.microsoft.com/ downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8eddaab15c5e04f5&displaylang=en. 2. Информация и дистрибутив PowerShell – http://support.microsoft. com/kb/926140. 3. Статьи по PowerShell – http://www.script-coding.info. 4. Репозиторий сценариев PowerShell от Microsoft – http://www. microsoft.com/technet/scriptcenter/scripts/msh/default.mspx. 5. Бесплатная электронная книга про PowerShell – http://blogs. msdn.com/powershell/archive/2007/05/11/free-powershellbook.aspx. 6. Руководство по конвертированию унаследованных скриптов VBScript в скрипты PowerShell – https://www.microsoft.com/ downloads/details.aspx?FamilyId=264CE487-1D36-4466-BD8B23A7F1FA967E&displaylang=en. 7. Windows PowerShell 1.0 Documentation Pack – http://www. microsoft.com/downloads/details.aspx?familyid=B4720B00-9A66430F-BD56-EC48BFCA154F&displaylang=en.
// Получаем справочную информацию по команде get-process > get-help get-process // Получаем более детальную информацию по той же команде > get-help get-process -detailed // Получаем справочную информацию по командам, работающим с XML > get-help *xml* // Аналогичный пример, только для команд, работающих с WMI > get-help *wmi*
Вместо get-help желающие могут использовать команду man. Таким образом любой специалист, который пришел из мира UNIX, сможет сделать так: > man get-process > man get-process -detailed > man *xml*
Несмотря на то что примеры, которые приведены, ра-
50
Рисунок 4. Форма с графическими элементами, вызванная из PowerShell
администрирование
Каталоги бизнес-данных – интеграция легким движением руки
Нелли Садретдинова В любой организации существует множество бизнес-приложений и баз данных. Удобные средства работы с информацией из разнообразных источников предлагает мощный инструмент в составе MOSS 2007 – BDC или каталоги бизнес-данных.
Г
ибкое использование на корпоративном портале данных из бизнес-систем открывает перед разработчиком весьма привлекательные перспективы, например: n подсчет KPI (ключевых показателей эффективности) и других аналитических показателей на основе данных из различных источников, динамическое построение графиков и диаграмм;
52
n предоставление онлайн-отчетов
n предоставление отдельных функ-
из бизнес-приложений внешним контрагентам; n организация единого полнотекстового поиска по всем источникам корпорации; n динамическая публикация отчетов из различных источников; n дополнение профилей пользователей информацией из кадровых систем;
ций или отчетов того или иного бизнес-приложения без установки клиентского ПО. n и другие. Помимо этого использование на портале справочников бизнес-приложений напрямую позволяет избежать лишнего дублирования информации и сложной синхронизации.
администрирование Sharepoint 2007 предоставляет несколько возможностей отображения данных из Line-Of-Business (LOB)-систем: n веб-часть Data Form Web Part (наследник Data View Web Part из SPS 2003); n написание собственных веб-частей; n каталоги бизнес-данных, business data catalogs (BDC). BDC – это, пожалуй, одна из самых интересных служб новой версии портала. По сравнению с другими способами, перечисленными выше, каталоги бизнес-данных обладают следующими преимуществами: n BDC позволяют строить приложения легко и быстро, максимально используя весь готовый инструментарий Sharepoint, практически без написания кода; n предоставляется более глубокий уровень интеграции: встраивание в списки и библиотеки Sharepoint, поддержка действий пользователей, подключение к общей системе поиска и др.; n BDC имеют встроенные средства разграничения доступа и их проще персонализировать, особенно с помощью службы единого входа; n каталоги бизнес-данных более надежны и безопасны, т.к. параметры подключения не хранятся в открытом виде на странице, а определены в настройках приложения на сервере, кроме того, через BDC можно получить доступ строго к определенным таблицам и данным. Напомню, что каталоги бизнес-данных доступны только при приобретении корпоративной лицензии MOSS 2007.
Файлы определений приложений. Подключение к источникам BDC позволяют отображать на страницах портала данные из широкого набора источников – любой базы данных, к которой можно подключиться с помощью ADO.NET, ODBC или OleDB. Также можно подключиться к любому веб-сервису. Для подключения необходимо описать бизнес-данные в XML-файле определения приложения (Application Definition File, ADF). Примеры ADF-файлов можно найти в SDK [1]. Остановлюсь на некоторых нюансах подключения к базам данных. Информация о подключении хранится в объекте метаданных LobSystemInstance. Подробно все свойства объекта LobSystemInstance описаны также в SDK, поэтому здесь рассмотрю только наиболее важные из них. Прежде всего это свойство Database Access Provider, которое может иметь всего 4 значения: n SqlServer (естественно, для подключения к Microsoft SQL Server); n OleDb; n Oracle; n Odbc. Внимание! Регистр букв в ADF-файле имеет значение! Еще один важный параметр – это способ аутентификации – AuthenticationMode. Предусмотрены варианты: n PassThrough – в этом случае для аутентификации передаются в открытом виде логин и пароль, напрямую указанные в свойствах подключения, это наиболее простой и наименее безопасный способ аутентификации;
№11, ноябрь 2007
n RevertToSelf – режим по умолчанию, в этом случае доступ к данным осуществляется под учетной записью пула IIS, под которым запущено приложение Sharepoint; n WindowsCredentials – для аутентификации используется учетная запись Windows-пользователя, этот способ рекомендуется использовать, если на сервере баз данных или в LOB-приложении используется аутентификация Windows; n RdbCredentials (только для баз данных) – для аутентификации используются учетные данные из базы данных службы единого входа; этот способ рекомендуется, когда на сервере баз данных используется собственная аутентификация; n Credentials (только для веб-сервисов) – принцип аутентификации аналогичен RdbCredentials, но используется только для веб-сервисов, для basic или digest аутентификации на веб-сервере. Отличие аутентификации PassThrough от Credentials (RdbCredentials) состоит в том, что при PassThrough серверу баз данных передается один и тот же логин, общий для всех пользователей. При указании же Сredentials передается личная учетная запись пользователя в LOB-приложении, соответствующая его учетной записи на портале. Эти соответствия должны быть прописаны в базе данных службы единого входа, сделать это можно в центре администрирования Sharepoint. В последних трех случаях необходимо также указать параметры подключения к службе единого входа (Single Sign On, SSO), которая должна быть запущена и настроена на сервере Sharepoint. SSO – удобное средство «сквозной» аутентификации, когда пользователю не нужно вводить несколько раз разные логины и пароли даже для приложений, где используется аутентификация, отличная от Windows. Коротко о настройке службы единого входа рассказано в статье [4]. Привожу пример LobSystemInstance для подключения к базе данных Oracle: <LobSystemInstance Name="ExampleInstance"> <Properties> <Property Name="DatabaseAccessProvider" ↵ Type="System.String">Oracle</Property> <Property Name="AuthenticationMode" ↵ Type="System.String">PassThrough</Property> <Property Name="RdbConnection Data Source" ↵ Type="System.String">tns name</Property> <Property Name="RdbConnection Pooling" ↵ Type="System.String">false</Property> <Property Name="RdbConnection User Id" ↵ Type="System.String">username</Property> <Property Name="RdbConnection Password" ↵ Type="System.String">password</Property> <Property Name="RdbConnection Integrated Security" ↵ Type="System.String">false</Property> <Property Name="WildcardCharacter" ↵ Type="System.String">%</Property> </Properties> </LobSystemInstance>
Обратите внимание, что в свойстве RdbConnection Data Source в данном случае указывается не адрес сервера, а имя tns, прописанное в конфигурационном файле Oracle «tnsnames.ora». Приведу также примеры строки описания подключе-
53
администрирование ния к источникам данных ODBC, в данном случае – Firebird и MySQL: <Property Name="RdbConnection Data Source" ↵ Type="System.String">"Driver={Firebird/InterBase(r) ↵ driver};DSN=dsn_name;Uid=username;Pwd=password; ↵ Trusted_Connection=True;"</Property> <Property Name="RdbConnection Data Source" ↵ Type="System.String">"Driver={MySQL ODBC 3.51 ↵ Driver};Dsn=dsn_name;Trusted_Connection=True;" ↵ </Property>
Также обратите внимание, что wildcard-символ для разных баз данных отличается, поэтому его также необходимо указывать в свойствах. К примеру, для Oracle это «%», а в Microsoft SQL Server используется «*». При использовании SSO необходимо дополнительно указать свойства SSOApplicationID и SSOProviderImplementation: <Property Name="SsoApplicationId" Type="System.String"> ↵ myApp</Property> <Property Name="SsoProviderImplementation" ↵ Type="System.String">Microsoft.SharePoint.Portal. ↵ SingleSignon.SpsSsoProvider, Microsoft.SharePoint.Portal.SingleSignon, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c </Property>
<Actions> … <Actions> </Entity>
За отображение данных отвечают методы. Их три:
n Finder – предоставляет набор записей для списков и библиотек Sharepoint;
n SpecificFinder – предоставляет одну запись (экземпляр объекта), согласно указанному идентификатору, для соответствующих веб-частей Sharepoint и страницы профиля; n IdEnumerator – предоставляет список идентификаторов всех записей для обходчика поисковой системы Sharepoint. Тип метода указывается в MethodInstances: <MethodInstances> <MethodInstance Name="ProductsSpecificFinder ↵ Instance" Type="SpecificFinder" ↵ ReturnParameterName="Products" /> </MethodInstances>
В методе могут быть указаны один или несколько входных параметров с целью: n предоставить пользователю возможность поиска по тому или иному полю; n для методов типа SpecificFinder (входной параметр – идентификатор); n для связи веб-частей с бизнес-данными между собой (с использованием ассоциаций).
Полный пример описания подключения с использованием SSO приведен в SDK [1]. Совет. Перед подключением к бизнес-данным через ODBC или OleDB рекомендуется проверить настроенный DSN или же строку подключения любым подручным способом (средствами клиентского приложения или же, к примеДля каждого входного параметра в первых двух слуру, Microsoft Access или Excel). Также рекомендуется прове- чаях необходимо описать соответствующий фильтр. В атрять корректность SQL-запросов перед их использованием рибутах фильтра необходимо определить тип – операцию, в BDC. Связано это с тем, что каталоги бизнес-данных до- с помощью которой производится отбор: «равно», «содерстаточно сложно отлаживать, и в логах не всегда коррект- жит», «больше» и др. Для поиска можно также дополнино отображается ошибка. тельно указать свойство, значение которого будет отобраЕсли бизнес-данные предполагается использовать жаться рядом с поисковым полем: на ферме серверов, то установка клиентов и драйверов баз <FilterDescriptor Type="Comparison" Name="ID" > данных, а также настройка ODBC должны быть произведе<Properties> ны одинаковым образом на всех фронт-энд-серверах. <Property Name="Comparator" ↵
Файлы определений приложений. Запросы к данным
Type="System.String">Равняется</Property> </Properties> </FilterDescriptor>
Ключевой объект метаданных в ADF-файле – Entity (сущВнимание! Для разных баз данных входные параметры ность). Это понятие ближе всего к понятию «объекта» в запросе обозначаются по-разному (см. таблицу). из объектно-ориентированного программирования. СущВ методе обязательно указывается параметр типа ность включает в себя идентификаторы, методы, фильтры «Return», который содержит описание возвращаемого наи действия. Несколько сущностей могут быть связаны меж- бора полей. Пример описания поля: ду собой с помощью ассоциаций. <TypeDescriptor TypeName="System.String" ↵ Упрощенно описание сущности выглядит следующим Name="ProductName"> образом: <LocalizedDisplayNames> <Entity EstimatedInstanceCount="100" Name="Product"> <Properties> … </Properties> <Identifiers> … </Identifiers> <Methods> … </Methods>
54
<LocalizedDisplayName LCID="1049"> ↵ Наименование товара</LocalizedDisplayName> </LocalizedDisplayNames> <Properties> <Property Name="DisplayByDefault" ↵ Type="System.Boolean">true</Property> </Properties> </TypeDescriptor>
При описании полей обратите внимание на следующие нюансы:
администрирование n Имя дескриптора типа должно обязательно совпадать с названием поля, возвращаемым запросом. Если возвращается результат выполнения функции или операции, в запросе нужно обязательно указать для него имя, например: «SELECT date_format(dt, ‘%d.%m.%Y’) AS formatted_dt FROM …». n Если вы заглянете в SDK [1], то заметите, что в примерах в атрибуте LCID параметра LocalizedDisplayName указано значение «1033», соответствующее английскому языку. Для русского языка необходимо указывать значение «1049». Можно указать значения для нескольких языков одновременно, для мультиязычных систем. n Тип возвращаемого поля и тип дескриптора обязательно должны совпадать. К примеру, если значение возвращаемого целого числа больше допустимого для типа System.Int32, то возникнет ошибка, необходимо указать System.Int64. n Данные типа BLOB для баз данных не поддерживаются.
<TypeDescriptor TypeName="System.Int32" ↵ Name="ProductID" IdentifierEntityName="Product" ↵ IdentifierName="ProductID">
Персонифицировать результаты запросов можно разными способами. Для способов аутентификации типа Credantials в случаях, когда учетная запись пользователя передается на сервер баз данных, где и происходит его авторизация, эту задачу можно решать на уровне самой базы данных. Для способов авторизации, когда обращение к базе данных происходит всегда под одной и той же учетной записью, эту проблему можно решить на уровне определения приложения, путем использования специальных фильтров. Эти фильтры передают в качестве параметра запроса имя пользователя, в частности, для учетной записи Windows: <FilterDescriptor Type="UserContext" Name="currentuser" />
Для учетной записи SSO: Также для сущности можно указать набор действий. Под действием в данном случае понимается ссылка с набором параметров. По ссылке можно перейти к другой странице Sharepoint, открыть форму InfoPath, открыть страницу LOB-приложения, отправить почту, наконец, записать данные обратно в LOB-систему, используя веб-сервисы с поддержкой записи. Пример описания действия: <Action Name="Подробная информация о покупателе" Position="1" IsDisplayed="true" IsOpenedInNewWindow="true" Url="http://moss2007/sitedirectory/sales/ ↵ customerinfo.aspx?&amp;CustomerID={0}" ImageUrl=""> <ActionParameters> <ActionParameter Name="CustomerID" Index="0" /> </ActionParameters> </Action>
Если определен метод Specific Finder, Sharepoint автоматически создает для сущности действие «Просмотреть профиль» и страницу профиля с результатами выполнения этого метода для выбранной записи. По умолчанию страница профиля находится на узле администрирования поставщика общих служб и доступна только администратору, поэтому лучше отключать это действие или создавать аналогичную страницу на общем узле. Сущности можно связать между собой посредством ассоциаций. Например, если на одной странице нужно отобразить список товаров, приобретенных выбранным покупателем, понадобится такая ассоциация: <Association AssociationMethodEntityName="Product" AssociationMethodName="GetProductsByCustomer" AssociationMethodReturnParameterName="Products" Name="ProductsByCustomer" IsCached="true"> <SourceEntity Name="Customer" /> <DestinationEntity Name="Product" /> </Association>
При этом в методе «GetProductsByCustomer» должен быть указан идентификатор сущности «Product» следующим образом:
№11, ноябрь 2007
<FilterDescriptor Type="Username" Name="currentuser" /> <FilterDescriptor Type="Password" Name="password" />
Автоматизированные средства создания ADF‑файлов Сторонние производители уже давно предлагают небольшие утилиты для визуального создания ADF‑файлов. Это, например, MOSS BDC Design Studio, BDC Meta Man и другие. Вместе с последней версией SDK [1] Microsoft предложила собственную бесплатную утилиту: BDC Definition Editor.
Администрирование каталогов бизнес‑данных Администрирование BDC осуществляется со страницы управления поставщиком общих служб. Если на ферме серверов несколько поставщиков общих служб, то настройки необходимо повторить для каждого поставщика, который предоставляет сервисы приложениям, где будут использоваться бизнес-данные.
Импорт файла определения приложения После того, как ADF-файл готов, его нужно импортировать в каталоги бизнес-данных Sharepoint. Для этого необходимо перейти к центру администрирования поставщика общих служб и выбрать пункт меню «Импорт определения приложения» (см. рис. 1). Примечание. Если у вас нет раздела «Каталог бизнес-данных», значит, ваша лицензия Sharepoint не является корпоративной, и вам необходимо приобрести нужную лицензию. В ходе загрузки производится анализ ADF-файла, в случае ошибки импорт произведен не будет, а будет показано сообщение об ошибке.
Настройка разрешений Далее необходимо настроить безопасность для каталогов бизнес-данных. Разрешения можно указывать на трех уровнях:
55
администрирование Правила обозначения входных параметров для разных баз данных База данных
Обозначение параметра в тексте запроса
Имя параметра в xml
Пример
MS SQL
@param_name
@param_name
SELECT Price FROM ProductPrice WHERE ProductID=@ID AND dt=@DATE <Parameter Direction="In" Name="@ID"> <Parameter Direction="In" Name="@DATE">
Oracle
:param_name
:param_name
SELECT Price FROM ProductPrice WHERE ProductID=:ID AND dt=:DATE <Parameter Direction="In" Name=":ID"> <Parameter Direction="In" Name=":DATE">
Firebird/ Interbase, MySQL
?
:1, :2, :3 и т. д.
SELECT Price FROM ProductPrice WHERE ProductID=? AND dt=? <Parameter Direction="In" Name=":1"> <Parameter Direction="In" Name=":2">
Рисунок 1. Импорт определения приложения каталога бизнес-данных
n для всех каталогов бизнес-данных;
n для отдельных приложений; n для отдельных сущностей. Если вы добавляете пользователя в список разрешений для всех каталогов, то эта настройка будет действовать только для вновь импортируемых определений приложений. Чтобы автоматически добавить разрешения пользователя ко всем приложениям и сущностям, воспользуйтесь ссылкой «Копировать все разрешения для потомков». Для бизнес-данных есть четыре вида разрешений: n изменение; n выполнение; n выбор в клиентах; n настройка разрешений. Всем пользователям, которые будут просматривать страницы с бизнес-данными, необходимо дать разрешение на выполнение. Тем, кто будет формировать эти страницы (дизайнерам, разработчикам) – разрешение на выбор в клиентах. Остальные разрешения необходимы главным образом администратору системы. Права пользователей можно также определять внутри ADF-файла, в объекте AccessControlList.
Дополнительные настройки Для того чтобы использовать каталоги бизнес-данных на узле, на всех четырех уровнях (ферма серверов, веб-приложение, семейство узлов, параметры узла [4]) должна быть активирована возможность (feature) «Компоненты семейства узлов корпоративного выпуска Office SharePoint Server». Действия для сущностей можно настроить не только путем их определения в ADF-файле, но и на странице администрирования общего доступа. Можно удалить созданные действия и добавить новые (см. рис. 2).
Обновление версий
Рисунок 2. Создание нового действия
56
По мере разработки узла с бизнес-данными часто требуется добавление новых сущностей, изменение методов, создание ассоциаций, одним словом, редактирование и повторный импорт ADF-файла.
администрирование Sharepoint не разрешает повторный импорт одной и той же версии ADF‑файла для одной и той же LOB‑системы. Если дать LobSystemInstance другое имя, то будет создано параллельно новое приложение с новыми сущностями. Если сначала удалить импортированное определение приложения, а затем добавить заново, то в веб-частях, отображающих бизнес-данные, возникнет ошибка, т.к. у приложения сменятся внутренние идентификаторы. Правильный способ – указание новой версии определения приложения в ADF-файле при повторном импорте. Параметр Version указывается в объекте LobSystem в начале файла определения: <LobSystem xmlns:xsi="http://www.w3.org/2001/ ↵ XMLSchema-instance" xsi:schemaLocation= ↵ "http://schemas.microsoft.com/office/2006/03/ ↵ BusinessDataCatalog BDCMetadata.xsd" ↵ Type="Database" Version="1.0.0.1" Name="Sales" ↵ xmlns="http://schemas.microsoft.com/office/2006/ ↵ 03/BusinessDataCatalog">
После импорта новой версии определения приложения соответствующие изменения на узле появятся с небольшой задержкой по времени. Со страницы администрирования поставщика общих служб можно произвести обратную процедуру – экспорт xml-файла с определением приложения.
Рисунок 3. Создание столбца типа «Бизнес-данные»
аций. Между дополнительным и основным списком также должно быть установлено соединение стандартным для веб‑частей способом.
Отображение бизнес‑данных
Действия с бизнес-данными
Для отображения бизнес-данных применяются специальные веб-части. Бизнес-данные также можно использовать как справочники значений в стандарт-ных настраиваемых списках и библиотеках, или в качестве источника информации для профилей пользователей.
Отображает список действий для конкретного элемента бизнес-данных.
Веб-части для отображения бизнес-данных Sharepoint предоставляет 6 веб-частей для работы с бизнес-данными.
Список бизнес-данных Основной компонент для отображения набора бизнес-данных, предоставленных методом Finder. Представление бизнес-данных можно настроить с помощью веб-интерфейса, указав нужные столбцы, ограничения на количество записей, отображений действий, порядок сортировки и др.
Элемент бизнес-данных Этот компонент отображает одну запись, предоставленную методом SpecificFinder. Он используется, в частности, на странице профиля.
Построитель элементов бизнес‑данных Очень простой невидимый компонент, который передает в веб-часть «Элемент бизнес-данных» идентификатор записи из строки запроса URL. Между построителем и элементом бизнес-данных необходимо установить соединение стандартным для веб-частей способом.
Дополнительный список бизнес-данных Этот список служит для отображения данных, связанных с основным списком бизнес-данных при помощи ассоци-
№11, ноябрь 2007
Фильтр каталога бизнес-данных Эта веб-часть позволяет передавать выбранные значения из списка бизнес-данных в другие веб-части.
Встраивание в стандартные библиотеки и списки В настраиваемых списках и библиотеках Sharepoint можно создавать столбцы типа «Бизнес-данные». Это очень удобно, когда атрибутом документа или элемента списка должно выступать одно из значений справочника LOB-системы. Создать столбец с бизнес-данными очень просто (см. рис. 3). При заполнении свойств элемента списка или документа библиотеки можно вводить значение справочника, при этом при отправке формы будет производиться автоматическая проверка относительно справочника, а можно осуществлять поиск по бизнес-данным согласно определенным для сущности фильтрам.
Поиск Для того чтобы Sharepoint мог производить поиск по бизнес-данным, необходимо, чтобы в определении приложения были описаны методы IdEnumerator и SpecificFinder. IdEnumerator должен возвращать множество идентификаторов всех записей, а SpecificFinder получать запись по данному идентификатору. Если будет использоваться инкрементный поиск, то SpecificFinder должен возвращать параметр LastModifiedDate с датой последнего изменения записи. После этого на странице администрирования поставщика общих служб необходимо настроить параметры по-
57
администрирование Подробную информацию можно найти в SDK [1].
Профили пользователей
Рисунок 4. Сопоставления свойств метаданных
Рисунок 5. Создание управляемого свойства
иска. Создайте новый источник содержимого типа «Бизнес-данные» и выберите нужную LOB-систему. После этого необходимо настроить свойства для обхода. Выберите пункт меню «Сопоставления свойств метаданных» и нажмите кнопку «Создать управляемое свойство» (см. рис. 4). Откроется страница создания свойства (см. рис. 5). Введите название свойства, после чего нажмите кнопку «Добавить сопоставление», затем выберите категорию «Бизнес-данные» и укажите свойство для обхода. Таким образом необходимо добавить все свойс-
58
тва, по которым будет осуществляться поиск. Наконец, создайте область поиска для бизнес-данных и добавьте правило включения только что созданного источника данных, например, «Поиск по товарам». Ссылки на результаты поиска будут соответствовать указанным в сущности действиям. Это могут быть как ссылки на страницу профиля в Sharepoint, так и ссылки на внешнюю систему. При поиске возвращаемый набор данных может быть отфильтрован в соответствии с правами пользователя. Для этого можно определить специальный тип метода AccessChecker.
BDC, в отличие от ActiveDirectory, не могут быть главным источником импорта профилей пользователей. Однако с их помощью можно заполнять дополнительные свойства, значения которых будут получены из LOB-систем, например, из кадровых приложений. Есть два пути определить правило синхронизации профилей: n в LOB-системе создать поле, в котором будут храниться учетные записи пользователей (если такого в ней еще нет); обратите внимание, что учетные записи Windows должны быть заполнены с указанием домена: «domain\username»; n в профилях пользователей создать свойство, где будут храниться идентификаторы пользователей из LOB-системы, например LobSystemUserID, и заполнить это поле вручную. В ADF-файле необходимо создать метод SpecificFinder, который будет по учетной записи или идентификатору пользователя соответственно находить необходимые поля с информацией о пользователе. Далее нужно создать подключение импорта профилей к источнику бизнес-данных. Для этого на странице управления поставщиком общих служб необходимо выбрать пункт «Свойства и профили пользователей», перейти к странице «Просмотреть подключения импорта» и нажать кнопку «Создать подключение». В качестве типа подключения выберите «Каталог бизнес-данных». Далее выберите нужную сущность, а в возвращаемых свойствах укажите AccountName, если синхронизация будет происходить по учетной записи, или идентификатор пользователя из Lob-системы, если эти идентификаторы предварительно уже заполнены, например, LobSystemUserID (см. рис. 6). Затем нужно перейти к странице «Просмотреть свойства профиля» и создать новые свойства для синхронизации, указав в качестве источника исходных данных созданное подключение к BDC и сопоставив с новым свойством профиля поле из BDC.
администрирование Внимание! Учетная запись, которую Sharepoint использует для обхода содержимого, должна иметь права на выполнение данного приложения бизнес-данных, а также права на изменения профилей пользователей (вкладка «Разрешение служб личной настройки» на странице администрирования поставщика общих служб). Наконец, необходимо запустить полный импорт профилей или дождаться полного импорта по расписанию. Проверьте, чтобы в настройках импорта профилей было указано «Настраиваемый источник», а не «Текущий домен». После импорта профилей пользователей новые свойства заполнятся сведениями из LOB-системы.
Отладка и поиск ошибок Содержание ошибок при отображении бизнес-данных можно найти в двух источниках. Во-первых, это журнал «Application» в «Event Viewer» на сервере Sharepoint. Ошибки имеют категорию «Бизнес-данные», а источник – «Office Sharepoint Server». Однако в журнале отображаются далеко не все возникающие ошибки. Более подробную информацию можно получить в журналах трассировки, которые нужно предварительно настроить со страницы центрального администрирования Sharepoint (см. рис. 7).
Рисунок 6. Создание подключения к BDC для импорта пользователей
API Если вам недостаточно предоставленных в MOSS 2007 способов использования бизнес-данных, то можно обратиться к API и разработать собственные веб-части или страницы. Microsoft предоставляет специальные интерфейсы для работы с BDC, примеры работы с ним приведены в SDK [1]. Средствами API можно работать с бизнесданными, создавать новые определения приложений, разрабатывать собственные компоненты поиска.
Рисунок 7. Настройка журнала трассировки для получения ошибок, связанных с бизнес-данными
Заключение
одно из самых полезных нововведений в MOSS 2007, но и отчасти воплощение мечты ленивого разработчика.
Однажды научившись работать с бизнес -данными, интегрировать ин формацию из LOB-систем в портал Sharepoint можно легким движением руки. А с использованием визуальных средств разработки ADF-файлов даже не придется написать ни единой строчки XML-кода. Поэтому BDC – не только
1. M i c r o s o f t O f f i c e S h a r e p o i n t S e r ve r 2 0 07 S D K – ht t p: // w w w. m i c r o s o f t . c o m /d o w n l o a d s /d e t a i l s . aspx?FamilyID=6d94e307-67d9-41acb2d6-0074d6286fa9&DisplayLang=en (на момент выхода статьи последняя версия SDK вышла 22.08.2007).
№11, ноябрь 2007
2. Билл Инглиш. «Справочник администратора. Microsoft Office SharePoint Server 2007», Эком Паблишерз, 2007 г. 3. Все о Sharepoint на сайте Microsoft – h t t p: / /o f f i c e . m i c r o s o f t . c o m / r u - r u / sharepointserver/default.aspx. 4. Садретдинова Н. MOSS 2007: быстрая настройка и самые интересные возможности. //Системный администратор, №7, 2007 г. – С. 18-30.
59
образование
Изменения в сертификации Microsoft: новые статусы MCTS и MCITP для системных администраторов Дмитрий Павлов Строго говоря, статусы MCTS и MCITP новыми назвать уже нельзя. Экзамены для получения этих сертификаций стали доступны с конца 2005 года. В первую очередь новые линейки курсов и тестов были разработаны по Microsoft SQL Server 2005 и Visual Studio 2005. Тесты и курсы для получения MCTS и MCITP по Windows Vista и Exchange Server 2007 стали доступны в последние 2-3 месяца и оказались стали очень востребованы. Сегодня я расскажу об изменениях в сертификационных программах Microsoft и подробно остановлюсь на новых статусах для системных администраторов.
Новые сертификации Microsoft: MCTS, MCITP Для сертификации специалистов по программным продуктам и решениям, которые были выпущены в 2005 году и позже, Microsoft разработал трехуровневую систему сертификации, которая графически представлена на рисунке.
Первый, «технологический» уровень: MCTS (Microsoft Certified Technology Specialist)
несколько месяцев регулярно, с периодичностью 5-6 недель. Появились и интересные специальные предложения по комплексным универсальным программам подготовки к MCSA и MCTS, их можно найти в разделе спецпредложений на сайте Microsoft: http://www.microsoft.com/Rus/ Licensing/Where/Special/Default.mspx. Есть возможность также прослушать все курсы для подготовки к MCTS: Microsoft Exchange Server 2007, Configuration.
Второй, «профессиональный»
В отличие от прежнего базового сертификата MCP, в назва- уровень MCITP (Microsoft Certified нии которого никак не отражалась специализация его обла- IT Professional) дателя, каждый сертификат MCTS привязан к конкретной Для получения сертификата MCITP необходимо иметь сотехнологии или версии продукта. Для получения сертифи- ответствующий сертификат MCTS и сдать от одного до трех катов MCTS необходимо сдать от одного до трех «техноло- «профессиональных» экзаменов (см. таблицу 2). гических» экзаменов. Примеры из списка этих сертификаКаждая сертификация MCITP имеет свой «цикл жизтов, включающего 19 названий, смотрите в таблице 1. ни», то есть ее необходимо будет периодически, при выСертификат MCTS действителен, пока Microsoft осущест- пуске новых версий продуктов, обновлять. Для апгрейда вляет поддержку данного продукта (обычно от 7 до 10 лет). сертификации достаточно сдать один специальный экзаНапример, сертификат MCTS: Microsoft Exchange Server 2007, мен, а не сдавать всю новую линейку заново. Configuration будет действителен до 2016 года. Из перечисленных выше программ MCITP полный цикл Курсы 5115 и 5116 для подготовки к MCTS: Windows Vista, обучения на очных курсах можно пока пройти только для проConfiguration читаются в московских учебных центрах уже граммы MCITP: Database Administrator. Стоимость 15‑дневТаблица 1. Сертификации MCTS для системных администраторов и администраторов баз данных Сертификация
Экзамены
Курсы для подготовки
MCTS: SQL Server 2005
70-431: TS: Microsoft SQL Server 2005 – Implementation and Maintenance
2780: Maintaining a Microsoft SQL Server 2005 Database (5 дней) 2779: Implementing a Microsoft SQL Server 2005 Database (5 дней)
MCTS: Microsoft Office SharePoint Server 2007, Configuration
70-630: TS: Microsoft Office SharePoint Server 2007, Configuring
5061: Implementing Microsoft Office SharePoint Server 2007
MCTS: Microsoft Exchange Server 2007, Configuration
70-236: TS: Exchange Server 2007, Configuring
5047: Introduction to Installing and Managing Microsoft Exchange Server 2007 (3 дня) 5049: Managing Messaging Security Using Microsoft Exchange Server 2007 (1 день) 5050: Recovering Messaging Servers and Databases Using Microsoft Exchange Server 2007 (1 день) 5051: Monitoring and Troubleshooting Microsoft Exchange Server 2007 (2 дня)
MCTS: Windows Vista, Configuration
70-620: TS: Windows Vista, Configuring
5115: Installing and Configuring the Windows Vista Operating System (3 дня) 5116: Configuring Windows Vista Mobile Computing and Applications (2 дня)
MCTS: Business Desktop Deployment
70-624: TS: Deploying and Maintaining Windows Vista Client and 2007 Microsoft Office System Desktops
5105: Deploying Windows Vista Business Desktops (3 дня) 5058: Deploying Microsoft Office 2007 Professional Plus (2 дня)
60
образование Таблица 2. Сертификации MCITP для системных администраторов и администраторов баз данных Сертификация
Экзамены
Курсы для подготовки
MCITP: Consumer Support Technician (необходимо иметь MCTS: Windows Vista, Configuration)
70-623: PRO: Supporting and Troubleshooting Applications on a Windows Vista Client for Consumer Support Technicians
5118: Maintaining and Troubleshooting Windows Vista Computers (3 дня) 5119: Supporting the Windows Vista Operating System and Applications (2 дня)
MCITP: Enterprise Support Technician (необходимо иметь MCTS: Windows Vista, Configuration)
70-622: PRO: Supporting and Troubleshooting Applications on a Microsoft Windows Vista Client for Enterprise Support Technicians
5118: Maintaining and Troubleshooting Windows Vista Computers System (3 дня) 5119: Supporting the Windows Vista Operating System and Applications (2 дня)
MCITP: Database Administrator (необходимо иметь MCTS: SQL Server 2005)
70-443: PRO: Designing a Database Server Infrastructure by Using Microsoft SQL Server 2005
2788: Designing High Availability Database Solutions Using Microsoft SQL Server 2005 (3 дня)
70-444: PRO: Optimizing and Maintaining a Database Administration Solution by Using Microsoft SQL Server 2005
2790: Troubleshooting and Optimizing Database Servers Using Microsoft SQL Server 2005 (2 дня)
70-237: PRO: Designing Messaging Solutions with Microsoft Exchange Server 2007
5053: Designing a Messaging Infrastructure using Microsoft Exchange Server 2007 (3 дня) 5054: Designing a High Availability Messaging Solution using Microsoft Exchange Server 2007 (2 дня)
70-238: PRO: Deploying Messaging Solutions with Microsoft Exchange Server 2007
Очных курсов для подготовки к экзамену (на октябрь 2007 года) нет
MCITP: Enterprise Messaging Administrator (необходимо иметь MCTS: Microsoft Exchange Server 2007, Configuration)
Таблица 3. Апдейт сертификатов MCSA 2003 и MCSE 2003 на сертификат MCTS: Windows Server 2008 (предварительные данные) Сертификация
Экзамены
Курсы для подготовки
MCTS: Windows Server 2008
70-648: TS: Upgrading Your MCSA on Windows Server 2003 to Windows Server 2008, Technology Specialist
6416B: Updating Your Network Infrastructure and Active Directory Technology Skills to Windows Server 2008 (5 дней)
70-649: TS: Upgrading Your MCSE on Windows Server 2003 to Windows Server 2008, Technology Specialist
6416B: Updating Your Network Infrastructure and Active Directory Technology Skills to Windows Server 2008 (5 дней) 6417B: Updating Your Application Platform Technology Skills to Windows Server 2008 (3 дня)
ной программы MCTS+MCITP Database Administrator – около 50 000 рублей для юридических лиц и около 40 000 рублей для частных заказчиков.
Сертификация MCTS и MCITP по Windows Server 2008 и апдейт сертификатов MCSA/MCSE 2003 Детальная информация о программах сертификации и обучению по Windows Server 2008 «Longhorn» в настоящий момент недоступна. На сайте Microsoft появлялись предварительные данные о том, что таких программ будет несколько (три или четыре). Сертификация MCTS: Windows Server 2008 сейчас не фигурирует в общем списке доступных статусов MCTS, экзамены еще не были доступны на момент подготовки статьи. Предварительную информацию по апдейтным тестам и курсам сейчас можно скомпилировать в таблицу 3. Полноценной линейки курсов по Windows Server 2008 сейчас также нет. На данный момент Microsoft выпустил ряд коротких 90-минутных обзорных курсов и лабораторных работ, а также три трехдневных курса «Updating your Skills to Windows Server 2008» для специалистов уровня MCSA 2003. Эти курсы уже появились в расписании нескольких московских учебных центров. Заявок на них пока не очень много, поэтому регулярное проведение этих курсов в активно работающих московских учебных центрах можно прогнозировать только с февраля-марта 2008 года. Полную на сегодняшний день информацию о книгах, дистанционных и очных курсах по Windows Server 2008 можно найти по адресу http://www. microsoft.com/learning/windowsserver2008/default.mspx. Важный нюанс, присущий всем «переходным» экзаменам Microsoft. В первые месяцы после релиза сдать их намного проще, чем через полгода-год. Так было и при переходе с Windows NT на Windows 2000 Server, и при переходе
№11, ноябрь 2007
на Windows Server 2003. Сначала экзамены длятся два – два с половиной часа, количество вопросов не более 50, через какое-то время в том же экзамене вопросов становится 70, и Microsoft отводит на них уже 4 часа. Резко увеличивается при этом и количество неудачных попыток при их сдаче. Поэтому тем, кто еще не получил MCSA и MCSE по Windows Server 2003, рекомендую поторопиться сдать оставшиеся экзамены, а обладателям этих статусов приступать к подготовке к экзаменам на новые сертификаты. Всем удачи!
Трехуровневая система сертификации Microsoft по новым программным продуктам
61
безопасность
Строим систему видеонаблюдения и охраны на основе ZoneMinder
Виталий Банковский Домик в деревне... Картошечка, укропчик... и никаких проблем. Но, увы, люди любят окружать себя материальными благами цивилизации. Дорогие вещи и машины, о которых нужно заботиться и охранять. Ну а раз так, попробуем сделать нашу жизнь немного легче – поставим виртуального сторожа, который никогда не спит.
Н
емного фактов из моей жизни, которые подвинули меня на создание системы видеонаблюдения. Я живу в съемной квартире, поэтому ни запретить хозяину квартиры приходить в мое отсутствие, ни установить охранную сигнализацию у меня нет возможности. К тому же я, как и многие автолюбители, несколько раз находил вмятину размером с чей-то бампер на двери своего автомобиля. Ну а отловить тех «супостатов», которые оставляют на капоте и дверях остатки своего интеллекта с помощью гвоздика, – заветная мечта каждого автовладельца. Поэтому было выбрано единственное возможное решение – установить систему видеонаблюдения, которая бы записывала события, а также сигнализировала о непрошеных гостях.
62
Задачи системы и выбор камер слежения В моем случае потребовалось установить две камеры дома, одну – на парковке, и еще одну я поставил в здание, где расположены наши серверы. Из-за больших расстояний, а также изза территориально разнесенных объектов наблюдения камеры с USB-интерфейсом были сразу отметены (хотя программное обеспечение, использованное в данном решении, позволяет комбинировать источники). Также после посещения страниц с обзорами камер (источники указаны в конце статьи) стало понятно, что удел камер с USB-интерфейсом – охват близлежащих объектов (т.е. любительские телеконференции) и что цены на камеры с удовлетворительным ка-
чеством начинаются от $250 US. Исходя из этого был определен минимальный ценовой диапазон $250‑$500 US и куплены камеры трех разных производителей, сравнительные характеристики которых приведены в таблице 1. Субъективные выводы. Камера Panasonic WV-NP244 оказалась лидером по качеству. Эта камера обладает сменной оптикой с фиксированными и переменными фокусными расстояниями: 2.8 mm, 4.5 mm, 3.8-8 mm, 5‑40 mm, что позволяет выбрать необходимый угол обзора и, как следствие, оптимально охватить охраняемые объекты. Качество изображения, получаемое с Axis 2100 и с D-Link DCS‑3220, почти одинаковое, поэтому по соотношению цена/качество лидером является D-Link DCS-3220.
безопасность Программное обеспечение В силу своей неприхотливости и отсутствия лицензионных проблем было решено построить систему на основе Linux. После недолгих поисков были найдены три бесплатных программных пакета для работы с камерами слежения: n NetAvis; n Elvis; n ZoneMinder. ZoneMinder (далее по тексту – ZM) сразу вышел в фавориты благодаря поддержке всех возможных источников сигнала (устройство захвата видеосигнала, USB-камера, обновляемый локальный файл, видеопоток или файл со встроенного веб-сервера сетевой камеры). Также этот пакет обладает прекрасной документаций и тщательной проработкой всех компонент. Существует версия для FreeBSD.
Требования к системе ZoneMinder работает на любом дистрибутиве GNU/Linux, в моем случае я устанавливал на дистрибутив Debian GNU/ Linux. Пакет требует веб-сервер с поддержкой PHP, MySQL и библиотеку JPEG. Отдельно стоит упомянуть о требованиях к аппаратному обеспечению. Захват сигналов с камер и анализ изображений в режиме детектора движения требует серьезных ресурсов процессора. Мой домашний компьютер c двумя процессорами Xeon 2.8 ГГц был загружен на 40% при работе 4 камер при средней скорости 4-5 кадров в секунду. Позже я уменьшил частоту до одного кадра в секунду, и загрузка упала до 12%.
Установка программного обеспечения Перед установкой необходимо настроить веб-сервер (в моем случае Apache) и подготовить базу MySQL. Пример конфигурации виртуального сервера Apache: <VirtualHost 192.168.10.99> DocumentRoot /home/webcam/www ServerName webcam.example.com ScriptAlias /cgi-bin/ /home/webcam/www/cgi-bin/ <Directory /home/webcam/www> Options ALL +ExecCGI AllowOverride ALL DirectoryIndex index.php </Directory> </VirtualHost>
Далее создаем базу MySQL, пользователя и назначаем ему полный доступ к этой базе: mysql -p mysql; mysql> create database zm; mysql> grant all on zm.* to zmuser@localhost ↵ identified by 'put_password_here'; mysql> flush privileges;
Затем необходимо создать пользователя, под которым будут запущены демоны, собирающие сигнал с камер слежения, и под которым будут запущены веб-приложения. adduser -d /home/webcam webcam
Компиляция и настройка ZoneMinder Получаем исходные коды пакета с домашней страницы про-
№11, ноябрь 2007
Таблица 1. Сравнительные характеристики камер D-Link DCS-3220
AXIS 2100
Panasonic WV-NP244
Разрешение
640x480
640x480
640x480
Минимальная освещенность, люкс
1
3
1.5
Формат передачи данных
MPEG/JPG
MPEG/JPG
MPEG4/JPG
Стоимость
$220
$320
$340 за камеру и $80 за объектив
Оценка по 5-бальной системе
4
4
5
PPPoE
Да
Да
Да
екта http://www.zoneminder.com, раскрываем полученый архив, компилируем и устанавливаем: tar -xzvf ZoneMinder-1.xx.xx.tar.gz cd ZoneMinder-1.xx.xx ./configure –with-webdir=/home/webcam \ --with-cgidir=/home/webcam/www/cgi-bin/ \ --with-webuser=webcam –with-webgroup=webcam \ --with-mysql= make make install
Создаем символическую ссылку, чтобы при посещении http://webcam.example.com открывалась контрольная панель ZM: ln -s /home/webcam/www/zm.php /home/webcam/www/index.php
Далее открываем конфигурационный файл /usr/local/ etc/zm.conf и настраиваем параметры доступа к базе данных MySQL: ZM_DB_HOST=localhost ZM_DB_NAME=zm ZM_DB_USER=zmuser ZM_DB_PASS=put_password_here
Иницилизируем базу с помощью файла db/zm_create.sql, содержащего команды SQL для создания таблиц и первоначальных записей: mysql -p zm < db/zm_create.sql
Если инсталяция прошла успешно и все верно сконфигурировано, то при посещении страницы http://webcam. example.com должна открыться панель управления ZM (см. рис. 1).
Конфигурирование основных параметров ZM включает огромное количество параметров, но я подробнее остановлюсь на основных настройках, которые необходимо поменять для запуска системы: n разрешение работы с удаленными камерами; n настройка адреса электронной почты для отсылки сообщений о событиях; n настройка адреса удаленного сервера FTP, куда ZoneMinder будет копировать кадры событий. Это особенно полезно, если компьютер, где установлен ZM, сам может пострадать от действий злоумышленников.
63
безопасность На главной панели управления ZM находится ссылка «Options», при нажатии на которую открывается конфигурационная панель. На рис. 2-4 будут приведены конфигуации всех трех пунктов, указанных выше.
Добавление камер в ZM Рисунок 1. Главная панель управления ZM
Рисунок 2. Разрешение работы с удаленными камерами
Следующим нашим шагом будет добавление источников сигнала. ZM поддерживает 3 типа источника сигнала: 1. Камеры с интерфейсом USB или платы захвата видеосигнала, совместимые с V4L (Video for Linux). 2. Локальный файл. Многие камеры, в частности, Panasonic WV-NP244, могут сами копировать эпизоды видеопотока на сервер FTP (где обычно и устанавливается ZM). Тогда ZM использует локальный файл, который постоянно обновляется камерой по протоколу FTP. 3. Файл или поток на удаленном вебсервере (например, веб-камера). В моем случае использовался только один тип – третий. Для добавления нового источника сигнала необходимо нажать на ссылку «Add New Monitor» и ввести параметры, описанные в таблице 2 и показанные на рис. 5 Замечание: на некоторых дистрибутивах Linux установлено ограничение на объем доступной разделяемой памяти ядра (Shared Memory), которую активно использует ZM. В дистрибутиве Debian значение по умолчанию равно 64 Мб. Создатель программы ZM рекомендует увеличить до 128 Мб: echo 134217728 > /proc/sys/kernel/ ↵ shmmax
Рисунок 3. Настройка адреса электронной почты, куда будут отсылаться сообщения о событиях. Здесь же можно поменять шаблоны сообщений
Далее нужно повторить процесс добавления для всех камер, с которых мы хотим получать изображения. После того как все камеры добавлены, запускаем главную управляющую программу, которая запустит различные демоны, входящие в пакеты ZM, и затем будет контролировать их работу (например, перезапуск в случае «падения»): zmpkg.pl start
Рисунок 4. Указание параметров удаленного сервера FTP
64
Также необходимо создать скрипт, который бы запускал zmpkg.pl, и добавить его в процесс инициализации при
безопасность запуске сервера. Для этого создаем файл /etc/init.d/webcam со следующим содержимым: #! /bin/sh export PATH="$PATH:/usr/sbin:/sbin: ↵ /usr/local/bin: /usr/local/sbin" case "$1" in start) echo -n "Starting ZM" /usr/local/bin/zmpkg.pl start echo "." ;; stop) echo -n "Stopping ZM" /usr/local/bin/zmpkg.pl stop echo "." ;; *) echo "Usage: /etc/init.d/zm {start|stop}" exit 1 esac
Таблица 2. Конфигурация источника сигнала Параметр
Назначение
Name
Имя источника сигнала. Может быть, как и имя камеры, так и более осмысленное типа «Home», «Parking»
Source type
Тип источника сигнала
Function
Режим работы монитора. Пояснения приведены в таблице «Режимы работы мониторов»
Host name
Доменное имя или IP-адрес используемой камеры. Если источник требует аутентификацию, то этот параметр может выглядеть, как username:password@ipa_address
Remote Host Path
Часть URL, следующая за доменным именем или IP-адресом
Таблица 3. Режимы работы мониторов Режим
Пояснения
None
Выключен
Monitor
Доступен только просмотр в реальном времени
Modetect
Режим обнаружения движения. Записываются только фрагменты, на которых обнаружено движение
Record
Режим постоянной записи изображения
Mocord
Режим постоянной записи сигнала, причем в результирующих файлах выделяются области, в которых замечено движение
exit 0
И добавляем этот скрипт в процесс инициализации операционной системы: chkconfig webcam on
После запуска скрипта и обновления страницы панели управления ZM с помощью ссылки «Refresh» источники сигнала должны поменять цвет с красного (нет сигнала или данных) на зеленый (функционирует правильно), и вся панель управления может выглядеть следующим образом (см. рис. 6). Из интересных возможностей панели можно отметить следующие: n при нажатии на ссылку с именем камеры можно просмотреть события, происходящие перед камерой в реальном времени; n при нажатии на ссылки в колонке «Events» можно просмотреть записанные кадры, когда ZM обнаружил движение в поле видения камеры; n при нажатии на ссылку «Montage» откроется окно с всеми нашими камерами.
Обработка событий
Все эти условия можно комбинировать по условиям «и/или», что дает возможность создавать обработчики событий практически на все случаи жизни. Операции, которые могут выполняться при выполнении условий какого-либо фильтра, могут включать в себя: n архивацию эпизодов; n копирование кадров события на внешний сервер FTP; n отправку подробностей события на адрес электронной почты; n выполнение внешней программы; n удаление записи о событии (например, после копирования на внешний FTP-сервер). Приведу пример создания типичного фильтра. Для этого необходимо нажать на ссылку «Filters» в главной панели ZM, затем перейти по ссылке «Show filter window», после чего откроется окно, как показано на рис. 7. Данный фильтр будет срабатывать, если количество кадров в каком-то событии больше, чем один, и имя монитора – «Panasonic». После срабатывания этого фильтра
Событие в концепции ZM – изменение состояния подсистем и детекторов. Например, обнаружение движения анализатором движения, отключение камеры, окончание дискового пространства и т. д. ZM предоставляет инструменты для фильтрации событий и выполнения определенных операций, если условия фильтра подходят для какоголибо события: n сравнение настоящего времени с заданным; n имя камеры совпадает с указанным именем; n количество кадров при обнаружении движения; n окончание дискового пространства. Рисунок 5. Конфигурация источника сигнала
№11, ноябрь 2007
65
безопасность
Рисунок 6. Главная панель управления ZM
Рисунок 7. Создание фильтра
деонаблюдения масштаба предприятия. Для этого ZM содержит средства по ограничению прав пользователей, как по управлению системой (модификация источников сигнала и фильтров), так и по разграничению доступа к отдельным камерам. По умолчанию ZM – однопользовательская система, и перед началом добавления новых учетных записей необходимо включить опцию «Authenticate user logins to ZoneMinder» на конфигурационной панели, в подразделе «System». После этого надо зарегистрироваться в системе как суперпользователь «admin» с паролем по умолчанию «admin», в результате чего в конфигурационной панели появится еще один подраздел «Users» для управления учетными записями. Я не буду заострять внимание на этом стандартном списке, а сразу перейду к описанию свойств учетных записей. После нажатия на ссылку «Add new user» появится окно (см. рис. 9). Каждая учетная запись состоит из стандартных полей вроде имени, пароля и т. д., а также набора привилегий (см. таблицу 4). Кроме этого, можно ограничить скорость просмотра потока, а также список камер, к которым пользователь, зарегистрировавшийся под конкретной учетной записью, будет иметь доступ.
ZoneMinder скопирует кадры, на которых было обнаружено движение, в архив и на внешний сервер FTP, отправит предупреждение по электронной почте, выполнит команду «/usr/ bin/alarm‑911.pl» и удалит запись об этом событии из списка событий на главной панели управления ZM. Для включения/ выключения множественных условий нужно использовать символы «+» и «-» на правой стороне страницы. Ограничение области слежения После этого сохраняем фильтр, не забывая включить Бывают ситуации, при которых необходимо наблюдать, его в режим «Run filter in background» (см. рис. 8). что происходит на охраняемом объекте, но при этом ограZM по умолчанию перечитывает фильтры каждые 5 ми- ничить область, анализируемую с помощью детекторов двинут и запускает их каждую минуту. Пройдемся перед каме- жения. Например, поле обзора камеры захватывает доророй и подождем 6 минут. Если все фильтры правильно на- гу и саму автомашину, но система должна реагировать, есстроены, то в файле /tmp/zmfilter.log можно обнаружить та- ли обнаружено движение только возле охраняемого объкие строчки: екта (машины). ZoneMinder предоставляет великолепные средства Checking event 2380 для задания множественных областей в поле зрения каArchiving event 2380 меры, в которых и происходит анализ движения. Creating upload file '/tmp/Panasonic-2380.tar.gz' Uploading to 192.168.10.99 Для управления областями необходимо нажать ссылку Sleeping for 60 seconds с именем камеры на главной панели управления и перейReloading filters Sleeping for 60 seconds ти по ссылке «Zones», в результате чего откроется новое Sleeping for 60 seconds окно со списком зон. Sleeping for 60 seconds По умолчанию существует только одна зона, равная всеРекомендуется создать фильтр, который бы очищал дис- му полю зрения камеры (которую необходимо удалить, есковое пространство, если заполнение достигло определен- ли указаны более специфичные зоны). ного уровня. Для этого создадим новый фильтр и укажем, что нужно удалить все записи о событиях, если заполнение диска превысило 60%.
Разграничение прав учетных записей пользователей ZoneMinder позволяет создать полноценную систему ви-
66
Рисунок 8. Сохранение фильтра
безопасность После нажатия на ссылку «Add zone» появится удобная панель д ля задания четырех угольной области (см. рис. 10). Принцип работы таков: С помощью мышки выбирается одна из точек прямоугольной области в поле ввода координат этой точки. Верхние две точки – «1» и «2» слева направо, нижние две – «4» и «3». Да, цифры «4» и «3» местами не перепутаны. После этого мышка наводится на новые предполагаемые точки и нажимается левая кнопка мышки. Таким же образом перемещаются оставшиеся 3 точки. Контролируемая область автоматически помечается зеленым цветом. На этом примере анализаторы движения работают только по левой стороне кадра. Можно задать несколько зон для каждой камеры, комбинация которых и создаст очень точную область, в которой будут обнаруживаться движения.
Таблица 4. Набор привилегий учетной записи Привилегия
Пояснения
Возможные уровни доступа
Stream
Разрешает/запрещает просмотр потока с камер
Разрешено Запрещено
Events
Доступ к просмотру событий
Запрещено Обзор Редактирование
Control
Управление камерами (для камер, поддерживающих команды поворотов)
Запрещено Обзор Управление
Monitor
Модификация камер (источник сигнала, тип мониторинга и т. д.)
Запрещено Обзор Редактирование
System
Модификация системных параметров
Запрещено Обзор Редактирование
Заключение Данная статья описывает процедуру создания базовой системы слежения. За рамками статьи остались такие интересные возможности, как: взаимодействие с другими компонентами концепта «Электронный дом» по протоколу X10; привязка детекторов движения к определенным областям. 1. http://cowboyfrank.net/webcams/LightCompairsons.htm. 2. http://www.ipcamerademos.com/ip_cameras_demos.aspx?cat=1. 3. http://zoneminder.com.
Перед установкой этой системы в общественных местах рекомендуется проверить местные законы на правомочность использования. Во многих странах съемка людей без их разрешения запрещена.
Рисунок 9. Добавление новой учетной записи
Рисунок 10. Задание контролируемой зоны
№11, ноябрь 2007
67
безопасность
Контролируем интернет-активность пользователей с Kerio WinRoute Firewall Сергей Яремчук Сегодня очень тяжело представить эффективную работу любого офиса без наличия Интернета. «Паутина», вне всяких сомнений, является удобной средой коммуникаций и источником информации, но при отсутствии контроля Интернет становится источником проблем.
Н
е секрет, что большинство сотрудников с радостью используют Интернет далеко не в интересах бизнеса. Это и походы по новостным и развлекательным сайтам, он-лайн-игры, скачивание программ, видео, музыки, общение на форумах и в чатах. Результат, как минимум, снижение производительности труда, ведь сотрудник вместо того чтобы быстро проделать свою работу, попросту тратит время, оплаченное работодателем, не говоря уже о том, что и Интернетом пользуется также за его счет. К тому же именно из Интернета чаще всего атакуется компьютер. Если бы пользователь посещал только ресурсы, связанные с его непосредственной работой, то вероятность подхватить вирус, троянскую программу или быть атакованным через уязвимость в сетевой программе, стремилась к нулю, так как деловые сайты очень заботятся о репутации и стремятся не допускать подмены контента на враждебный. Заманить доверчивого сотрудника на специальный сайт очень просто. Стоит ли говорить, что троянская программа, «поселившаяся» на компьютере в любой организации, может порадовать своего создателя весьма ценной информацией. Конкуренты такому подарку будут
68
только рады. Список неприятностей можно продолжать долго, но вывод напрашивается сам собой – без контроля над интернет-активностью пользователей неприятностей можно ждать в любую минуту.
Стандартные возможности Kerio WinRoute Firewall Одним из популярных решений для организации совместного доступа в Интернет и защиты ресурсов внутренней сети является Kerio WinRoute Firewall (KWF). В журнале уже рассказывалось о его возможностях [1], поэтому остановлюсь лишь на контроле интернет-трафика. В доступной сегодня версии 6 KWF уже обладает весьма развитыми функциями контентной фильтрации, которые настраиваются в «Configuration → Content Filtering» и позволяют устанавливать политики для обработки протоколов HTTP, FTP и P2P-трафика (P2P Eliminator). Администратор может запретить или разрешить доступ к сайту, построив правило, основанное на информации об учетных данных, URL ресурса, URL специфической группы или рейтинга интегрированного сервера контроля трафика IBM OrangeWeb
Filter (на сайте проекта он указан как IBM, в настройках Kerio – как IIS, в более ранних версиях – Cobion). Последний использует всемирную постоянно обновляющуюся базу данных, в которую занесен список 60 млн. веб-сайтов, разбитых по содержимому приблизительно на 60 категорий. Любую категорию сайтов можно разрешить или заблокировать буквально одним движением мышки. К сожалению, этот модуль хотя и встроен в KWF, но лицензию на его использование необходимо приобретать отдельно. Количес тво лицензий на IBM OrangeWeb Filter должно быть равно количеству лицензий KWF плюс дополнительные лицензии на пользователей (если их больше 10). К сожалению, за все время мне ни разу не приходилось иметь дело с этим фильтром, поэтому о его эффективности (особенно не в англоязычной части Интернета) что-то конкретное сказать не могу. Хотя идея выглядит неплохо, достаточно администратору указать, что нельзя пользователям заходить, например, на новостные ресурсы, все остальное OrangeWeb Filter берет на себя. В большинстве же случаев для настройки доступа к некоторым сайтам приходится довольствоваться двумя
безопасность вкладками: «URL Groups» и «Forbidden ние. И далее ввести URL ресурса или нистратор вынужден был заглядыWords». его шаблон и в строке «Description» вать в журналы, находящиеся в пункте «Logs» в подразделах «web» и «http». Вкладка «URL Groups» в версии указать описание правила. 6.4 перекочевала из «HTTP Policy», Кроме этого WinRoute также может Здесь можно узнать IP-адрес компьюгде она находилась долгое время, фильтровать веб-страницы, содержа- тера, время, URL, по которому перев «Definitions». Почему так сделали, щие нежелательные слова. Для поис- шли с указаного адреса, и результат сказать тяжело, возможно разработ- ка таких слов просматривается весь запроса. чики посчитали, что логичней собрать HTTP-трафик, пропущенный предыдуИз контекстного меню реализован все групповые настройки (IP, URL, вре- щими настройками. Все запрещенные поиск и подсветка некоторых событий мя и сервисы) в одну вкладку. Сперва слова имеют вес, который при совпаде- (заблокированные страницы, закачка это непривычно и приходится некото- нии суммируется. Если общий вес слов большого объема в 10 и 100 Мб и друрое время ее искать, поэтому, очевид- на странице (каждое число считается гие), но все равно удобством такой споно, вначале придется привыкнуть к но- по разу) превышает число, указанное соб получения информации не отливому расположению. В «URL Groups» в «Deny pages if their weight reaches», чается. Вероятно, поэтому для больсодержится список правил, разбитых страница блокируется. По умолча- шей наглядности обычно используетна группы. Само правило содержит ре- нию в этой вкладке уже имеются две ся отдельный продукт, вроде WrSpy [2] гулярное выражение, соответствую- группы: Pornography и Warez/Craks. или ProxyInspector [3]. щее запрашиваемому URL. По умол- Как и в случае с URL Groups можно доСправедливости ради стоит отмечанию в «URL Groups» находятся три бавить свои слова и категории. Также тить, что в ISA Server 2006 также нет группы правил: Ads/banners, Search зайдя «HTTP Policy → Content Rules», удобной системы отчетов по испольEngines и Windows Updates. можно предотвратить возможность зованию интернет-канала, поэтому Имея под рукой журнал работы выполнения потенциально опасных в большинстве случаев приходится KWF, очень легко создать правило скриптов, запретив обработку объек- прибегать к помощи сторонних продля любого URL или группы. Для этого тов ActiveX, Java и JavaScript, блоки- дуктов, того же ProxyInspector, Internet достаточно нажать кнопку «Add». За- ровать всплывающие окна и переда- Access Monitor [4], Интернет Администратор [5] и других. тем следует выбрать из раскрываю- чу рефереров. щегося списка «Group» одну из имеюЧтобы просмотреть, какие ресурОдновременно с выходом версии щихся групп или ввести новое назва- сы посещают пользователи, адми- KWF 6.4 было объявлено, что его воз-
Рисунок 1. Страница общей статистики модуля Star
№11, ноябрь 2007
69
безопасность
Рисунок 2. Вывод подробной активности пользователя
можности расширили, дополнив модулем Kerio StaR (Statistics and Reporting), отвечающим за сбор и вывод различного рода статистик.
Контроль над интернетактивностью в KWF По личным наблюдениям модуль StaR появился в KWF еще раньше. Еще летом, устанавливая версию 6.3.2, я обнаружил во вкладке «Status → Statistic» некоторые изменения. Ранее доступные здесь графики «Top 20 Users», «User statistic» и «Interface statistic» исчезли. Остался без изменений лишь последний пункт, но дополнительно появился «User Quota». Он содержит ту же таблицу, что ранее находилась в «User statistic», в которой была доступна статистика использования канала по каждому пользователю. Кстати, по умолчанию в таблице выведены не все пункты, поэтому следует выбрать в контекстном меню пункт «Modify Columns» и установить флажки напротив нужных пунктов. Очень удобен пункт «Quota». Если для пользователей заданы квоты, то здесь бу-
70
дет показан процент использования цию и соответственно влиять на квотрафика от установленного лими- ты. Здесь можно определить промета (ближайшего к исчерпанию месяч- жуток времени, в течение которого буного или дневного) трафика конкрет- дут собираться статистика, IP-адреса ным пользователем. Плюс для удобс- компьютеров и сетей, пользователей тва восприятия индикатор меняет цвет и групп, не попадающих в подсчитываот зеленого к красному. Выбор пункта емый трафик. Для удобства лучше сра«Delete User Traffic Counters» позволит зу занести в «Exclude traffic if source or сбросить статистику, но заодно и раз- destination …» адреса локальных сисблокирует трафик пользователя, если тем и сетей, чтобы не считать внутренон был заблокирован по причине пре- ний трафик. вышения лимита трафика. В отдельном меню указываются адПо умолчанию подсчитывается реса веб-серверов, трафик к которым информация по всем интерфейсам. не будет подсчитываться. Для более тонкой настройки преднаЕсли корпоративный веб-сервер значен новый пункт меню «Accounting». находится в DMZ, его можно указать в последнем меню. Здесь несколько вкладок. В «Statistic → Quota» два флажВ глаза бросается то, что в новой ка «Gather Internet Usage statistics» версии KWF в «User Quota» все граи «Gather Users Activity records» поз- фики, показывающие протоколы, заволяют отключать статистику пол- грузки канала и ISS OrangeWeb Filter, ностью или сбор статистики по отде- убраны. Секрет раскрывается нажатильным пользователям. Это может по- ем на ссылку «Internet Usage Statistics», надобиться в том случае, если в такой что открывает окно браузера на страинформации нет необходимости. нице https://IP-KWF:4081. Для регистраВо вкладке «Exceptions» задаются ции следует использовать те же учетисключения, что позволяет не вклю- ные данные, что и при работе с консочать в статистику ненужную информа- лью KWF. Работа, как видите, проис-
безопасность ходит через защищенное соединение, пользователю, нужная учетная запись Нововведения в новой версии Kerio поэтому перехвата пароля и другой ин- выбирается в раскрывающемся спис- WinRoute Firewall можно приветствоформации бояться не стоит. Хотя мож- ке. Здесь доступны те же пунты, что и вать. У администратора теперь будет но использовать и протокол без шиф- на первой странице. Чтобы получить в руках не только простой инструмент рования трафика, зайдя по адресу подробную расшифровку активности для организации совместного доступа http://IP-KWF:4080. пользователя, нажимаем гиперссыл- в Интернет и защиты внутренних реПосле регистрации будет выве- ку под именем либо переходим в ме- сурсов, но и удобное средство контродена страница с графиками, показы- ню «Активность пользователей». Здесь ля над использованием трафика. Отвающими активность пользователей уже доступна вся информация, чем падает необходимость в использоваза текущий день. Интерфейс локали- занимался пользователь в Интернете нии сторонних инструментов. зован, по умолчанию устанавливает- за выбранный промежуток. Это и спиУдачи! ся тот же язык, что и в веб-браузере. сок посещенных веб-страниц, работа Иначе следует нажать «My Account» в сетях мгновенного обмена сообще- 1. Марков Р. Организация общего дои во вкладке Preferences в раскрыва- ниями, P2P, загрузка файлов большоступа в Интернет и защиты от вторжеющемся списке «Preferred language» го размера. С указанием времени наний на основе Kerio WinRoute Firewall 6. выбрать русский язык и не забыть на- чала события, его продолжительнос//«Системный администратор», № 1, жать «Save Setting». ти и точного адреса ресурса. В пунк2005 г. – C. 28-34. В левом верхнем графике можно те «По объему графика» представле- 2. Марков Р. WrSpy – cчитаем и контролиувидеть диаграмму, показывающую ны учетные записи в порядке убываруем трафик почтовых и прокси-серпочасовой трафик на всех интерфей- ния использования трафика. веров. //«Системный администратор», сах компьютера, на котором установЧтобы увидеть статистику по ис№ 8, 2005 г. – C. 36-41. лен KWF. Информация за последний пользованию установленных квот 3. Сайт ProxyInspector – http://advsoft.info/ час по входящему, исходящему тра- на трафик для текущей учетной запиru/products/proxyinspector. фику и общее количество дублирует- си, следует выбрать «Моя учетная за- 4. Сайт Internet Access Monitor – http://www. ся в виде цифр в левом верхнем углу пись» в правом верхнем углу или сразу redline-software.com/rus/products/iam. графика. Если навести мышку на гра- зайти на страницу https://ip-адрес:4081/ 5. Сайт «Интернет Администратор» – фик, то в небольшом окне появятся star (http://ip-адрес:4080/star). Здесь же http://www.iadmin.ru. цифры, показывающие загрузку в вы- показаны установленные ограничения 6. Сайт Kerio WinRoute Firewall – http://www. бранный часовой интервал. Чуть ниже веб-доступа. kerio.ru. еще две диаграммы, показывающие пятерку самых посещаемых веб-узлов и веб-категорий. Для корректного вывода информации в последнем пункте потребуется действующая подписка на ISS Orange Web Filter. Для получения более подробной информации по этим вопросам необходимо перейти в одноименный пункт меню или просто щелкнуть мышкой по графику. В появившемся окне можно увидеть список всех посещенных за выбранный промежуток времени ресурсов, с указанием количества заходов, сделанных каждым пользователем. В оставшихся двух графиках можно увидеть пятерку самых активных пользователей, и круговая диаграмма покажет используемые протоколы. При необходимости легко можно выбрать для отчета любой другой временной промежуток. Для того чтобы перейти на день вперед/назад, достаточно использовать стрелки, расположенные чуть выше над графиками. Нажатием кнопок можно получить информацию за неделю, месяц или самостоятельно задать период времени. Выбор пункта «Пользователи» позволит получить статистику и по отдельному Рисунок 3. Квоты и ограничения пользователя
№11, ноябрь 2007
71
человек номера
Перекресток IT-дорог, вот и я…
Эта песня Андрея Макаревича: «Перекресток семи дорог, вот и я, перекресток семи дорог, жизнь моя…» вспоминается, когда говорят о человеческих судьбах. Банально, но верно: в жизни мы часто сталкиваемся с выбором. Пошел направо, а не прямо, – и оказался в пункте А. Друг, сват, брат, выбравший иной путь, должен был попасть в пункт Б, а очутился вдруг… рядом. Судьба – еще тот романист! Я предлагаю вам стать свидетелями очередной IT-судьбы и понаблюдать… Нет, не только за перекрестками в жизни Юрия Колесова, главы представительства компании Avocent в странах СНГ, но за тем, какую личность эти перекрестки в конечном итоге сформировали. Заинтриговала? Читайте!
Бизнес-заповеди футбольного болельщика Школа и вуз были у Юрия безальтернативные. Отец, знаток немецкого языка, сына отдал в хорошую столичную спецшколу. Мальчик язык добросовестно выучил, но лингвистом не стал. Душа жаждала негуманитарного образования. Где-то в восьмом классе педагоги смирились с мыслью, что готовят «тех-
72
наря», и перестали настаивать на участии будущего гения информационных технологий в литературных диспутах. Но нет худа без добра – Юрий Колесов стал защищать честь школы на олимпиадах по физике, математике, географии… Свидетельство отличной памяти и незаурядных способностей – лежащие где-то глубоко в семейных архивах дипломы победителя районных
предметных состязаний. «Кем быть» было вчерне решено. Юрий записался на подготовительные курсы МЭИ, ему наняли репетитора. А после школы Колесов оказался на первом курсе факультета вычислительной математики и кибернетики Московского университета. По окончании вуза явился первый перекресток, ибо выпускники ВМиКа
человек номера обычно выбирают один из трех путей. Юрий вспоминает: «Были гении на факультете – ходили в сандалиях зимой, им было ничего не важно, кроме науки. Такие стали учеными, многие уехали работать за рубеж.... Немало народу стали банкирами. Видимо, деньги, экономика и математика где-то рядом. У нас на курсе учился, например, председатель правления «Собинбанка» Сергей Кириленко. В футбол играли вместе. Многие занялись информационными технологиями. Подались в такие компании, как «Консультант-плюс», например. В общем, я попал туда, куда должен был попасть». Футбол, к слову, остался любимым видом спорта. Два раза в неделю Юрий гоняет мяч с друзьями. Время игры – святое. Конечно, вы можете звонить в это время на мобильный, просто чтобы ваш номер остался в «неотвеченных», или можете оставить сообщение… Честно говоря, уважаю такую позицию. Человек, который умеет отдыхать, отвлекаться от дел, наверняка трудолюбив. Изредка Юрий ездит болеть за профессионалов. Были с компанией в Португалии, собираются в Израиль. После победы над англичанами глава российского Avocent очень надеется на дальнейшие успехи сборной России. Все-таки столько лет ничего не выигрывали!.. Вуз оставил по себе добрую память. И, конечно, не только о футболе. «Я не пошел в науку, но думать меня научили. Обрабатывать информацию, высчитывать варианты, ходы, комбинации». Скорее всего, та же привычка обобщать информацию, опыт, привела к тому, что Юрий Колесов сформулировал (для себя, конечно!) несколько бизнес-заповедей и старается им следовать: «Пообещал – сделал. Если ты партнеру или кому-то сказал, что будет так, надо выполнять. Это самое простое. Далее, не говори того, чего не можешь. Наконец: любой труд должен быть поощрен». А еще Юрий давно понял, что «хорошее бизнес-качество – готовность к компромиссу. Жёсткость иногда нужна. Но чаще всего надо уметь находить компромисс с партнерами. Не всегда все однозначно, разные ситуации бывают. Особенно, если продаешь продукт в крупную структуру…
№11, ноябрь 2007
В мощной организации важнее всего найти человека, который примет решение. Надо с ним договориться, и дальше можно пожинать плоды. Обычно это самое сложное. Потому что зачастую у них внутренний конфликт интересов. Надо четко разбираться, и попытаться понять, кто перетянет в итоге, на кого ставку делать. Сразу со всеми договориться практически невозможно». Колесов запросто мог бы стать автором учебника по практическому маркетингу…
Агент бесперебойного питания
Колесов вновь оказался на распутье с тремя вариантами трудоустройства. Выбрал компанию АРС. Во-первых, потому что мировой лидер по источникам бесперебойного питания. Во-вторых, потому что там трудился (и сейчас трудится, уже генеральным директором одного из дистрибуторов APC, компании Marvel) однокурсник. Последнее обстоятельство было важным, но не решающим, все равно собеседование пришлось проходить наравне с другими. Приняли. Компания была небольшая, но активная. Притом американская, то есть с американским подходом к определению бюджета, к постановке основных задач, к корпоративной культуре. Но зато с российским менеджментом. В российский офис набирали местных, которые хорошо знали наши реалии, бизнес развивался порусски. Гармоничное сочетание американского делового подхода и «русского духа» дало отличный результат. АРС до сих пор развивается и крепнет. А людям в этой компании очень комфортно работать.
Итак, выбор сферы IT произошел естественным путем. Первые два года после вуза Юрий «честно» занимался программированием. В «почтовом ящике», хозрасчетной организации. Набирался опыта: там изучал модный когда-то продукт «FoхPRO», здесь практиковал немецкий язык, потому что в компании, которая была частью небезызвестного «Микродина», не нашлось людей, говорящих по-немецки, а надо было общаться с партнерами из Германии. Писал программы, базы данных… «Пообещал – сделал. Если ты партнеру Даже некоторое время был агентом в «Желтых страниили кому-то сказал, что будет так, надо выцах»! «У меня друг есть, сейполнять. Это самое простое. Далее, не говочас генеральный директор ри того, чего не можешь. Наконец: любой труд одной IT-компании, мы с ним должен быть поощрен». вдвоем бегали по организациям и продавали рекламное место в «Желтых страницах». – «ПолуЮрий признается: «Многие из тех, чалось?» – «Кое-что получилось. «Ка- кто там трудился, считают, что это салинка-Стокманн» у меня была в акти- мое лучшее время было в их карьеве, например…». Сегодня вспоминать ре, многие ностальгируют до сих пор. об этом немного смешно. Ведь разные управленческие стили Но ничто не бывает случайным. есть. Полная бюрократия, когда люди Юрий научился в результате тому, что не играют никакой роли. Или другая одни называют «здоровая наглость», крайность: директор – хозяин, царь другие именуют «профессиональ- и Бог, сотрудники вынуждены учитыная хватка». А мне кажется, это необ- вать его настроения, а не объективходимый каждому жизненный опыт. ные обстоятельства. Здесь все это бы«Заставить себя позвонить незнако- ло выдержано, сбалансировано. Спамому человеку, быть готовым, что на сибо руководству. Это была хорошая тебя резко, а может быть, даже гру- школа маркетинга». бо отреагируют. И не расстраиватьВ АРС Юрий Колесов проработал ся при этом – позвонить следующе- девять лет. Занимался все время прому… Прийти с улицы в любую фирму, дажами, но разным клиентам – дистсделать деловое предложение и попу- рибуторам, дилерам... Юрия постепенлярно объяснить, что они теряют, ес- но узнали во всех уголках компактноли его не примут…». го российского IT-рынка. Он много езСо всем этим «багажом» Юрий дил по регионам – Сибирь, Урал, Цен-
73
человек номера тральная Россия. Бывал и в странах СНГ, например, в Украине.
Один за всех, и все за Avocent Новый перекресток возник, когда опыт накопился, стал критической массой. «IT – маленький рынок, все друг друга знают», – замечает Колесов. – «А это хорошо или плохо?» – интересуюсь. – «Хорошо. Ты куда-то приходишь, а тебя уже знают или помнят по каким-то делам. Только не надо никого обманывать, живи честно. Если у тебя такая репутация, тебе легко делать бизнес». Изучив американский стиль управления, Юрий занялся постижением на практике российской специфики. Работал с заказчиками в инженерном подразделении группы компаний «ЛАНИТ». И вот на горизонте появился Avocent. Он не мог не появиться – немало народу из АРС перешли в Avocent в Европе, в том числе европейский директор. Во время визитов в Россию этот самый директор общался иногда с Юрием. И в какойто момент предложил: «А что ты ду- ров – HP, IBM, Dell. Кроме того, мы демаешь, если мы откроем здесь пред- лаем бизнес под своей торговой марставительство и тебя позовем им ру- кой. А еще скупаем фирмы в своей отрасли, расширяем технологичесководить?». На этом перекрестке Юрий Коле- кий сегмент. В прошлом году купили сов стоял целых полгода. Он понимал, «LANDesk». До сих пор Avocent был нучто перспективы у компании неплохие, жен, когда не работают штатные сисчто бизнес начнет расти, когда в Рос- темы – сервер, сетевое оборудование, то есть системный сбой произошел сии появится свой офис… и нужен внештатный доступ. Средства Avocent позволя«IT – маленький рынок, все друг друга зна- ли добраться до неисправноют. Ты куда-то приходишь, а тебя уже знают го узла и попытаться его восили помнят по каким-то делам. Только не надо становить. А сейчас мы полуникого обманывать, живи честно. Если у тебя чили еще и систему штатного доступа. Получится такой комтакая репутация, тебе легко делать бизнес». плекс, которого сегодня нет ни у кого больше». Выбор в очередной раз оказалВпрочем, передам слово самому нынешнему главе представитель- ся верным. Как там Иванушка в сказства Avocent в странах СНГ, он сам ке выбирал? Кажется, пошел напраобъяснит причины, по которым ра- во, где добры молодцы теряли коня… ботает в этой фирме: «Avocent миро- Юрий Колесов терять не намерен, вой лидер в своей нише. Компания наоборот, надеется на прирост. Сейпрогрессивная, инновационная, есть час в его представительстве работаперспективы, поскольку лидеру лег- ют три человека, со временем будет че прорываться, чем десятому номе- 10-15, но не больше. Опыт подсказыру. Так что выбор я сделал осмыслен- вает, что больше не надо. «В таком ный – пошел туда, где легче проры- дружном коллективе каждый будет ваться. Сегодня Avocent делает тех- знать, что делать. Один за всех, и все нологии для всех вендеров серве- за одного».
74
А потом… новый перекресток? Может быть. Юрий Колесов не только на перепутья любит выходить, он вообще сторонник движения, даже отпуск проводит не с пультом дистанционного управления у телевизора, а в горах – на лыжах, в море – на яхте. В прошлом году побывал на Байкале – очень понравилось. Природа, люди, а самое приятное – сотовый не «брал», отдых был настоящий… Однако самое удивительное в Юрии Колесове, конечно, не любовь к активному отдыху (он сейчас повсеместно заслуженно популярен). Живя стабильно, он не боится перемен, готов к сюрпризам судьбы. И новый перекресток его тоже не пугает, а, похоже, даже как-то подзадоривает. Я спросила Юрия: «Вы в вашей компании чувствуете, в каком направлении надо развиваться?» – «Чувствуем лучше других. Пока мы это чувствуем и делаем лучше других, все нормально. Но никто ведь не может сказать, что так будет всегда…». Но я почему-то ни капли не сомневаюсь, что, выбрав новую дорожку, Юрий Колесов снова выйдет победителем.
Текст: Оксана Родионова, фото: Владимир Лукин
администрирование «1С»
Выгружаем данные из «1С» в Excel
Андрей Луконькин Как быть, когда требуется получить некоторую информацию из базы данных «1С:Предприятие» в виде стандартной книги Excel или документа Word? Поможет в этом использование технологии OLE Automation.
76
администрирование «1С»
Р
ассмотрим задачу по выгрузке данных о начислении работников организации в банк в виде файла формата Excel. Задача усложняется тем, что файл должен формироваться строго установленного вида, по образцу, присланному из банка. Обработка написана для «1С:Предприятие» версии 7.7, конфигурация «Зарплата+Кадры. Редакция 2.3». Создаём внешнюю обработку, располагаем на форме элементы диалога, как это указано на рис. 1, где: n ВыбДокумент – реквизит типа Документ.ВыплатаЗаработнойПлаты; n Каталог – строка длиной 200 (ограничение по длине строки – 218 символов, поэтому оставляем 200 символов на путь к файлу, и 18 символов на имя файла).
Рисунок 1. Форма внешней обработки
Кнопке выбора каталога задаём формулу ВыборПути() (см. рис. 2). В модуле обработки добавляем процедуру ВыборПути(). Процедура ВыборПути() Каталог2=Каталог; Если Фс.ВыбратьКаталог(Каталог2, ↵ "Выберите каталог")>0 Тогда Если СтрДлина(Каталог2)>200 Тогда Сообщить("Длина каталога ↵ превышает 200 символов"); Каталог = ""; Иначе Каталог=Каталог2; КонецЕсли; КонецЕсли; КонецПроцедуры
Теперь самое главное – вводим основной текст нашей обработки, процедуры Сформировать(): Процедура Сформировать() //Если не выбран документ Ведомость, //работа прекращается Если ПустоеЗначение(ВыбДокумент)=1 Тогда Предупреждение("Выберите ведомость!"); Возврат; КонецЕсли; //Если не выбран каталог для выгрузки, //работа прекращается Если ПустоеЗначение(Каталог)=1 Тогда Предупреждение("Укажите каталог!"); Возврат; КонецЕсли; //Создание объекта MS Excel Excel = СоздатьОбъект("Excel.Application"); //Создаём новую книгу в Excel Excel.WorkBooks.Add(); //Задаём ширину колонок Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(1).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(2).ColumnWidth = 10; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(3).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(4).ColumnWidth = 15; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(5).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ Columns(6).ColumnWidth = 30; //Выводим текст заголовка документа Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1). ↵ value = "Ведомость pаспpеделения денежных ↵ сpедств на счета физических лиц";
№11, ноябрь 2007
Рисунок 2. Обработка нажатия кнопки выбора каталога //Устанавливаем размер шрифта Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(1,1).font.size = 12; //Устанавливаем признак шрифта «жирный» Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(1,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,1).value = "платежное поpучение №"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,4).value = "от"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,4).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(2,4).font.bold = 1; //Указываем наименование нашей организации, //также могут указываться и другие реквизиты //предприятия Орг = "ООО НАША ОРГАНИЗАЦИЯ"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(4,1).value = Орг; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(4,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(4,1).font.bold = 1; //«Шапка» табличной части, заголовки столбцов Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,1).value = " Счет"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,2).value = "Сумма"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,2).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,2).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,3).value = "Фамилия"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,3).font.size = 12;
77
администрирование «1С» Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,3).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,4).value = "Имя"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,4).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,4).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,5).value = "Отчество"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,5).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,5).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,6).value = "Окончательный расчет(+)"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,6).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(6,6).font.bold = 1; //Выбираем строки ведомости, цикл по всем строкам ВыбДокумент.ВыбратьСтроки(); Счетчик = 7; Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл Счет = ВыбДокумент.Сотрудник. ↵ НомерЗарплатногоСчета; Сумма = ВыбДокумент.Сумма; //Устанавливаем формат ячейки Excel //для номера счета как строковый, //чтобы отображались все 20 символов Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,1). ↵ NumberFormat = "@"; //Устанавливаем значение счета Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,1). ↵ value = Строка(Счет); //Рассчитываем значение суммы Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,2).value = Сумма;
//Разбираем ФИО на составляющие, //отдельно фамилия, имя и отчество Стр = СокрЛП(ВыбДокумент.Сотрудник. ↵ Наименование); ПозицияПервогоПробела = найти(СокрЛП(Стр), ↵ Симв(32)); Фамилия = Лев(СокрЛП(Стр), ↵ ПозицияПервогоПробела-1); ОстСтр = Прав(Стр, ↵ СтрДлина(Стр)-СтрДлина(Фамилия)-1); ПозицияВторогоПробела = ↵ найти(СокрЛП(ОстСтр),Симв(32)); Имя = Лев(СокрЛП(остСтр), ↵ ПозицияВторогоПробела-1); ОстСтр = Прав(ОстСтр, ↵ СтрДлина(ОстСтр)-СтрДлина(Имя)-1); Отчество = СокрЛП(ОстСтр);
Рисунок 3. Результат нашей работы
78
//Устанавливаем текстовый формат ячеек //и выводим ФИО Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,3). ↵ NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,3). ↵ value = ВРЕГ(Фамилия);
Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,4). ↵ NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,4). ↵ value = ВРЕГ(Имя); Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,5). ↵ NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик,5). ↵ value = ВРЕГ(Отчество); Счетчик = Счетчик + 1; КонецЦикла; //Выводим итоговую строку Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик+1,1).NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик+1,1).value ="Итого:"; //Вводим формулу в ячейку, считаем итоговую сумму Excel.WorkBooks(1).WorkSheets("Лист1"). ↵ cells(Счетчик+1,2).FormulaR1C1 = ↵ "=SUM(R[-"+Строка(Счетчик-6)+"]C:R[-2]C)"; //Записываем файл Excel. Имя – это номер //нашей ведомости Попытка Excel.ActiveWorkBook.SaveAs ↵ (СокрЛП(Каталог)+"\"+ ↵ ВыбДокумент.НомерДок+".xls"); Исключение Сообщить(«Неудачная попытка сохранения ↵ файла»); КонецПопытки; //Закрываем книгу Excel Excel.ActiveWorkBook.Close(); КонецПроцедуры
В результате мы получаем готовый файл формата Excel, название которого совпадает с номером платежной ведомости, который уже можно отсылать в банк для зачисления заработной платы на счета зарплатных пластиковых карт сотрудников (см. рис. 3). В различных банках могут быть разные форматы приема данных, оформление и структура файлов могут отличаться, но общий принцип работы, наиболее используемые методы остаются такими же, как и рассмотренные в примере.
bugtraq Множественные уязвимости в PCRE Программа: PCRE версии до 7.3. Опасность: Средняя. Описание: 1. Уязвимость существует из-за ошибки при обработке «\Q\E»-последовательностей с отделенными (orphan) «\E»-кодами. Злоумышленник может рассинхронизировать скомпилированное регулярное выражение и выполнить поврежденные байт-коды. 2. Уязвимость существует из-за ошибки при обработке различных классов символов. Злоумышленник может заставить приложение обратитmся к несуществующей ячейке памяти и вызвать отказ в обслуживании. 3. Уязвимость существует из-за ошибки при обработке различных «\X?\d»- и «\P{L}?\d»-шаблонов в отличном от режимеа UTF-8. Злоумышленник может вызвать отказ в обслуживании процесса или получить доступ к некоторым данным. 4. Уязвимость существует из-за ошибки при поиске кавычек или круглых скобок. Злоумышленник может с помощью специально сформированной строки аварийно завершить работу приложения. 5. Целочисленные переполнения буфера обнаружены при обработке escape-символов. Удаленный пользователь может вызвать повреждение динамической памяти и аварийно завершить работу приложения или выполнить произвольный код на целевой системе. 6. Уязвимость существует из-за ошибки при обработке «\P»- и «\P{x}»-последовательностей. Злоумышленник может вызвать зацикливание приложения или переполнение динамической памяти и скомпрометировать целевую систему. 7. Уязвимость существует из-за ошибки в оптимизации класса символов, содержащего одиночную Unicode-последовательность. Злоумышленник может вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.pcre.org. Решение: Установите последнюю версию 7.3 с сайта производителя.
Переполнение буфера в McAfee E‑Business Server Программа: McAfee E-Business Server версии до 8.5.3 для Solaris, McAfee E-Business Server версии до 8.1.2 для Linux/ HP-UX/AIX. Опасность: Средняя. Описание: Целочисленное переполнение обнаружено в административной утилите при обработке аутентификационных пакетов. Удаленный пользователь может с помощью специально сформированного аутентификационного пакета, содержащего слишком большое значение длины, вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.mcafee.com/us/smb/products/ encryption/ebusiness_server.html. Решение: Установите последнюю версию с сайта производителя.
№11, ноябрь 2007
Выполнение произвольных команд в yarssr Программа: yarssr 0.2.2 для Ubuntu 7.10. Опасность: Высокая. Описание: Уязвимость существует из-за того, что модуль GUI.pm недостаточно обрабатывает данные в URL перед выполнением «exec()» для запуска браузера. Злоумышленник может с помощью специально сформированной силки на RSS источник выполнить произвольные команды на системе. Для успешной эксплуатации уязвимости требуется, чтобы была отключена обработка URL с помощью Gnome. Пример: <?xml version="1.0" encoding="ISO-8859-1"?> <rss version="2.0" xmlns:blogChannel= ↵ "http://www.example.com/blogChannelModule"> <channel> <title>test feed</title> <item> <title>test post - create /tmp/created_file</title> <link>http://www.example2.com";perl -e "print ↵ 'could run anything here' " > "/tmp/created_file</link> <pubDate>Fri, 26 Oct 2007 14:10:25 +0300</pubDate> </item> </channel> </rss>
URL производителя: http://yarssr.sourceforge.net. Решение: В настоящее время способов устранения уязвимости не существует.
Повреждение памяти в Microsoft Internet Explorer Программа: Microsoft Internet Explorer 5.01, Microsoft Internet Explorer 6.x, Microsoft Internet Explorer 7.x. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки при управлении очередью загружаемых файлов при обработке большого количества одновременных попыток начать закачку файла. Удаленный пользователь может с помощью специально сформированного веб сайта вызвать повреждение памяти и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
Повреждение памяти в Microsoft Word Программа: Microsoft Office 2000, Microsoft Office 2004 for Mac, Microsoft Office XP, Microsoft Word 2000, Microsoft Word 2002. Опасность: Критическая. Описание: Уязвимость существует из-за неизвестной ошибки при обработке документов Word. Удаленный пользователь может с помощью специально сформированного документа вызвать повреждение памяти и скомпрометировать целевую систему. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
Составил Александр Антипов
79
программирование
Что мы знаем о стеке?
Владимир Мешков Предпримем попытку систематизировать собственные знания о стеке и максимально подробно рассмотрим, какую роль играет стек в процедурном программировании.
С
тек – это область памяти, предназначенная для временного хранения данных. Стек адресуется при помощи пары регистров SS:ESP. Регистр SS (Stack Segment) содержит селектор сегмента стека при работе процессора в защищенном режиме, ESP (Stack Pointer, указатель стека) – смещение относительно базового адреса сегмента стека. Упрощенная схема адресации данных в стеке, без привязки к какой-либо конкретной операционной системе, показана на рис. 1. Схема адресации сегментов команд и данных идентична изображенной на рисунке схеме адресации сегмента стека. При подготовке статьи использовались ОС Linux, компилятор gcc-4.1.2, отладчик gdb-6.6. Для помещения данных в стек и извлечения данных из него используют-
80
ся инструкции процессора push и pop. чение регистра ESP. Инструкция push Стек работает по принципу FILO (First размещает данные по адресу, на коInput – Last Output, первым вошел – торый указывает ESP, и сдвигает верпоследним вышел). Каждый вызов хушку стека в сторону младших адреинструкции push/pop изменяет зна- сов, уменьшая значение ESP. Инструк-
Рисунок 1. Адресация стека
программирование ция pop поступает наоборот – снимает данные с верхушки стека и увеличивает значение ESP. Стек играет важнейшую роль в процедурном программировании. Процедурное программирование подразумевает использование функций. Функции позволяют выделить часто используемые фрагменты кода в отдельные блоки и повторно использовать их из любой точки программы, тем самым повышая эффективность разработки. При использовании функций линейный (последовательный) ход выполнения программы нарушается – в любой момент мы можем передать управление на функцию. Для этого используется инструкция процессора call. Адрес функции передается как параметр этой команды: call < адрес функции >
Передача параметров функции осуществляется в зависимости от используемого соглашения. В случае соглашения fastcall максимум параметров передается через регистры, что значительно ускоряет процесс вызова функции. В контексте данной статьи рассматривается соглашение stdcall/cdecl, при котором для передачи параметров используется стек. Перед вызовом функции параметры помещаются в стек при помощи инструкции push. В виде псевдокода вызов функции с двумя параметрами с использованием соглашения языка Си выглядит так (адресация показана условно, без учета размеров инструкций): Условный адрес .... < N-2 > < N-1 > < N > < N+1 >
Инструкция процессора .... push < параметр 2 > push < параметр 1 > call < адрес функции > < сюда будет возвращено управление >
В языке Си первый параметр загружается в стек последним, последний параметр – первым. Получив управление, функция считывает из стека параметры вызова, и выполняет свою работу. Парметры остаются в стеке, благодаря чему их можно использовать как переменные в ходе выполнения функции. Завершается функция инструкцией ret (эту инструкцию мы обсудим ниже). После этого управление будет передано на команду, которая следует за инструкцией call. Схематически это отображено на рис. 2. Чтобы такая схема сработала, необходимо запомнить адрес возврата из функции, т.е. адрес следующей за call команды. Этот адрес сохраняет в стеке команда call. Если привязать все эти команды к изменениям стека, то получим картину как на рис. 3. Видно, как изменяют стек команды push и call. Сразу после вызова команды call в стеке будет сохранен адрес возврата – адрес следующей за call инструкции, и ESP будет указывать на этот адрес, т.е. *ESP == адрес возврата. Чтобы узнать, что происходит со стеком дальше, напишем небольшой тестовый пример:
{ return a+b; } int main() { int c, a, b; c = 0, a = 1, b = 2; c = foo(a, b); return c; }
Посмотрим на дизассемблерный листинг функции foo: bash-3.1# gcc -Wall -g -o test test.c bash-3.1# gdb -q ./test Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) disas foo Dump of assembler code for function foo: 0x08048384 <foo+0>: push %ebp 0x08048385 <foo+1>: mov %esp,%ebp 0x08048387 <foo+3>: mov 0xc(%ebp),%eax 0x0804838a <foo+6>: add 0x8(%ebp),%eax 0x0804838d <foo+9>: pop %ebp 0x0804838e <foo+10>: ret End of assembler dump.
Две первые инструкции образуют пролог функции. Первая инструкция сохраняет в стеке содержимое регистра EBP, вторая присваивает регистру EBP значение ESP. Чтобы понять смысл этих манипуляций, изобразим (см. рис. 4) все изменения стека после двух этих инструкций функции. Что же мы все таки получили? А вот что – мы зафиксировали верхушку стека в регистре EBP и получили воз-
Рисунок 2. Вызов функции и передача ей параметров
Листинг 1. Файл test.c #include <stdio.h> #include <stdlib.h> int foo(int a, int b)
№11, ноябрь 2007
Рисунок 3. Изменения стека при вызове функции
81
программирование (gdb) info reg ebp ebp
0xbf92f588
0xbf92f588
Согласно рис. 5, по смещению EBP+0x4 будет находиться адрес возврата из функции foo, по смещению EBP+0x8 – первый параметр функции, EBP+0xC – второй параметр функции. Проверим это: (gdb) x/w 0xbf92f588+4 0xbf92f58c:
0x080483c7
<--- адрес возврата из foo
(gdb) x/w 0xbf92f588+8 Рисунок 4. Состояние стека после пролога функции
0xbf92f590:
0x00000001
<--- первый параметр (a=1)
(gdb) x/w 0xbf92f588+0xC 0xbf92f594:
0x00000002
<--- второй параметр (b=2)
Адресация [EBP+0x8] в синтаксисе AT&T выглядит как 0x8(%ebp). Подробнее о различиях синтаксиса ассемблеров Intel и AT&T можно прочитать в статье http://www.ibm.com/ developerworks/linux/library/l-gas-nasm.html. С параметрами все правильно, если посмотреть на листинг 1 (a=1, b=2). Чтобы убедиться в правильности адреса возврата, дизассемблируем функцию main, потому что foo вызывается из нее: (gdb) disas main
Рисунок 5. Кадр стека
можность перемещаться по стеку относительно этой точки. Другими словами, мы создали кадр стека, или стековый фрейм (stack frame). Смотрим на рис. 5. При помощи EBP мы можем адресовать параметры функции и ее локальные данные (про область локальных данных я расскажу позже). Запустим в отладчике нашу тестовую программу, установив точку останова на функцию foo: (gdb) b foo Breakpoint 1 at 0x8048387: file test.c, line 6.
(gdb) r Starting program: test Breakpoint 1, foo (a=1, b=2) at test.c:6 6 return a+b;
Смотрим, какие у нас есть кадры стека: (gdb) fr #0 foo (a=1, b=2) at test.c:6 6 return a+b;
Текущий кадр принадлежит функции foo. Получим значение регистра EBP:
82
Dump of assembler code for function main: 0x0804838f <main+0>: lea 0x4(%esp),%ecx 0x08048393 <main+4>: and $0xfffffff0,%esp 0x08048396 <main+7>: pushl 0xfffffffc(%ecx) 0x08048399 <main+10>: push %ebp 0x0804839a <main+11>: mov %esp,%ebp 0x0804839c <main+13>: push %ecx 0x0804839d <main+14>: sub $0x24,%esp места для локальных переменных 0x080483a0 <main+17>: movl $0x0,0xfffffff0(%ebp) локальная переменная c = 0 0x080483a7 <main+24>: movl $0x1,0xfffffff4(%ebp) локальная переменная a = 1 0x080483ae <main+31>: movl $0x2,0xfffffff8(%ebp) локальная переменная b = 2 0x080483b5 <main+38>: mov 0xfffffff8(%ebp),%eax 0x080483b8 <main+41>: mov %eax,0x4(%esp) 0x080483bc <main+45>: mov 0xfffffff4(%ebp),%eax 0x080483bf <main+48>: mov %eax,(%esp) 0x080483c2 <main+51>: call 0x8048384 <foo> функции foo 0x080483c7 <main+56>: mov %eax,0xfffffff0(%ebp) вернемся из foo 0x080483ca <main+59>: mov 0xfffffff0(%ebp),%eax 0x080483cd <main+62>: mov %eax,0x4(%esp) 0x080483d1 <main+66>: movl $0x8048504,(%esp) 0x080483d8 <main+73>: call 0x80482b8 <printf@plt> 0x080483dd <main+78>: mov 0xfffffff0(%ebp),%eax 0x080483e0 <main+81>: add $0x24,%esp 0x080483e3 <main+84>: pop %ecx 0x080483e4 <main+85>: pop %ebp 0x080483e5 <main+86>: lea 0xfffffffc(%ecx),%esp 0x080483e8 <main+89>: ret End of assembler dump.
<--- резерв <--<--<---
<--- вызов <--- сюда
Сравните адрес в дизассемблерном листинге и адрес, который мы при помощи отладчика извлекли из стека – они идентичны. На что еще стоит обратить внимание в дизассемблерном листинге функции main, так это на порядок адресации локаль-
программирование ных переменных. У main локальных переменных три: a, b и c. Также как и для любой другой функции, для main создается кадр стека, о чем красноречиво свидетельствует пролог. Прежде чем присваивать значения локальным переменным, в стеке резервируется для них место при помощи команды «sub $0x24,%esp». Эта команда сдвигает верхушку стека вниз на 36 байт. Далее следуют три команды movl, которые присваивают значения локальным переменным. Пусть вас не смущают странные значения типа 0xfffffff0, 0xfffffff4 и 0xfffffff8 – большое положительное число суть всего лишь маленькое отрицательное, просто отладчик не указывает знак числа. Всю эту тройку команд movl можно переписать так: movl $0x0,0xfffffff0(%ebp) movl $0x1,0xfffffff4(%ebp) movl $0x2,0xfffffff8(%ebp)
==> ==> ==>
movl $0x0,-16(%ebp) movl $0x1,-12(%ebp) movl $0x2,-8(%ebp
Для доказательства нашей правоты проведем проверку при помощи отладчика: bash-3.1$ gdb -q test Using host libthread_db library "/lib/tls/libthread_db.so.1".
Ставим точку останова на main: (gdb) b main Breakpoint 1 at 0x80483a0: file test.c, line 12.
(gdb) r Starting program: ~/TEST/STACK/test Breakpoint 1, main () at test.c:12 12 c = 0; (gdb) s 13 a = 1; (gdb) s 14 b = 2; (gdb) s 16 c = foo(a, b);
Остановились перед вызовом foo. Получаем значение регистра EBP: (gdb) info reg ebp ebp
0xbfaf46d8
0xbfaf46d8
Определяем значение локальных переменных, указывая положительное смещение относительно EBP: (gdb) x/xw 0xbfaf46d8+0xfffffff0 <---- локальная переменная c = 0
0xbfaf46c8:
0x00000000
(gdb) x/xw 0xbfaf46d8+0xfffffff4 <---- локальная переменная a = 1
0xbfaf46cc:
0x00000001
(gdb) x/xw 0xbfaf46d8+0xfffffff8 <---- локальная переменная b = 2
0xbfaf46d0:
0x00000002
А теперь будем задавать отрицательное смещение и сравнивать результаты:
№11, ноябрь 2007
(gdb) x/xw 0xbfaf46d8-16 <---- локальная переменная c = 0 0xbfaf46c8:
0x00000000
(gdb) x/xw 0xbfaf46d8-12 <---- локальная переменная a = 1 0xbfaf46cc:
0x00000001
(gdb) x/xw 0xbfaf46d8-8 <---- локальная переменная b = 2 0xbfaf46d0:
0x00000002
Что еще бросается в глаза в дизассемблерном листинге функции main? Наверное, отсутствие команды push для размещения в стеке параметров функции foo, т.е. локальных переменных a и b функции main? На самом деле для размещения параметров в стеке компилятор gcc не использует push. Он использует mov. Локальная переменная b попадает в стек в результате следующей последовательности команд: 0x080483b5 <main+38>: mov 0xfffffff8(%ebp),%eax <-- локальная переменная b=2 в EAX 0x080483b8 <main+41>: mov %eax,0x4(%esp) <-- помещаем параметр b в стек
Здесь первая команда «mov 0xfffffff8(%ebp),%eax» загружает в регистр EAX локальный параметр b (согласно синтаксису ассемблера AT&T загрузка аргументов выполняется слева направо), а затем вторая команда «mov %eax,0x4(%esp)» размещает этот параметр в стеке, выполняя работу инструкции push. Аналогично в стек попадает локальный параметр a: 0x080483bc <main+45>: mov 0xfffffff4(%ebp),%eax <-- локальная переменная a=1 в EAX 0x080483bf <main+48>: mov %eax,(%esp) <-- помещаем параметр a в стек
Первой в стеке оказывается переменная b=2, последней a=1 (см. рис. 6). Далее следует вызов call <адрес foo>, и в стеке окажется адрес возврата. При возврате из функции main команда «add $0x24,%esp» выполняет выравнивание (балансировку) стека. Балансировка стека – это очень важная операция. Если мы перед выходом из функции не сбалансируем стек, то нас будут ждать сюрпризы, самый безобидный из которых – аварийное завершение программы по сигналу Segmentation Fault. Разберемся, почему так. Возврат из функции выполняет инструкция ret. При помощи утилиты objdump можно установить, что в нашей программе используется инструкция ret с опкодом C3 (опкод – это код операции, operation code). В документе [1] в описании команды RET с таким опкодом сказано, что она выполняет ближний возврат в вызывающую процедуру, near return to calling procedure (ближний, потому что команда действует в пределах текущего сегмента кода и не изменяет значение селектора сегмента). Для возврата инструкция снимает с верхушки стека значение и заносит его в регистр EIP (EIP <-- Pop(), см. [1]). Регистр EIP содержит адрес инструкции для выполнения. Если стек сбалансирован, то в момент вызова ret регистр ESP будет указывать на адрес возврата из функции. Не-
83
программирование Breakpoint 2, 0x080483c7 in main () at test.c:16 16 c = foo(a, b);
(gdb) info reg eip eip
Рисунок 6. Размещение параметров в стеке перед вызовом foo
верное значение ESP приведет к неправильной работе программы. Проверим, какие значения будут находиться в регистрах ESP и EIP при выходе из функции foo. bash-3.1# gdb -q test Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) disas foo Dump of assembler code for function foo: 0x08048384 <foo+0>: push %ebp 0x08048385 <foo+1>: mov %esp,%ebp 0x08048387 <foo+3>: mov 0xc(%ebp),%eax 0x0804838a <foo+6>: add 0x8(%ebp),%eax 0x0804838d <foo+9>: pop %ebp 0x0804838e <foo+10>: ret End of assembler dump.
Первую точку останова ставим на инструкцию ret: (gdb) b *0x0804838e Breakpoint 1 at 0x804838e: file test.c, line 7.
Вторая точка останова – сразу после вызова call <адрес foo> в функции main: (gdb) b *0x080483c7 Breakpoint 2 at 0x80483c7: file test.c, line 16.
(gdb) r Starting program: ~TEST/STACK/test Breakpoint 1, 0x0804838e in foo (a=0, b=-1209000736) at test.c:7 7 }
Достигли первой точки останова, смотрим, что находится в ESP: (gdb) info reg esp esp
0xbff583ac
0xbff583ac
(gdb) x/xw 0xbff583ac 0xbff583ac:
0x080483c7
(gdb) s
В ESP – адрес возврата из foo, при выходе из foo он должен оказаться в EIP:
84
0x80483c7
0x80483c7 <main+56>
Тут видно, что находится в EIP – адрес, куда будет передано управление при возврате из foo. Это уже знакомый нам 0x80483c7. Опция gcc-компилятора fomit-frame-pointer позволяет выполнять вызовы функций без создания фиксированных кадров стека. Использование этой опции освобождает регистр EBP, и компилятор может использовать его для своих внутренних потребностей. Недостаток – затрудняется отладка, т.к. значение ESP постоянно варьируется, и нужно быть очень внимательным, чтобы отследить все его изменения. Скомпилируем наше тестовое приложение (см. листинг 1) с использованием опции fomit-frame-pointer и посмотрим на его дизассемблерный дамп: bash-3.1$ gcc -Wall -g -fomit-frame-pointer -o test test.c bash-3.1$ gdb -q ./test Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) disas main Dump of assembler code for function main: 0x0804838d <main+0>: lea 0x4(%esp),%ecx 0x08048391 <main+4>: and $0xfffffff0,%esp 0x08048394 <main+7>: pushl 0xfffffffc(%ecx) 0x08048397 <main+10>: push %ecx 0x08048398 <main+11>: sub $0x18,%esp 0x0804839b <main+14>: movl $0x3,0xc(%esp) 0x080483a3 <main+22>: movl $0x1,0x10(%esp) 0x080483ab <main+30>: movl $0x2,0x14(%esp) 0x080483b3 <main+38>: mov 0x14(%esp),%eax 0x080483b7 <main+42>: mov %eax,0x4(%esp) 0x080483bb <main+46>: mov 0x10(%esp),%eax 0x080483bf <main+50>: mov %eax,(%esp) 0x080483c2 <main+53>: call 0x8048384 <foo> 0x080483c7 <main+58>: mov %eax,0xc(%esp) 0x080483cb <main+62>: mov 0xc(%esp),%eax 0x080483cf <main+66>: mov %eax,0x4(%esp) 0x080483d3 <main+70>: movl $0x8048504,(%esp) 0x080483da <main+77>: call 0x80482b8 <printf@plt> 0x080483df <main+82>: mov 0xc(%esp),%eax 0x080483e3 <main+86>: add $0x18,%esp 0x080483e6 <main+89>: pop %ecx 0x080483e7 <main+90>: lea 0xfffffffc(%ecx),%esp 0x080483ea <main+93>: ret End of assembler dump.
(gdb) disas foo Dump of assembler code for function foo: 0x08048384 <foo+0>: mov 0x8(%esp),%eax 0x08048388 <foo+4>: add 0x4(%esp),%eax 0x0804838c <foo+8>: ret End of assembler dump.
Видите? Ни одного намека на использование регистра EBP. Вся адресация в стеке только через ESP. Таким способом создаются «плавающие» фреймы стека, и называются они так из-за постоянного изменения значения регистра ESP. 1. Intel® 64 and IA-32 Architectures Software Developer’s Manual. Volume 2B: Instruction Set Reference, N-Z (www.intel.com).
bugtraq Переполнение буфера в IPSwitch IMail Server Программа: IPSwitch IMail Server 2006.22, возможно, более ранние версии; IMail Client 9.22, возможно, более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за ошибки проверки границ данных в IMail Client при обработке e-mail-сообщений, содержащих multipart MIME-данные. Удаленный пользователь может с помощью слишком длинного параметра boundary (более 212 байт) вызвать сегментное переполнение буфера и выполнить произвольный код на целевой системе. URL производителя: www.ipswitch.com. Решение: В настоящее время способов устранения уязвимости не существует. Производитель рекомендует удалить приложение IMail Client.
Уязвимость при обработке регулярных выражений в Perl Программа: Perl 5.8.8, возможно, более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке регулярных выражений, содержащих данные в кодировке Unicode. Злоумышленник может с помощью специально сформированного регулярного выражения вызвать переполнение буфера и скомпрометировать целевую систему. URL производителя: www.perl.org. Решение: Установите последнюю версию 5.9.5 с сайта производителя.
Множественные уязвимости в IBM Lotus Domino Программа: IBM Lotus Domino версии до 7.0.3 и 8.0. Опасность: Средняя. Описание: 1. Уязвимость существует из-за ошибки при обработке названий почтовых ящиков в некоторых командах в службе IMAP. Удаленный авторизованный пользователь может вызвать переполнение стека и выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки в LotusScript при использовании метода Evaluate совместно с некоторыми командами для создания видов и агентов. В некоторых случаях вид или агент могут вернуть данные, не предназначенные для просмотра. 3. Уязвимость существует из-за ошибки в командах Domino CA (Certificate Authority) процесса, что может привести к отображению паролей в открытом виде в административной панели и файле console.log, если используются прописные буквы в командах CA «activate» или «unlock». 4. Уязвимость существует из-за небезопасных привилегий на доступ к общей памяти. Локальный пользователь может получить доступ к данным других пользователей на системе. URL производителя: www.ibm.com. Решение: Установите последнюю версию 7.0.3 или 8.0 с сайта производителя.
№11, ноябрь 2007
Переполнение буфера в Miranda Программа: Miranda версии до 0.7.1. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных в компонентах ICQ, IRC, Jabber и Yahoo. Удаленный пользователь может вызвать переполнение буфера и выполнить произвольный код на целевой системе. URL производителя: www.miranda-im.org/about. Решение: Установите последнюю версию 0.7.1 с сайта производителя.
Множественные уязвимости в продуктах Oracle Программа: Oracle Application Server 10g, Oracle Collaboration Suite 10.x, Oracle Database 10.x, Oracle E-Business Suite 11i, Oracle E-Business Suite 12.x, Oracle Enterprise Manager 10.x, Oracle PeopleSoft Enterprise Human Capital Management 8.x, Oracle PeopleSoft Enterprise Human Capital Management 9.x, Oracle PeopleSoft Enterprise Tools 8.x, Oracle9i Database Enterprise Edition, Oracle9i Database Standard Edition. Опасность: Средняя. Описание: 1. Уязвимость существует из-за ошибки проверки входных данных в службе GIOP в Oracle TNS Listener. Удаленный пользователь может с помощью специально сформированного GIOP-пакета аварийно завершить работу TNS Listener или получить доступ к важным данным на системе. 2. Уязвимость существует из-за недостаточной обработки входных данных в пакете CTX_DOC перед выполнением SQL-запросов. Удаленный пользователь может посредством процедур THEMES, GIST, TOKENS, FILTER, HIGHLIGHT и MARKUP внедрить и выполнить произвольные SQL-команды. 3. Уязвимость существует из-за ошибки в Oracle RDBMS при обработке TNS-пакетов. Удаленный пользователь может с помощью специально сформированной последовательности пакетов вызвать высокую загрузку процессора и произвести DoS-атаку. 4. Уязвимость существует из-за недостаточной обработки данных в LT-пакете перед использованием их в SQL‑запросах в пакете FINDRICSET. Удаленный пользователь может посредством процедуры FINDRICSET внедрить и выполнить произвольные SQL-команды на системе. 5. Уязвимость существует из-за ошибки в Oracle XML DB ftp-службе, которая приводит к записи некорректного «USERID» в журнал событий. 6. Уязвимость существует из-за ошибки проверки границ данных в процедуре DBLINK_INFO в DBMS_AQADM_SYSпакете. Удаленный пользователь с привилегиями EXECUTE может вызвать переполнение буфера. 7. Уязвимость существует из-за ошибки проверки границ данных в процедуре TRANSFORM в MDSYS.SDO_CS-пакете. Удаленный пользователь может вызвать переполнение буфера и выполнит произвольный код на целевой системе. URL производителя: www.oracle.com. Решение: Установите исправления с сайта производителя.
Составил Александр Антипов
85
ретроспектива
Окно в электронный мир: история развития графического пользовательского интерфейса Часть 1
Дмитрий Мороз Сегодня сотни компаний и исследовательских учреждений, тысячи программистов следят за тем, чтобы общение рядового пользователя с компьютером было как можно более простым и понятным. В совершенствование графического интерфейса операционных систем было вложено огромное количество сил, средств и, главное, времени. Хроники почти пятидесяти лет разработок – перед вами.
В
мире бытует мнение, соглас- сывал свою задумку. В то время циф- нических наук при Калифорнийском но которому графический поль- ровых компьютеров ещё не сущест- университете и был приглашён на разовательский интерфейс (GUI – вовало, поэтому о создании подобно- боту в Стэнфордский исследовательGraphical User Interface, интерфейс пе- го устройства речи быть не могло. Об- ский институт. редачи команд компьютеру с исполь- щественность отнеслась к замыслам Статья Буша воодушевила Энгельзованием устройства-указателя, с по- Буша с иронией. барта ещё во время Второй мировой мощью которого пользователь мани40-е годы принесли миру первые войны. Будучи оператором радарной пулирует графическими объектами, цифровые вычислительные машины, станции, он представлял себе систеотображающимися на экране монито- а также вакуумные трубки – основу му, построенную на базе электроннора) был создан в недрах исследова- дисплея для компьютера. лучевых трубок, с помощью которых тельских лабораторий центра Palo Alto В июле 1945 года Буш переосмыс- пользователь мог создавать инфорResearch Center компании Xerox и поз- лил свои идеи относительно Memex мационные модели в графическом виднее популяризирован Apple. Хотя спе- в статье «Как мы можем мыслить» де, а затем динамически передвигатьциалисты PARC, безусловно, внесли (As We May Think), которая была опуб- ся между ними. гигантский вклад в это дело, первоот- ликована в газете Atlantic Monthly. В 1959 году благодаря своим разкрывателями в области GUI являются Спустя несколько месяцев, а именно работкам в области миниатюризации всё-таки другие люди. 10 сентября журнал Life перепечатал компьютерных компонентов ЭнгельЕщё в начале 30-х годов прошлого сокращённую версию статьи, снаб- барт наконец-то получил необходимое века учёный Ванневар Буш (Vannevar жённую, однако, несколькими эскиза- ему финансирование от Военно-возBush) придумал концепцию устройс- ми, демонстрировавшими, как могла душных сил Соединённых Штатов. тва под названием Memex. Соглас- бы выглядеть Memex. Прочтение этоПоследовавшие за этим три гоно его описанию, это была доска, со- го материала вызвало у молодого Дуг- да исследований явили в октябре державшая два сенсорных графичес- ласа Энгельбарта невероятный инте- 1962 года доклад под названием «Раских дисплея, клавиатуру, а также под- рес, и он задался целью построить та- ширение человеческого интеллекта» ключённый к ней сканер. Благодаря кую машину. (Augmenting Human Intellect). В этом Memex пользователь получал доступ документе Энгельбарт доказывал, ко всем человеческим знаниям пос- Первый среди первых что цифровые компьютеры могли бы редством связей, по принципу сво- В 1948 году 23-летний Дуглас Энгель- обеспечить наиболее быстрый метод ей работы очень похожих на гипер- барт (Douglas Engelbart) получил сте- «увеличения возможностей человессылки. «В Memex человек хранит все пень бакалавра в области электри- ка для понимания возникшей проблесвои книги, записи, связи, которые мо- ческой инженерии Орегонского го- мы и поиска решения, удовлетворяюгут быть легко доступны по его жела- сударственного университета. Спус- щего его конкретные нужды». Учёный нию в мгновение ока» – так Буш опи- тя семь лет он стал кандидатом тех- представлял компьютер не в качестве
86
ретроспектива заменителя человеческого интеллекта, а как средство для его улучшения. В качестве одного из примеров описываемой им технологии был архитектурный дизайн зданий, похожий на современные графические средства автоматизированного проектирования. В 60-е годы компьютеры представляли собой гигантские мейнфреймы, с которыми пользователи взаимодействовали посредством так называемой «пакетной обработки» (batch processing): программа вводилась в машину посредством серии перфорированных карт, после чего выполнялась в течение строго запланированного времени. Результата вычислений приходилось ждать часами и даже днями. Ввод команд при помощи текстового терминала в режиме «реального времени» только начал набирать обороты. В результате труд Энгельбарта даже для 1962 года выглядел очень смело. Однако, в отличие от Буша, Дуглас не собирался останавливаться лишь на голой теории и активно работал над созданием системы, которую планировал продемонстрировать в качестве подтверждения своих слов. Благодаря финансированию военными его проекта Энгельбарт имел доступ практически ко всему необходимому оборудованию, а недостающие части создавал сам. Для работы с проектируемой им визуальной системой требовались новые типы устройств управления. Энгельбарт создал ряд манипуляторов, среди которых были экзотические устройства, крепившиеся к носу или подбородку и управлявшиеся ими. Победу же одержала деревянная коробочка с одной кнопкой и двумя миниатюрными колёсами для передвижения по осям X и Y, получившая неофициальное, однако впоследствии ставшее всенародным название – «мышь». В процессе тестирования использовались и более традиционные сенсорный дисплей и световое перо, однако мышь оказалась наиболее естественным способом управления экранным курсором. «Напарником» нового устройства была специальная клавиатура, также разработанная Энгельбартом. Одеваемая на левую руку пользователя, она содержала всего пять клавиш, однако
№11, ноябрь 2007
Рисунок 1. Дуглас Энгельбарт вместе со своим изобретением – компьютерной «мышью»
Рисунок 2. Окно Диалоговой системы
посредством их комбинаций (за это торой была установлена профессиоона и получила прозвище «аккордная») нальная чёрно-белая камера. Полуколичество воспроизводимых симво- ченное в результате телевизионное лов достигало 32, чего с лихвой хва- изображение через панель управлетало для всего алфавита. ния камерой отображалось на каждом Эти устройства ввода были под- из дисплеев рабочих станций. ключены к каждой из шестнадцаТакая запутанная схема передачи ти рабочих станций, которые, в свою информации была вызвана не только очередь, соединялись с компьюте- ограниченными возможностями комром SDS 940 производства компании пьютеров того времени, но и требоваScientific Data Systems, имевшим не- ниями специально написанного промыслимые на то время 96 Мб диско- граммного обеспечения. вого пространства. Информация, наНаиболее инновационной програмбираемая пользователем посредс- мой разрабатываемой Энгельбартом твом клавиатуры, поступала на один системы являлся Журнал (Journal). Он из двух контроллеров дисплея. Пос- представлял собой примитивную верле этого текст отображался на 12,7 см сию коллективного редактора по соэлектронно-лучевой трубке, перед ко- зданию различной документации. Не-
87
ретроспектива Машинный рисунок Ещё одним человеком, вдохновлённым концепцией Memex Ванневара Буша, был студент Массачусетского технологического института Иван Сазерленд (Ivan Sutherland), в 1963 году разработавший для своей кандидатской диссертации ПО Sketchpad. Эту программу можно по праву считать первым средством автоматизированного проектирования, обладавшего к тому же графическим интерфейсом. Sketchpad позволяла посредством светового пера манипулировать объектами на экране. Благодаря этому пользователь мог взять из библиотеки готовую геометрическую фигуру, произвести над ней необходимые манипуляции и затем сохранить либо распечатать на плоттере. Программа позволяла рисовать линии различной дли-
ны и толщины, углы и соединения. Причём для каждого элемента рисунка пользователь мог задавать свои параметры, например, сделать линию определённой длины, а угол – градуса. Sketchpad была разработана для компьютера Lincoln TX-2, обладавшего памятью в 64 Кб 36-битных слова. 20 бит одного слова содержали координаты точки в пространстве, а оставшиеся 16 отвечали за её вывод на дисплей. В 1980 году доклад Сазерленда по Sketchpad был перепечатан под названием «Sketchpad: Человеко-машинная графическая система связи» (Sketchpad: A Man-Machine Graphical Communication System). Интересующиеся могут скачать текст в электронном виде по адресу: http://www.cl.cam.ac.uk/ techreports/UCAM-CL‑TR‑574.pdf.
сколько пользователей могли одновременно создать документ, содержавший текст и графику, который затем сохранялся на жёсткий диск SDS 940. Между различными документами можно было устанавливать связи для быстрого перехода, которые получили название «гипертекстовых» (hypertext) ссылок. Они могли содержаться и в самом документе, позволяя моментально получить доступ к интересующей части документа. Таким образом Журнал воплощал в себе главную идею Memex Буша – единую среду быстрого доступа к пользовательской информации. Дугласу и его команде понадобилось восемь лет, дабы изложенное
в «Расширении человеческого интеллекта» стало реальностью. Для завершения разработки к средствам, выделенным ВВС США, «присоединились» деньги Национального управления США по аэронавтике и исследованиям космоса (National Aeronautics and Space Administration, NASA) и Агентства по перспективным исследовательским разработкам (Advanced Research Projects Agency, ARPA). 9 декабря 1968 года в Сан-Франциско среди узкого круга приглашённых специалистов состоялась презентация «Диалоговой системы» (oNLine System – NLS), такое название Энгельбарт дал своей разработке. NLS была соединена посредством телефонной
линии с исследовательским центром Дугласа в Менло Парке, Калифорния. Перед зрителями был размещён 6‑метровый проекционный экран, на котором демонстрировались возможности системы. Энгельбарт показал зрителям работу гипертекстовых ссылок, контекстно-зависимую помощь, групповое создание документов, электронную почту, мгновенные сообщения. Кроме того, специально для демонстрации в NLS была добавлена возможность ведения видеоконференций. Интерфейс «Онлайновой системы» мог выводить на экран одновременно несколько окон, однако в силу ограниченных ресурсов границы между ними не отображались. Полуторачасовая демонстрация своим обилием новых технологий вызвала живейший интерес у собравшихся. Однако до коммерциализации NLS дело не дошло, поскольку наравне со своими достоинствами система обладала рядом недостатков, критичных для потребителя: необходимостью изучения множества диалоговых команд, а также 5-битного двоичного кода для набора текста. Кроме того, с появлением в 1969 году сети ARPANet концепция вычислений с разделением времени начала стремительно устаревать, уступая дорогу индивидуальным мини-компьютерам. И хотя попытки переноса системы на другое аппаратное обеспечение увенчались успехом, популярности NLS за пределами Стэнфордского исследовательского института это не прибавило. Энгельбарт продолжал работать над совершенствованием технологий, заложенных в NLS вплоть до 1989 года, когда финансирование проекта было полностью прекращено.
Персональный компьютер и графический интерфейс
Рисунок 3. Проведение видеоконференции в NLS
88
Исследовательский центр Palo Alto Research Center (PARC), созданный компанией Xerox в середине 1970 года, привлекал в свои ряды множество талантливых специалистов. Среди них оказались и несколько бывших подчинённых Энгельбарта, отказавшихся работать со своим бывшим начальником из-за различий во взглядах на будущее компьютерных вычислений. Они-то и продолжили развитие
ретроспектива идей графического пользовательского Интерфейс операционинтерфейса под новым «крылом». ной системы AltoOS праКак раз в это время в PARC был вильнее именовать условсоздан первый лазерный принтер, но-графическим: например, и руководство Xerox решило, что на- файловый менеджер, наиболее верным шагом для компа- званный разработчиками нии будет интеграция копировальных Neptune Directory Editor, отоби цифровых технологий и выведение ражал списки файлов в дина рынок комплексного решения, по- ректориях в виде двух колучившего название «офис будуще- лонок, вокруг которых расго». В результате в недрах исследо- полагались кнопки, выполвательского центра начались рабо- нявшие различные команты по созданию компьютера, который ды. Нечто подобное десять должен был составить компанию но- лет спустя было воплощено вому принтеру. Ну а бывшие инже- в Norton Commander. Однако Рисунок 4. Sketchpad Ивана Сазерленда неры Энгельбарта и их новые колле- «окон» в современном пониги взялись за разработку графичес- мании в операционной системе AltoOS Окно, расположенное слева, содержало набор команд и различные виды кого пользовательского интерфейса изначально не было. для новой машины. Поскольку инженерам PARC прихо- кистей, верхнее окно было предназнаРуководителем группы по созда- дилось разрабатывать ПО практичес- чено для ввода дополнительных текснию GUI был назначен Алан Кей (Alan ки с нуля, интерфейс операционной товых команд, а также вывода системKay), пришедший в исследовательский системы и приложений не был стандар- ных сообщений программы. Кстати, впервые курсор мыши изцентр из Университета штата Юта. Два тизирован. Например, в разработангода (с 1967 по 1969 год) понадобилось ном для Alto текстовом редакторе под менял свою форму в зависимости Кею и его коллеге по учебному заведе- названием Bravo меню с кнопками бы- от выполнения конкретной задачи: нию Эду Чидлу (Ed Cheadle), дабы пос- ло расположено не сверху, как в фай- он мог выглядеть наконечником стретроить компьютер под названием FLEX, ловом менеджере, а снизу. Bravo мог лы в одном окне и кистью – в другом. Исследователи PARC понимали, в пользовательском интерфейсе кото- одновременно отображать несколько рого были впервые применены такие типов шрифтов, текст различных раз- что для новых приложений им был неэлементы GUI, как перекрываемые ок- меров, а благодаря использованию обходим новый интерфейс, более друна и квадратные иконки, представляю- принципа WYSIWYG (What You See желюбный и, самое главное, стандарIs What You Get – что ты видишь, то и тизированный. Для достижения этого щие собой данные и программы. Результатом работы слаженной ко- получишь) напечатанная на принтере необходимо было создать абсолютно манды сотрудников PARC стало появ- страница ничем не отличаление в 1973 году Alto. Более подробно лась от своего воплощения о нём, а также о его наследнике STAR на экране. вы можете прочитать в №12 журнала Ещё одной программой, за 2006 год. наглядно демонстрировавГлавной особенностью компьютера шей возможности интербыл его 12,8-дюймовый экран, имев- фейса AltoOS, был графиший портретную ориентацию и раз- ческий редактор Draw. Именмер стандартного листа формата А4, но эта программа первой а также способный выводить растро- реализовала принцип мновую графику с разрешением 606х808 гооконного интерфейса – пикселей. Стоит вспомнить, что подав- разделения рабочего проляющее большинство терминалов того странства на несколько отвремени могло отображать лишь текс- дельных областей, отвечаютовые символы, а построенная на ба- щих за определённые функзе векторных электронно-лучевых тру- ции. И опять же данный вабок NLS – текст и прямые линии. Ком- риант организации GUI отлипьютер имел клавиатуру и трёхкно- чался как от операционной почную мышь, которую Xerox лицен- системы, так и от Bravo. зировала у Стэнфордского универсиРабочая область Draw тета по предложению бывших подо- состояла из нескольких окон, печных Энгельбарта. Кстати, именно каждое из которых содержав недрах PARC один из коллег Дугла- ло команды либо действия са, Бил Инглиш (Bill English) в 1972 го- определённой группы. В ценду изобрёл ставшую «классической» тре располагалось основное шариковую мышь. окно, являвшееся «холстом». Рисунок 5. Файловый менеджер AltoOS
№11, ноябрь 2007
89
ретроспектива
Рисунок 6. Графический интерфейс STAROS
новую среду разработки приложений, которой и стал Smalltalk.
Smalltalk: шаг навстречу пользователю А л а н Ке й н ач а л р а з р аб ат ы в ат ь Smalltalk в 1969 году в Университете штата Юта. Изначально он должен был стать основой пользовательского интерфейса для ещё одного проекта Кея – так и не увидевшего свет портативного компьютера Dynabook. Позднее, уже в стенах PARC, инженер продолжил свои разработки, однако отныне ориентируясь на Alto. Smalltalk задумывался и как язык программирования и как среда разработки, основным достоинством которой должна была стать простота в использовании. Smalltalk стал первым объектно-ориентированным языком программирования. Он также обладал некоторыми новомодными возможностями, например, автоматическое управление памятью, позволявшими значительно облегчить труд программистам. Среда разработки Smalltalk одновременно являлась пользовательским интерфейсом, в котором работали программы, написанные на этом языке. Smalltalk представлял собой среду визуальной разработки приложений, подобную Visual Studio и Delphi. В то же время эта среда являлась самостоятельным окружением, заменявшим
90
в 1974 году и сразу же была «взята на вооружение» программистами PARC. Публичный выход языка в свет состоялся в 1980 году. Именно тогда стала общедоступной его переработанная и усовершенствованная версия под названием Smalltalk-80. В 1974 году Ларри Теслером (Larry Tesler) был разработан текстовый редактор Gypsy, наглядно продемонстрировавшей возможности Smalltalk. Gypsy стал первым представителем прикладного ПО, использовавшего для более лёгкого в освоении и дружелюбного интерфейса выпадающие меню и иконки. Этот текстовый редактор обладал рядом передовых на тот момент особенностей, например, возможностью рисования и обработки графических изображений непосредственно в окне Gypsy, что позволяет назвать его первой программой для вёрстки и дизайна. Позднее Теслер перешёл в Apple для работы над проектом LISA, а ещё один разработчик Gypsy, Тим Мотт (Tim Mott), а также несколько других инженеров покинули стены PARC, дабы в недрах Microsoft разработать текстовый редактор Word for DOS. Однако на полную мощность возможности Smalltalk были задействованы лишь при написании ПО для нового компьютера Xerox – STAR, вышедшего в апреле 1981 года.
интерфейс AltoOS. Будучи запущенной из файлового менеджера операционной системы, среда Smalltalk полностью преображала внешний вид интерфейса Alto. Каждое окно в Smalltalk имело границы собственной рабочей зоны, отделявшие его от других окон, а также от фона серого цвета. Окно имело размещённую сверху строку заголовка, по которой можно было идентифицировать его, а также перемещать по экрану. Строка заголовка не занимала всю длину окна, а расширялась с крайнего Офисный стол левого угла вправо лишь на необходи- и компьютер мую для отображения названия длину На разработку пользовательского ин(подобная особенность в будущем бы- терфейса для операционной систела использована в операционной сис- мы STAR (названной STAROS) у сотеме BeOS). Одни окна могли перекры- трудников PARC, по заверениям Xerox, вать другие, а выбранное окно автома- ушло около 30 человеко-лет. В слутически перемещало себя на верхуш- чае со STAR было решено отказатьку списка открытых. ся от портретной ориентации дисплея В среде разработки Smalltalk нашли и вместо него воспользоваться альприменение и иконки, представлявшие бомной. Вместе с этим размеры самособой программы или документы, ко- го экрана были увеличены до 17 дюйторые можно было открыть либо про- мов по диагонали, а разрешение – извести над ними какие-либо дейст- до 1024 х 808 точек. вия. При проектировании Smalltalk быВо время проектирования пользоли изобретены и внедрены в её среду вательского интерфейса STAROS в неразработки выпадающие меню, поло- драх исследовательского центра была сы прокрутки, радиокнопки, диалого- придумана аббревиатура WIMP, расвые окна – все те элементы, которые шифровывавшаяся как «Окна, иконсегодня можно увидеть практически ки, меню, укажи и щёлкни» (Windows, в любой современной программе. Icons, Menus, Point-n-Click). По мнению Первая стабильно функциони- разработчиков, эти элементы должны рующая версия Smalltalk появилась были стать базовыми при создании лю-
ретроспектива бого GUI, в том числе и при проектиро- и Брось» (Drag & Drop) пользователь ским интерфейсом. В ней были вопломог простыми манипуляциями с мы- щены все элементы GUI, которые можвании интерфейса STAROS. Вот как описывал концепцию GUI шью переместить объект с «Рабочего но встретить в любой из современных операционной системы один из его стола» в какую-нибудь папку, записать операционных систем. разработчиков Дэвид Смит (David на дискету, распечатать его или же пеSmith): «Первое, что видит пользова- реслать по электронной почте. Ложка дёгтя в бочке мёда STAROS имела определённый на- К сожалению, недальновидность рукотель – это Рабочий стол (Desktop), напоминающий поверхность офисного бор основных команд, которые ис- водящего состава Xerox, высокая цестола вместе с окружающей его обста- пользовались в операционной сис- на, а также ряд других обстоятельств новкой и различными приспособлени- теме: Переместить, Копировать, Уда- не позволили STAR стать коммерчески ями. Он представляет собой рабочую лить, Показать свойства, Скопиро- успешной. В результате компании удасреду, в которой находятся все проек- вать свойства, Повторить, Справка лось продать всего пару десятков тыты и доступные пользователю ресур- и т. д. Эти же команды были реализо- сяч этих компьютеров. К тому времесы. На экране монитора отображают- ваны во всех прикладных программах ни, когда руководство Xerox осознало ся изображения знакомых офисных для ОС, в результате чего, например, свои ошибки, приведшие к поражению, объектов, таких как документы, пап- пользователь при первом знакомстве было уже поздно: большинство ведуки, ящики для хранения файлов, кор- с текстовым редактором знал, что ко- щих учёных ушло из компании, попутзина и т. д. Эти изображения называ- манда Копировать будет работать тем но прихватив с собой идеи и наработются иконками». Уже из этого коротко- же образом, что и в самой операцион- ки, так и не реализованные на прежнем го описания видно, что в общих чертах ной системе. месте работы. Служба Справки в STAROS была GUI современных операционных сисРазработки Xerox в области графитем являются вариацией ставшего ос- контекстно-зависимой, в результате ческого пользовательского интерфейчего выводила справочную информа- са так и остались бы одинокой «вспышновой интерфейса STAROS. Поскольку ресурсы компьютера по цию лишь по необходимому в данный кой света», если бы не вмешался слуобработке графики в то время были момент объекту. При нажатии клавиши чай: экскурсия представителей комвесьма ограниченными, максимальное HELP на клавиатуре пользователь вы- пании Apple по центру PARC. Что она количество иконок, а также их место- зывал основное меню Справки, в кото- принесла миру? Об этом речь пойдёт положение были строго ограниченны- ром мог передвигаться по справочной в следующий раз. ми. Рабочий стол STAROS был услов- информации при помощи гиперссылок но разделён на 1-дюймовые квадраты: либо же, набрав в строке поиска клю- 1. http://www.wikipedia.org. 14 – по горизонтали и 11 – по вертика- чевое слово, непосредственно перейти 2. http://www.arstechnica.com. ли. Каждый из этих квадратов мог со- на интересующий его подраздел. 3. http://www.sitepoint.com. В качестве подведения итогов мож- 4. http://toastytech.com. держать одну иконку, что в результате но отметить, что STAROS является пер- 5. http://www.mprove.de. давало максимум 154 штуки. Ограниченность ресурсов STAR вой операционной системой с полно- 6. http://www.guidebookgallery.org. сказывалась и на максимальном ко- ценным графическим пользователь- 7. http://www.bootstrap.org. личестве одновременно открытых окон, равнявшемуся шести. Вместе с тем пользователь мог расположить их на «Рабочем столе» по собственному усмотрению. Встроенный файловый менеджер вместо двух колонок со списками файлов отныне мог отображать данные различными способами. В зависимости от предпочтений пользователя это мог быть как простой список в виде иконок стандартного размера, уменьшенного размера, однако вместе с их названиями, так и сложная древовидная иерархия каталога со своими подкаталогами. Как и в современных операционных системах, пользователь мог произвести сортировку файлов по различным признакам: имени, автору документа, дате создания, размеру и т. д. Благодаря применению в STAROS ещё одной концепции «Перетащи Рисунок 7. Файловый менеджер STAROS
№11, ноябрь 2007
91
книжная полка
Техническая поддержка и устранение неполадок в Microsoft Windows XP Уолтер Гленн, Тони Нортроп что зачастую проблемы при эксплуа- торинг производительности операцитации ПО от Microsoft вызваны именно онной системы. Примерно одну пятую пробелами в знаниях обслуживающе- часть объема книги занимают практиго персонала, а не недостатками про- ческие работы и вопросы для контроля граммного обеспечения. усвоения материала. На прилагаемом Справиться с техническими про- к книге CD вы найдете несколько спраблемами, возникающими при исполь- вочных книг от Microsoft Press в электзовании Microsoft Windows XP, а также ронном виде и оригинал книги на ангподготовиться к сертификационному лийском языке, который будет весьма экзамену, входящему в трек MCDST полезен, учитывая, что экзамен 70‑271 (сертифицированный специалист проводится именно на английском. по технической поддержке), и призва- Также на диске записан симулятор экна помочь книга. замена, содержащий несколько сотен Рассмотрены такие темы как: уста- демонстрационных вопросов сертифиКомпания Microsoft традиционно много новка операционной системы и добав- кационного экзамена 70-271. внимания уделяет обучению IT-специ- ление нового оборудования для рабоn Издательство: алистов работе со своими продуктами. ты с уже установленной операционной «Русская Редакция» Как часть обучения выступают офици- системой, поддержка локальных поль- n Год издания: 2007 альные пособия, предназначенные для зователей и групп, поддержка окруже- n Количество страниц: 926 n ISBN: самостоятельной подготовки. Пособия ния рабочего стола, доступ к файлам 978-5-7502-0303-1 регулярно выпускаются Microsoft Press и папкам, работа с дисковыми нако- n Цена: ≈ 610 руб. и переводятся на русский язык отечес- пителями, управление печатью, сеть Книга предоставлена интернет-магазином твенными издательствами. Не секрет, и поддержка Internet Explorer, мони- Books.Ru.
Администрирование сетей Windows с помощью сценариев Иван Коробко
Число русскоязычных книг, посвященных написанию скриптов, в Windows приближается к десятку. Это и неудивительно, учитывая популярность платформы, множественность подходов к решению одних и тех же задач и востребованность информации по данному направлению. Книга представляет собой сборник статей и об-
92
зоров способов решения некоторых задач, с которыми может на практике столкнуться системный администратор парка машин, работающих под управлением операционных систем от компании Microsoft. В книге затрагиваются такие языки написания скриптов, как Visual Basic Script Edition, Windows Script Host, KIXTart, средства управления Microsoft Windows Managment Instrument. Рассматриваются вопросы управления реестром, автоматизации установки некоторых пакетов прикладного ПО (WinRar, Acrobat Reader 6, Norton Antivirus, WinCMD...) и самой операционной системы, управления файловой системой, работы с каталогом Active Directory через Active Directory Services Interface (ADSI), инвентаризации и множество других практических задач. По ходу описания решения тех или иных задач автор дает ссылки
на различное программное обеспечение и утилиты как от Microsoft, так и от третьих фирм. Хотя во введении автор пишет о том, что данная книга создавалась как содержащая всю необходимую теорию и не требующая обращения к другим источникам информации, эта задача заведомо неосуществима в книге объемом 360 страниц. Перед нами все же сборник советов на разные темы, зачастую не связанные друг с другом (и написанием скриптов) темы, например, какие бывают системы счисления и как переводить числа из одной в другую, или как установить принтер в Windows.
n Издательство: «БХВ-Петербург» n Год издания: 2007 n Количество страниц: 368 n ISBN: 978-5-9775-0140-8 n Цена: ≈ 307 руб. Книга предоставлена автором.
книжная полка
Программирование на Perl 3-е издание Ларри Уолл, Том Кристиансен, Джон Орвант
Библия всех Perl-программистов, книга с верблюдом на обложке (так называемая «Camel Book»), наконец, спустя семь лет, вышла на русском языке. Это перевод последнего, третьего издания, выпущенного в двухтысячном году. В книге, среди авторов которой числится и сам создатель языка программирования Perl Ларри Уолл, рас-
сматривается версия Perl 5.6. Данная книга одновременно и учебник, и справочник, и рассказ об истории и культуре Perl. Помимо прочего данное издание само является частью культуры Perl, и обязательно к прочтению любым программистом, более или менее серьезно работающим с этим языком программирования. Книга написана с юмором и читается очень легко. Авторы рассказывают не только, как делается та или иная вещь в языке Perl, но и почему так, а не иначе, пытаясь приобщить читателя к самой культуре программирования на Perl. Структурно эта весьма объемная книга состоит из пяти частей. В первой, под названием «Общий обзор», излагаются базовые идеи языка и дается неформальное введение в Perl. Во второй части «Анатомия Perl»
вас ждет рассказ о внутреннем устройстве языка. Третья часть «Perl как технология» посвящена таким темам, как потоки, межпроцессное взаимодействие, компиляция, интерфейс командной строки, отладчик Perl. Четвертая часть «Perl как культура» содержит множество советов по совершенствованию программ на языке Perl. Наконец, заключительная часть объемом более четырехсот страниц полностью характеризуется своим названием «Справочник».
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Символ-Плюс» 2007 1156 5-93286-020-0 ≈ 590 руб. Книга предоставлена интернет-магазином Books.Ru.
Winternals. Руководство по администрированию, восстановлению, дефрагментации Под редакцией Дейва Клеймана
Название инструментальных средств Winternals и Sysinternals, наверное, известно всем, кто более или менее плотно работает в качестве администратора с операционными системами от компании из Редмонда. Именно этим утилитам, безусловно лучшим из подобного рода утилит, и посвящена последняя в нашем обзоре книга. К со-
№11, ноябрь 2007
жалению, после покупки Microsoft компании Winternals коммерческие разработки, описанные в данном издании, больше не доступны для заказчиков. Однако компания Microsoft пообещала использовать приобретенные технологии в своих новых продуктах. Что же касается описанных в книге бесплатных утилит Sysinternals, они все еще доступны для бесплатного использования и даже регулярно обновляются, но уже на сайте Microsoft. Книга разбита на главы в соответствии с типом задач, решаемых утилитами Winternals и Sysinternals. Среди таких задач: наблюдение за работой компьютера, аудит защиты, управление диском, восстановление потерянных данных, поиск и устранение неисправ-
ностей системы и сетевой подсистемы, инструменты для программиста, работа с исходным кодом утилит и утилиты, разработанные для NT 4.0. Каждая глава завершается ответами на часто задаваемые вопросы (FAQ) по теме главы. Данную книгу можно рекомендовать системным администраторам, желающим повысить эффективность своей работы при работе с операционными системами Microsoft.
n Издательство: «Бином» n Год издания: 2007 n Количество страниц: 516 n ISBN: 978-5-9518-0201-9 n Цена: ≈ 375 руб. Книга предоставлена интернет-магазином Books.Ru.
Обзор книжных новинок подготовил Андрей Маркелов
93
подписка на 2007 год
Редакционная подписка для физических лиц n Вы можете оформить подписку
n Вы можете оформить подписку
n Журнал высылается почтой прос-
на любой российский адрес. n При заполнении квитанции обя‑ зательно РАЗБОРЧИВО укажи‑ те фамилию, имя, отчество пол‑ ностью, почтовый индекс и ад‑ рес получателя (область, город, улица, номер дома, номер квар‑ тиры), контактный телефон.
с любого месяца на любой срок. n В графе «Сумма» проставьте сумму за выбранное количество номеров. Стоимость одного номера журнала 150 руб. За 4 месяца (с сентября по декабрь) – 600 руб. НДС и почтовые расходы включены в стоимость.
той бандеролью только после поступления денег на расчетный счет и копии заполненного и оплачен‑ ного бланка, отправленной в ре‑ дакцию по факсу: (495) 628‑82‑53 или на элек тронный а д рес: info@samag.ru.
94
подписка на 2008 год Российская Федерация
n Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать»
n Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» n Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru n Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru
СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры «АРЗИ»: n Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению
печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
n Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»
n Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
n Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) n Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) n Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) n Молдавия – по каталогу через ГП «Пошта Молдовей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) n Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220
Подписные индексы:
20780* 81655** по каталогу агентства «Роспечать»
87836 по каталогу агентства «Пресса России» * **
№11, ноябрь 2007
годовой полугодовой
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №11(60), Ноябрь, 2007 год УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Главный редактор электронного приложения «Open Source» Дмитрий Шурупов Внештатные редакторы Алексей Барабанов Валентин Синицын Сергей Яремчук Крис Касперски Андрей Бешков Олег Щербаков РЕКЛАМНАЯ СЛУЖБА тел./факс: (495) 628-8253 Евгения Тарабрина reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Дмитрий Репин Николай Петрочук По вопросам распространения обращайтесь по телефону: (495) 628-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (495) 628-8253 Сайт журнала: www.samag.ru ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 15000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламных материалов ответственность несет рекламодатель. Все права на опубликованные материалы защищены.
96
Читайте в следующем номере: GNU autotools: ошибки свои и чужие GNU autotools, комплект скриптов, предназначенный для облегчения процесса построения сложных программных проектов, является чрезвычайно удобной, мощной, но весьма слабо документированой системой. Если при сборке чужого проекта неожиданно возникает ошибка, то чувство растерянности «И что тут делать дальше?» вполне уместно. Прочитав в следующем выпуске статью, вы узнаете о том, как программы autotools связаны между собой и как можно исправить чужие ошибки, не наделав своих.
такое. В итоге получился слайд с заголовком «DTrace – рентген для операционной системы». Ведь рентген позволяет увидеть, что происходит внутри живого организма, а Dtrace позволяет увидеть процессы, происходящие внутри операционной системы и пользовательских приложений на работающем компьютере. Что важно знать для эффективного использования DTrace, читайте в следующем номере журнала.
MS Exchange 2003 + SpamAssassin
Перепробовав множество коммерческих продуктов, таких как SerfControl E‑mail Filter, SpamFighter Exchange Пространства имен в PHP Module (SEM) и другие, я пришел Понятие пространства имен в языке к выводу, что соотношение цена/каPHP появилось относительно недав- чество у них ужасает. За что платить? но. Новый инструмент предназначен Но как всегда есть альтернативы в видля локализации имен идентификато- де Open Source-продуктов. ров и предотвращения их конфликтов. В декабрьском выпуске будут подроб- Основные процедуры но рассмотрены способы применения для работы с деревьями пространства имен и особенности ра- В декабрьском выпуске читайте матеботы с ними. риал о реализации основных процедур для работы с деревьями, включая реДао Dtrace ализацию алгоритма эвристического Недавно я делал презентацию об отк- поиска, о преимуществах алгоритма рытых технологиях Sun Microsystems, обхода «в ширину» при работе с больгде нужно было рассказать в том чис- шими деревьями. Отличительной осоле и про Dtrace. Презентация занима- бенностью алгоритма является то, что ла минут 40 и получалось, что на слайд, он не использует инструментов, создапосвященный Dtrace, выходило 2-3 ми- ющих неопределенность с точки зренуты, за которые нужно было дать ауди- ния требований к памяти, таких как ретории представление, о том, что же это курсия, очереди и т. п.
Уважаемые читатели! Продолжается подписка на 2008 год! Приобрести новые и старые номера журнала вы можете через интернет-магазин LinuxCenter.ru.
Доставка почтой в любую точку России.