№1(50) январь 2007
№1(50) январь 2007 подписной индекс 20780 www.samag.ru
Как быстро и эффективно провести учет компьютерной техники Разбираемся в корпоративных программах лицензирования Microsoft FreeBSD в домене Windows: еще больше возможностей Какова в действии система резервирования AMANDA ISA 2004: настраиваем удаленный доступ к сети Пользовательские бюджеты в LDAP Противодействуем руткитам режима ядра Чего ждать от удаленной работы?
Так видит журнал читатель, который забыл оформить подписку:
БЫ
СТ РО ТИ РАС РА КУ Ж ПИ
КА НИ НО КУ ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ
ЛИ
СЬ
№5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM
ЗА Н КО ЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И
ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ
УЕ
ХА Л
ВО
ТП УС
К
Интервью с Ларри Уоллом – создателем языка Perl
Так видит журнал читатель, оформивший подписку: №5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60
в номере РЕПОРТАЖ 4 «Платформа 2007» – будущее, которое нам обещает Microsoft
Итоги восьмой ежегодной конференции. Алексей Барабанов alekseybb@mail.ru
7 ТЕНДЕНЦИИ АДМИНИСТРИРОВАНИЕ 8 Как купить ПО от Microsoft? Часть 2. Разбираемся в корпоративных программах лицензирования
Не надо думать, кто корпоративные лицензии на софт – это удел суперкорпораций. Воспользоваться системой лицензирования вполне может и ваша компания, если в ней есть хотя бы три компьютера. Дмитрий Бутянов for.mail.only@gmail.com
14 Reporting Services: составляем отчеты
Ваш начальник требует отчета о трафике и итоги инвентаризации сети? Бухгалтерия умоляет помочь с отчетом в Excel? А вы можете предоставить тольком аловразумительный текстовый файл? Узнайте о современных технологиях разработки отчетов. Павел Купцов brosku@mail.ru
20 Как быстро и эффективно провести учет компьютерной техники
Используем программный комплекс CheckCfg + Sklad. Алексей Бережной beralex2@mail.ru
26 Настраиваем удаленный доступ к сети с помощью MS ISA 2004
Возможность доступа к необходимым бизнес-ресурсам из любой точки мира – одно из условий успешной работы компании. Но это не должно быть в ущерб безопасности. Рассмотрим реализацию технологий удаленного доступа с помощью Microsoft ISA 2004. Андрей Бирюков mex_inet@rambler.ru
32 Подробное руководство по настройке тонких клиентов на основе дистрибутива Thinstation и протокола NX. Часть 2
Особенности эксплуатации, дополнительные настройки NX и Thinstation. Евгений Бушков protectorat@mail.ru
36 Размещаем пользовательские бюджеты в LDAP. Часть 1
Тема имеет столько способов реализации, сколько авторов. Но типичные ошибки повторяются от раза к разу. Попробуем построить среду для хранения пользовательских бюджетов в LDAP оптимальным образом. Алексей Барабанов alekseybb@mail.ru
44 Какова в действии система резервирования AMANDA
AMANDA считается одной из лучших среди бесплатных систем резервного копирования. Но от ее использования удерживает мнимая сложность в настройках и то, что она работает только с ленточными накопителями. Докажем всю необоснованность таких заблуждений. Сергей Яремчук grinder@ua.fm
№1, январь 2007
52 Устанавливаем и обновляем программное обеспечение в системе FreeBSD
Полезные советы для начинающих. Гаспар Чилингаров nm@web.am
56 Unionfs в FreeBSD: разбираемся в текущей реализации
Термин «файловая система» охватывает гораздо больше, чем способ организации данных на физическом носителе. «Многослойность» подсистемы работы с файлами не только повышает гибкость, но и предоставляет множество интересных возможностей. Один из примеров такого «промежуточного уровня» – unionfs. Сергей Супрунов amsand@rambler.ru
62 FreeBSD в домене Windows: дополнительные возможности
Правильное подключение FreeBSD в домен Windows позволит работать с Active Directory для проверки паролей, членства в группах и т. д. Но это только некоторая часть того, для чего FreeBSD может использовать данную информацию. Рашид Ачилов achilov-rn@askd.ru
ЧЕЛОВЕК НОМЕРА 70 Снаряд – броня
В этом соперничестве Алексей Раевский на стороне брони. Пользователям повезло. Оксана Родионова rodion@dol.ru
БЕЗОПАСНОСТЬ 74 Руткиты режима ядра: алгоритмы работы и защита
Случалось ли вам замечать, что в системе «живет» посторонний процесс, но ни диспетчер задач, ни другие программы не могут его показать? Может быть, процесс скрывается и от них? Каковы методики скрытия в режиме ядра? Артем Баранов artembaranov@yandex.ru
IMHO 80 Чего ждать от удаленной работы?
Описывая сложную систему взаимоотношений соискателей и работодателей, мы показываем лишь один из многих путей выживания в этом мире. Крис Касперски kk@sendmail.ru
РЕТРОСПЕКТИВА 90 Прошлое операционных систем семейства BSD
ОС семейства BSD признаны компьютерным сообществом и получили статус идеального программного обеспечения для серверов. А знакомы ли вы с историей легендарной системы? Илья Александров ilya_al@rambler.ru
19, 51, 61, 89 BUGTRAQ Подарочный DVD-диск с библиотекой всех номеров журнала с 2002 по 2006 год вложен в январский выпуск всем читателям, которые оформили подписку на весь 2007 год. Как стать обладателем диска, если вы не оформили годовую подписку, читайте на сайте журнала www.samag.ru
1
50
выпусков – наш общий юбилей! Сисадмины, спасибо, что Вы с нами!
x поздравить «СисРад от имени ALT Linu р» с выпуском юбиато стр темный Админи л с самого начала, лейного номера. Журна лся за трудную взя , ием ван наз им уже сво фессиона льпро ю оку задачу держать выс ении пятидесяти тяж про на и нку пла ную вень выдержать. номеров сумел этот уро ый автояркий и профессиона льн ала Редакция сформиров каж дого для о лиц е сво т дае й соз рский коллек тив, которы дом номере нь приятно, что в каж нового номера. Мне оче ным про бод сво по алы ери мат ют достойное место занима ользоисп ом льн она сси о профе граммам. Это материалы «религиозные войтые пус не а , мм гра вании свободных про и много ноталантливых авторов ны». Желаю вам новых . лей ательных читате вых вдумчивых и требов
На ш и от но ш ен ия с жу рн ал ом «С ис те мн ый ад ми ни ст ра то р» можно охарак теризовать ка к партнерство с пе рвого взгляда. До статочно прол истать один но мер журнала, чтоб ы понять, что это на иб ол ее по ле зн ое из да ни е для IT- специа листов на русс ком языке, содерж ащее максим альное количе кой информа ство прак тиче ции. При этом си ак туальнос и формат ее из ть информаци ложения выш и, е вс яких похвал. ца нашей комп Я хочу от лиании и от себя лично поздра редакции с до вить коллек ти стижением оч в ередной верш всегда остава ины и пожела ться на гребне ть волны интере редливых чита са таких прив телей, как сист еемные админи чи вам, высоки страторы. Удах тира жей, ло ял ьн вых рекламод ых читателей ателей ! и сговорчи-
Алексей Смирнов, ектор ALT Linux дир ый льн ера Ген
нии а компа От лиц нала ур ж и u r.R Linuxcente но at я се рд еч LinuxForm их д руш на яю позд равл А дис темного зей из «С спу вы с ора» минис трат 5 0 -г о , го о н й е ко м ю б и л приам очень номера номера ! Н ваш к реснее от юдать, ка снее и инте том же ре в те ь ятно набл ин ат е вс м продолж ановится ае ст ел л ж на и ко ш ур чи в! ж ей ду ше подпис и мы от вс ше и боль ль к номеру бо е вс бетать олов, ду хе и прио Павел Фр
ор ый директ Генера льнinuxcenter.RU L компании
От лица комп ании «Фаматек » хочу поздравить реда кцию журнал а «Системный админист ратор» с выхо дом в свет юбилейного, пя тидесятого по счет у но мера. За врем я своего сущес твования журнал успел завоевать попу лярность у профессион алов в сфере IT, которые всегда внимат ельно следят за совреме нными те нд енциями в ми ре вы со ких технологий . Индустрия IT растет и разв ходит масса ин ивается, прои тересных собы стий, и «Систе тратор» никогд мный админи а не остается св стороне от ос вационных ре вещения инно шений, предст авленных на рубежных ры российских и нках. заОт всей души желаю редакц администрато ии журнала «С р» еще больш истемный е содержател ных материал ьных и интере ов, та лантливы сх авторов, а ших професси также да льне ональных и тв йорческих успе хов».
Дмитрий Кура шев, Генера ль компании «Ф ный директор аматек Россия »
Алексей Генера льный Раевский, дире компании Se ктор curIT
От лица компании Softline я рада возможности поздравить коллек тив журнала «Системный администратор» с выходом в свет юбилейного пятидесятого номера ! 50 – тот рубеж, который поз вол яет под вес ти промежуточные итоги и сде лать выводы об успешнос ти проекта. «Си стемный Администратор» – отличный при мер востребованного профессионального издания, пол учившего высокое при знание сре ди читателей. Желаем вам процветания, дальне йших творческих успехов, новых профессиона льных иде й и динамичного развития!
Наталья Вьюникова заместитель директора, по PR компании Softlin e
Поздравляем журнал «Системный администратор»! Новых достижений, тиражей, щедрых рекламодателей, активных подписчиков. За недолгое время сотрудничества мы успели оценить потенциал журнала. Смело могу утверждать, что «Системный администратор» – команда профессионалов, которую ждет успех!
Сергей Рыжиков, Директор компании «Битрикс»
ным равить с юбилей Мне хочется позд ей. ел тат чи рнал и его 50 -м выпуском жу ативная, ер оп , лы иа тер Объективные ма ация полезная информ качественная и у доверие ал рн жу ать ев во позволили за ко елей. Желаю всей у– и уважение читат а самому журнал , ов ех усп х творчески манде журнала ветания. да льнейшего проц
Сергей Вахонин,. Line Inc IT-директор Smart
доска почета
ПОЗДРАВЛЯЕМ ПОБЕДИТЕЛЕЙ! Подведены итоги авторского конкурса 2006 Номинации
1. За лучшую серию материалов 2. За лучшую новую авторскую тему 3. За лучшую аналитическую статью
Кто участвовал Участие приняли все авторы, опубликовавшие свои статьи в журнале «Системный администратор» в течение 2006 года.
О номинациях 1. Серией материалов считается блок из не менее чем двух статей. Тема серии – по собственному выбору автора или же по выбору редакции.
Победители в номинации «За лучшую серию материалов»: 1 место (30 000 руб.) за серию статей «Как работает Sendmail? Полезные подробности» получает Сергей Супрунов, инженер-программист Константиновской группы развития и эксплуатации программно-технических средств Усть-Донецкого ЛТЦ Морозовского УЭС Ростовского филиала ОАО «Южная Телекоммуникационная Компания». 2 место (20 000 руб.) за серию статей «Современный Linux-сервер» получает Алексей Барабанов, специалист по обслуживанию и эксплуатации информационных ресурсов, предприниматель, редактор нашего журнала. 2 место (20 000 руб.) за серию статей «Вы всё ещё не используете WMI?», «Узнай секреты WMI» получает Константин Леонтьев, консультант в области инфраструктурных проектов российского представительства компании Microsoft. 3 место (10 000 руб.) за серию статей «Суровая правда, скрытая за «розовыми очками»: история компании Transmeta» получает Дмитрий Мороз, студент последнего курса Житомирского Государственного Технологического Университета, журналист в изданиях «MacUP/RE», «Телефон», «Inflight Review», «3DNews».
№1, январь 2007
2. Статья, написанная на тему, придуманную автором и одобренную редакцией. 3. Аналитическая статья может быть написана на тему, предложенную автором или же на тему, заказанную редакцией.
Кто судьи В состав жюри вошли сотрудники редакции.
Денежные призы
1 место – 30 000 рублей 2 место – 20 000 рублей 3 место – 10 000 рублей
Победители в номинации «За лучшую новую авторскую тему»: 1 место (30 000 руб.) за статью «Подробное руководство по настройке тонких клиентов на основе дистрибутива Thinstation и протокола NX» получает Евгений Бушков, ведущий программист «Корпорации «Аксион». 2 место (20 000 руб.) за статью «Кластеризация + виртуализация: Linux HA + OpenVZ» получает Евгений Прокопьев, инженер-программист Южной Телекоммуникационной Компании.
3 место (10 000 руб.) за статью «Выдержит ли нагрузку ваш веб-сервер? Обзор программ для стресс-тестирования» получает Сергей Яремчук, инженер группы автоматизации одной из правительственных организаций Украины. 3 место (10 000 руб.) за статью «На что способен дистрибутив SystemRescueCd Linux» получает Иван Максимов, cистемный администратор компании «КСАНФ».
Номинация «За лучшую аналитическую статью» была снята с конкурса – среди авторов не нашлось желающих побороться за эту премию.
3
репортаж
«Платформа 2007» – будущее, которое нам обещает Microsoft
Восьмая ежегодная конференция Microsoft успешно прошла в Москве 13-14 декабря 2006 года. На ней было зарегистрировано почти 3 тысячи участников, что в полтора раза больше, чем в прошлом году.
А
удитория – все потребители продукции и участники бизнес-процесса Microsoft. Центральное событие – презентация Windows Vista, Office 2007 и Exchange Server 2007. Нет смысла педантично повторять строки стандартного прессрелиза. Скажу лишь самое важное на мой взгляд. Windows Vista получилась? Это покажет рынок. Но одно несомненно – она состоялась! Теперь уже точно можно определить, что день грядущий нам готовит. Компьютерному рынку предстоят большие перемены. Во-первых, под новую платформу обещано выпустить новую линейку продуктов, это значит, появится много новых программ, а старые выйдут из употребления. Во-вторых, под новую платформу… будут выпущены новые компьютеры!
4
Вы не ослышались. Все десктопы и но- думаться, то точно так же не получитутбуки, в которых менее 1 Гб памяти, ся запустить в автоматическом режии скромные видеоадаптеры с видео- ме unattended-установку программнопамятью менее 64 Мб после выхода го обеспечения от третьего произвоWindows Vista непременно обесценят- дителя в формате не msi. Да и вообще, новая система полся. Этим объясняется осеннее удешевление и распродажа бюджетных моде- ностью ориентирована на развертывалей от всех ведущих производителей, ние из образов, то есть очень не друтаких как HP, например. жественна к разработкам производиВ третьих, новая платформа заста- телей, не входящим в сферу притяжевит и системных администраторов ра- ния Microsoft. Для драйверов это быботать по-новому. Теперь даже при- ло заявлено прямо, а для прикладвилегированного пользователя обя- ного ПО косвенным образом тоже усжут работать в режиме с пониженны- тановлен режим вытеснения чужами правами, и лишь на время выпол- ков. Должно быть совершенно ясно, нения административной функции что переход на Vista может оказаться ему будет передаваться нужный уро- просто разорительным даже для невень прав, по подтверждению с кон- маленьких компаний. Осознавая это, соли. Ну и правильно, а то привыкли в Microsoft особенное внимание удеотправлять почту из Outlook с права- ляют вопросам миграции на новую ми суперпользователя. Хотя, если за- платформу. Для планирования пере-
репортаж хода на Windows Vista даже разработан специальный инструментарий – Microsoft Application Compatibility Toolkit. Он по сути является средством инвентаризации (кстати, бесплатным), позволяющим выяснить степень совместимости существующего оборудования и ПО с требованиями новой операционной системы. Наметился также прогресс в развитии Office. Теперь эта прикладная система на платформе Vista может использовать возможности многоядерных процессоров вне зависимости от стандартного планировщика ядра. Но самые неожиданные результаты были продемонстрированы в ходе рассказа о продукте под названием SoftGrid. Эта система позволяет виртуализовать среду выполнения прикладной программы так, что становится возможным портировать ее вместе с необходимыми компонентами на любой хост для исполнения. Нечто вроде prelink, собранного в пакет. Преимущество в том, что такая компонента исполняется без установки в хостовую систему и в случае атаки не повреждает ее, так как существует в изолированной виртуальной среде. Неожиданный эффект состоит в том, что приложение, виртуализованное подобным образом, не может защищаться привязкой к параметрам системы запуска, так как все они виртуальные. То есть, внедрение такого подхода заставит пересмотреть многие традиционные решения в области контроля за соблюдением лицензий на ПО. Хотя неуклонно внедряемая виртуализация так или иначе заставит это сделать. Все это и многие другие специальные вопросы были рассмотрены в докладах конференции. «Платформа 2007» длилась 2 дня. Это и много, так как приходилось работать по настоящему: доклады – это не только шутки ведущих и реплики из зала, и одновременно это очень мало. Иногда даже катастрофически недостаточно. Например, был заменен единственный доклад на тему Virtual Server. К докладчикам в перерывах очень трудно пробиться, так как вопросы не прекращаются и желающие спросить стоят стеной. Кроме лекционной формы, были предложены лабораторные работы (например, настройка брандмауэра в Windows Vista). Увы, я, прибывший туда как представитель
№1, январь 2007
Участники пресс-конференции
прессы, в то время как резервирова- это событие, которое стоит посетить лись места на лабораторных, был за- каждому вне зависимости от отношенят на пресс-конференции и упустил ния к MS Windows и бизнесу Microsoft. возможность записаться. Лаборатор- Во многом это не столько официальное ные работы были расписаны желаю- мероприятие, это почти клуб с систещими на два дня вперед еще до нача- мой скидок членам клуба! Среди посела самого форума! «Платформа» про- тителей можно было встретить все возисходила в СК «Олимпийский». Центр расты – от тинейджеров до тех, «кому спортивной арены был выделен под вы- за сорок». Очень много представительставку, трибуны размечены под залы ниц прекрасного пола, гораздо больше, для докладов. Вечером первого дня чем на аналогичных мероприятиях, надля уставших организовали развле- пример, линуксовой направленности. кательную программу, куда была при- На докладах царила дружественная глашена группа «Несчастный Случай», атмосфера. Все (без преувеличения а для неудовлетворенных – «круглые все) докладчики от Microsoft свободно столы» с участием очень известных ориентировались в предметах, держаперсон в отечественном информаци- ли внимание аудитории и даже успеваонном бизнесе. ли разыгрывать маленькие презенты Теперь попробую выразить свои среди слушателей (от мышек до X-Box). личные впечатления. «Платформа» – Организаторы настойчиво интересовались мнением гостей об уровне всех мероприятий. Не знаю, какое воплощение получит широко разрекламированный слоган «People-Ready» в бизнес-реалиях, но на «Платформе» все свидетельствовало в пользу подобного отношения. Всего лишь за сданные анкеты с отзывами-оценками разных аспектов данного события организаторы пообещали каждому посетителю по комплекту из Windows Vista и Office 2007 в личное пользование сразу после их выхода на рынок. Посмотрите на стоимость участия в конференции, подумайте немного и сделайте выводы, что следующая «Платформа» не должна пройти без вас. Выступление Жана-Филиппа Куртуа (Jean-Philippe Courtois), президента Microsoft International Keynote
Текст Алексея Барабанова. Фотографии предоставлены компанией Microsoft
5
тенденции Firefox продолжает набирать популярность Исследователи из французской фирмы Xiti Monitor обнародовали новую статистику по использованию веб-браузеров в Европе. По этим данным, популярность Firefox среди веб-пользователей выросла с апреля текущего года почти на 4 процента, благодаря чему она теперь составляет 23,2% (тогда его доля среди всех браузеров ограничивалась отметкой в 19,4%). Среди стран, в которых Firefox пользуется наибольшим (в процентном отношении) спросом, – Словения (40,5%), Финляндия (39,3%), Польша (33,6%), Германия (33%), Хорватия (32,8%), Эстония (31,5%) и Венгрия (31,1%).
от независимых поставщиков (ISV) в среде операционных систем на базе Linux и управления такими пакетами. Первой целью LSB Packaging стало создание API для пакетных систем Linux с тем, чтобы ISV смогли «прозрачно» работать с ними, не задумываясь о внутреннем устройстве самих систем (таких, как RPM). Как пишет в своем блоге Ян Мердок (Ian Murdock), основатель проекта Debian GNU/ Linux, главный технолог Free Standards Group и глава всей рабочей группы Linux Standard Base: «Мотив к этому есть у всех: дистрибутивы получат больше приложений, которые сделают платформу более привлекательной; у ISV снизятся затраты, что повысит их экономический интерес к Linuxверсиям ПО и потенциально откроет новые рынки».
Организация FSF начинает кампанию против Vista
Один из авторов Mandrake начал новый проект
Организация свободного программного обеспечения Free Software Foundation (FSF) запустила кампанию, направленную против новой операционной системы от Microsoft – Windows Vista. Ключевая цель новой инициативы сторонников свободного ПО – предупредить всех о вреде, который наносит Windows Vista, и рассказать о существующих альтернативах из мира свободного программного обеспечения, которые (в отличие от нового продукта Microsoft) «уважают права пользователей на безопасность и конфиденциальность». Питер Браун (Peter Brown), исполнительный директор FSF, так прокомментировал начавшуюся кампанию: «Microsoft начинает крупнейший из когда-либо имевших место запуск продукта, а ее маркетинговые средства будут потрачены на то, чтобы всеми силами ввести в заблуждение СМИ и пользовательское сообщество о целях Vista. Наша кампания ответит на важные вопросы. Как вы можете освободить себя и свою компанию? Можете ли вы вообще быть свободными от Microsoft? Как и в нашей кампании, направленной против DRM (Digital Restrictions Management), мы хотим продемонстрировать, что технологи могут быть социальными активистами, потому что мы знаем о вреде, который причинит Vista». В частности, сообщается, что открытый для инициативы блог BadVista.org будет уделять особое внимание опасностям от так называемого Treacherous Computing в Vista (пародия на официальное название «Trusted Computing», «доверенные, надежные вычисления», которую можно перевести как «ненадежные, предательские вычисления»). Суть их заключается в том, что Vista превратит компьютеры, управляемые пользователями, в машины «Большого брата», где за каждым действием пользователя следят, а ему не остается иного выбора.
Гаэль Дюваль (Gael Duval), один из основателей и бывший разработчик популярного Linux-дистрибутива Mandriva (ранее известного как Mandrake), представил первый пробный релиз своего нового продукта – Ulteo Linux (под кодовым названием «Sirius»). Дистрибутив Ulteo Linux базируется на разработках родственных проектов Debian GNU/Linux и Ubuntu Linux. Первая тестовая версия основана на Linuxядре 2.6.15, использует графическую среду KDE 3.5.2 по умолчанию. За обновлениями системы следит демон UGD (Ulteo General Daemon), который, регулярно подключаясь к серверам Ulteo, автоматически проверяет, доступны ли какие-либо обновления.
Составил Дмитрий Шурупов по материалам www.nixp.ru
В FSG/LSB создана рабочая группа по Linux-пакетам В рамках проекта стандартизации дистрибутивов, основанных на Linux-ядре, Linux Standard Base (LSB), была создана рабочая группа, которая займется проблемами работы со сторонними пакетами программного обеспечения в системе. Рабочая группа LSB Packaging появилась как следствие проведенного саммита FSG Packaging Summit, посвященного вопросам установки программного обеспечения
№1, январь 2007
7
администрирование
Как купить ПО от Microsoft? Часть 2. Разбираемся в корпоративных программах лицензирования
Дмитрий Бутянов Не надо думать, кто корпоративные лицензии на софт – это удел суперкорпораций, при упоминании которых люди поджимают губы и понимающе кивают. Воспользоваться системой лицензирования вполне может и ваша компания, если в ней есть хотя бы три компьютера. 8
администрирование
У
программ корпоративного лицен- тем большую скидку зирования есть входной порог, получите. Лицензии, приобно какой! Всего пять лицензий, причем любых, и вы уже там и поль- ретенные по програмзуетесь всеми благами и прелестя- ме корпоративного ми, которые могут на вас посыпаться. лицензирования, преА пять лицензий вы купите, если захо- доставляют больше тите купить легальный софт для трех прав, чем коробочкомпьютеров. ная лицензия (FPP) Одним из основных преимуществ или OEM-лицензия. программ корпоративного лицензи- Лицензия, приобрерования Microsoft является возмож- тенная по програмность выбора. Вы можете выбирать, ме корпоративного как тратить деньги и что на них при- лицензирования, мообретать. жет п е р е н о с и т ь с я Самих программ несколько, они от одного компьютеразличаются по ценам, способам оп- ра к другому (за исРисунок 1. Соотношение клиентских и серверных лицензий латы, а также по правилам использо- ключением операцина штука). Клиентская лицензия – усвания приобретенных программных онных систем). продуктов. Для образовательных учНо прежде чем начать рассказ о са- тановить клиентский компьютер (одреждений существует специальная мих программах, давайте познакомим- на штука). Если осилите статью до конца, программа лицензирования, которая ся с основными принципами лицензиотличается очень низкими ценами рования. Советую устроиться поудоб- то узнаете про вариант установки неи очень широкими правами использо- нее, налить чаю-кофе (а то, о чем вы скольких серверов по одной лицензии. подумали, лучше придержать до кон- Читайте-читайте. вания продуктов. Таким образом, установленное Корпоративное лицензионное со- ца статьи), и приготовиться к поглощепрограммное обеспечение, например глашение позволяет отделить собс- нию нового материала. Лицензия является подтверждени- сервер Windows Server 2003, требует твенно лицензию от второстепенных услуг: носителей (для установки про- ем легальности происхождения про- наличия серверной лицензии, а для граммного обеспечения), документа- граммного продукта при условии соб- клиентских рабочих станций, на коции и упаковки, что позволяет форми- людения правил его использования. торых установлена клиентская оперовать цену строго с учетом ваших пот- В подавляющем большинстве случа- рационная система Windows XP Pro, ребностей и размера заказа. ев лицензия является юридическим также требуется лицензия, но клиЧасть цены программного продук- понятием. Иными словами лицензия – ентская. Отдельно сервер и отдельно та составляют упаковка, документа- это документ. Сам программный про- клиент не составляет сеть. Разумеция и носители (дискеты или компакт- дукт можно использовать практичес- ется, клиентские компьютеры долждиски). Покупая продукты по програм- ки как угодно, в нем не встроено ника- ны иметь доступ к серверному промам корпоративного лицензирования, ких технологических барьеров. Только граммному обеспечению. Чтобы цевы будете платить только за лицензи- в некоторых продуктах лицензия со- ны на серверное программное обесонные права. провождается программным ограни- печение были пропорциональны коВ некоторых программах корпора- чением, например, Terminal Services личеству обращений к нему, на эти обращения также необходимо притивного лицензирования носители для или SBS. Однако если вы будете использо- обретать лицензии, которые называустановки продукта предоставляются бесплатно, в некоторых их надо поку- вать софт с нарушением ограничений, ются клиентскими лицензиями на допать отдельно, но по себестоимости изложенных в Правилах использова- ступ, или CAL (Client Access Licenses). (порядка 20 $). ния продуктов и Лицензии, то станете Чем больше сеть – тем больше обраОдин носитель может быть исполь- пиратом. Почитайте статью «Как ку- щений к серверу – тем дороже полузован в качестве эталона для уста- пить ПО от Microsoft? Особенности чится сервер, т.к. за обращения надо новки на все ПК вашей организации, приобретения и использования OEM- платить (см. рис. 1) . И наоборот, в нечто позволит вам не только сократить версий» в №12 номере за 2006 г., в ней больших сетях, где количество обращений невелико, итоговая стоимость расходы на приобретение, но и устра- описаны последствия. сервера будет ниже. нить сложности, связанные с разверСерверы, которые поставляются тыванием продукта на ряде ПК в ор- Основные типы лицензий ганизации. Поскольку сети, которые мы лицензи- в виде коробочного продукта, вклюУже при покупке 5 лицензий вы по- руем, строятся на основе клиент-сер- чают пять или более клиентских лилучите значительную скидку по срав- верной технологии, модель лицензи- цензий. Серверы, пред лагаемые нению со стоимостью приобретения рования состоит из серверных и кли- по программам корпоративного литех же продуктов в виде коробки, и чем ентских лицензий. Серверная лицен- цензирования, не сопровождаются большее количество лицензий купите, зия дает право установить сервер (од- клиентскими лицензиями; клиент-
№1, январь 2007
9
администрирование ентских машин также подключаются и к самой серверной операционной системе, а это требует приобретения еще 10 лицензий к лиентско го доступа Microsoft Windows Server 2003 CAL. Обратите внимание – тип клиентской лицензии определяется сервером, а не клиентом. В данном примере все клиентские лицензии будут клиентскими лицензиями на доступ к SQL Server независимо от того, какой клиент используется на рабочих станциях, которые обращаютРисунок 2. Пример лицензирования SQL Server ся к серверу. ские лицензии вам нужно будет заЕсли, в нашем примере, доступ казать отдельно. к серверу осуществляется при помощи Клиентская лицензия на доступ – сетевых терминалов (т.н. «тонких клиэто предоставление права осущест- ентов) или даже специальных переносвлять доступ или использовать сер- ных устройств, то тогда для каждого верное программное обеспечение. из этих устройств также должна быть Клиентские лицензии на доступ (CAL) приобретена клиентская лицензия нематериальны, и это часто вызывает на доступ к SQL Server (см. рис. 3). путаницу и трудности. Наличие терминальных служб, Давайте рассмотрим конкретный а также программных или аппаратпример: предположим, у нас имеется ных мультиплексоров не избавляют сеть из десяти клиентских компьюте- от необходимости приобретения лиров Windows XP Professional, а также цензий. Например, если установлен сервер Microsoft SQL Server 2005, ус- терминальный сервер с установлентановленный на базе Windows Server ным Microsoft Office, которым пользу2003 (см. рис. 2). ются 20 человек, то потребуется приСерверные лицензии: одна на обрести 20 лицензий на Office. Даже Windows Server, одна на SQL Server. с учетом того, что на самом деле все Это даст право поставить серверную пользователи работают с одной копичасть. ей продукта. Клиентские лицензии: Windows XP Версия CAL должна быть не ниPro в виде OEM, например. же версии сервера, к которому осуТеперь надо соединить всё это ществляется доступ, т.е. для доступа в сеть, обеспечив клиентские ком- к Windows Server 2003 нужна Windows пьютеры возможностью пользования Server 2003 CAL. Но эта же лицензия серверным программным обеспече- на клиентский доступ может испольнием. Для этого нужно купить лицен- зоваться для подключения к Windows зии на клиентский доступ. Server 2000, так как ее версия в этом В нашем примере десять клиент- случае будет не ниже версии сервера. ских машин подключаются к серве- СAL не включена ни в одну из настольру Microsoft SQL (причем протоколы ных операционных систем. и пр. значения не имеют), т.е. требуНе требует лицензирования аноется 10 лицензий клиентского досту- нимный доступ к ресурсам, например, па Microsoft SQL CAL. Эти же 10 кли- не лицензируется доступ к серверам
10
IIS, если пользователи при этом не авторизуются. Лицензии клиентского доступа делятся на две большие группы – это «Лицензии на устройство» (Device CAL) и «Лицензии на пользователя» (User CAL). Первая – Device CAL – лицензирует доступ устройства; при этом за этим устройством может работать любой пользователь. Если в вашей сети за одним компьютером работают несколько пользователей, например, посменно, то эта лицензия для вас. Вторая – User CAL – лицензирует доступ пользователя с любого возможного устройства. Этот тип наиболее выгоден и удобен в администрировании там, где много мобильных сотрудников, которым необходим доступ к корпоративной сети с произвольных устройств, или сотрудников, использующих несколько устройств для доступа к сети независимо от способа доступа (по локальной сети, VPN или каким-то иным способом). Если говорить в двух словах, то берите те лицензии, которых понадобится меньше: если людей больше, чем компьютеров, то берите лицензии «на устройство», а если компьютеров больше, чем людей, то берите лицензии «на пользователя». Стоят эти лицензии одинаково, так что надо просто выбрать, какая именно вам нужна с точки зрения затрат или удобства контроля их использования.
Лицензии «на процессор» В модели лицензирования c использованием серверных/клиентских лицензий серверная лицензия относится к физическому серверу, независимо от того, насколько мощный этот сервер. Пропорциональность цены лицензии (т.е., лицензия на большую сеть стоит дороже, чем лицензия на малую сеть) достигается необходимостью приобретать клиентские лицензии на доступ для каждого клиента. Такая модель может быть сложна в применении. Для большинства серверных приложений (например, SQL Server) предусмотрена простая альтернатива – приобретение вместо этого лицензии «на процессор». Процессорные лицензии дороже, чем обычные серверные лицензии, но зато при этом не требуются кли-
администрирование ентские лицензии на доступ к серверу. В модели лицензирования «на процессор» на каждый процессор сервера необходимо приобрести лицензию. Для сравнения, обычная серверная лицензия предоставляет право на использование всего сервера целиком, при этом пропорциональность достигается применением модели серверных/клиентских лицензий. Пропорциональность достигается и моделью лицензирования «на процессор», поскольку для сетей с большим количеством клиентов будет использоваться сервер с большим количеством процессоров. При расширении сети может возникнуть необходимость увеличить количество процессоров для обслуживания большего количества клиентов. При этом в модели лицензирования «на процессор» при добавлении процессора вы должны приобрести дополнительную лицензию «на процессор», а не дополнительные клиентские лицензии на доступ к серверу при каждом добавлении клиента. Лицензии «на процессор» доступны для большинства серверов приложений Майкрософт, например для Microsoft SQL Server (важное исключение – для Microsoft Exchange и Microsoft Windows Server лицензий «на процессор» не существует). И еще одно важное замечание: в модели лицензирования «на процессор» платить надо только за те процессоры, на которых выполняется данный продукт. Например, если вы имеете четырехпроцессорный блок, на котором работает SQL Server, использующий только один процессор из четырех, то и лицензию «на процессор» вам нужно купить только одну. Многоядерность не учитывается. Один процессор – одна лицензия. А сколько ядер там внутри – не волнует совершенно. При этом если на одном сервере вы установите несколько копий серверного программного обеспечения, которые используют одни и те же процессоры сервера, нет необходимости приобретать отдельную лицензию для каждой копии серверного продукта. Кроме того, вы можете устанавливать и использовать любое количество копий серверного продукта на любом процессоре, для которого имеет-
№1, январь 2007
Скидки для филиалов и аффилированных лиц Если у вашей компании есть аффилированные лица cо степенью участия 50%, тo по программе Open License этим аффилированным лицам можно предоставить возможность размещать заказы с использованием достигнутого уровня скидки для свершения сколь угодно малых закупок (не менее одной штуки), но только на территории ответственности московско-
ся процессорная лицензия на серверный продукт.
Лицензирование бизнес-партнеров… и просто хороших клиентов
го представительства Microsoft. Если у вашей компании на территории РФ есть филиалы, которые не являются отдельными юридическими лицами, то можно размещать общий заказ на покупку ПО. Все это позволит вам организовать централизованную систему закупки ПО для филиалов компании и некоторой категории аффилированных лиц и добиться при этом более высокого уровня скидки.
веров также имеет свои особенности как по видам лицензий, так и по правилам использования продуктов. В рамках статьи трудно охватить всё, так как существует достаточно много вариантов. Тем не менее общие принципы остаются неизменными.
Еще одна проблема возникает тогда, когда к серверному программному А вот и программы… обеспечению подключаются внешние Как я уже говорил, вариантов приобрепользователи, число которых трудно тения программного обеспечения доили невозможно определить. Эту про- статочно много, и вы можете выбирать блему можно решить путем покуп- подходящий вам вариант. Каждая проки лицензии «на процессор», однако грамма имеет свои особенности, на коне все продукты могут лицензировать- торых можно будет сыграть в стремлеся по такой схеме. Выходом может быть нии сократить итоговую стоимость ПО. покупка лицензии «External Connector». Чтобы вам было четко понятно, как эти Эта лицензия позволяет подключиться программы согласуются между сок серверному ПО любому количеству бой, они представлены в виде схемы внешних пользователей, заменяя для (см. рис. 4). них клиентские лицензии на доступ. На схеме программы корпоративПонятие «внешний пользователь» оп- ного лицензирования рассматриваютределяется совершенно четко. Это ли- ся с двух точек зрения. По вертикали представлены процо, которое не является: сотрудником вашей компании граммы лицензирования в зависимосна полной ставке, сотрудником ти от размера компании – покупатена неполной ставке или времен- ля. Эти компании разбиты на два сегным сотрудником; мента: малые и средние предприятия, лицом из числа временного пер- к которым относятся компании от 5 до сонала, работающего по агент- 500 ПК, и большие компании, более ским соглашениям, или независимым подрядчиком, работающим у вас по заданию; вашим клиентом, которому вы предоставляете услуги по хос тингу с использованием Серверной программы. Еще хочется сказать, что лицензирование отдельных сер-
Рисунок 3. Лицензирование при мультиплексировании
11
администрирование Как переоформить лицензию Open License, если ваша компания меняет свое название или адрес?
Письмо-запрос от заказчика – компа-
Если ваша компании приобрела продукты по Open License, меняет свое название или адрес и желает переоформить лицензию, то необходимо сделать следующее: Направить запрос на переоформление лицензии в связи с изменением названия (адреса) своему реселлеру. Необходимо сообщить Authorization Number и License Number. Microsoft выпишет дополнительный документ с указанием нового наименования (адреса) заказчика. Этот документ будет содержать водяной знак «Недействительно без исходной лицензии». Новый заказ размещать не нужно. Сроки соглашения Open License, набор продуктов и номер лицензии остаются без изменений. Какая-либо дополнительная оплата не производится. Если по каким-либо причинам заказчику неудобно хранить два документа, то для переоформления можно использовать процедуру передачи лицензии.
ми Лицензионного соглашения Open License со стороны организации, которой лицензия передается. Ксерокопию передаваемой лицензии.
Процедура передачи лицензии позволяет передать продукты, купленные по программам корпоративного лицензирования, другому юридическому лицу. Для выполнения процедуры необходимо предоставить письменный запрос в адрес Инфоцентра Microsoft, включающий:
нии, на которую выписана лицензия.
Подтверждение согласия с условия-
Инфоцентр Microsoft проверяет правомерность передачи лицензии. В том случае, если передача возможна, Инфоцентр отправляет заказчику подтверждение. Заказчик возвращает исходную лицензию своему реселлеру вместе с копией письма-запроса и подтверждения Инфоцентра. Microsoft изготавливает новую лицензию. Новая лицензия будет отличаться от старой только названием и реквизитами заказчика. Набор продуктов, номер лицензии, период сопровождения сохранятся без изменений. На передачу лицензии наложены следующие ограничения: Должны быть переданы все лицензионные сертификаты (отдельные лицензии), полученные под одним и тем же авторизационным номером, и все права на размещение дополнительных заказов по этому номеру. Если речь идет о лицензии на операционные системы, то такая лицензия может быть передана только как часть программно-аппаратного комплекса.
250 ПК. Обратите внимание, что эти же программа Open License. Посколькатегории перекрываются. Для каж- ку единовременная оплата всей стоидого из этих сегментов предусмотре- мости программного обеспечения трена своя программа корпоративного бует существенных затрат и отвлечелицензирования, а программа Open ния ресурсов от других сфер бизнеса License подходит как небольшим орга- (что может быть неудобно для вашенизациям, так и крупным предприяти- го предприятия), Microsoft ввел проям. Кроме того, крупные предприятия граммы периодической оплаты лииногда пользуются программой кор- цензии. Фактически это означает возпоративного лицензирования, пред- можность приобрести ПО с трехлетней назначенной для малого и среднего рассрочкой или вообще ничего не побизнеса, например в случаях, когда им купать, а брать софт в аренду на три требуется сравнительно немного ли- года с правом последующего продлецензий. По горизонтали представле- ния аренды или выкупа. Преимущесны программы лицензирования в за- тва очевидны: кардинальное уменьвисимости от типа лицензии и мето- шение административных накладных расходов и распределение платежей да оплаты. Модель лицензирования с едино- во времени. временной оплатой требует приобретения лицензии до установки. На этом Microsoft Open License подходе основаны лицензии для пос- Программа Open License предназнатавщиков вычислительной техники чена для тех, кому необходимо при(OEM), коробочные лицензии, а так- обрести небольшое количество копий
12
(лицензий) одного или нескольких программных продуктов Microsoft. Лицензия является бессрочной, т.е. приобретенными программными продуктами можно будет пользоваться в течение неограниченного срока. При этом в течение двух лет после размещения первого заказа вы сможете пользоваться полученной корпоративной скидкой при размещении следующих сколь угодно мелких заказов (минимальный объем дополнительного заказа 1 штука), но ценовой защиты нет – вы будете дозаказывать продукты с гарантированной скидкой, но по текущему прайс-листу. В рамках программы предлагается широкий спектр продуктов для бизнеса – операционные системы, настольные приложения, серверные продукты, средства разработки. Для операционных систем предлагается только лицензия на обновление Windows XP Pro Upgrade, исходная лицензия может быть приобретена вами в виде коробочной или OEMверсии. Это очень-очень важно запомнить! Настольные операционки в рамках программ корпоративного лицензирования продаются только как обновления существующих уже легальных систем! Так что если вам надо их приобрести/легализовать, то берите или ОЕМ, или пакеты легализации. А если вы купили, например, компьютеры с предустановленной легальной Windows XP Home, то тогда вы сможете прикупить Windows XP Pro Update по программе корпоративного лицензирования. В рамках программы Open License Microsoft предлагает в качестве опции подписку на обновление – Software Assurance. Если при размещении заказа на лицензии на програм мный продукт вы оплачиваете также Software Assurance, то получаете право использовать все новые версии этого продукта, которые будут выпущены в течение двух лет. При этом вы полностью контролируете ваши затраты на обновление ПО на два года вперед: лицензии на новые версии уже оплачены, остается только приобрести дистрибутив ($20) для установки продукта. Например, если в начале года компания приобрела Microsoft Office 2003 в комплекте с Software Assurance, то новый Office 2007 получит бесплатно. Преимущества очевид-
администрирование ны – новый и более дорогой продукт можно получить, заплатив 50% стоимости старого продукта (стоимость Software Assurance всегда считается как процент от стоимости текущего продукта и составляет от 25 до 28 процентов в год). Кроме того, в рамках Software Assurance предлагаются дополнительные преимущества, такие как обучение, доступ к ресурсам TechNet и др. У Software Assurance есть и дополнительные бонусы – например, появляется право установить дополнительный сервер холодного резервирования для целей аварийного восстановления. Количество дополнительных «холодных» серверов должно быть не больше, чем количество купленных лицензий Software Assurance для этих серверных продуктов. Принять раешение по приобретении Software Assurance вам придется сразу. Потом докупить эту опцию к уже приобретенному программному обеспечению нельзя! После покупки вы получите лицензионный сертификат (бумажный), который является подтверждением прав на использование ПО. В лицензионном сертификате содержится авторизационный номер Open License (Master Agreement Number), который действует 2 года. Он определяет: срок действия Software Assurance; срок действия подписки MSDN/ TechNet; период времени, в течение которого клиент может размещать дополнительные заказы любого размера, которые будут обрабатываться с тем же уровнем цен, что и первоначальный заказ. Носители (компакт-диски и DVDдиски) и комплекты документации доступны по отдельности и заказываются через дистрибуторов. Обратите внимание, что одного только исходного компакт-диска никогда не будет достаточно для работы с программным обеспечением: должны быть приобретены также лицензии. Как упоминалось в статье «Как купить ПО от Microsoft? Особенности приобретения и использования OEMверсий» в №12 номере за 2006 г., коробочная лицензия (FPP) и лицензия
№1, январь 2007
Рисунок 4. Общая структура систем лицензирования коммерческих организаций
OEM требуют активации продукта. При покупке программного обеспечения через механизм корпоративных лицензий вам не потребуется активировать свои продукты, т.к. вы приобретете специальные носители, не требующие активации. Для некоторых продуктов, однако, требуется ключ многократной установки. Ключи можно получить на вебузле eOpen или в лицензионном сертификате. Основные продукты, требующие ключа многократной установки: Office Family, Windows XP Pro, Windows Server. Для Windows XP Pro и Windows Server 2003 предлагаются отдельные ключи для установки 32- и 64-битной версий. После совершения покупки на ваш адрес электронной почты придет письмо – приглашение на портал корпоративных клиентов Microsoft, который называется eOpen. Чтобы попасть внутрь, нужно будет завести .NET Passport. На этом портале вы сможете просмотреть ключи продуктов, необходимые для инсталляций, увидеть все возможные бонусы, доступные вам как покупателю Software Assurance, прочесть о новых маркетинговых акциях Microsoft.
Варианты покупки: стоимость и возможности С тоимос ть пок упки программно го обеспечения по программе Open License находится где-то между коро-
бочной и ОЕМ-лицензиями. Посмотрите таблицу: приведен расчет стоимости лицензий для компании из 30 клиентских мест и одного сервера, при условии покупки всего программного обеспечения. Типичное решение может состоять из одного сервера Microsoft SBS, 30 копий Microsoft Office SBE, 30 копий Windows XP Pro, а также лицензий – одной серверной (покупается вместе с сервером) и 30 клиентских SBS User CAL (из которых 5 приобретаются вместе с сервером SBS, а еще 25 покупаются двумя блоками по 20 и 5 штук.). Конечно, покупка ОЕМ-поставки будет выгодней, но эта выгода – сиюминутная. Обратите внимание – если вы купите Software Assurance в дополнение к ОЕМ-версии сервера, это увеличит его начальную стоимость на 50%. При покупке ОЕМ вы не сможете переносить программное обеспечение с одного компьютера на другой, а при участии в программе корпоративного лицензирования – сможете. Использование Open License дает вам выигрыш в долгосрочной перспективе, делая ваш бизнес более прозрачным, а ваш сон более крепким. На Open License свет корпоративных программ не сошелся. Есть еще более интересные предложения как по ценам, так и по возможностям. Но об этом – в следующей статье. Удачи!
13
администрирование
Reporting Services: составляем отчеты
Павел Купцов Ваш начальник требует отчета о трафике? Об итогах инвентаризации сети? Бухгалтерия умоляет помочь с отчетом в Excel? А вы можете предоставить только маловразумительный текстовый файл и рассуждаете о приобретении ERP-системы? Тогда, возможно, вы ещё не знаете о современных технологиях разработки отчетов. 14
администрирование
В
о многих организациях широко применяется MS SQL Server. Сегодня он может использоваться вместе с такими приложениями, как 1C, SharePoint Portal Server, WSUS, всевозможными корпоративными приложениями (Symantec Backup Exec, продукты Surf Control, Citrix, SAP BO), в собственных разработках компании, для сайта компании и т. п., вы можете и дальше продолжит этот список для себя. Об удобствах использования этой базы данных можно говорить долго, пока дело не дойдет до составления удобочитаемых отчетов. Конечно, программист всегда сможет открыть Query Analyzer и выполнить заготовленный запрос, для того чтобы получить интересующую его информацию, но что делать рядовым пользователям, желающим получить доступ к информации из базы данных? На помощь приходит служба Reporting Services. Служба составления отчетов SQL Server 2000, выпущенная в январе 2004 года, вероятно, стала одним из самых широко используемых компонентов. Почти всем организациям приходится создавать отчеты на основе данных, и с помощью Reporting Services компания Microsoft заполнила этот пробел в инструментарии.
Установка Для того чтобы установить службу Reporting Services, необходимо: 1. Windows Server 2003, Windows XP или Windows 2000 с самыми последними пакетами обновлений. 2. Microsoft IIS, так как Reporting Services запускаются как веб-службы XML (плюс должен быть установлен ASP.NET). 3. SQL Server 2000 или 2005 в редакции Standard, Enterprise или Developer (Reporting Services несовместимы с более ранними версиями SQL Server). 4. Разработчикам отчетов требуется среда Visual Studio.NET 2003 или 2005, которая управляет компонентом Reporting Services Report Designer. Администраторов, которые не разрабатывают отчеты, Reporting Services обеспечивают различными пользова-
№1, январь 2007
Рисунок 1. Вид главной страницы веб-узла службы RS
тельскими интерфейсами, что позволяет создавать каталоги, источники данных, учетные записи пользователей и предоставлять пользователям права. Компоненты 1 и 2 должны стоять на одном компьютере, в то время как 3 и 4 компоненты могут быть установлены где угодно. Во время установки Reporting Services (далее RS) нужно будет выбрать, где будет установлена БД сервера отчетов. Для этого вы укажите: сервер SQL; пользователя с соответствующими привилегиями (для создания новых БД); имя БД (можно оставить по умолчанию). Инсталлятор, проверив введенные данные, создаст необходимые БД на указанном вами SQL-сервере. Сл у ж б ы R S и с пользуют две базы данных SQL-сервера д ля вну тренне го хранения экземпляра сервера отчетов: одну для хранения данных, а другую в качестве временного хранилища. Эти базы данных создаются одновременно и связываются по имени. По умолчанию базам данных при-
сваиваются имена соответственно reportserver и reportservertempdb. Когда все необходимые компоненты установлены – можно приступать к установке RS. Добавлю, что в процессе установки инсталлятор проверит все необходимые компоненты, и в случае если какого-то из них не будет обнаружено, выдаст предупреждение. Когда вы будете устанавливать RS на сервер, то инсталлятор не найдет 4-ый компонент (если конечно вы не ведете разработку на сервере),
Рисунок 2. Создание нового проекта в VS
Рисунок 3. Определение источника данных для проекта
15
администрирование Созданные отчеты можно просмат- зу данных. Параметры соединения ривать с помощью веб-соединения задаются по нажатию кнопки «Edit» или как часть приложения Microsoft (см. рис .4). Windows или портала SharePoint. ЕсВ окне свойства связи с данными ли на сервере, куда вы устанавливаете нас интересует вкладка «ПодключеRS, уже развернута служба SharePoint, ние». Здесь можно задать располото потребуется дополнительная на- жение сервера SQL, имя пользовастройка IIS, подробности будут сооб- теля/пароль и выбрать базу данных щены инсталлятором в процессе ус- для отчета. Для наших примеров будем истановки. Думаю, что с установкой службы пользовать тестовую базу данных RS вы справитесь. Примерную картину Northwind, которая создается на серпосле установки смотрите на рис. 1. вере MSSQL в процессе его установО функционале этой страницы ки. Структуру этой базы я не буду опия скажу позже. Перейдем к самому ин- сывать, при желании, изучить структутересному – созданию отчетов. ру этой базы, вы сможете самостоятельно. Название сервера баз данных Рисунок 4. Окно редактирования в наших примерах будет CTX (у вас Первый отчет свойств подключения Итак, установка службы на сервер это может быть localhost или любое это сообщение можно смело игнориро- прошла удачно, добавление шабло- другое), в зависимости от того, где вы вать. Для того чтобы в Visual Studio (да- на для разработки отчетов в VS вы- будете устанавливать службу RS. лее VS) появились шаблоны для созда- полнено. Теперь можно приступать Для примеров можете использовать ния отчетов – необходимо запустить к написанию первого отчета. Запус- тот же SQL-сервер, где установили RS установку RS на компьютере для раз- каем VS и открываем новый проект или любой другой в вашей сети, главработки отчетов, инсталлятор устано- (см. рис 2.). ное – наличие на нем базы Northwind. вит только шаблоны, и они станут доНовый шаблон, который добавился Никаких особых настроек для этой БД ступны при создании проектов в VS. в VS, называется Business Intelligence делать не требуется. Project. Запустить соСледующий шаг определяет строку здание этого проекта запроса. По нажатию на кнопку «Edit» можно в двух режи- вызывается редактор Query Builder, мах, в режиме мас- хотя мне кажется это лишнее, запрос тера и в обычном ре- можно просто вставить в окно мастежиме. ра (см. рис. 5). Для первого отДля первого отчета используем тачета запустим созда- кой запрос: ние проекта в режиSELECT OrderID AS 'Номер заказа', ↵ ме «мастера» (Report OrderDate AS 'Дата заказа', ↵ Project Wizard). ПеRequiredDate AS ↵ 'Дата исполнения', ↵ ред запуском масFreight AS 'Стоимость' тера можно выбрать FROM Orders Рисунок 5. Строка запроса SQL, определяющая выборку WHERE CustomerID = название для отчета данных для отчета (SELECT CustomerID (это будет название FROM Customers WHERE CompanyName LIKE ↵ папки проекта), и его 'Familia%') расположение. Первый шаг «масНазвания полей можно определять тера» предлагает нам через псевдонимы (ключевое слово выбрать название для AS), если не делается выборка * (ALL), ис точника д анных в последнем случае мастер сам назна(это может быть лю- чит псевдонимы для полей. В следующем шаге мастера выбебое название), и параметры соединения рите тип отчета Tabular (табличный). (см. рис .3). Тип отчета Matrix (матричный) испольИ с т о ч н и к д а н - зуется для отчетов с перекрестными ных можно сделать ссылками, о нем мы не будем говорить общим (Shared), это в нашей статье. Шаг Design the Table определяет, удобно, когда в проекте несколько ви- какие поля запроса будут доступны дов отчетов исполь- для просмотра в отчете, каким образуют одну и ту же ба- зом они будут группироваться. Рисунок 6. Выбор группировки полей в отчете
16
администрирование Поле Page определяет назва- ный отчет. Сейчас ние страницы отчета, и в этом случае же мы лишь немнона каждой странице отчета будет оче- го подкорректируем ширину столбцов (это редной результат выборки. Поле Group определяет поля запро- выполняется просса, по которым осуществляется груп- тым перетаскиванипировка значений. ем «мышкой» границ Поле Details определяет поля за- полей, как в Excel), проса, которые будут выводится в от- и о т ф о р м а т и р у чете (см. рис. 6). ем свойства полей Следующий шаг определяет: с датой и стоимостью. Для этого клик внешний вид таблицы; возможность раскрывающихся нем правой кнопкой Рисунок 7. Выбор формата ячейки списков (Enable drilldown), полезная «мыши» в соответсопция в случае большого количест- твующих полях и перейдем на пункт «Properties» (свойства). Откроется оква сгруппированных данных; возможность расчета промежуточ- но, в котором можно задать формат для данной ячейки (см. рис. 7). ных итогов (Include subtotals). После того как мы отформатироПоследнюю опцию лучше выстав- вали вывод, изменили размеры столлять вручную, так как мастер расстав- бцов и ячеек, немного можно добавить ляет формулы для промежуточных оформления и получится отчет, котоитогов автоматически для всех по- рый можно показать начальству, впролей, содержащих цифры, что некор- чем, не очень строгому (см. рис. 8). Рисунок 8. Предпросмотр готового ректно (зачем нам складывать номеотчета в VS ра заказов?). Второй отчет Теперь переходим на вк ла дк у Последний шаг, который мы выпол- Теперь, когда базовые понятия опреденим, будет – определение внешнего ви- лены, можно разработать отчет слож- «Layout», и кликнем правой кнопкой да отчета. Здесь уже все зависит от ва- ней и с большим функционалом. Плюс мыши на поле ниже нашей таблиших цветовых и стилистических пред- к этому рассмотрим публикацию отче- цы (см. рис. 10). Переходим в пункт «Report Parameters». В открывшемпочтений. На выбор дается пять вари- та на сервере RS. Если при создании проекта в «мас- ся окне – вы увидите уже определенантов оформления. После этого шага нажмем в «мастере» кнопку «Finish» тере» вы пометили источник данных ный параметр Company. Как видите, (пропустим шаг публикации отчета на как общий, то в окне Solution Explorer VS обработал наш запрос, и переменсервере RS). Теперь назовем наш от- у вас должна быть картинка примерно ные с префиксом @ автоматически засчитал как параметры, передающиечет «Информация о заказах» и, пос- как на рис. 9. тавив галочку в «Preview report», нажКликнем, правой кнопкой мыши ся в запрос. В окне Report Parameters, на папке Reports и выберем пункт можно опредемем «Finish». Как видите, отчет у нас получился «Add New Report». Откроется привыч- лить нескольслишком простой, но не спешите с вы- ный «мастер», но мы уже можем ис- ко полез ных водами. Красоту и удобочитаемость пользовать «Общий» источник дан- с в о й с т в д л я только предстоит настроить. Описы- ных. Проходим все шаги «мастера» п е р е м е н н о й. вать все возможности разработки от- точно так же как и для первого от- Здесь мы уже четов в среде VS не хватит и книги, по- чета, только изменим немного стро- о п р е д е л я е м тип переменэтому я кратко опишу то, что нам пот- ку запроса: ной, значение ребуется в первую очередь. SELECT OrderID AS 'Номер заказа', ↵ по умолчанию, Работать с отчетом нам предстоит OrderDate AS 'Дата заказа', ↵ список доступв основном в трех вкладках, это: RequiredDate AS ↵ 'Дата исполнения', ↵ ных значений, Preview – для просмотра отчета. Freight AS 'Стоимость' Рисунок 9. псевдоним для Layout – д ля редак тирования FROM Orders Добавление нового WHERE CustomerID = запроса польсвойств таблицы и внешнего вида отчета в проект (SELECT CustomerID зователю и т. п. отчета. FROM Customers WHERE CompanyName LIKE ↵ (см. рис. 11). Data – для редактирования тела за@Company+'%') Немного проса и источника данных. Те, кто знаком с Transact SQL, сра- о т ф о р м а т и В поле Layout находится наиболь- зу же заметят ошибку в запросе. Пе- руем таблицу шее количество полезных для нас на- ременная @Company не объявлена отчета, и пе Рисунок 10. строек. Их я опишу подробнее позже, и не типизирована. Но это особенность рейдем к фиДоступ к списку на льной с такогда мы будем создавать более слож- работы с VS и службой RS. параметров отчета
№1, январь 2007
17
администрирование вим галочку «Hide in list view» (не отображать в списке), чтобы она не отображалась в обычном представлении на веб-узле (см. рис. 12). Вернувшись на узел, мы не увидим созданную наРисунок 12. Создание папки ми папку, до тех пор, на веб-узле RS пока не нажмем на кнопку «Show Details» (см. рис. 13). Для отчета с параметром (вто(подробно). Перейрой отчет) будет доступна опция дем в папку Data и наРисунок 11. Редактирование свойств переменной жмем кнопку «New «Parameters», в которой можно переодии создания отчета – размещение его Data Source» (новый источник данных). пределить некоторые значения. Кажна сервере с RS. Откроется окно для создания источни- дому отчету можно установить лимит ка данных. В поле Name, Description на выполнение, и разграничить доПубликация отчета можно вводить произвольные данные, ступ к нему по пользователям из Active Публиковать отчет на сервере можно отметим пункт «Hide in list view и Enable Directory. В свойствах доступно еще нескольдвумя способами: data source», тип соединения выбирако опций, с ними я думаю, вы разбере Из VS (публикуется весь проект). ем SQL Server. Через веб-интерфейс RS. Данные в поле Connection String тесь сами. Теперь можно запускать отчеты имеют следующий формат. на выполнение, по вкладке «View» Я рассмотрю второй способ, так как data source=CTX; ↵ (см. рис. 14). он дает большее понимание процесса initial catalog=Northwind Сформированный отчет можно экпубликации, чем непрозрачные действия VS. спортировать в 7 форматов, в их чисгде: Для размещения отчета, мы долж- data source – Net-BIOS-имя серве- ле Excel, PDF, XML, html и т. п. ны через браузер зайти на странира MS SQL (это может быть как IPцу RS. На этой странице есть меню адрес, так полное доменное имя Резюме для операций с отчетами, источниОтчеты – важная составляющая функсервера); ками данных, и некоторой настрой- initial catalog – имя нашей БД ционала любой базы данных. Удобный инструмент для их разработки должен ки веб-узла. Первое, что я посоветона сервере. иметь, как минимум, 3 качества: вал бы сделать, – разместить в отдельной папке Источник данных. Для этоУказываем имя пользователя и па- Позволять пользователю выбирать го создаем папку Data. При этом ста- роль для доступа к БД и жмем «ОК». параметры для запроса. Теперь можно загру- Уметь разграничивать доступ к различным отчетам. зить оба наших от Экспортировать в различные файчета. ловые форматы результаты запроДля загрузки отса. ч е то в и с п ол ь зуе м пункт «Upload File» Всеми этими свойствами система (з а г ру з к а ф а й л а) . Из нашего проекта обладает. Минусы этой системы очевидны: мы должны загрузить файлы с расширени- высокая стоимость. Использование реРисунок 13. Назначение источника данных для отчета ем rdl. После загруз- шений на основе Open Source гораздо ки файлов, перей- дешевле для внедрения и использовадем в свойства од- ния, но лично мне неизвестны подобного из загруженных ные Open Source-проекты, учитывая, что мы рассмотрели лишь вершину айотчетов. На вкладке «Data сберга этой технологии. source» (ис точник данных) нужно ука- 1. http://msdn2.microsoft.com/ru-ru/library/ ms166344.aspx. зать созданный нами ранее источник дан- 2. ht t p : / / c it fo r um.r u / d at ab ase / m s sql / reporting_services. ных и нажать «Apply» Рисунок 14. Так выглядит отчет, размещенный на сервере RS
18
bugtraq Выполнение произвольного кода в Microsoft Visual Studio WMI Object Broker ActiveX-компоненте Программа: Microsoft Visual Studio 2005. Опасность: Критическая. Описание: Уязвимость существует из-за неизвестной ошибки в WMI Object Broker ActiveX-компоненте (WmiScriptUtils.dll). Злоумышленник может выполнить произвольный код на целевой системе с помощью специально сформированного веб-сайта, открытого в Internet Explorer. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера при обработке PE-файлов в BitDefender Программа: BitDefender Internet Security 9.x, BitDefender for MS ISA Server, BitDefender for MS Exchange 5.5 1.x, BitDefender for MS Exchange 2003 1.x, BitDefender for MS Exchange 2000 1.x, BitDefender Antivirus Standard 9.x, BitDefender Antivirus Standard 8.x, BitDefender Antivirus Professional Plus 8.x, BitDefender Mail Protection for Small Business 1.x. Опасность: Критическая. Описание: Уязвимость существует из-за целочисленного переполнения при обработке определенных PE-файлов. Удаленный пользователь может с помощью специально сформированного PE-файла вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.bitdefender.com. Решение: Установите последнюю версию с сайта производителя.
Несколько уязвимостей в антивирусе NOD32 Программа: NOD32 for Domino 2.x, NOD32 for DOS 1.x, NOD32 for FreeBSD 1.x, NOD32 for Linux 1.x, NOD32 for MS Exchange Server 0.x, NOD32 for NetBSD 1.x, NOD32 for Novell Netware Server 1.x, NOD32 for OpenBSD 1.x, NOD32 for Windows 95/ 98/ME 2.x, NOD32 for Windows NT/2000/XP/2003 2.x. Опасность: Критическая. Описание: 1. Целочисленное переполнение при обработке DOC-файлов позволяет переполнить динамический буфер через специально обработанный DOC-файл и выполнить произвольный на целевой системе. 2. Ошибка деления на нуль при обработке CHM-файлов позволяет вызвать отказ в обслуживании через специально обработанный CHM-файл. Уязвимость была обнаружена 24 августа и устранена 8 сентября через механизм автообновления без соответствующего уведомления. URL производителя: www.eset.com. Решение: Установите NOD32 1.1743 или более высокую версию.
№1, январь 2007
Множественные уязвимости в Mozilla Firefox Программа: Mozilla Firefox версии до 1.5.0.9 и 2.0.0.1. Опасность: Критическая. Описание: 1. Обнаружены различные ошибки в механизмах раскладки и JavaScript. Удаленный пользователь может с помощью специально сформированной веб-страницы вызвать повреждение памяти и потенциально выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки при уменьшении работы точности процессоров с плавающей точкой на Windows-системе при загрузке плагина, создающего Direct3D-устройство. Злоумышленник может заставить функцию js_dtoa() потребить все доступные ресурсы на системе и вызвать отказ в обслуживании. 3. Уязвимость существует из-за ошибки проверки границ данных во время установки курсора в Windows bitmap с использованием CSS-свойства курсора. Удаленный пользователь может вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. 4. Обнаружена ошибка в JavaScript функции watch(). Удаленный пользователь может выполнить произвольный код на целевой системе. 5. Уязвимость существует в LiveConnect, которая позволяет уже освобожденному объекту быть использованным еще раз. Удаленный пользователь может выполнить произвольный код на целевой системе. 6. Уязвимость существует из-за ошибки при обработке атрибута src в теге IMG, загруженном во фрейме. Удаленный пользователь может изменить атрибут на «javascript: URI» и выполнить произвольный javascript-сценарий в браузере жертвы в контексте безопасности сайта. 7. Ошибка повреждения памяти обнаружена при обработке SVG. Удаленный пользователь может выполнить произвольный код путем присоединения SVG-комментария DOM-узла от одного документа к другому типу документа (например, HTML). 8. Свойство «Feed Preview» в Firefox 2.0 может позволить злоумышленнику получить доступ к потенциально важным данным при получении иконки агрегатора новостей. 9. Регрессия прототипа Function в Firefox 2.0 может позволить злоумышленнику выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта. URL производителя: www.mozilla.org. Решение: Установите последнюю версию (1.5.0.9 или 2.0.0.1) с сайта производителя.
Составил Александр Антипов
19
администрирование
Как быстро и эффективно провести учет компьютерной техники
Алексей Бережной Программный комплекс CheckCfg + Sklad позволит вам организовать учет аппаратного и программного обеспечения, построить необходимые отчеты, и при этом получить дополнительные возможности для анализа состояния компьютерной техники и администрирования сети.
Т
ак или иначе, вам приходится сталкиваться с задачей учета компьютерной техники в вашей компании. Решить эту проблему можно поразному. Вариант первый – не учитывать совсем. При кажущейся простоте решения это чревато проблемами в дальнейшем. Во-первых, рано или поздно придется отчитываться за имеющиеся в наличии материальные ценности. Во-вторых, владение актуальной информацией об используемом аппаратном и программном обеспечении позволяет вовремя выполнять замену ус-
20
таревшего и вышедшего из строя оборудования, планировать закупку техники и программных лицензий, быстрее выполнять работы по обслуживанию заявок, поступающих от пользователей в отдел IT. Вариант второй – использовать для учета средства офисных приложений. Например, вести таблицу в MS Excel или другом табличном редакторе. Плюсы: тривиальное решение, требующее только навыков в использовании табличного редактора. Минусы: необходимость вводить все данные вручную, трудности при об-
новлении, отслеживании изменений в конфигурации оборудования. Хорошо, если в сети 10-20 компьютеров. Гораздо хуже обстоит дело, если имеется крупная сеть свыше 500 компьютеров. В этом случае отследить все производимые изменения затруднительно. Несколько лучше обстоят дела, когда вместо табличного редактора используется программа на базе популярной системы управления базами данных, например 1С. В этом случае значительно облегчен поиск данных, производится проверка дублирова-
администрирование ния записей, имеются средства построения различных отчетов. Но в целом Основные возможности эта система не избавлена от главного совместного использования недостатка – необходимости вручную программ CheckCfg и Sklad Сбор данных об аппаратной и програмсобирать информацию. мной конфигурации. И, наконец, третий вариант – воспользоваться программой для авто- Автоматическое занесение полученной информации в базу данных. матического сбора информации об аппаратной конфигурации компьюте- Легкость настройки программы и редактирования данных. ров с последующим занесением в базу данных. Этот вариант имеет следуУ нас в сети имеется компьютер ющие преимущества: сбор конфигурации производится автоматически и тре- Comp1 с папкой для общего доступа бует лишь небольшого редактирования Program. Программа CheckCfg распов дальнейшем. Хранение информации ложена в этой папке. Таким образом, в формате базы данных значительно путь к программе CheckCfg: \\comp1\ облегчает последующее построение programs\checkcfg. Настроим автомаотчетов. Автоматическое обновление тический запуск программы на коминформации о конфигурациях компью- пьютерах клиентов. Способов для этотеров позволяет повысить оператив- го существует масса: добавить ярлык в «Автозагрузку» (StartUp), помесность при работе с базой данных. Сегодня речь пойдет о программном тить соответствующий ключ в реестр комплексе CheckCfg + Sklad. Автор этих или организовать запуск стартового программ – Андрей Татуков. Офици- скрипта через GPO. При каждом старальный сайт: http://checkcfg.narod.ru/ те компьютеров программа CheckCfg будет обновлять файлы c результатаindex.htm. ми работы. Найти их можно в каталоИдеология использования ге \\comp1\programs\checkcfg\date. КаПрограмма CheckCfg анализирует кон- талог будет создан при первом запусфигурацию компьютера и записывает ке программы CheckCfg. По умолчанию эти файлы носят названия, соотполученную информацию в файл. Sklad при запуске автоматичес- ветствующие MAC-адресам сетевых ки обрабатывает файлы, созданные карт компьютеров. Мы предполагаем, CheckCfg, и помещает найденную ин- что программа Sklad будет запускатьформацию в свою базу данных. После ся с компьютера Comp1. Поэтому большинство путей настроек будет указачего можно формировать отчеты. Что сразу немного не понравилось – но в виде c:\programs\checkcfg. В слудля запуска программы Sklad_2.exe чае, если предполагается иная конфитребуется установить Borland Database гурация сети, в настройках програмEngine (BDE). Хотя это не проблема, по- мы должны быть указаны соответстому что установочный вариант с инс- твующие пути. Распакуем программу Sklad в кататрукцией выложен на сайте программы по адресу: http://checkcfg.narod.ru/soft/ лог c:\programs\Sklad. Остается только bde_all.zip. Нужно только скачать и рас- прописать пути к файлам, созданным паковать этот архив в каталог Windows и запустить файл install.bat.
Применение гибкой конфигурации учета компьютерной техники вашей организации. Занесение информации о ремонтах и модернизациях. Генерация отчетов. Приятные мелочи, полезные для системного администратора.
в результате проверки CheckCfg. В нашем случае c:\programs\checkcfg\date.
Создаем структуру компании Перед первым запуском программы вас поприветствуют и вежливо поблагодарят за ее использование. После этого вам предложат создать пример структуры на базе некоего абстрактного предприятия. Лучше согласиться на этот шаг, чтобы у вас перед глазами был понятный образец. А ненужные элементы всегда можно удалить. Мы же будем использовать получившуюся структуру в качестве примера для иллюстрации работы программы. Наконец, мы добрались до первоначального окна программы Sklad (см. рис. 1). Окно программы напоминает окно обычной MMC-консоли Windows. Точно так же вверху мы видим меню программы, справа – дерево объектов (контейнеров), слева – информацию о выбранном объекте. Внизу находится панель инструментов, позволяющая нам сохранить сделанные изменения, найти нужный объект в дереве, вставить новый объект в соответствующий контейнер. Манипулировать объектами можно при помощи мыши или используя пункт меню «Навигация».
Устанавливаем программы Теперь рассмотрим работу программного комплекса более подробно на примере. Мы настроим программы CheckCfg и Sklad для дальнейшей работы, создадим шаблон некой организации и на его основе рассмотрим процедуры занесения информации в базу данных, ее редактирование и создание отчетов.
№1, январь 2007
Рисунок 1. Окно первого запуска программы Sklad
21
администрирование
Рисунок 2. Распределенная техника
Рисунок 3. Окно просмотра журнала
Благодаря созданию примера структуры предприятия у нас не пустое окно, а уже созданные подразделения: «Дирекция» и «Бухгалтерия», содержащие соответствующие контейнеры пользователей: Иванов Иван Иванович и Петров Петр Петрович с Сидоровым Сидором Сидоровичем соответственно. Также на нижней панели есть кнопка удаления и checkbox для разрешения автосохранения. Последняя кнопка с изображением собачки на нижней панели означает выход из программы. (Пользователям программы нужно привыкнуть, что рисунок собачки означает то же самое, что и «Выход».) Объекты, внутри которых могут располагаться другие объекты, мы будем также называть контейнерами или организационными единицами. Добавлять организационные единицы в виде отделов и сотрудников, а также компьютеры, мониторы и другие объекты можно, используя меню «Навигация → Добавить» или нажав правую клавишу мыши, выбрать из появившегося меню соответствующий пункт. Но для иллюстрации работы программы нам вполне хватит и получившейся структуры.
Заносим информацию в базу данных Теперь нам нужно занести в базу данных существующие конфигурации компьютеров. Для этого нужно из меню «File» выбрать пункт «Настройки → Настройки CheckCfg». Появляется окно с напоминанием того,
22
что мы должны указать путь к файлу checkcfg.ini. В этом окне в правом верхнем углу щелкаем мышкой на кнопке «Настроить» и в новом окне вводим путь к файлу checkcfg.ini, созданному программой CheckCfg, в нашем случае – c:\programs\checkcfg. Кликнем мышкой на кнопке с изображением собачки и возвращаемся в окно «Настройки CheckCfg». После указания пути к файлу checkcfg.ini у нас в поле «Каталог для выходных данных» появилось соответствующее значение. Нам остается только закачать данные, получившиеся после работы CheckCfg, в программу Sklad. Для этого выбираем меню «File → Обновить данные… → Всего предприятия». Здесь нам снова необходимо выбрать путь нахождения файлов с результатами работы программы CheckCfg. Щелкаем мышкой на верхнюю кнопочку с изображением открытой папки. В появившемся окне выбора выбираем путь к файлам, созданным программой CheckCfg. Потом нажимаем мышкой на кнопку «< Добавить». И после всего активизируем процесс закачки файлов, нажав на кнопку «Пуск» в данном окне. Далее программа попросит подтвердить возможность создать каталог sklad.tmp для хранения временных файлов. (Честно говоря, я не вижу причин, из-за которых мы должны отказаться.) После экспорта данных программа предложит автоматически распределить неучтенные компьютеры. Последствия выбора в большинстве случа-
ев особой роли не играют, поэтому оставляю этот шаг на ваше усмотрение. Всё, данные внесены, теперь можем приступить к распределению компьютеров по ответственным сотрудникам. В примере мы по большей части используем мышь. Хотя то же самое можно выполнить, используя меню «Навигация». В этом меню есть все необходимое для управления объектами. Теперь нужно привязать учитываемую технику к определенным сотрудникам. Тут есть один нюанс. Если вы просто перетащите мышкой значок контейнера компьютера на учетную единицу сотрудника, программа предложит нам поместить соответствующий компьютер перед контейнером. Избежать этого можно, создав внутри контейнера сотрудника хотя бы один объект вручную. Поэтому мы пойдем на небольшую хитрость: сначала создадим внутри контейнеров пользователей объекты типа «Примечание», а потом уже будем перетаскивать на них контейнеры компьютеров. Почему именно «Примечание»? Мы могли бы сразу создать что-то более полезное, например объект типа «Монитор». Пока речь идет о рабочих станциях, это выглядит логичным. Но если понадобится учитывать серверное оборудование и т. п., мониторов, принтеров и другого периферийного оборудования, в данном случае может и не быть. Нажимаем правой кнопкой мыши на контейнере соответствующего пользователя, выбираем из меню пункт «Добавить». Из появившегося окна выбираем объект «Примеч.». Нажимаем кнопку «Добавить». Теперь объект «сотрудник» с именем «Иванов Иван Иванович» превратился в полноценный контейнер, и в него можно поместить другие объекты и контейнеры, например, объект компьютер. Перетаскиваем мышкой на объект «Примечание» значок компьютера. Появляется окно с вопросом, например: «Переместить Computer1 перед << Текст Примечания >>». Подобные манипуляции необходимо провести над всеми контейнерами пользователей. В итоге должно получиться что-то похожее на окно, изображенное на рис. 2. Теперь необходимо заполнить поля с информацией об устройствах, стоящих на учете. Выбираем соответствующий объект в правой части окна и, на-
администрирование жав в левой части окна вкладку «Дополнительно», заполняем следующие поля: «Модель», «Заводской номер», «Дата прихода», «Стоимость», «Поставщик», «Накладная №», «Гарантия до», «Инв. №», «Пломба №», «№ помещения», «№ раб. места», «Должность», «Телефон» (если необходимо), «ФИО мат. отв.» (Фамилия Имя Отчество материально ответственного лица). Следует отметить, программа Sklad не так уж проста, как кажется. Большинство действий, производимых в программе, регистрируются в журнале. Просмотреть журнал можно, выбрав пункт меню «Навигация → Просмотреть журнал». Пример выполненных перемещений, занесенных в журнал, приведен на рис. 3.
Рисунок 4. Свод компьютерной техники по предприятию. Окно сохранения в различных форматах
Формируем отчеты После занесения информации в базу данных мы можем начать строить отчеты. Отмечу, что помимо просмотра все отчеты можно сохранять в форматах: RTF, формате с разделителями для импорта в Excel и в обычном текстовом файле. Рисунок 5. Образец инвентаризационной ведомости Первое, что нас интересует, это статистика о том, какое оборудование бенно когда пользователи имеют воз- выбираем нужный компьютер, пои программное обеспечение использу- можность самостоятельно устанавли- том меню «Отчеты → Паспорт комвать программное обеспечение на свои пьютера». Выводится длинный переется на предприятии. Для этого существует меню «От- компьютеры. Помимо перечня офици- чень технических характеристик всечеты → Своды», далее из подменю ально купленных версий программно- го, что установлено, в том числе нассо списком сводов выбираем пункт го обеспечения и других полезных для тройки SMTP и POP3-протоколов поч«Свод по предприятию». Это общий администратора и бухгалтера вещей тового клиента и многое другое. Преперечень оборудования, использую- можно получить информацию о том, красный способ держать «руку на пульщегося на предприятии. Внешний вид чем пользователи занимаются на своих се», контролируя вверенные сетевые и получившегося документа смотрите компьютерах, и сделать соответствую- локальные ресурсы. И наконец, теперь переходим на рис. 4. Чтобы сохранить получен- щие выводы. Как, например, из списные результаты, нужно нажать мыш- ка установленных программ видно, что к главному. Ведомость инвентаризакой кнопочку с изображением диске- кое-кто из пользователей не прочь по- ции. Выбираем «Отчеты → Инвентарииграть в игры на служебном компьюте- зация… → Инвентаризационная ведоты внизу окна. Пункт «Свод по отделу» формиру- ре. Чтобы узнать, у кого установлена та мость». Появится окно с возможностью ет аналогичный свод в рамках одно- или иная программа, необходимо на- выбора характеристик, по которым буго подразделения. Для выбора соот- жать на изображение крестика рядом дет проводиться инвентаризация. Отмечаем необходимые пункты, которые ветствующего отдела нужно выбрать с ее названием. Еще очень полезная функция – мы хотим увидеть в инвентарной ведомышкой нужное подразделение в де«Уч е т н а я к а р т о ч к а т ех н ич е с к и х мости. Определяем формат вывода: реве объектов. Следующий документ, который нам средств». Для того чтобы напечатать файл, совместимый с Excel или DBF. не менее интересен – «Свод по вла- учетную карточку, необходимо пред- Поскольку формировать ведомость дельцам». Любому системному адми- варительно выделить интересующий будем в Excel, выбираем соответствунистратору хотя бы раз в год необходи- компьютер. Потом выбираем пункт ющий пункт. Нажимаем мышкой кномо знать, какое оборудование исполь- меню «Отчеты → Учетная карточка». почку «Сформировать». Появится окТеперь можно распечатать карточку но с предложением выбрать имя сохразуется конкретным пользователем. И еще один полезный для сис- и вручить пользователю под роспись. няемого файла. Функция «Паспорт компьютера» Вводим нужное нам имя файла темных администраторов пункт меню «Своды → Свод по программам». Осо- вызывается аналогичным образом – и получаем текстовый файл, пригод-
№1, январь 2007
23
администрирование министратору сети → Hosts») формирует нормальный рабочий файл Hosts, вполне пригодный к использованию (напомним, что этот файл использовался в сетях TCP/IP до изобретения служб DNS и используется по сей день в малых сетях, не имеющих собственного DNS-сервера). Пример файла hosts: # Local hosts 192.168.9.31 COMP1 192.168.9.32 COMP2 192.168.9.33 COMP3
Рисунок 6. Журнал ремонтов
ный для открытия в Excel. Образец файла смотрите на рис. 5. С такой ведомостью и в бухгалтерии показаться не стыдно.
Учет ремонтов, модернизаций и инспекций
Для этого выбираем меню «Отчеты → Журналы → Ремонты». Получившийся отчет можно увидеть на рис. 6. Аналогичным образом поступаем и в случае учета модернизаций. Выделяем необходимый объект, в данном случае снова Computer2. Выбираем вкладку «Дополнительно». Внизу, в окне ввода дополнительной информации выделяем пункт «Модернизации». Аналогичным образом, как и в случае с вводом информации о ремонтах, добавляем новую запись в журнал модернизаций. Заполняем необходимые поля: «Модернизируемый блок», «Описание работ по модернизации», «Стоимость работ», «Кем проводились работы». Теперь пробуем построить отчет. Выбираем меню «Отчеты → Журналы → Модернизации». Внешний вид отчета очень похож на отчет о ремонтах. Ввод информации об инспекции производится полностью аналогично вводу информации о ремонтах и модернизациях. Выделяем компьютер, добавляем запись, заполняем необходимые поля, в этом случае с инспекциями: «Проинспектирован», «Местонахождение», «Владелец». В простом случае, аналогичном нашему в поле «Маркер» введем дату проведения инспекции. Для организаций, в которых учет компьютеров поставлен не в пример строже, рекомендуется посетить соответствующий раздел на сайте автора программы.
Помимо учета установленного оборудования по факту программа Sklad умеет вести учет ремонтов, модернизаций, а также выводить статистику о проведенных инспекциях. Для иллюстрации этого создадим записи о ремонте и модернизации одного компьютера. Потом введем информацию о проведенной инспекции. И построим соответствующие отчеты. Раскрываем учетную единицу «сотрудник» «Петров Петр Петрович» в подразделении «Бухгалтерия». Выбираем объект Computer2. В правой стороне окна выбираем вкладку «Дополнительно». Внизу окна есть поля для ввода дополнительной информации. Отмечаем пункт «Ремонты» и нажимаем кнопочку «Добавить» внизу окна или выбираем пункт меню «Навигация → Добавить». Программа задаст вопрос «Создать новую запись в журнале Ремонты?» После утвердительного ответа создается запись с соответствующим порядковым номером и текущей датой. Изменить номер и дату можно, повторно щелкнув мышкой на имени записи. После этого введем необходимые значения в поля «Ремонтирующая организация», «Характер неисправности», «Стоимость ремонта», «Дата полу- Приятные мелочи чения из ремонта» и нажимаем кнопоч- для системного ку «Записать». Аналогичную операцию администратора проделаем, перейдя на объект Monitor Стоит обратить ваше внимание на нев организационной единице «сотруд- сколько забавных, на мой взгляд, ник» «Иванов Иван Иванович» в под- функций подменю «Администратору разделении «Дирекция». Все, теперь сети» из меню «Отчеты». Одна из них можем построить отчет о ремонтах. «Hosts» (вызывается «Отчеты → Ад-
24
Еще очень полезная функция – формирование файла с перечнем имен компьютеров и соответствующими MAC и IP-адресами. Вызывается эта функция через меню «Отчеты → Администратору сети → MAC and IP-addr». Пример формируемого файла mac_ip.txt: # MAC IP Host 0006298FC845 192.168.9.31 COMP1 000A5E6416D2 192.168.9.32 COMP2 00C026AC48DB 192.168.9.33 COMP3
Очень удобная вещь, особенно при настройке DHCP-сервера. И последняя функция Static IP. Вызывается через меню «Отчеты → Администратору сети → Static IP». На мой взгляд, не очень нужна, ибо практически дублирует функцию mac_ip.txt. Вид формируемого файла staticip.txt приведен ниже: # Static IP-address 192.168.9.31 COMP1 0006298FC845 192.168.9.32 COMP2 000A5E6416D2 192.168.9.33 COMP3 00C026AC48DB
Резюме Мы рассмотрели большой объем функций, предоставляемых программным комплексом CheckCfg + Sklad. Для специалистов IT-подразделений появилась возможность сэкономить массу времени, воспользовавшись этим программным комплексом. Только представьте себе, что всё проделанное пришлось бы делать по старинке, вручную занося данные о компьютерах в электронную таблицу. Хочется выразить искреннюю благодарность Андрею Татукову за этот великолепный программный комплекс, который позволяет оптимизировать учет компьютерной техники.
администрирование
Настраиваем удаленный доступ к сети с помощью MS ISA 2004
Андрей Бирюков Возможность доступа к необходимым бизнес-ресурсам из любой точки мира – одно из условий успешной работы компании. Но это не должно быть в ущерб безопасности. Рассмотрим реализацию технологий удаленного доступа с помощью MS ISA 2004.
Ставим задачу В предыдущей статье [1] мы разобрались с основными моментами развертывания межсетевого экрана ISA Server 2004 при подключении к Интернету, предоставили доступ в Интернет из локальной сети. Теперь настало время организовать удаленный доступ к локальным ресурсам. Предположим, у нас есть некоторое веб-приложение, например, система заказов on-line. Нужно организовать защищенный доступ к этому ре-
26
сурсу с помощью SSL. Также сотрудники компании ездят в командировку и иногда работают из дома, поэтому им необходимо предоставить доступ по VPN. А еще у компании есть филиал, сотрудникам которого также требуется доступ в локальную сеть центрального офиса. Приступим к решению всех этих задач.
Защищаем веб-трафик Итак, нам необходимо организовать защищенный доступ к веб-ресурсам
сети. В отличие от публикации обычных веб-ресурсов, не использующих SSL, здесь существует ряд характерных особенностей, о которых читайте дальше. Можно публиковать защищенные веб-серверы, используя правила публикации веб-серверов по протоколу SSL. Публикация защищенных серверов требует немного больше предварительной работы, поскольку нужно получить сертификат веб-сайта для публикуемого ресурса, связать этот сертификат с сайтом на опубли-
администрирование кованном веб-сервере и затем связать этот сертификат с сервером ISA, чтобы последний мог выдать себя за этот веб-сервер. Это позволяет ISA обеспечивать высокую степень защиты для веб-сайтов, опубликованных с помощью правил публикации ресурсов по протоколу SSL. Далее мы обсудим следующие моменты: сопряжение протокола SSL (SSL Bridging); импорт сертификатов веб-сайтов в хранилище сертификатов (certificate store) на машине брандмауэра ISA; запрашивание сертификатов вебсайтов, чтобы брандмауэр представлял защищенные веб-сайты; создание правил публикации вебсерверов по протоколу SSL. Начнем с сопряжения протокола SSL – это свойство ISA, позволяющее ему выполнять на прикладном уровне проверку состояния SSL-соединений. Дело в том, что традиционные межсетевые экраны с отслеживающей соединения фильтрацией (например, аппаратные решения) не могут выполнять проверку прикладного уровня SSL-соединений, проходящих через них. Межсетевой экран ISA поддерживает два метода SSL-сопряжения: сопряжение SSL-c-SSL (SSL to SSL bridging); сопряжение SSL-c-HTTP (SSL to HTTP bridging). Сопряжение SSL-c-SSL обеспечивает защищенное SSL-соединение от начала до конца. Сопряжение SSL c HTTP гарантирует защищенное соединение между веб-клиентом и экраном ISA, а затем разрешает пересылку открытого текста между ISA и опубликованным веб-сервером.
Основы сертификации Зачастую, упоминания центров сертификации (ЦС) (Certificate Authorities) и инфраструктуры открытого ключа (PKI, Public Key Infrastructure) достаточно, чтобы многие администраторы отказались даже от обсуждения SSLпротокола. Причиной этому является то, что многие системные администраторы плохо знакомы с этими технологиями и предпочитают обходить-
№1, январь 2007
ся без них. Однако на самом деле все не так уж и сложно. Служба Сertificate Server входит в состав Microsoft Windows Server 2003, и при необходимости ее всегда можно установить. При установке Microsoft Certificate Server (Сервер сертификации Microsoft) может быть выбрана одна из четырех ролей: Enterprise Root CA (корпоративный корневой центр сертификации). Enterprise Subordinate CA (корпоративный подчиненный центр сертификации). Standalone Root CA (автономный корневой центр сертификации). Standalone Subordinate CA (автономный подчиненный центр сертификации). Корневой и подчиненный центры сертификации предприятия могут быть установлены только на серверах-членах службы каталогов Active Directory. В контексте статьи предполагается, что мы используем Active Directory, и соответственно можем использовать Enterprise CA, поэтому применение Standalone CA далее не рассматривается. Если вы не знакомы со средствами администрирования центров сертификации, описание процесса выписки и создания сертификата вы можете найти в источниках [2, 3].
Импорт сертификатов веб-сайтов в хранилище сертификатов на сервере ISA
(FQDN) веб-сайта, на который выписывается сертификат. Для выполнения этой задачи нужно установить сертификат веб-сайта на сервере ISA. Первый шаг – экспорт сертификата с сайта защищенного веб-сервера. [3] Когда экспортируете сертификат, убедитесь, что включен приватный ключ. Одна из самых распространенных причин отказа в работе правил публикации веб-серверов – экспорт сертификата веб-сайта без его приватного ключа. Затем сертификат веб-сайта импортируется в хранилище сертификатов на сервере ISA. Сразу после импортирования сертификата веб-сайта в это хранилище сертификатов он становится доступным для связывания с веб-приемником. Необходимо помнить, что, если нельзя связать сертификат с веб-приемником, значит сертификат импортирован некорректно.
Запрос сертификата пользователя После импорта сертификата необходимо сконфигурировать межсетевой экран для представления сертификата пользователям веб-сайта, которые этого требуют. В нашем случае именно такой сайт. Для того чтобы сконфигурировать межсетевой экран для представления сертификата пользователям, необходимо сначала запросить сертификат для учетной записи сервиса Firewall. Так как нельзя воспользоваться оснасткой Certificates (Сертификаты) консоли ММС для запроса сертификата учетной записи, воспользуемся воз-
Межсетевой экран ISA должен быть способен выдать себя за опубликованный веб-сервер и идентифицировать себя на удаленном клиенте как опубликованный с ервер. Д ругими словами, ISA становится посредником при создании защищенного соединения между удаленным клиентом и веб-сервером. Ключевым компонентом такой имитации служит полное доменное имя Рисунок 1. Редактирование системных политик
27
администрирование Далее на страни- те узел Firewall Policy, затем выберице «Welcome» щелк- те вкладку «Tasks», далее «Publish ните кнопкой мыши a Secure Web Server» (опубликовать на ссылку «Request защищенный веб-сервер). После этоa certificate». Затем го вам предстоит ответить на вопров ы б и р а е м « U s e r сы мастера установки. Здесь почти Certificate». Устанав- все действия аналогичны публикаливаем сертификат, ции веб-ресурса без использования нажав «Install this SSL, описанного в [1]. Какие отличия? certificate» (рис. 2). На странице Publishing Mode есть два После установ- переключателя: SSL Bridging и SSL ки сертификат не- Tunneling (рис. 3). Сопряжение (bridging), которое обходимо экспортировать, для этого в некоторых источниках именуется в разделе браузе- SSL-проксированием, более безопасРисунок 2. Редактирование системных политик ра «Internet options» ное, так как обеспечивает защищенное можностью импортировать пользова- зайдите на вкладку «Content», далее от начала до конца (end-to-end) шифротельский сертификат, применяя веб- «Certificates». Выбрав isafirewall, на- ванное соединение, в то же время, разсайт регистрации. Чтобы запросить жмите кнопку «Export». Экспорт не- решая ISA выполнять как отслеживаюсертификат для брандмауэра ISA с веб- обходимо осуществлять вместе с сек- щую состояние соединений фильтрасайта регистрации, мы должны снача- ретным ключом, указав «Export Private цию (аналогично традиционным межла создать учетную запись пользова- Key». После этого, указав пароль сетевым экранам), так и отслеживаютеля для сервера ISA. Создайте учет- для файла сертификата, мы получа- щую состояние соединения проверку ную запись пользователя с именем ем необходимый файл. на уровне приложений. То есть полуisafirewall в службе каталогов Active Обратите внимание: полученный ченный пакет сначала расшифровыDirectory до выполнения следующих файл нужно хранить в безопасном вается, затем проверяется на уровне процедур. месте, так как он может быть исполь- приложений и потом снова зашифроДалее необходимо выполнить сле- зован для получения несанкциониро- вывается и отправляется на хост-подующие шаги, чтобы запросить сер- ванного доступа к ресурсам сети. лучатель. Такая проверка позволяет тификат для учетной записи сервиса Наконец, приступаем к завершаю- на уровне приложений просмотреть Firewall. Для этого откройте консоль щему этапу подготовки к публикации содержимое каждого пакета и удосадминистрирования ISA, на вклад- веб-ресурса по протоколу SSL, им- товериться в том, что он не содержит ке «Tasks» выберите «Show System портируем сертификат в учетную за- неавторизованных подключений. ПоPolicy Rules». В списке «System Policy пись сервиса Firewall. Для этого от- этому для решения нашей задачи неRules» щелкните правой кнопкой мы- кройте новую консоль MMC, выбери- обходимо выбрать именно этот режим ши «Allow all HTTP traffic from ISA Server те в меню «File» опцию «Addr/Remove публикации. to all networks (for CRL downloads)» Snap-in», далее оснастка Certificates. Что же касается SSL-туннелироваи левой кнопкой мыши команду «Edit После подключения оснастки выби- ния, то в этом режиме ISA не может System Policy». Тем самым мы разре- райте параметр «Services account». За- осуществлять контроль за проходящим шили весь HTTP-трафик от брандма- тем – сервис Microsoft Firewall из спис- через него контентом. Поэтому старайуэра ISA ко всем сетям, для загрузок ка Service account. тесь не использовать тунеллирование списков сертификатов пользователей. Теперь сертификат связан с учет- до тех пор, пока не потребуется опубНажмем кнопку «Apply» для сохране- ной записью сервиса Firewall. Возмож- ликовать приложения, не совместимые ния изменений и обновления полити- но, возникнет необходимость блокиро- с веб-прокси HTTP 1.1. ки брандмауэра. Затем применим но- вать правило системной политики, соПодробнее о SSL-bridging и SSLвую конфигурацию, нажав «Apply New зданное нами ранее, чтобы нечаянно tunneling можно прочесть в статье [4]. Configuration» (рис. 1). На странице Bridging Mode (режим не воспользоваться обозревателем Мы сконфигурировали межсете- на межсетевом экране ISA. сопряжения) есть три переключателя: вой экран для предоставления серти Secure connection to clients (защификата пользователя. Теперь необхо- Создание правила щенное соединение с клиентами); димо получить сертификат. Для этого публикации веб-сервера Secure connection to Web server откройте браузер на сервере ISA и вве- по протоколу SSL (защищенное соединение с вебдите http://<certificateserver>/certsrv, Итак, утомительные манипуляции с уссервером); где certificateserver – имя или IP-ад- тановкой сертификатов завершены, Secure connection to clients and рес ЦС предприятия в корпоративной теперь можно создать правило публиWeb server (защищенное соединесети. В диалоговом окне «Connect to» кации веб-сервера, защищенного проние с клиентами и веб-сервером). введите верительные данные учетной токолом SSL. записи isafirewall и щелкните мышью Делается это следующим образом. Вариант Secure connection to clients кнопку «ОК». В консоли администрирования открой- устанавливает соединение как сопря-
28
администрирование жение SSL c HTTP. Он защищает соединение веб-клиента с ISA, но разрешает передачу незащищенного открытого текста между экраном и опубликованным веб-сервером. Вариант Secure connection to Web server позволит выполнить сопряжение HTTP c SSL. Соединение между веб-клиентом и межсетевым экраном устанавливается по протоколу HTTP, а соединение между сервером ISA и веб-сервером – по протоколу SSL. Вариант Secure connection to clients and Web server наиболее защищенный и предпочтительный. Он разрешает сопряжение SSL c SSL, в котором и соединение веб-клиента с ISA, и соединение между ISA и опубликованным веб-сервером защищаются протоколом SSL. В нашем случае наиболее предпочтительным будет третий вариант. После завершения работы мастера остается только применить изменения, и веб-ресурс будет опубликован через защищенное соединение.
Основы VPN Теперь приступим к организации удаленного доступа к ресурсам локальной сети с помощью VPN. Одно из главных преимуществ применения VPN-соединения по сравнению с клиент-серверным веб-приложением заключается в том, что VPN-пользователи, находящиеся далеко от локальной сети, могут получить доступ ко всем ресурсам корпоративной сети. Программное обеспечение VPN-клиента встроено во все современные операционные системы Windows. VPN-пользователю не нужны никакие специальные программные средства для подключения к любому из этих сервисов и нет необходимости создавать специальные приложения прокси, разрешающие вашим пользователям подсоединяться к этим ресурсам. Существует два вида VPN-соединений: клиент-сервер и узел-узел. Первый вариант позволяет подключать удаленную рабочую станцию к сети с помощью защищенного соединения. Второй вариант позволяет соединять сети через защищенный туннель.
№1, январь 2007
Перед настройкой… Я опишу настройку обоих вариантов использования VPN. Но перед тем как начать описание настройки, необходимо обсудить несколько вопросов. Прежде всего нужно постоянно помнить о том, что удаленный доступ всегда является наиболее уязвимым в защите корпоративной сети от внешних вторжений. Поэтому надо ограничивать доступ пользователей, подключенных через VPN к локальной сети, предоставляя только необходимые для работы сервисы. В частности, для соединений клиент-сервер, если пользователь, удаленно подключившийся к локальной сети, является, к примеру, сотрудником бухгалтерии, то ему должен быть доступен только сервер бухгалтерии, если менеджер, то только сервер отдела продаж и так далее. Аналогично и для соединений узел-узел, филиалам и удаленным офисам должны быть доступны только те ресурсы, которые им необходимы в работе, не более.
Выбор протокола
шлюзами, также ISA 2004 позволяет использовать плохо защищенное соединение с применением туннельного режима протокола IPSec для подключения к VPN-шлюзам сторонних фирм. Тут необходимо сделать небольшую оговорку, туннельный режим протокола IPSec поддерживается только для VPN-соединений конфигурации узел-узел. Клиент-серверные VPN-соединения удаленного доступа, тем не менее, используют только протоколы РРТР или L2TP/IPSec. Туннельный режим протокола IPSec уязвим для нескольких хорошо известных атак, а протокол L2TP/IPSec требует более строгой аутентификации и не подвержен этим атакам. Таким образом, если есть выбор, гораздо лучше применять набор протоколов L2TP/IPSec для VPN-соединений конфигурации узел в узел.
Аутентификация Еще один аспект, также связанный с безопасностью, это аутентификация, используемая в VPN-соединениях. В межсетевом экране ISA Server 2004, когда создаются VPN-соединения удаленного доступа и межшлюзовые VPN-соединения, можно использовать секретные ключи (pre-shared keys) для аутентификации. Все машины VPN-клиентов, на которых выполняется обновленное программное обеспечение VPN-клиента для протокола L2TP/IPSec, могут использовать секретный ключ для создания соединения удаленного доступа VPN-клиента по протоколу L2TP/IPSec с ISA 2004/
Следующий аспект – это протокол, используемый для VPN-соединения. Для соединения узел-узел можно использовать PPTP и L2TP/IPSEC, но большинство разработанных сторонними фирмами VPN-шлюзов не поддерживают протоколы PPTP и L2TP/ IPSec для межшлюзовых VPN-каналов. Вместо этого они требуют применения туннельного режима протокола IPSec для VPN-соединения. Межсетевой экран ISA 2004 в отличие от предыдущей версии ISA 2000 поддерживает туннельный режим протокола IPSec, таким образом позволяя создавать VPN-соединения узел-узел м еж д у VPN - ш л ю зом ISA и шлюзом стороннего производителя. Кроме того, что вы можете применять прото кол РРТР или протокол L2TP/IPSec с высоким уровнем защиты для создания каналов типа узел в узел между двумя ISA Server/VPNРисунок 3. Публикация защищенного веб-ресурса
29
администрирование
Рисунок 4. Разрешаем доступ клиентам по VPN
VPN-сервером. VPN-шлюзы ОС Windows 2000 и Windows Server 2003 также можно настроить для применения секретного ключа и установки соединений узел в узел. Секретные ключи являются популярным средством аутентификации. Их преимущество – простота первоначальной настройки, так как достаточно лишь распространить ключ между участниками соединения. Однако имеется и ряд недостатков. Например, при использовании в соединениях клиент-сервер, в случае изменения ключа на сервере, необходимо будет вручную внести изменения на всех клиентах, в противном случае установка соединения будет невозможна. Другим средством аутентификации является использование инфраструктуры открытого ключа PKI (Public Key Infrastructure). Технология использует сертификаты, о которых уже шла речь
Рисунок 5. Создаем сеть «узел-узел»
30
в первой части этой статьи [1], поэтому то для подтверждения подлинности в примерах настроек, приведенных да- можно использовать RADIUS-аутентилее, не будем рассматривать исполь- фикацию или локальные группы пользование PKI. Подробнее об этом спо- зователей. На вкладке «Protocols» устанавлисобе вы можете прочитать в [5]. Другим возможным вариантом ваем «Enable РРТР». Тем самым сореализации VPN является использо- единение будет осуществляться с пование протокола PPTP, для которо- мощью PPTP. Затем включаем «User го не требуется ни PKI, ни pre-shared Mapping» и флажок «When username key. Об этом методе и пойдет речь does not contain a domain, use this domain», указав имя домена. Эта опция далее. Приступая к реализации, прежде полезна в случаях, когда было введено всего определимся с вариантами раз- только имя пользователя, без домена. Далее необходимо применить извертывания VPN. Будем организовывать сначала доступ по VPN в ло- менения. Теперь на вкладке «Tasks» кальную сеть организации для уда- щелкните кнопкой мыши с трок у ленных клиентов, а затем реализу- «Select Access Networks». В диалогоем соединение узел-узел для филиа- вом окне «Virtual Private Networks (VPN) Properties» выберите вкладку «Access ла компании. Networks». Обратите внимание на то, что устаКлиент-сервер Первым делом при организации VPN- новлен флажок «External» (внешняя). подключения клиентов необходимо Это означает, что внешний интерфейс в консоли администрирования ISA вы- ожидает входящие соединения от VPNбрать меню «Tasks» (задачи) и затем клиентов. «Enable VPN Client Access». Затем необходимо применить изменения, на- Настройка IP-адресации жав «Apply New Configuration». Это важный шаг, в случае неверной настройки проблемы с доступом для VPN-клиентов обеспечены. ВыНастройка VPN-сервера На вкладке «Tasks» выбираем «Configure бираем вкладку «Address Assignment», VPN Client Access», далее на вклад- в раскрывающемся списке указываке «General» в диалоговом окне «VPN ем «Use the following network to obtain Clients Properties» измените значение DHCP, DNS and WINS services» элемент параметра «Maximum number of VPN «Internal». Затем выбираем вкладclients allowed» с 5 на 10 (рис. 4). ку «Authentication» (аутентификация) Версия Standard Edition брандмау- Должен быть установлен только флаэра ISA поддерживает до 1000 парал- жок «Microsoft encrypted authentication version 2 (MS-CHAPv2)». лельных VPN-соединений. Необходимо применить настройДа лее добавляем группы, выбрав вкладку «Group» и нажав кноп- ки, нажав «Apply», и перегрузить серку «Add». В диалоговом окне «Select вер ISA. После перезагрузки ISA полуGroups» нажимаем чит блок IP-адресов от DHCP-сервера кнопку «Locations», во внутренней сети. указываем домен, потом ну жно ука- Доступ для VPN-клиентов зать группу пользо- Создается как стандартное правило вателей, которым доступа, где в качестве исходящих б у д е т р а з р е ш е н протоколов указываются All Outbound удаленный доступ. protocols, а в качестве источника в праВ общем случае это виле доступа – VPN Clients. может быть группа Настройка доступа по VPN на клиDomain Users. ентской машине производится с помоОбращаю ваше щью стандартного мастера Windows. внимание на то, что сервер ISA должен Узел-узел быть членом доме- Итак, мы организовали доступ удана. Если он не на- ленным сотрудникам, и теперь остаходится в домене, лось предоставить доступ к ресур-
администрирование Обычная причина сбоев VPN-соединений заключается в том, что серверы ISA не могут получить адрес от DHCP-сервера и нет адресов, отведенных для пула статических адШаг 4. Создайте в центральном ресов. В этой ситуации ISA назнаофисе учетную запись чает VPN-клиентам и шлюзам IP-адVPN-шлюз Для этого необходимо, чтобы у учет- реса в диапазоне автосети (APIPA, ной записи пользователя было то же 169.254.0.0/16). Если обоим концам туннеля наимя, что и у интерфейса вызова по требованию. То есть необходимо создать значены адреса из этого диапазона, локальную учетную запись на серве- интерфейсы вызова по требованию ре ISA, имя которой будет совпадать обеих машин размещаются в одной с именем интерфейса. В свойствах и той же сети, что вызывает сбой в лиэтой учетной записи нужно разрешить нии связи конфигурации узел в узел, так как при этом пакеты не могут опредоступ Dial-In. делить маршрут к узлу назначения.
сам локальной сети удаленному офи- VPN-клиентам. Для этого в закладке су. Для этого мы воспользуемся со- «VPN-Clients» указываем «Enable VPN единением с использованием PPTP Client Access». (Point-to-Point Tunneling Protocol).
Шаг 1. Сконфигурируйте межсетевой экран ISA в центральном офисе Для этого в консоли администрирования ISA 2004 открываем раздел «Virtual Private Networks», в закладке «Tasks → Add Remote Site Network». Далее с помощью мастера создания новой сети указываем настройки удаленной сети. Обращаю ваше внимание на то, что имя, данное при настройке мастера, затем будет использоваться для соединения по требованию. На странице «VPN» выбираем протокол PPTP. Далее на странице «Remote Site Gateway» укажите IP-адрес удаленного межсетевого экрана, также вы можете использовать полное доменное имя FQDN. Затем разрешим из локальной сети инициировать соединения с удаленным офисом «Local site can initiate connections to remote site using these credentials» и укажем учетную запись, которая будет использоваться для аутентификации на удаленном межсетевом экране. В завершение настройки укажите диапазон IP-адресов, которые используются в удаленной сети.
Шаг 2. Создайте сетевое правило в центральном офисе В административной консоли открываем узел «Confiuration → Networks». На панели «Details» выбираем вкладку «Tasks». Далее создаем новое сетевое правило. Затем с помощью мастера производим стандартные настройки, при этом в качестве сети назначения указываем сеть удаленного офиса. На странице «Network Relationship» выбираем вариант «Route». Правило создано.
Шаг 3. Создайте правила доступа в центральном офисе Запускаем в разделе Firewall policy мастер создания нового правила доступа. Далее стандартный процесс создания правила, в качестве сети назначения также указываем удаленный офис. После завершения работы мастера необходимо предоставить доступ
№1, январь 2007
Шаг 5. Сконфигурируйте межсетевой экран ISA в филиале
Для этого необходимо повторить те же шаги, что и для центрального офиса, с той лишь разницей, что начинать надо с создания сети удаленного офиса на брандмауэре филиала.
Шаг 6. Создайте сетевое правило в филиале Здесь действия будут аналогичны произведенным при настройке правил для центрального офиса, только сетьисточник и сеть-назначения меняются местами.
Шаг 7. Создайте правила доступа в филиале Это правило также аналогично созданному ранее для центрального офиса.
Шаг 8. Создайте в филиале учетную запись VPN-шлюза Прежде всего создаем учетную запись пользователя, которую VPN-шлюз центрального офиса сможет использовать для аутентификации при установке соединения. Имя также должно совпадать с именем интерфейса.
Шаг 9. Активизируйте каналы типа узел в узел Для активизации соединения необходимо с рабочей станции, находящейся в удаленном офисе, попытаться пропинговать узел в сети главного офиса. Если соединение конфигурации узел в узел заканчивается неудачей, убедитесь, что вы правильно определили назначения допустимых IP-адресов для VPN-клиентов и шлюзов.
Завершая разговор Итак, мы рассмотрели возможности межсетевого экрана ISA 2004, позволяющие обеспечить удаленный доступ к ресурсам локальной сети. Теперь вы можете обеспечить защищенный доступ по SSL к веб-ресурсам локальной сети, а также по VPN ко всем необходимым сетевым службам. Например, с помощью описанных в статье функций сервера ISA можно организовать удаленный доступ пользователей к почте через веб-интерфейс. А после создания доступа по VPN сотрудники филиалов смогут без лишних затрат времени работать с документами, находящимися в центральном офисе компании. В следующей статье вы узнаете о тонкой настройке различных компонентов ISA 2004, что позволит существенно оптимизировать работу межсетевого экрана и сети в целом. 1. Бирюков А. Устанавливаем межсетевой экран Microsoft ISA Server 2004. //«Системный администратор», №12, 2006 г. – С. 4-8. 2. Развертывание PKI на Windows 2003 и XP – http://www.microsoft.com/technet/ prodtechnol/winxppro/plan/pkienh.mspx. 3. П о с т р о е н и е R o o t C A – h t t p : / / www.microsoft.com/technet/security/ prodtech/windowsserver2003/ build_ent_root_ca.mspx. 4. SSL Bridging and Tunneling. Описание и сравнение – http://www.microsoft.com/ technet/isa/2004/help/cmt_authpass. mspx?mfr=true. 5. Ос новной ресурс по PKI – ht tp:// www.microsoft.com/PKI.
31
администрирование
Подробное руководство по настройке тонких клиентов На основе дистрибутива Thinstation и протокола NX Часть 2
Евгений Бушков В №12 за 2006 г. вы прочтёте о том, как собрать серверную часть NX и настроить дистрибутив Thinstation для работы с ней. Сегодня разберёмся каковы особенности эксплуатации, дополнительные настройки NX и Thinstation и как решать встречающиеся проблемы. 32
администрирование Доработка функционального окна VNC При использовании VNC управление сеансом по умолчанию осуществляется клавишей <F8>. В нашей компании пользователи используют dosemu c Dos Navigator, в нем активно используется эта клавиша. Чтоб избежать конфликта, я подправил в исходниках файл /nx_build_dir/nxviewer/ nxviewer/argsresources.c. Укажу, какие строчки я отредактировал: #<Key>F8: ShowPopup()\\n\ <Key>F12: ShowPopup()\\n\ #"*popupButtonCount: 6", "*popupButtonCount: 2", #"*popup*button1.label: Dismiss popup", "*popup*button1.label: Close", #"*popup*button2.label: Quit viewer", "*popup*button2.label: Send F12", #<Btn1Down>,<Btn1Up>: Quit()", <Btn1Down>,<Btn1Up>: SendRFBEvent(key,F12) HidePopup()",
Таким образом, функция вызова меню VNC переназначается c <F8> на <F12>, вместо 6 доступных в меню строк осталось только 2: закрыть меню при случайном нажатии «Close» и послать код <F12>, если вдруг встретилась такая функциональная клавиша. Если вы не используете VNC-агента nxviewer, то вам это не пригодится.
Проблема связки NX, Thinstation, Firefox
Рисунок 1. Настройки VNC-сессии NX-клиента
Настройки VNC-сессии NX-клиента вы можете посмотреть на рис. 1.
Проблема с кириллицей Встретилась еще одна проблема с кириллицей: при работе в обычном режиме NX неправильно переключаются раскладки (VNC это не касается, там все работает): в зависимости от указанной кодировки отображаются либо только русские клавиши, либо только английские. Если у вас встретилась такая проблема, то включите в скрипт запуска приложения следующую строчку:
Почему я стал использовать nxviewer? Сам по себе NX работает замечательно и в режиме приложений, и в режиме работы с удаленным рабочим столом. Но вот что выяснилось: при работе в Firefox на внутреннем сайте нашей компании встречаются страницы, необходимые для работы, размером от 400 Кб и больше. Во время вывода xterm -e setxkbmap -rules xorg -model pc105 ↵ таких страничек на экран изображение останавливает-layout "us,ru" -variant ",winkeys" ↵ ся, и тонкий клиент перестает отвечать на запросы («ве-option "grp:ctrl_shift_toggle,grp_led:scroll" шается»). Например, у меня для запуска программы 1С под эмуЧто я только не делал: менял сочетания версий Firefox, Thinstation, NX, менял настройки Firefox в строке «about: лятором WINE применяется sh-скрипт /usr/bin/1c, в коconfig», задавал вопросы в форумах. Ничего не помогло, тором используются некоторые проверки, подключаетбольшие странички от 400 Кб вызывают проблему. Причем ся нужный шрифт, вносятся изменения в реестр с помоэти же страницы нормально отображаются в Opera, но это щью reg-файла (для указания названий и путей баз 1С), противоречит нашей ориентации на открытый Firefox. Со- и перед запуском самого 1С выполняется указанная выздалось ощущение, что это связано с особенностями движ- ше строчка. При запуске сессии удаленного стола можно также выполнить эту строчку в стартовых скриптах дока данного браузера. Тогда пришлось перейти к использованию RVB/VNC- машнего каталога (~/.profile или ~/.bashrc) или системы сессий в NX: на NX-сервере в настройках сервиса xinetd (/etc/bash.bashrc.local). Тогда всё должно наладиться. включается VNC-сервер. В первой части статьи (см. №12 за 2006 г.) на рисунке 3 показаны файлы настроек сессий NX и TUX1C. В итоге там, где нужен Firefox, я исполь- Использование дисковых устройств зую VNC-сессии в NX, во всех остальных случаях – обыч- тонких клиентов Еще одна тонкость. Если пользователям необходимо обный режим NX. Основным недостатком использования VNC являет- ращаться к дискетам или локальному диску с разделом ся необходимость дважды вводить пароль: в окошке при- FAT16 (32) на своих тонких клиентах, то придется разоглашения NX-клиента, а потом при авторизации с помо- браться с Samba. Для этого добавляем в файл build.conf щью оконного менеджера, например KDE, при соединении (см. №12 за 2006 г.) модули floppy, fvat, supermount и пакет с VNC-сервером. Но на скорости работы это почти не отра- samba-server. В первой части статьи (см. №12 за 2006 г.) на рисунке 3 жается, так что все сказанное об NX справедливо и для сеспоказано содержимое файла thinstation.conf.group-smb_hard, сий VNC под NX.
№1, январь 2007
33
администрирование echo "X-SuSE-translate=true" >> ↵ ~/Desktop/Harddisk.desktop else rm -f ~/Desktop/Harddisk.desktop
Рисунок 2. Обычная работа на тонком клиенте
fi # testing for floppy existence floppy=`smbclient -NL $ip 2>/dev/null|grep floppy` if [ "$floppy" != "" ] then echo "[Desktop Entry]" > ~/Desktop/"Floppy Disk"; echo "Encoding=UTF-8" >> ~/Desktop/"Floppy Disk"; echo "Icon=3floppy_mount" >> ~/Desktop/"Floppy Disk"; echo "Name=Floppy Disk" >> ~/Desktop/"Floppy Disk"; echo "Name[ru]=Floppy Disk" >> ↵ ~/Desktop/"Floppy Disk"; echo "OnlyShowIn=KDE;" >> ~/Desktop/"Floppy Disk"; echo "Open=false" >> ~/Desktop/"Floppy Disk"; echo "Type=Link" >> ~/Desktop/"Floppy Disk"; echo "URL=smb://$ip/floppy" >> ~/Desktop/"Floppy Disk"; echo "X-KDE-KonqSidebarModule=konqsidebar_tree" >> ↵ ~/Desktop/"Floppy Disk"; echo "X-KDE-TreeModule=Directory" >> ↵ ~/Desktop/"Floppy Disk"; echo "X-SuSE-translate=true" >> ↵ ~/Desktop/"Floppy Disk"; else rm -f ~/Desktop/"Floppy Disk"; fi fi fi
в нем два последних параметра указывают: нет поддержки жесткого диска, но есть поддержка флоппи-диска. Таких групп у меня несколько с различными сочетаниями значений параметров – в зависимости от необходимости в нужЕдинственное, что вы захотите здесь поменять, – это ных устройствах. На этом же рисунке также показано со- в строчке с sudo изменить «grep 10\\.» в соответствии с надержимое файла thinstation.conf-MAC, в нем видно, что до- стройками вашей сети. То есть если сеть 192.168.10.0/255, бавлена подгрузка пакетов samba-base и samba-server. то это будет «grep 192\\.», у меня используется сеть 10/8. Теперь нужно создать ярлычки на рабочем столе поль- Я думаю, идея вам понятна. Теперь ярлычки на рабочем стозователей в KDE. При этом если на тонком клиенте уст- ле будут появляться только тогда, когда на тонком клиенте ройства нет, то и ярлычка этого устройства быть не долж- имеются соответствующие ярлыкам устройства. но. Проверка осуществляется командой smbclient, а IP-адИ еще добавлю замечание по поводу памяти: 32 Мб рес клиента выясняется с помощью nxserver (я не настаи- на тонком клиенте хватает на то, чтобы кроме ядра ваю, что это единственный способ). Thinstation (в котором уже имеется NX-клиент) работали паДля возможности запуска nxserver в файл /etc/sudoers кеты sshd и lprng, но не хватает на поддержку Samba, жедобавляем строку: лательно ставить немного больше памяти, хотя бы 40 Мб, этого хватит на всё. ALL ALL = NOPASSWD: /srv/NX/bin/nxserver --list*, ↵ !/srv/NX/bin/nxserver [!-]*
То есть пользователям разрешается только пролистать текущие NX-сессии. Далее пришлось написать на shell небольшой код, который нужно добавить в файл /etc/bash.bashrc.local: # We test floppy and HD existing by requesting samba server # on thin client name=`whoami` if [ "$name" != nx ] && [ "$name" != "root" ] then ip=$(/usr/bin/sudo /srv/NX/bin/nxserver --list $name|\ grep 10\\.|tail -n 1|awk '{print $3}') if [ "$ip" != "" ] then # testing for harddisk existence harddisk=`smbclient -NL $ip 2>/dev/null|grep harddisk` if [ "$harddisk" != "" ] then echo "[Desktop Entry]" > ~/Desktop/Harddisk.desktop echo "Encoding=UTF-8" >> ~/Desktop/Harddisk.desktop echo "Icon=HD" >> ~/Desktop/Harddisk.desktop echo "Name=Harddisk" >> ~/Desktop/Harddisk.desktop echo "Name[ru]=Harddisk" >> ~/Desktop/Harddisk.desktop echo "OnlyShowIn=KDE;" >> ~/Desktop/Harddisk.desktop echo "Open=false" >> ~/Desktop/Harddisk.desktop echo "Type=Link" >> ~/Desktop/Harddisk.desktop echo "URL=smb://$ip/harddisk" >> ↵ ~/Desktop/Harddisk.desktop echo "X-KDE-KonqSidebarModule=konqsidebar_tree" >> ↵ ~/Desktop/Harddisk.desktop echo "X-KDE-TreeModule=Directory" >> ↵ ~/Desktop/Harddisk.desktop
34
Примеры использования NX в режиме приложений В нашей системе производится перевод системы 1С на терминальный сервер с Linux и эмулятором WINE. Одна база уже переведена, и с ней работают сотрудники нашей компании. Вот, что выяснилось. При работе на тонком клиенте у каждого пользователя имеется ярлычок на уже упомянутый скрипт /usr/bin/1c, его можно запускать столько раз, сколько нужно открыть копий приложения 1С (для работы с разными базами). Из Windows получается запустить только одну NX-сессию приложения 1С. При повторном запуске текущая сессия прерывается и восстанавливается в новом окне, то есть используется режим FreeNX «session resume» – возобновление прерванной сессии. Пришлось использовать запуск в режиме приложения NX удаленного рабочего стола Wmaker (он занимает гораздо меньше памяти, чем KDE), а в нем уже можно работать с 1С, как на тонких клиентах (можно открыть несколько копий 1С). Еще один случай. Мы принимали попытку перевести другую базу 1С (ее используют более 200 сотрудников) на тот же терминальный сервер. Сервер Proliant DL-385 c двумя Opteron был полностью загружен: при пиковой нагрузке в системе насчитывалось 150 процессов 1CV7.
администрирование exe, далее пользователи уже не могли зайти на сервер: на NX-клиенте при соединении с сервером секунд через 45 срабатывал тайм-аут, хотя спустя секунды пользовательские процессы на сервере нормально запускались. Я оставил сообщение на сайте Nomachine с предложением добавить возможность настройки тайм-аута на клиенте NX, там зарегистрировали Feature Request, но мне это уже было не нужно: пришлось придумывать другой вариант перехода, в рамках заданной темы об этом рассказывать не буду. Еще один пример. На компьютере с памятью 64 Мб проблемно использовать OpenOffice 2.0: слишком много памяти он потребляет. На помощь приходит клиент NX, работающий в режиме приложений, при этом используется память сервера, которой, как правило, много больше, чем у клиента. Примеры можно продолжать.
Несколько слов о производительности NX Я упоминал о двух NX-серверах для описания отличий в работе двух версий NX, хотя на самом деле их в нашей сети три. В настоящий момент в нашей системе используется около 50 тонких клиентов Thinstation, число которых постоянно растет. Кроме того, часть работников запускают NX-клиент из Windows для работы с приложениями, в частности с 1С. Хорошо проявил себя протокол NX. Например, при временном пропадании связи соединение не сбрасывается, а осуществляется попытка его восстановления. Когда на тонком клиенте возрастает нагрузка процессора, вывод на экран немного замедляется. Забавно наблюдать, как во время загрузки рабочего стола KDE анимированная эмблема системы SUSE временно «замирает», а спустя мгновения возобновляет его отображение с удвоенной скоростью. Я писал ранее о корректной работе в NX компьютера c процессором P-120, но, конечно, чем больше частота процессора, тем более плавно происходит отображение информации (особенно графические эффекты KDE) на экране тонкого клиента. При использовании тонких клиентов в локальной сети достаточ-
№1, январь 2007
Рисунок 3. NX-сессия Wmaker в режиме приложения
но пропускной способности 10 Мбит, никак не отразится на работе других однако начальная загрузка образа пользователей. Thinstation (у меня образ чуть меньше В заключение скажу, что в августе 9 Мб) ускорится, если использовать 2006 года на прошедшей в Сан-Франсеть 100 Мбит. Если тонкие клиенты циско выставке «LinuxWorld» фирв филиале связаны с терминальным ма Nomachine получила награду журсервером xDSL-модемами (или ины- нала «LinuxJournal» за свой продукт ми низкоскоростными соединения- NX Server 2.0 «BEST INTEGRATION ми), то лучше предусмотреть нали- SOLUTION» (за лучшее интеграциончие tftp-сервера на территории само- ное решение) [21]. В целом у NX видятся неплохие го филиала: это позволит не прокачивать каждый раз образ через узкий перспективы, сообщество Open Source канал связи, а брать его с локально- тоже не дремлет. Так что если решиго сервера. тесь использовать его у себя, то не поМогу лишь добавить, что процес- жалеете. И удачи! сы NX на сервере занимают немноP.S. Некоторые из описанных прого памяти и оказывают незначительную нагрузку на процессор(ы) отно- блем, возможно, будут уже решены сительно других приложений. Мне ка- на момент выхода журнала, присожется, что протокол NX уже коррект- единяйтесь к обсуждению статьи на но сравнивать не с протоколом RFB, форуме журнала http://www.samag.ru/ используемым VNC, а с протоколом forum. ICA от Citrix (хотя они и используются в разных системах): протоколы 1. Д и с т р и бу т и в Thinstation – ht tp: / / примерно схожи по производительs o u rc efo r g e.n et / p ro j e c t / s h ow f i l e s . ности и эффективности, вот только php?group_id = 80408 &package_ NX обойдется гораздо дешевле, если id=82039. не бесплатно. Кроме того, если гово- 2. Сайт Nomachine – http://www.nomachine. рить о надежности, вспомните, что быcom. вает, когда виснет один из основных 3. http://www.ssc.com/node/20. сервисов Citrix на сервере Windows? 4. Бушков Е. Подробное руководство по Это сразу «ощутят» все пользователи настройке тонких клиентов на основе Citrix. В Linux с NX для каждого польдистрибутива Thinstation и протокола зователя запускаются отдельные проNX. //Системный администратор, №12, цессы NX, и падение любого из них 2006 г. – C. 16-23.
35
администрирование
Размещаем пользовательские бюджеты в LDAP Часть 1
Алексей Барабанов Эта тема имеет столько способов реализации, сколько авторов. Но типичные ошибки повторяются от раза к разу. Попробуем построить среду для хранения пользовательских бюджетов в LDAP оптимальным образом. 36
администрирование
С
читается, что в данном вопросе уже нет ничего неясного. Счет вариантов настройки, предлагаемых, например, на www.opennet.ru, давно уже идет на десятки. Все авторы торопливо пробегают базовые элементы установок сервера и клиента и с триумфом подают «главное блюдо» – настройку приложений для работы с LDAP. Но, хотя приложения меняются, но именно основные настройки, копируемые авторами друг у друга, содержат спорные решения, которые никто и не пытается совершенствовать. Не говоря уже о том, что в базовых настройках надо выдержать тот минимум управляющих директив, который ни на йоту не уменьшит безопасность системы, основанной на LDAP, и одновременно не будет содержать каких-либо излишеств. Структура дерева LDAP Рассмотрим все это подробнее. В качестве рабочей среды выберем openSUSE 10.1 дит под контролем традиционной файловой системы АиА, и 10.2, и будем использовать все пакеты, в них включен- то настройки подобной службы должны удовлетворять ряные. Например, под LDAP далее станем понимать реали- ду требований. Во-первых, LDAP должен хранить всю необходимую инзацию OpenLDAP, поставляемую в указанных дистрибутивах, а именно openldap2-2.3.19-18.10 для openSUSE 10.1 формацию о бюджетах, которая используется в системе и в процессах аутентификации и авторизации. Это значит, и openldap2-2.3.27-25 для openSUSE 10.2. Если вы не имеете возможности или желания мигриро- что все поля файловой базы бюджетов следует повторить вать в SUSE, тем не менее можете воспользоваться опи- и в LDAP как минимум. Во-вторых, функциональное расширение LDAP должсанием, потому что во всех современных дистрибутивах LDAP настраивается примерно одинаково с учетом попра- но предоставляться системным службам прозрачным образом. То есть после подключения LDAP ранее определенвок на состав утилит. Для сравнения предлагаю вам обратиться к одному ные бюджеты останутся действующими и к ним добавятся из самых светлых документов на эту тему [1]. Светлых по- новые, размещенные в LDAP. И все подсистемы, испольтому, что это руководство принадлежит к тому небольшо- зующие службы АиА, не заметив подмены, будут получать му числу работ, где видно, что авторы очень хорошо пони- информацию о бюджетах, как хранимых в LDAP, так и размают, о чем идет речь. Но и их мы тоже немножечко по хо- мещенных в файловой базе аутентификации. В-третьих, использование LDAP не должно привести ду изложения поправим. Определим исходное состояние. Предположим, что уже ни к снижению надежности, ни к снижению безопасности. выполнена базовая установка openSUSE. В качестве ау- Иначе говоря, если по какой-нибудь причине произойдет оттентификационной базы используются стандартные фай- каз системы АиА в той её части, что обеспечивается за счет лы с парольными хешами, что собственно является единс- LDAP, то файловая система АиА должна работать, как и претвенно возможным решением при инсталляции изолиро- жде, и тем самым обеспечить аварийный режим для восстановления функциональности в полном объеме. ванной системы. И, в-четвертых, подключение LDAP не должно привесИ вот с этого места начнем работу. ти к изменению процедуры работы с пользовательскими бюджетами. То есть, в управлении такой композитной баЗачем нужен LDAP Или, точнее, без чего он не нужен! Это не праздный воп- зой бюджетов будут задействованы стандартные утилиты, рос. Многие понимают LDAP как дополнительное хранили- предназначенные для работы с обычными бюджетами, разще бюджетов виртуальных пользователей. Часто этим ув- мещенными в файловой базе АиА. Только соблюдение всех перечисленных условий позлекаются разработчики почтовых серверов. В какой-то степени это верно. LDAP – это, в сущности, простая база дан- волит утверждать, что подключение LDAP может привесных весьма причудливого формата. Но в рассматриваемом ти к расширению функциональности, увеличению масштаслучае предполагается в ней хранить бюджеты пользовате- бируемости и всем прочим 24 удовольствиям, приписывалей. Так в чем преимущество перед традиционной средой емым этому подходу. В противном случае, LDAP так и останется чужеродным элементом, обслуживающим сиюмихранения учетных записей? В скорости? Нет! Первое преимущество в том, что в такой базе можно нутный каприз системного администратора, решившегося разместить дополнительную информацию, связанную с те- на малообоснованную авантюру. Теперь, после того как известны и отправная точка, ми же пользовательскими бюджетами. Например, такая ини цель работы, можно приступить к настройке серверной формация необходима для работы Samba. И второе преимущество – так как LDAP является се- части. тевым сервисом, то с его помощью можно создать масштабируемую среду аутентификации и авторизации (далее Установка сервера OpenLDAP АиА) пользователей. Но так как LDAP сам по себе не мо- На этом этапе надо убедиться, что все необходимые для ражет функционировать, поскольку даже его запуск происхо- боты пакеты установлены в систему.
№1, январь 2007
37
администрирование Это можно сделать следующим образом: # L="" ; \ P="openldap2 openldap2-client samba-client samba ↵ smbldap-tool perl-ldap nss_ldap pam_ldap" ; \ for i in $P ; \ do rpm -qa | grep $i || L="$L $i" ; done ; \ [ -z "$L" ] || echo yast2 -i $L
Если что-то не будет найдено, то запустится YaST для установки недостающих пакетов и тех, что связаны с ними зависимостями. К сожалению, на доступном сейчас openSUSE GM 10.2 нет пока smbldap-tools, и это пакет придется заимствовать из дистрибутива openSUSE версии 10.1 и доставить ортодоксальным способом «rpm -ivh ...». Все команды, приведенные в статье, специально адаптированы так, чтобы было удобно их использовать для автоматического построения среды хранения бюджетов в LDAP. Команды и скрипты параметризованы, и все переменные вынесены в начало текстов, то есть все подготовлено для объединения их в единый сценарий. Вы сами можете построить таковой на основе предлагаемых материалов. Итак, понадобятся openldap2 и его клиент, библиотеки и модули для настройки работы системной АиА на основе LDAP – nss_ldap, pam_ldap, и samba3 вместе с парой дополнительных пакетов, которые упростят настройку самой базы LDAP и обеспечат дальнейшую интеграцию с samba. Perl-ldap необходим для smbldap-tools. Бывает так, что ситуация имеет прямо противоположный характер, то есть уже есть и как-то работает LDAP с настройками, которые следует изменить. Тогда надо остановить процесс slapd и удалить старую базу из /var/lib/ldap: # rcldap stop # I=/var/lib/ldap ; \ for i in $(ls -1 $I | grep -v ^DB_CONFIG) ; \ do rm -f $I/$i ; done
Кстати, то же самое можно сделать, если что-то не понравится после установки, выполненной по рекомендациям настоящей статьи. Теперь все готово к настройке. Все используемые сервером конфигурационные файлы лежат в /etc/openldap. Здесь самое время вспомнить о первом требовании к хранилищу бюджетов. Используемая в АиА база данных должна содержать все необходимые для работы поля. То есть надо в перечне включаемых схем указать те, что содержат требуемые структуры. Прежде всего, core.schema и cosine.schema – это минимум-миниморум для работы LDAP, на определения этих схем ссылаются практически все остальные Далее rfc2307bis.schema, которая, собственно, содержит определения для класса posixAccount, содержащего эквиваленты всем используемым в стандартной АиА полям. Эта схема пришла на смену ранее используемой nis.schema. Затем то, что позволит добавить дополнительные данные к определениям бюджетов – inetorgperson.schema. Немного полезного для работы почтового сервера – misc.schema.
38
И, наконец, поместим в базу поля, требуемые для работы samba3 – samba3.schema, так как далее это позволит с помощью smbldap-tools провести инициализацию базы. Конечно же, все подключенные схемы должны быть доступны в момент старта сервера, например, размещены в /etc/openldap/schema или в другом месте, что, конечно же, должно быть отражено в файле конфигурации сервера. На данном этапе надо принять соглашение о корне используемой базы. Так называемый суффикс. Поскольку база LDAP имеет древовидную структуру, то все размещенные внутри её объекты будут размещаться ниже по дереву LDAP, и их отличительные имена будут включать путь от объекта до корня последовательно и завершаться самим корнем, как суффиксом (см. рисунок). Корень может иметь совершенно произвольное название. Но надо хоть приблизительно прогнозировать дальнейшую судьбу создаваемой базы и учитывать окружение, в котором будут использоваться данные, которые неизбежно в такой базе станут скапливаться. Практически верным следует считать правило выбирать в качестве корня искусственно придуманное имя внутреннего домена. Единственно, это имя должно быть уникальным внутри локальной системы и не иметь аналогов за ее пределами примерно так же, как и всякий внутренний домен DNS не должен пересекаться с внешними, чтобы не маскировать их.Например, очень удобно выбрать для построения корня имя «office.localnet». Тогда суффиксом будет «dc=office,dc=localnet». Некоторыми источниками, особенно описывающими настройку ActiveDirectory, куда LDAP входит как составная часть, предлагается использовать в качестве суффикса реальный домен Интернета, например почтовый – kontora.ru. Это совершенно не верно. Внутренняя среда, определяемая значением корня, должна быть искусственно изолированной от внешней, а все пути трансляции прямо указываться и контролироваться. Такое построение исключит случайности и строго ограничит контакты, что увеличит безопасность внутренней системы. Никаких проблем с приемом почты или с резолвингом доменных имен в таком случае не возникнет. Напротив, предотвратит случайное их пересечение, которое может создать трудно устраняемые ошибки. Для разграничения доступа к полям базы LDAP используются специально заданные правила. Эти правила, так же как и права доступа к файлам традиционной системы АиА, таким как /etc/passwd, /etc/shadow и другим, защищают данные от неправомерного доступа. При этом такая система подразумевает, что определение прав происходит по принадлежности запроса определенному пользователю. То есть сначала пользователь пройдет этап аутентификации, и тогда его запрос будет должным образом авторизован. Но тут заключена логическая проблема. Поскольку сама система LDAP предназначена для использования в механизме АиА, то на начальном этапе, пока база пуста, ни одно заданное правило ограничения доступа не может быть выполнено в принципе. И поэтому для «раскручивания» базы LDAP на этапе инициализации использу-
администрирование ется так называемый rootdn – псевдопользователь, который имеет абсолютный доступ ко всем полям и всем записям базы вне зависимости от настроек ограничений доступа. Существование этого пользователя «вшито» в бинарные файлы. Его учетную запись не надо специально создавать в базе и его нельзя запретить. Но так как существование подобного абсолютного пользователя является прямым нарушением иерархии разграничения доступа, то есть единственная возможность заблокировать его работу – не указывать его отличительное имя и пароль, чтобы сервер LDAP не смог провести аутентификацию, если даже такой запрос поступит. Но на начальном этапе без rootdn практически не обойтись и пусть его отличительное имя будет «cn=ldaproot,dc=office,dc=localnet». Поскольку после завершения инициализации rootdn будет заблокирован, то для регулярной работы надо предусмотреть специальные LDAP-бюджеты. Эти бюджеты будут использоваться лишь для организации работы подсистем, запрашивающих данные из базы LDAP, в рамках выделенных для них полномочий. Например, предусмотрим специального искусственного пользователя, от имени которого могут работать утилиты АиА ldapadmin c отличительным именем «cn=ldapadmin,dc=office,dc=localnet», которому дадим права читать и изменять все поля базы, включая парольные хеши. Если нужно организовать для какой-то иной подсистемы особый доступ, например позволить службе DHCP беспрепятственно модифицировать отведенную ей часть базы LDAP, то точно так же, как и для АиА, надо будет зарегистрировать особого пользователя и дать ему соответствующие права. Остальные элементы конфигурационного файла сервера LDAP можно взять из шаблона, поставляемого с пакетом. Парольные фразы на данном этапе не имеют значения. Их можно принять самыми простыми и мнемоничными. Пароль rootdn в самом ближайшем времени будет заблокирован, а пароль ldapadmin ничто не помешает в дальнейшем сменить «на ходу». В итоге должно получиться чтото вроде следующего: # SUFFIX="dc=office,dc=localnet" ; \ LDAPROOT="ldaproot" ; \ ROOTDN="cn=$LDAPROOT,$SUFFIX" ; \ ROOTPW="secret" ; \ LDAPADMIN="ldapadmin" ; \ ADMINDN="cn=$LDAPADMIN,$SUFFIX" ; \ ADMINPW="admin" ; \ SCHEMA='{SSHA}' ; \ T=$(slappasswd -s $ROOTPW -h $SCHEMA) ; \ cat >/etc/openldap/slapd.conf<<EOT include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/rfc2307bis.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/samba3.schema # schemacheck on # pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args replogfile /var/lib/ldap/replica.log loglevel 0 # allow bind_v2 # # Load dynamic backend modules: modulepath /usr/lib/openldap/modules
№1, январь 2007
# # ACL's definitions access to attrs=userPassword,userPKCS12 by self write by dn="$ADMINDN" write by * auth access to attrs=shadowLastChange by self write by dn="$ADMINDN" write by * read access to * by dn="$ADMINDN" write by self write by * read defaultaccess read # # BD's definitions database bdb suffix "$SUFFIX" checkpoint 1024 5 cachesize 10000 rootdn "$ROOTDN" rootpw $T directory /var/lib/ldap # # Indices to maintain index objectClass eq index cn pres,sub,eq index sn pres,sub,eq index uid pres,sub,eq index displayName pres,sub,eq index uidNumber eq index gidNumber eq index memberUid eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub EOT
Приведенные выше команды создадут конфигурационный файл нужного содержания. После чего можно попробовать запустить сам сервер. В openSUSE стартовый скрипт использует параметры из файла /etc/sysconfig/openldap. Настроим их так, чтобы сервер LDAP прослушивал лишь внутренний петлевой интерфейс lo: # LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ LDAPINT="$LDAPSERVER:$LDAPPORT" ; \ I=/etc/sysconfig/openldap ; \ sed "/^OPENLDAP_LDAP_INTERFACES/c\ OPENLDAP_LDAP_INTERFACES=\"$LDAPINT\"" $I >$I.$$.tmp ; \ mv $I.$$.tmp $I
Такая настройка позволит не заниматься сейчас обеспечением шифрования трафика обмена данными с LDAP, так как это связано с множеством других служб и такими вопросами, как создание локального Центра Сертификации, что совершенно не укладывается в тематику статьи. После настройки /etc/sysconfig/openldap проверим правильность настроек, запустив сервер: # rcldap start # LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ LDAPINT="$LDAPSERVER:$LDAPPORT" ; \ netstat -apn | grep "LISTEN.*slapd" | \ grep $LDAPINT >/dev/null 2>&1 || echo «увы, не работает!»
Если печальное сообщение не последовало, то можно включать сервер LDAP в режим автоматического запуска «chkconfig --add ldap».
39
администрирование В противном случае надо закомментировать строчку «loglevel 0», произвести перезапуск LDAP и посмотреть, что является причиной неудачи в протоколе /var/log/messages. После исправления ошибок следует снова вернуть параметр loglevel, так как в противном случае протоколы системы будут просто забиваться огромным числом сообщений от сервера LDAP, участвующем в каждом процессе аутентификации. Если уровень протоколирования по умолчанию не позволит выяснить проблему, то следует его повысить и обратиться к руководству по OpenLDAP. Но, как уже ранее было сказано, вся последовательность описываемых действий чрезвычайно проста, полностью соответствует документации, автоматизирована и проверена на ряде серверных установок. Иначе говоря, ищите опечатки!
Настройка клиента
Названия контейнеров можно изменять произвольным образом, но так как они являются результатом соглашения разработчиков, то лучше следовать предложенному и, например, регистрировать учетные записи пользователей в «ou=Peolple». Конфигурацию нашего клиента создадим следующим образом: # LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ LDAPINT="$LDAPSERVER:$LDAPPORT" ; \ SUFFIX="dc=office,dc=localnet" ; \ cat <<EOT >/etc/ldap.conf host $LDAPINT base $SUFFIX # # Don't try forever if the LDAP server is not reacheable bind_policy soft # RFC2307bis naming contexts nss_base_passwd ou=People,$SUFFIX?one nss_base_shadow ou=People,$SUFFIX?one nss_base_group ou=Group,$SUFFIX?one nss_base_hosts ou=Hosts,$SUFFIX?one nss_base_services ou=Services,$SUFFIX?one nss_base_networks ou=Networks,$SUFFIX?one nss_base_protocols ou=Protocols,$SUFFIX?one nss_base_rpc ou=Rpc,$SUFFIX?one nss_base_ethers ou=Ethers,$SUFFIX?one nss_base_netmasks ou=Networks,$SUFFIX?one nss_base_bootparams ou=Ethers,$SUFFIX?one nss_base_aliases ou=Aliases,$SUFFIX?one nss_base_netgroup ou=Netgroup,$SUFFIX?one # attribute/objectclass mapping # Syntax: nss_map_attribute rfc2307attribute ↵ mapped_attribute nss_map_objectclass rfc2307objectclass ↵ mapped_objectclass # ldap_version 3 ssl no # # pam pam_password exop pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberUid EOT
Теперь, когда в системе есть доступный LDAP-сервер, можно приступить к настройке клиентской части. Клиентом будут пользоваться все программы, которым понадобится информация из базы, хранимой в LDAP. Именно на этом принципе основано свойство масштабирования. Хотя тогда уже, скорее всего, придется изменить адрес, прослушиваемый сервером LDAP. В нашем же случае важно подчеркнуть, что подстановка клиента производится прозрачным образом за счет использования библиотек, специально созданных для подобной работы. Это позволяет для каждого отдельного хоста настроить клиент на запросы к некоторому, возможно, и не локальному, LDAP-серверу так, что все остальные подсистемы этого хоста, запрашивая информацию через указанные библиотеки, будут получать данные из LDAP-сервера в том числе. Конечно, важно, чтобы это были широко используемые библиотеки, а не подсистемы некоторого приложения. Обращаю внимание – никаких паролей в этом файле В качестве подобных ключевых библиотек, которые настраиваются на получение данных из LDAP, очень выгод- не содержится! Всякое упоминание в этом файле специно применять nss и pam. Две эти подсистемы практичес- альных пользователей и их паролей свидетельствует о неки на 100% позволяют воспользоваться преимуществами верной настройке ограничений доступа в LDAP. Часто изLDAP, совершенно не изменяя другие аутентификацион- за невозможности работать c установленными правами ные подсистемы, входящие в целевые пакеты, например на объекты базы LDAP от имени обычных пользователей в courier-imap. Иначе говоря, именно nss и pam далее и бу- прибегают к использованию или специального пользовадут настраиваться. теля с полными правами на всю базу, или, что еще хуже, В openSUSE библиотеки nss и pam читают свои настрой- просто заставляют клиента соединяться с LDAP-сервером ки из одного и того же файла /etc/ldap.conf. Что очевид- как rootdn, все это лишь от нежелания разобраться в сущно, так как они фактически предоставляют информацию ности происходящего. одним и тем же программам на разных этапах их работы. Для того чтобы заставить систему обращаться к LDAP Путь к этому файлу «зашит» в самих библиотеках. Можно в поиске идентификационных данных, настроим службу nss. проверить его точное значение в системах, где эта истина Эта служба управляется с помощью своего конфигурацине очевидна, например для nss: онного файла /etc/nsswitch.conf, в котором задаются пути поиска информации в системе. # strings $(rpm -ql nss_ldap | grep lib) | grep ldap.conf После установки там по всем запросам обычно указан поиск в файловых базах. Надо его немножечко подКак и конфигурационный файл сервера, файл настро- править: ек клиента также имеет шаблон, которым можно восполь# cat <<EOT >$/etc/nsswitch.conf.tmp зоваться. Ключевыми значениями являются адрес сервеpasswd: compat ра и суффикс базы LDAP. Все остальные строчки заимствуshadow: files group: compat ются из стандартного шаблона.
40
администрирование services: files ldap netgroup: files ldap aliases: files ldap passwd_compat: ldap group_compat: ldap EOT # grep -v "^\(#\|$\|passwd\|shadow\|group\| ↵ services\|netgroup\|aliases\)" \ /etc/nsswitch.conf >>/etc/nsswitch.conf.tmp # mv /etc/nsswitch.conf.tmp /etc/nsswitch.conf
метр use_ldap для pam_unix2 с помощью этой утилиты не подставить никак. То есть можно предположить, что в самом ближайшем будущем этот ключ пропадет и в самом pam_unix2. Иначе говоря, в SUSE, начиная с версии 10.2, для работы с LDAP предполагается использовать традиционный для остальных дистрибутивов pam_ldap. К сожалению, как и многое в SUSE, это решение не получило грамотного технологического воплощения. Да и вопрос, зачем тогда нужен pam_unix2, если есть опять же традиционный pam_unix, остается открытым. Итак, для openSUSE 10.1 исправляем настройки pam_unix2 и тем самым решаем все проблемы:
Вот теперь во всех актуальных для нас путях указано искать еще и в LDAP, а для passwd и group назначен специальный совместимый режим, в котором также добавлен путь поиска в LDAP. Здесь очень важно, что поиск shadow остался толь# cat <<EOT >/etc/security/pam_unix2.conf ко в файловой базе. Это верно, тут нет ошибки. Так как auth: use_ldap shadow это не просто база, это совершенно конкретный account: use_ldap password: use_ldap алгоритм хранения хешей. И подменять его на LDAP не session: none следует. Тем более не надо делать такого «винегрета» – EOT shadow: tcb ldap files nisplus nis, как указано в [1]. Пусть все парольные хеши, что доставляются из shadow, останутся Для openSUSE 10.2 можно применить такой же «силооригинальными. Pam сможет и так воспользоваться хеша- вой» вариант и просто дописать в каждую строку вызова ми из LDAP, а применение nss для доступа к хешам заста- pam_unix2 параметр use_ldap : вит использовать самые простейшие из криптоалгоритмов. #!/bin/sh Подробнее об этом в [2]. for i in /etc/pam.d/common-* ; do Здесь же подчеркнем, что обязательное существова[ -L $i ] || { echo $i | grep -v backup$ >/dev/null && { ние локальных учетных записей необходимо для обеспечеgrep "pam_unix2" $i >/dev/null && { ния аварийного режима работы. Надо быть уверенным, что sed '/pam_unix2/s/$/use_ldap/' $i >$i.$$.tmp mv $i.$$.tmp $i всегда есть активная учетная запись администратора, вос} пользовавшись которой, можно вмешаться в работу систе} } мы в экстренном случае. done На этапе проверки механизмов функционирования nss следует отключить кэширование запросов «rcnscd stop». Можно еще выполнить «pam-config -a --ldap» и получить Это позволит проверять работу системы сразу же после конфигурацию, которая будет почти работоспособной. И даее модификации. В штатном режиме Name Service Cache же воспользоваться такой настройкой ..., если, точнее, когDaemon будет работать как следует. да будут исправлены описки в pam-config. А пока прибегнем Последнее, что осталось в настройке АиА, – переклю- к описанному выше способу с использованием параметра чить pam в режим работы с LDAP. В openSUSE применяет- use_ldap, так как нашей целью является создание нужной ся исключительно оригинальный механизм подключения конфигурации оптимальным путем, а не бесконечное исLDAP в pam. Вместо традиционного указания порядка и пре- правление ошибок разработчиков. Обладатели дистрибуимущества использования разных источников АиА-инфор- тивов, отличных от openSUSE, могут взять вариант настромации применяется композитный модуль pam_unix2, кото- ек pam из [1], опять же с поправкой на особенности вклюрый имеет собственный конфигурационный файл. То есть ченных в дистрибуцию утилит. вместо настройки общих системных файлов в /etc/pam.d Осталось добавить специальные разделители в те файиспользуется /etc/security/pam_unix2.conf. ловые базы, которые, как было указано выше, работают Кроме неявной политики указания очередности поис- в режиме совместимости (compat): ка, что очень подробно критикуется в [2], такой подход со# grep "^+:::" /etc/passwd >/dev/null || ↵ здает еще и лишнюю точку настройки. Самое смешное, echo "+::::::" >>/etc/passwd что вплоть до релиза 10.1 pam_unix2 искал свой собствен# grep "^+:::" /etc/group >/dev/null || ↵ echo "+:::" >>/etc/group ный файл настроек, а вот, начиная с openSUSE 10.2, он уже его не ищет, а снова принимает параметры из традиционВсе, теперь настройка клиента завершена. ных файлов /etc/pam.d. Но для управления ими теперь стала применяться утилита pam-config, которая согласно каким-то своим, прописанным в ее бинарном коде, правилам создает Инициализация базы LDAP конфигурационные файлы для подсистемы pam. Как уже было сказано ранее, в этом процессе нам поможет Но и тут не без юмора: эта утилита, которую написал пакет smbldap-tools. Безусловно, можно обойтись и без нетот же автор, что и pam_unix2 – Thorsten Kukuk, поддержи- го. Но так мы сократим работу за счет автоматизации часвает pam_unix2.conf, несмотря на то, что сам pam_unix2 ти операций. уже не имеет этого конфигурационного файла. Изучение Пакет smbldap-tools представляет собой набор происходного текста позволяет узнать, что лишь с целью об- грамм, которые помогают манипулировать учетными запиратной совместимости. Откровением будет то, что пара- сями, размещенными в LDAP. Все эти программы исполь-
№1, январь 2007
41
администрирование зуют единый конфигурационный файл /etc/smbldap-tools/ smbldap.conf, который надо перед началом работы отредактировать или создать заново, что в данном случае проще. Параметры, важные в настройке, определяют сетевой адрес, на котором доступен сервер LDAP, суффикс базы и некоторые параметры, специфичные для PDC, который можно организовать в случае необходимости с помощью samba3 и той базы LDAP, что будет проинициализирована. Кроме уже ранее обсуждавшихся параметров добавились: имя домена NT, имя сервера, почтовый домен (кстати, опять же не имеющий никакого отношения к реально получаемой почте) и так называемый SID, который используется в построении учетных номеров домена NT. Если далее не планируется использовать samba на этом хосте, то все перечисленные параметры можно назначить достаточно произвольно. Итак, сделаем это: # NT4DOM="Office" ; \ LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ SUFFIX="dc=office,dc=localnet" ; \ NBTNAME="SERVER" ; \ MAILDOM="office.localnet" ; \ LOCALSID=$(net getlocalsid | awk 'BEGIN{FS="is: "} ↵ {print $2}') ; \ cat >/etc/smbldap-tools/smbldap.conf <<EOT # main SID="$LOCALSID" sambaDomain="$NT4DOM" # ldap slaveLDAP="$LDAPSERVER" slavePort="$LDAPPORT" masterLDAP="$LDAPSERVER" masterPort="$LDAPPORT" ldapTLS="0" #verify="require" cafile="/etc/smbldap-tools/ca.pem" clientcert="/etc/smbldap-tools/smbldap-tools.pem" clientkey="/etc/smbldap-tools/smbldap-tools.key" suffix="$SUFFIX" usersdn="ou=People,\${suffix}" computersdn="ou=Hosts,\${suffix}" groupsdn="ou=Group,\${suffix}" idmapdn="ou=Idmap,\${suffix}" sambaUnixIdPooldn="sambaDomainName=$NT4DOM,\${suffix}" scope="sub" hash_encrypt="SSHA" # accounts userLoginShell="/bin/false" userHome="/home/%U" userHomeDirectoryMode="700" userGecos="Office User" defaultUserGid="513" defaultComputerGid="515" skeletonDir="/etc/skel" defaultMaxPasswordAge="99" # samba userSmbHome="\\\\$NBTNAME\\homes\%U" userProfile="\\\\$NBTNAME\\profiles\%U" userHomeDrive="H:" userScript="%U.cmd" mailDomain="$MAILDOM" # misc with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd" EOT
И после настройки конфигурации smbldap-tools добавим к ней еще один маленький файлик, в котором укажем учетные данные, с которыми утилиты из пакета smbldaptools будут обращаться к LDAP: # SUFFIX="dc=office,dc=localnet" ; \ LDAPADMIN="ldapadmin" ; \ ADMINDN="cn=$LDAPADMIN,$SUFFIX" ; \
42
ADMINPW="admin" ; \ cat >/etc/smbldap-tools/smbldap_bind.conf <<EOT slaveDN="$ADMINDN" slavePw="$ADMINPW" masterDN="$ADMINDN" masterPw="$ADMINPW" EOT
Все параметры, использованные в скрипте, как и ранее, перечислены в самом начале. Они должны совпадать с ранее использованными и меняться в случае их модификации. Кстати сказать, это единственное место, где пароль администратора LDAP указывается в открытом виде. И это неизбежность. Фактически это чрезвычайно ослабляет защищенность PDC, построенного на основе samba3. В нашем случае использование smbldap-tools носит вспомогательный характер. И более того, можно обойтись без этого пакета, но тогда надо будет написать собственную программу инициализации LDAP и собственную программу, устанавливающую парольные хеши, размещенные в LDAP, от суперпользователя. То есть отказ от smbldap-tools противоречит основному принципу системного администрирования – максимально использовать уже созданные средства. Опираясь на smbldap-tools, можно быть всегда уверенным, что разработчики этого пакета правильно модифицируют свои программы для работы со следующей версией LDAP и samba, так что нам останется лишь исправить мелкие ошибки. Но если не планируется использовать из smbldal-tools ничего, кроме утилиты smbldap-populate, то /etc/smbldap-tools/ smbldap_bind.conf можно и не настраивать. Или настроить непосредственно перед вызовом, а потом удалить. Теперь можно воспользоваться инструментарием smbldap-tools для создания ldiff, которым далее проинициализируем базу LDAP: # I=/tmp/tmp.ldif ; \ smbldap-populate -e $I -a Administrator -k 0 -m 0 ↵ -u 2000 -g 2000 ; \ sed '/^#/s/#//' $I | sed '/^objectClass: posixGroup/i\ objectClass: nisNetgroup' >init.ldiff ; \ rm -f $I
Все в полученном файле хорошо, кроме того, что ряд записей закомментирован – поправим, уберем комментарий, да еще забыт очень важный для создания групп класс nisNetgroup – поправим, добавим. Полученный файл сохраним. Если что-то еще не устраивает, его можно отредактировать вручную. Рекомендую его обязательно просмотреть и сравнить с тем, что предлагается в [1]. Можно сказать так, в [1] минимальный вариант, а тот, что создает smbldap-populate – предпочтительный. Вот самый важный момент, после которого номинально LDAP начинает работать – загрузка базы: # SUFFIX="dc=office,dc=localnet" ; \ LDAPROOT="ldaproot" ; \ ROOTDN="cn=$LDAPROOT,$SUFFIX" ; \ ROOTPW="secret" ; \ ldapmodify -v -a -D "$ROOTDN" -H ldap://localhost ↵ -x -w $ROOTPW -f init.ldiff
Таким образом, база проинициализирована, корневой объект LDAP, соответствующий выбранному суффиксу «dc=office,dc=localnet», создан, и можно приступить к её наполнению.
администрирование Первым делом добавим учетную запись служебного пользователя – администратора LDAP: # SUFFIX="dc=office,dc=localnet" ; \ LDAPROOT="ldaproot" ; \ ROOTDN="cn=$LDAPROOT,$SUFFIX" ; \ ROOTPW="secret" ; \ LDAPADMIN="ldapadmin" ; \ ADMINDN="cn=$LDAPADMIN,$SUFFIX" ; \ ADMINPW="admin" ; \ SCHEMA='{SSHA}' ; \ cat <<EOT | ldapmodify -v -a -D "$ROOTDN" ↵ -H ldap://localhost -x -w $ROOTPW dn: $ADMINDN cn: $LDAPADMIN sn: $LDAPADMIN objectClass: person objectClass: top description: LDAP Administrator stuff userPassword: $(slappasswd -s $ADMINPW -h $SCHEMA) EOT
После добавления бюджета «cn=ldapadmin,dc=office, dc=localnet» можно использовать его отличительное имя для дальнейшей модификации базы LDAP и, значит, встроенный бюджет rootdn более не понадобится, и его отличительное имя и пароль можно безбоязненно удалить из конфигурационного файла: # I=/etc/openldap/slapd.conf ; \ grep -v "root\(dn\|pw\)" $I >$I.tmp ; \ mv $I.tmp $I
#!/bin/bash SUFFIX="dc=office,dc=localnet" LDAPADMIN="ldapadmin" ADMINDN="cn=$LDAPADMIN,$SUFFIX" ADMINPW="admin" cat /etc/group | grep -v ^+ | awk -F: '{print $1, $3}' | ↵ while read GNAME GID ; do cat <<EOT dn: cn=$GNAME,ou=Group,$SUFFIX objectClass: posixGroup objectClass: nisNetgroup objectClass: top cn: $GNAME gidNumber: $GID description: Unix group "$GNAME" userPassword: {crypt}x -- пустая строка -EOT done | ldapmodify -v -a -D "$ADMINDN" ↵ -H ldap://localhost -x -w $ADMINPW
Все группы, кроме «users», добавятся без ошибок, а ошибка добавления «users» не должна привести в замешательство, так как это очевидно, поскольку она уже создана как «Users». Состояние базы LDAP можно посмотреть с помощью утилиты slapcat или через интерфейс консольного клиента: # SUFFIX="dc=office,dc=localnet" ; \ LDAPADMIN="ldapadmin" ; \ ADMINDN="cn=$LDAPADMIN,$SUFFIX" ; \ ADMINPW="admin" ; \ ldapsearch -LLL -w "$ADMINPW" -D "$ADMINDN" \ -v -H ldap://localhost -x -b "$SUFFIX" ↵ "(objectClass=*)" >dump.ldiff
И перезапустить сам LDAP-сервер «rcldap restart» для того, чтобы изменения вступили в силу. Ну вот, теперь система АиА, использующая LDAP для хранения бюджетов пользователей, практически полностью готова к работе. ПракПроверяется работа LDAP с помощью утилиты getent. тически, да не совсем. Здесь уже возникают соображения совсем не триви- Эта программа позволяет вывести содержимое любой сисального характера и свойственные, скорее всего, лишь темной базы из nsswitch.conf так, как она «видится» систедля среды openSUSE. Дело в том, что создание пользова- ме. В базах passwd и group должны присутствовать объектельских бюджетов сопровождается регистрацией в соот- ты, размещенные в LDAP. Например, проверим group: ветствующих группах. При использовании smbldap-tools пользовательские бюджеты будут размещаться в группах, # strings $(rpm -ql nss_ldap | grep lib) | grep ldap.conf характерных для samba окружения. А при использовании «useradd ...» будут использоваться те параметры, которые video:x:33:alekseybb video:*:33: записаны в /etc/default/useradd: # cat /etc/default/useradd GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel GROUPS=video,dialout CREATE_MAIL_SPOOL=no
То есть, согласно этим настройкам, каждый пользователь будет регистрироваться в группах video и dialout. Можно, конечно, их модифицировать, но тогда надо забыть о принципе прозрачности представления сервиса LDAP, не говоря уже о том, что это может создать трудности, поскольку на принадлежности к группам строится традиционная иерархия прав в UNIX. Значит, указанные группы необходимо тоже разместить в базе LDAP. Чтобы не создавать проблем на будущее, проще ВСЕ группы продублировать в LDAP. Воспользуемся для этого вот таким простеньким скриптом:
№1, январь 2007
Первая строка из файловой базы, а вторая из LDAP. Иначе говоря, работает! Таким образом, все составные части системы аутентификации и авторизации подготовлены для использования LDAP в качестве хранилища учетных записей. В следующей части статьи будет проведена детальная проверка этой схемы, выявлены ее недостатки и указаны преимущества. Пытливые читатели могут, не дожидаясь следующего номера, испробовать все, здесь описанное, в работе. Приведенные выше скрипты не будут подвергаться переделке в ходе дальнейшего обсуждения. А вот впечатления от их использования можно сравнить с теми, что послужили материалом для второй части статьи. 1. Настройка OpenLDAP и его клиентов – http://www.freesource.info/ wiki/ALTLinux/Dokumentacija/OpenLDAP?v=1845. 2. Барабанов А. LDAP и Все-Все-Все. Черновик версии 2 – http:// www.barabanov.ru/arts/LDAPremarks-draft-2.pdf.
43
администрирование
Какова в действии система резервирования AMANDA
Сергей Яремчук Система резервирования информации AMANDA считается одной из лучших среди бесплатных. Но многих удерживают от ее использования два фактора: мнимая сложность в настройках и то, что она работает только с ленточными накопителями. Попробуем доказать необоснованность таких заблуждений.
П
роект AMANDA, или Advanced Maryland Automatic Network Disk Archiver, стартовал в 1992 году в департаменте компьютерных технологий университета Maryland США, под руководством Джеймса да Сильва (James da Silva), когда потребовался инструмент для резервирования информации с многочисленных клиентских систем на единственный сервер. Постепенно проект утратил поддержку в родных стенах, и исходные тексты были перемещены на Sourceforge [2]. В настоящее время AMANDA разрабатывается многими добровольцами, и хотя не заявлена лицензия GNU GPL, любой желающий может модифицировать код по своему усмотрению, распространять и продавать, при условии что авторство будет сохранено.
Основные характеристики AMANDA является удобной надстройкой к стандартным UNIX-программам dump/restore, GNU tar и некоторым другим. Поэтому ее основные характеристики следует рассматривать исходя из возможностей базовых утилит. Ведь dump понимает только файловые системы ext2/3, с ReiserFS, Reiser4 и XFS он не дружит. При попытке выполнить резервирование с помощью dump на такой
44
файловой системе вы получите чтото вроде: /dev/hda5: Bad magic number in super-block while opening filesystem
При работе с XFS dump в AMANDA подменяется другой утилитой – xfsdump, работающей в паре с xfsrestore. А вот файлы с ReiserFS можно резервировать с помощью GNU-tar, к тому же tar различает метки времени и при архивировании позволяет исключить отдельные файлы и каталоги. Есть еще одна особенность, dump может архивировать разделы без их предварительного монтирования, работает dump быстрее tar, но копию «живой» системы с его помощью создавать рискованно. А вот если создается копия с tar, то такой раздел должен быть предварительно смонтирован. Последние версии AMANDA могут создавать резервные копии информации с компьютеров под управлением Windows посредством Samba либо с помощью клиента, компилированного под cygwin.Сравнить основные возможности AMANDA с другими системами резервного копирования вы можете в статье [3]. AMANDA работает по клиент-серверной схеме. На сервере запускается команда amdump с указанием за-
дания на резервирование. В задании указывается: источник данных, расположение клиента, отвечающего за создание резервной копии, а также параметры создания резервной копии. Клиент может быть установлен на одном компьютере с сервером либо на всех компьютерах, которым требуется архивация. В первом случае для доступа к компьютерам используются все доступные методы аутентификации: Kerberos 4/5, OpenSSH, rsh, пароль Samba. В последней версии добавились еще два: bsdtcp и bsdudp. Во втором случае на клиенте создается специальный файл .amandahosts, в котором записаны системы, которые могут к нему обращаться за данными. Клиент ожидает подключение сервера на 10080 UDP-порту или 10081/tcp, если используется Kerberos – kamanda, слушая его посредством inetd/xinetd. Если аутентификационная информация его удовлетворяет, то для передачи данных открывается новое соединение. При этом используется свой протокол, работающий поверх UDP или TCP. Все настройки параметров резервирования производятся на сервере. Хотя в последней на момент написания статьи версии AMANDA 2.5.1 появился и необязательный клиентский конфигурационный файл amanda-client.conf,
администрирование но основное его назначение – безопасное восстановление информации с помощью утилиты amrecover. AMANDA поддерживает шифрование информации как на клиенте, так и на сервере, для этих целей используется несимметричный GPG или симметричный amcrypt-алгоритм. Гибко реализовано сжатие информации, это можно произвести как на клиенте, так и на сервере. Если сжимать информацию на клиенте, это уменьшит нагрузку на сеть, если на сервере, то снизит нагрузку на маломощную машину клиента. Резервирование можно настроить в пределах одной конфигурации, но если на сервере имеются несколько устройств архивации, необходимо использовать несколько независимых конфигураций. Посредством AMANDA можно реализовать полное или инкрементное резервирование информации. AMANDA изначально построена и оптимизирована для работы с ленточными накопителями, но путем несложных манипуляций можно в качестве источника хранения использовать раздел жесткого диска, CD/DVD и Zip или раздел Samba. Причем раздел диска может быть размечен на несколько частей, имитирующих несколько лент. Процессом резервирования можно руководить вручную, хотя обычно его запускают с помощью cron. Результат операции будет записан в журнал, также возможно и отправление итогового e-mail сообщения.
Устанавливаем AMANDA Настроить AMANDA для работы со стриммером просто, но в небольших и средних организациях не всегда есть средства, да и необходимость в покупке дорогого устройства. Лучше использовать жесткий диск или копировать информацию на CD/DVD-диски. Вот этим мы и займемся. Я использовал дистрибутив KUbuntu 6.06 LTS. Вы возразите, что это дистрибутив для настольного применения, но именно в процессе настройки AMANDA в KUbuntu пришлось столкнуться с ситуацией, которой не было в других дистрибутивах. Исходные тексты AMANDA и прекомпилированные пакеты для Red Hat Enterprise Linux 3.0/4.0, Fedora Core 3/4/5, SUSE Linux и Enterprise Server 10 и клиент для Windows можно получить с [5]. В репозитарии Ubuntu также есть пакеты AMANDA, но на момент написания статьи это была более ранняя версия 2.4.5p1. Также в репозитарии имеется и еще один компонент будущей системы архивирования CDRW-Taper [4], который представляет собой замену стандартному компоненту AMANDA – taper, делая возможным запись резервных копий вместо ленты на носители СD-RW, DVD+R/W или DVD-R/W. В документации AMANDA описано, как использовать вместо ленты жесткий диск, но CDRWTaper также с этим справляется на отлично, к тому же при его использовании не требуется никаких особых манипуляций. Все это можно установить одной командой^ $ sudo apt-get update $ sudo apt-get install amanda-server cdrw-taper
И если планируется резервировать информацию и сервера, а также Samba-ресурсов, то добавляем и amanda-client. Если планируется установка с исходных текстов, то в общем случае никаких параметров задавать не надо, deb-пакет сервера AMANDA собран с такими параметрами:
№1, январь 2007
./configure--prefix=/usr --bindir=/usr/sbin--mandir=/usr/ share/man --libexecdir=/usr/lib/amanda--enable-shared --sysconfdir=/etc --localstatedir=/var/lib --with-debugging= /var/log/amanda; --with-gnutar-listdir=/var/lib/amanda/gnutar-lists – расположение файла, в который заносится информация для GNU-tar, на клиентском компьютере; --with-index-server=localhost – сервер хранения индексов; --with-user=backup --with-group=backup – пользователь и группа, от имени которых будет работать AMANDA; --with-bsd-security – активация rsh/rlogin; --with-amandahosts – использование специального файла .amandahosts вместо .rhosts или /etc/hosts.equiv; --with-smbclient=/usr/bin/smbclient – расположение файла smbclient, также возможно понадобится опция --with-samba-user для указания пользователя Samba; --with-tcpportrange=50000,50100 --with-udpportrange= 840,860 – привязка TCP- и UDP-портов в пределах указанных значений, по умолчанию ограничений нет. Кроме того, возможны параметры --with-client-only (--without-server) для построения только клиентской системы или --with-server-only (--without-client) – только серверного. Если в качестве транспорта или аутентификации планируется использовать защищенные протоколы, то добавьте параметры--with-krb4-security, --with-krb5-security, --with-rsh-security, --with-ssh-security, --with-bsdtcp-security или --with-bsdudp-security. После конфигурирования стандартная установка. Для работы CDRW-Taper понадобится Perl, пакет cdrtools, и если вы планируете использовать DVD-диски, то и dvd+rwtools, а также для отправки отчетов по электронной почте и SMTP-сервер. В качестве последнего вы можете использовать Sendmail, QMail или Postfix. CDRW-Taper является Perl-скриптом. Вся установка производится вручную. Сначала переименовываем файл taper, находящийся в каталоге, на который указывает переменная libexecdir. То есть в случае с KUbuntu /usr/lib/amanda/ на taper.orig: $ sudo /usr/lib/amanda/taper /usr/lib/amanda/taper.orig
Затем в этот же каталог необходимо поместить Perlскрипт taper, а также файл taperlib.pm, а amlabel-cdrw – в каталог, в котором находится файл из комплекта AMANDA amlabel. В нашем случае это /usr/sbin. В документации сказано, что следует заглянуть внутрь taperlib.pm и amlabel-cdrw и убедиться, все ли переменные соответствуют системному окружению. В случае с Kubuntu ничего изменять не пришлось. Единственное проверьте, чтобы каталог, в котором лежит taperlib.pm, был виден в переменной Perl @INC. Перед установкой добавьте пользователя и группу, от имени которых будет работать AMANDA. Этот пользователь должен также быть включенным в группу disk.
Файлы настроек AMANDA Основной файл настроек называется amanda.conf, в нем содержатся настройки задания. AMANDA будет его искать
45
администрирование в каталоге --sysconfdir=/etc, то есть /etc/amanda. В этом случае команду для резервирования amdump, да и остальные можно будет запускать без каких-либо дополнительных параметров. Считается хорошим тоном для каждого задания на резервирование создавать свой подкаталог в /etc/amanda. В Debian и дистрибутивах, от него произошедших, по умолчанию создается подкаталог /etc/amanda/DailySet1, содержащий примеры конфигурационных файлов. Его я и буду использовать в примере. Каждый подкаталог хранит настройки отдельного задания, то есть в том случае, если у вас два стриммера, создаются два каталога с настройками и так далее. К команде в этом случае добавляется название каталога. Кроме него, в этом же каталоге находится файл disklist, в котором указываются ресурсы, которые должны резервироваться при выполнении этого задания, и файл tapelist с информацией о лентах. Последний файл необходимо создать, заполняется он автоматически или с помощью утилит amlabel и amlabel-cdrw. $ sudo touch /etc/amanda/daily/tapelist $ sudo chown backup:backup /etc/amanda/daily/tapelist
Конфигурационный файл amanda.conf Рассмотрим пример файла /etc/amanda/DailySet1/amanda.conf применительно к использованию CDRW-Taper. org "DailySet1" # Название организации будет использовано в отчете, # будет видно в поле «Subject:», поэтому есть смысл # проставить имя задания mailto "grinder" # Пользователь или адрес, куда будет отправлено # e-mail-сообщение dumpuser "backup" # Пользователь, от имени которого будет выполняться задание inparallel 4 # Максимальное количество параллельно резервируемых ресурсов, # максимальное число 63 может быть увеличено в параметре # MAX_DUMPERS в server-src/driverio.h netusage 600 # Максимальная сетевая загрузка в Кбайт в сек. dumpcycle 1 weeks # Количество дней, через которое производится полное # резервирование, по умолчанию 10 дней, если установить # в 0, то полное резервирование будет производиться # при каждом запуске runspercycle 5 # Необязательный параметр показывает количество запусков # amdump в одном dumpcycle, ведь в выходные программу # резервирования запускать не обязательно tapecycle 9 tapes # Общее число лент, используемых при резервировании, # в нашем случае это DVD-диски. На каждый день dumpcycle # минимум один диск + резерв, чтобы не перекрывались # до следующего полного копирования bumpsize 20 MB # Минимальный порог для перехода на следующий инкрементный # уровень (по умолчанию 10 Мб), взамен возможно использование # bumppercent для указания размера в процентах bumpdays 1 # Позволяет устранить избыточность, минимальное количество # дней для перехода на следующий инкрементный уровень, # значение по умолчанию 2 дня
46
#tpchanger "no-changer" # Интересная опция, позволяющая подменить или изменить # настройки ленточного накопителя (tape changer). # В каталоге /vat/lib/amanda/ доступно 13 обработчиков, # например, chg-disk позволяет вместо ленты писать # на жесткий диск, но нам он сейчас не нужен. # Далее параметры идут специфично для CDRW-Taper tapedev "/media/cdrom0" # Механизм выбора ленты, но в нашем случае это каталог, # куда монтируется CD/DVD-устройство, совпадающий с /etc/fstab rawtapedev "/dev/hdc:0,0,0" # Указывает на реальный файл устройства, в случае # с CDRW-Taper, плюс номер устройства в понимании cdrecord, # т.е. cdrecord -scanbus tapetype DVD # Тип устройства, его описание дается в отдельной # секции файла labelstr "^local[0-9]*$" # Регулярное выражение, соответствующее меткам, которыми # будут помечаться диски/ленты, т.е. в этом случае # возможно 11 меток/дисков вида local, local0 – local9. # Обратите внимание, что в метке не допускаются пробелы, # табуляция и некоторые другие символы diskdir "/var/cache/cdrw-taper " # Каталог, куда будут складываться резервируемые копии файлов disksize 10 GB # Сколько места можно использовать в diskdir, # лучше когда в него помещается вся информация dumpcycle, # тогда резервные файлы можно будет хранить и там, # не удаляя infofile "/var/lib/amanda/DailySet1/curinfo" # База имен файлов logfile "/var/log/amanda/DailySet1/log" # Журналы indexdir "/var/lib/amanda/DailySet1/index" # Индексные файлы # tapetypes # Устройства хранения информации, описывается скорость, # размер блока и объем define tapetype HP-DAT { comment "DAT tape drives" length 1900 mbytes filemark 100 kbytes speed 500 kbytes } # Для DVD в документации ничего не сказано, # я записал так define tapetype DVD { comment "DVD-RW" length 4700 mbytes speed 1385 kbytes }
Описания dumptype в amanda.conf Дальше в файле идут описания типов резервирования, которые будут использоваться в файле disklist. Каждое описание может содержать до 23 параметров. Привожу часть из них, чтобы показать некоторые возможности AMANDA: auth – аутентификация по умолчанию bsd, возможны krb4, krb5 и ssh. comment – комментарий. comprate – степень сжатия, отдельно для полного и для инкрементного. По умолчанию «comprate 0.50, 0.50», если второй цифры нет, то используется первая.
администрирование compress – конкретизируются параметры сжатия. На-
звания говорят сами за себя. Например, по умолчанию используется client fast, есть none, server server best и другие. program – программа для создания копии, dump по умолчанию, возможно GNUTAR. encrypt – шифрование файлов: none (умолчание), client, server. kencrypt – шифрование потока. vexclude – список шаблонов файлов, которые не будут резервироваться. index – создание индекса файлов. strategy – стратегия создания дампа: standard – первая версия полная, последующие инкрементные; nofull – всегда изменения; noinc – всегда полный; skip – пропуск; incronly – только инкрементное, но в отличие от nofull полная копия при первом запуске не создается. Названия заготовок также говорят сами за себя. define dumptype always-full { comment "Full dump of this filesystem always" options no-compress priority high dumpcycle 0 maxcycle 0 } define dumptype comp-user-tar { program "GNUTAR" comment "partitions dumped with tar" options compress-fast, index, exclude-list ↵ "/etc/amanda/exclude.gtar" priority medium } define dumptype comp-user { comment "Non-root partitions on reasonably fast machines" options compress-fast priority medium }
Настройка ресурсов для архивирования
Например: client1 amandaserver amandaserver
//client1/backupc //windows1/C$ /home
comp-user-tar comp-user-tar comp-user-tar
За создание архива ресурса //client1/backupc отвечает компьютер client1, именно к нему будет отправлен запрос при запуске amdump. Архивирование //windows1/C$ и /home будет производить сам сервер, поэтому на нем также должен быть установлен клиент AMANDA. Учтите, что такая запись работать не будет: amandaserver
/dev/hda5
comp-user-tar
Ошибка в журнале описана так: sendsize[5573]: time 0.151: /bin/tar: hda9: Cannot chdir: No such file or directory sendsize[5573]: time 0.152: /bin/tar: Error is not recoverable: exiting now
Описание типа comp-user-tar предполагает использование tar, а он работает только со смонтированными ресурсами. Замените на comp-user, который подразумевает dump, или укажите вместо файла устройства /dev/hda5 точку монтирования. Для описания параметров доступа к Samba-ресурсам используется файл /etc/amandapass. В нем должно содержаться описание системы, пароль и опционально может быть указана рабочая группа. Примерно так: //windows1/C$ p@ssw0rd
WORKGROUP
При стандартной (bsd) аутентификации доступа к UNIXсистемам применяется файл amandahosts, который является аналогом .rhosts только для AMANDA. По умолчанию этот файл должен находиться в домашнем каталоге пользователя backup – ~backup/.amandahosts. Но в большинстве дистрибутивов каталог пользователя AMANDA не создается, поэтому можно использовать /etc/amandahosts. Он состоит из строк, описывающих узлы и пользователя, который имеет к ним доступ, с версии 2.5.1 добавился и третий параметр – имя сервиса. Так, на клиенте этот файл будет выглядеть так:
Ресурсы для архивирования описываются в другом файле – amandaserver backup amdump disklist. Каждая запись состоит из трех полей. В первом поле – имя узла, отвечающего за создание архива, причем рекомендовано применение полного имени. Если архивиНа сервере: руется ресурс Samba, то здесь указывают узел, на котором client1 backup amindexd amidxtaped установлен клиент AMANDA, работающий с smbclient. Есamandaserver backup amdump ли это локальная система, также необходимо использовать # это для работы клиента на этом же узле реальное имя системы, отличное от localhost. Во втором поле – архивируемый ресурс, здесь может Если использовать в последнем примере вместо имеиспользоваться имя раздела диска (hda3), имя устройс- ни узла localhost. тва (/dev/hda3), но лучше использовать имена каталогов localhost backup amdump файловой системы (/home), так как при переконфигурации диска не потребуется изменение настроек AMANDA и с tar проблем не будет. В случае сетевого UNIX/Samba То клиент, запущенный на этом же компьютере, работать ресурса следует использовать схему //имя_системы/ре- откажется, а в журнале появится такая запись: сурс – //host1/C$. amandad: time 0.003: bsd security: remote host localhost user И последнее поле – тип архивирования, взятый с amanda. backup local user backup conf, его название должно быть правильным, иначе вы поamandad: time 0.029: check failed: [access as backup not allowed from backup@localhost] amandahostsauth failed лучите ошибку.
№1, январь 2007
47
администрирование Владельцем файлов amandahosts и amandapass должен быть пользователь backup, права доступа устанавливаются как 0600 или лучше 0400.
Настройка сетевых сервисов Теперь осталось настроить сетевые сервисы. В первую очередь убеждаемся, что в файле /etc/services они записаны. amanda amandaidx amidxtape
10080/udp 10082/tcp 10083/tcp
Далее необходимо настроить работу демонов, отвечающих за архивирование, через xinetd. На клиенте это amandad, на сервере настраивается запуск демонов amindexd, amidxtaped, отвечающих за создание индексов и работу с устройствами хранения. Для восстановления информации потребуется и работа amandad на сервере. Заносим в файл /etc/xinetd либо в отдельные файлы в каталоге /etc/xinet.d/ информацию о сервисах. Здесь также, начиная с версии 2.5.1, есть изменения, направленные на усиление безопасности. Так, на клиенте файл должен иметь примерно такой вид: service amanda { only_from socket_type protocol wait user group groups server server_args disable }
= = = = = = = = = =
amandaserver # добавилось в 2.5.1 dgram udp yes backup backup yes /usr/lib/amanda/amandad -auth=bsd amdump no
На сервере параметр server_args должен дополнительно включать amindexd amidxtaped, а only_from – описания всех клиентов. Привожу пример для bsdtcp аутентификации. service amanda { only_from socket_type protocol wait user group groups server server_args disable }
= = = = = = = = = =
client1 client2 amandaserver stream tcp no amandabackup disk yes /usr/lib/amanda/amandad -auth=bsdtcp amdump amindexd amidxtaped no
Кстати, при установке с помощью пакетов был создан конфигурационный файл для inetd с необходимыми записями. Полный комплект. Но при попытке заставить перечитать xinetd свои конфигурационные файлы «/etc/init.d/xinetd reload» выяснилось, что хотя в системе автоматически созданы все полагающиеся каталоги и файлы как для xinetd, так и inetd, но они сами в системе не установлены. Странно, что при построении зависимостей об этом не позаботились. Поэтому в Ubuntu xinetd необходимо проверить его наличие и при отсутствии – установить. С AMANDA закончили.
48
Настройка CDRW-Taper Серверы уже работают и могут выполнять свою функцию, остался CDRW-Taper. Его конфигурационный файл называется /etc/cdrw-taper.conf, хотя можно обойтись и без него, указав все настройки непосредственно в taperlib.pm и amlabel-cdrw. Но это неправильно. # Местонахождение конфигурационных файлов AMANDA $CONFIG_ROOT = "/etc/amanda"; # Каталог, в котором создаются промежуточные файлы: # diskdir в amanda.conf $DUMP_DIR = "/var/cache/cdrw-taper"; # 1 – удалять или 0 – оставлять промежуточные файлы # после записи на CD/DVD-диск $DELETE_DIRS = 0; # При 1 использование не перезаписываемого диска CD/DVD-R $WRITE_NON_ERASABLE = 0; # Устройство CD/DVD-RW # $CD_DEVICE_RE = "/dev/s(cd|g)\\d+:?.*"; # $CD_DEVICE_RE = "^/dev/(ide|scsi)/host\\d/bus\\ ↵ d/target\\d/lun\\d/(cd|generic):"; $CD_DEVICE_RE = "/dev/hdc"; # Размер блока $BLOCKSIZE = 2048; # Блоков в устройстве # (650MB CDRW: 650 MB = 650 * 1024k / 2k = 332800) #$MEDIABLOCKS = 332800; # (700MB CD-RW: 700 MB = 700 * 1024k / 2k = 358400) $MEDIABLOCKS = 358400; # Blocks per media (DVD+RW: 4700 MB = 4700 * 1000 * ↵ 1000 / 2k = 2294921) $MEDIABLOCKS = 2294921; # Названия исполняемых файлов $MOUNT = "mount"; $UMOUNT = "umount"; $CDRECORD = "cdrecord"; $MKISOFS = "mkisofs"; $SENDMAIL = "/usr/sbin/sendmail"; $GROWISOFS = "growisofs"; $DVDRWMEDIAINFO = "dvd+rw-mediainfo"; # Указание, что все загружено успешно 1;
Создаем каталог для промежуточных файлов /var/cache/ cdrw-taper. $ sudo mkdir /var/cache/cdrw-taper $ sudo chown backup:backup /var/cache/cdrw-taper
Как проверить настройки В комплекте AMANDA идет несколько утилит, позволяющих проверить настройки и работу отдельных компонентов. Например, запуск amcheck без параметров позволит проверить настройки сервера и доступность клиентских систем, а также ресурсов на них. Выполняться они должны от имени пользователя backup. $ sudo su backup -c "amcheck DailySet1" Amanda Tape Server Host Check ----------------------------Holding disk /var/cache/cdrw-taper: 10952816 kB disk space available, that's plenty ERROR: /media/cdrom0: Permission denied (expecting a new tape) NOTE: skipping tape-writable test Server check took 0.004 seconds Amanda Backup Client Hosts Check -------------------------------ERROR: grinder: [Can't open exclude file '/etc/amanda/exclude.gtar': No such file or directory] Client check: 1 host checked in 0.148 seconds, 1 problem found
администрирование Первая ошибка «ERROR: /media/cdrom0: Permission denied» – результат адаптации AMANDA и ее утилит под работу со стриммерами. Поэтому с СD/DVD-дисками некоторые тесты не проходят. На нее внимание можно не обращать, система работала нормально, хотя ошибка постоянно выдавалась. Файл /etc/amanda/exclude.gtar описан в правиле архивирования. Даже если не планируется его использование, лучше его создать пустым, иначе в журналах она будет фигурировать постоянно. Запись «Holding disk» говорит о доступном месте в каталоге (разделе), в который будут складываться промежуточные файлы. После редактирования файлов конфигурации следует проверять права доступа, например, такая ошибка говорит о том, что процесс не может получить доступ к файлу для записи: ERROR: tape list /etc/amanda/DailySet1/tapelist: not writable
Полезная утилита amadmin обладает еще большими возможностями. С ее помощью вы сможете проверить настройки, руководить выполнением заданий и резервированием отдельных ресурсов, принудительно устанавливать уровень архивирования, устанавливать ленты и проверять следующую по списку ленту, просматривать выполненные задания, импортировать и экспортировать базу с других серверов AMANDA. Вот так можно вывести все настройки, в том числе и используемые по умолчанию. $ sudo su backup -c " amadmin DailySet1 disklist" line 18: host grinder: interface default disk /media/other: program "GNUTAR" exclude list "/etc/amanda/exclude.gtar" priority 1 dumpcycle 28 maxdumps 1 maxpromoteday 10000 bumpsize 15360 bumpdays 1 bumpmult 4.000000 strategy STANDARD estimate CLIENT compress CLIENT FAST comprate 0.50 0.50 auth BSD kencrypt NO holdingdisk YES record YES index YES skip-incr NO skip-full NO
Первое задание Перед первым архивированием необходимо разметить DVDдиски в количестве, равном tapecycle. В AMANDA для этих целей используется утилита amlabel, но она CD-диски размечать не умеет. В CDRW-Taper для разметки есть своя утилита amlabel-cdrw. В качестве параметра она принимает название задания и метки соответствующей labelstr. Если попробовать другую метку, получите: $ sudo /usr/sbin/amlabel-cdrw DailySet1 metka taper: ERROR: Label metka does not match labelstring "^local[0-9]*$".
№1, январь 2007
$ sudo /usr/sbin/amlabel-cdrw DailySet1 local1 WARNING: /dev/hdc already carries isofs! About to execute 'mkisofs -J -R -pad -quiet /tmp/amlabel-cdrw.6763 | builtin_dd of=/dev/hdc obs=32k seek=0' /dev/hdc: "Current Write Speed" is 2.5x1385KBps. builtin_dd: 192*2KB out @ average 0.0x1385KBps /dev/hdc: flushing cache /dev/hdc: stopping de-icing /dev/hdc: writing lead-out /dev/hdc: reloading tray
На диске сейчас записан единственный файл AMANDA_ LABEL, содержащий строку local1. Повторяем эту операцию со всеми 9 дисками, меняя метку. Вся информация о дисках будет заноситься в файл tapelist. После первого диска запись будет такая: 00000000 local1 reuse
Первое задание желательно запустить вручную и оценить результат и работу всех компонентов. $ sudo su backup -c "amdump DailySet1"
После запуска этой команды в каталоге /var/cache/ cdrw-taper должен появиться подкаталог local1 с такой структурой файлов внутри: $ sudo ls -al /var/cache/cdrw-taper/local1 total 138260 drwx------ 2 drwxr-xr-x 7 -rw------- 1 -rw------- 1 -rw------- 1
backup root backup backup backup
backup 2048 2006-11-30 root 192 2006-10-28 backup 7 2006-11-30 backup 141575082 2006-11-30 backup 191 2006-11-30
22:12 19:23 22:12 22:12 22:12
. .. AMANDA_LABEL grinder.hda9.0.dump.gz grinder.hda9.0.info
Последовательно будут появляться и другие подкаталоги, но опять же всплыл еще один нюанс Ubuntu. Несмотря на то что dump упоминается в AMANDA как основная утилита, она также не была включена в зависимости и не устанавливается вместе с AMANDA. Результат такой: sendsize[12307]: time 0.006: running "/sbin/dump 0Ssf 1048576 - /dev/hda9" sendsize[12307]: time 0.010: exec /sbin/dump failed or no dump program available: No such file or directory sendsize: time 0.010: pid 12309 finish time Thu Nov 30 21:16:59 2006 sendsize[12307]: time 0.011: running /usr/lib/amanda/killpgrp
Пришлось отдельно устанавливать и dump. $ sudo apt-get install dump
По окончании создания архива, создается iso-образ, который автоматически записывается на DVD-диск. Если объем архива превышает для установленного в $MEDIABLOCKS типа дисков, будет создан следующий подкаталог. И так далее. Даже если при предыдущем архивировании не был занят весь объем, то для следующего задания будет задействован диск уже с другой меткой. Текущий затребуется для перезаписи, только когда пройдет полный круг. Может возникнуть ситуация, когда требуется перезаписать архив на болванку вручную. Сделать это просто. Например, так можно повторно записать архивы с метками local1 и local2. $ sudo /usr/lib/amanda/taper DailySet1 -flush local1 local2
49
администрирование taper: pid 15001 executable taper version cdrw-taper-0.4 … Flushed local1. Done.
Обратите внимание, диски должны вставляться в такой же последовательности, как при вызове команды. Иначе вы получите ошибку. $ sudo /usr/lib/amanda/taper DailySet1 -flush local local1 taper: pid 14954 executable taper version cdrw-taper-0.3 ERROR taper label on media in /dev/hdc:0,0,0 is not local Cannot load media with label local!
Когда задание выполнено успешно, автоматизируем его запуск через cron. $ sudo crontab -u backup -e 0 10 * * 1-5 /usr/sbin/amcheck -m DailySet1 45 0 * * 2-6 /usr/sbin/amdump DailySet1
Восстановление информации Для восстановления информации служит утилита amrecover, с ее помощью можно восстанавливать как отдельные файлы, так и целые разделы. По характеру работы amrecover напоминает консольный ftp-клиент. Восстанавливать информацию может только пользователь с правами администратора, для которого в файле amandahostsauth также должна существовать запись. Иначе: $ sudo amrecover Password: AMRECOVER Version 2.4.5p1. Contacting server on localhost ... 220 grinder AMANDA index server (2.4.5p1) ready. 500 Access not allowed: [access as backup not allowed from root@localhost] amandahostsauth failed
При попытке зайти с правами backup, получим «amrecover must be run by root». Добавляем следующую строку в файл /etc/ amandahostsauth: amandaserver root amindexd amidxtaped
Trying disk / ... Trying disk rootfs ... Can't determine disk and mount point from $CWD '/home/grinder'
amrecover> sethost localhost # Выбираем узел, данные с которого собираемся восстанавливать 501 Host localhost is not in your disklist. Trying host localhost ... 501 Host localhost is not in your disklist. Trying host grinder ... 200 Dump host set to grinder.
# Записи localhost нет в disklist, но amrecover разобрался amrecover> setdisk /home 200 Disk set to /home.
# Выбираем восстанавливаемый раздел с узла. Если перейти # каталог, занесенный в disklist перед запуском amrecover, # «cd /home», то раздел будет выбран автоматически amrecover> ls 2006-12-02 . 2006-12-02 test_file
# Смотрим, что есть amrecover> add test_file Added / add test_file
# Добавляем файл в список восстановления, чтобы добавить # все, ставим точку восстанавливаем amrecover> extract Extracting files from holding disk on host localhost. The following files are needed: /var/cache/cdrw-taper/ 20061202142102/grinder._media_other.0 Restoring files into directory /home Continue [?/Y/n]? y Extracting from file /var/cache/cdrw-taper/20061202142102/grinder._ media_other.0 ./ test_file
amrecover> quit 200 Good bye.
В данном случае файл был найден на жестком диске, иначе вас попросят вставить CD/DVD с нужной меткой.
Итог
Как видите – AMANDA мощный и гибкий инструмент, который позволит вам выполнить любую задачу по резервированию важной информации. Поддержка разных платформ localhost root amindexd amidxtaped только добавляет ему преимуществ. Также отмечу отличную документацию, из которой вы подробно узнаете о раПредположим, необходимо восстановить один из фай- боте всех компонентов AMANDA. Кстати, в файле using.txt лов, ранее находящихся в каталоге /home. По назначению найдете и главу из книги Джона Джексона (John R. Jackson) используемых команд будут даны комментарии, они выде- «UNIX Backup and Recovery», которая посвящена AMANDA (http://www.backupcentral.com/amanda.html). ленны курсивом.
Но для восстановления можно использовать запись с localhost:
$ sudo amrecover DailySet1 AMRECOVER Version 2.4.5p1. Contacting server on localhost ... 220 grinder AMANDA index server (2.5.1p1) ready. 200 Access OK Setting restore date to today (2006-12-07) 200 Working date set to 2006-12-07. Scanning /var/cache/cdrw-taper... 20061202142102: found Amanda directory. # Это были найдены резервные файлы не удаленные с диска 200 Config set to DailySet1. 200 Dump host set to grinder.
50
1. Сайт проекта AMANDA – http://www.amanda.org. 2. Страница на Sourceforge – http://sourceforge.net/projects/ amanda. 3. Яремчук С. Обзор систем резервного копирования. //Системный администратор, № 9, 2006 г. – 22-29 с. 4. Сайт проекта Amanda CDRW-Taper – http://www.tivano.de/ software/amanda. 5. Страница для закачки исходных текстов и прекомпилированных пакетов – http://www.zmanda.com/downloads.html.
bugtraq Множественные уязвимости в Novell NetMail NMAP/IMAP Программа: Novell NetMail 3.5.2, возможно, более ранние версии. Опасность: Критическая. Описание: 1. Уязвимость существует из-за ошибки проверки границ данных в службе NMAP (Network Messaging Application Protocol) при обработке STOR-команд. Удаленный пользователь может с помощью слишком длинного аргумента команды вызвать переполнение буфера и выполнить произвольный код на целевой системе. Для удачной эксплуатации уязвимости требуется наличие валидной учетной записи. 2. Уязвимость существует из-за ошибки проверки границ данных в службе IMAP при обработке команды SUBSCRIBE. Удаленный пользователь может вызвать переполнение буфера и выполнить произвольный код на целевой системе. 3. Неизвестная ошибка обнаружена в службе IMAP. Удаленный авторизованный пользователь может вызвать отказ в обслуживании службы. 4. Уязвимость существует из-за ошибки проверки границ данных в службе IMAP. Удаленный пользователь может вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. 5. Уязвимость существует из-за ошибки проверки границ данных при обработке команды APPEND в службе IMAP. Удаленный авторизованный пользователь может с помощью слишком длинного аргумента команды вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.novell.com/products/netmail. Решение: Установите исправление с сайта производителя.
Уязвимость при обработке SITи CPIO-архивов в Sophos Anti-Virus
Множественные уязвимости в Sun Java JRE Программа: Sun Java JDK 1.5.x, Sun Java JRE 1.5.x / 5.x, Sun Java JRE 1.4.x, Sun Java JRE 1.3.x, Sun Java SDK 1.4.x. Sun Java SDK 1.3.x. Опасность: Высокая. Описание: 1. Две ошибки обнаружены в Java Runtime Environment, которые могут позволить недоверенному апплету прочитать и записать данные на систему или выполнить произвольные приложения. 2. Две ошибки, относящиеся к сериализации в Java Runtime Environment, могут позволить недоверенному апплету повысить свои привилегии. URL производителя: www.sun.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера в службе POP в MailEnable Программа: MailEnable Professional 2.35, возможно, более ранние версии; MailEnable Enterprise 2.35, возможно, более ранние версии. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных в службе POP при обработке аргументов команды PASS. Удаленный пользователь может с помощью слишком длиной строки вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.mailenable.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера в службе SNMP в Microsoft Windows
Программа: Sophos Anti-Virus for Windows 6.x, Sophos Anti- Программа: Microsoft Windows Server 2003 Enterprise Edition, Virus 3.x, Sophos Anti-Virus 4.x, Sophos Anti-Virus 5.x. Microsoft Windows Server 2003 Datacenter Edition, Microsoft Опасность: Высокая. Windows XP Professional, Microsoft Windows XP Home Описание: 1. Уязвимость существует из-за ошибки про- Edition, Microsoft Windows 2000 Server, Microsoft Windows верки границ данных в veex.dll при обработке CPIO-архи- 2000 Professional, Microsoft Windows 2000 Datacenter Server, вов. Удаленный пользователь может с помощью специаль- Microsoft Windows 2000 Advanced Server, Microsoft Windows но сформированного CPIO-архива, содержащего слиш- Server 2003 Standard Edition, Microsoft Windows Server 2003 ком длинное не терминированное имя файла, вызвать пе- Web Edition. реполнение стека и выполнить произвольный код на целе- Опасность: Высокая. вой системе. Описание: Уязвимость существует из-за ошибки провер2. Уязвимость существует из-за ошибки проверки гра- ки границ данных в службе SNMP. Удаленный пользованиц данных в veex.dll при обработке SIT-архивов. Удален- тель может с помощью специально сформированного соный пользователь может с помощью специально сфор- общения вызвать переполнение буфера и выполнить промированного SIT-архива, содержащего слишком длинное извольный код на целевой системе. не терминированное имя файла, вызвать переполнение ди- URL производителя: www.microsoft.com. намической памяти и выполнить произвольный код на це- Решение: Установите исправление с сайта производилевой системе. теля. URL производителя: www.sophos.com/products/software/ Составил Александр Антипов antivirus. Решение: Установите исправление с сайта производителя.
№1, январь 2007
51
администрирование
Устанавливаем и обновляем программное обеспечение в системе FreeBSD Что такое пакет? Что такое порт?
Версии пакетов и портов Вы можете думать о пакетах как о конкретной версии программы, а о порте – как об описании, как создать версию пакета. Через некоторое время порт может быть обновлен и он уже будет генерировать пакет с другим номером версии. То есть mysql51-server – это название порта с версией сервера MySQL 5.1.x, а пакет mysql-server-5.1.12 – это уже скомпилированные бинарные файлы сервера MySQL версии 5.1.12 . Иногда после номера версии добавляется
В ОС FreeBSD существует два механизма для установки программного обеспечения – пакеты и порты. Пакеты – заранее скомпилированные файлы с бинарными файлами. Они не требуют компиляции из исходных файлов и более просты в установке. Пакеты неудобны только тем, что скомпилированы с копределённым набором опций по умолчанию, под конкретную платформу, а вам для конкретной задачи нужны дополнительные опции. Порты предоставляют автоматизированный механизм для установки программ из исходных фай- Как установить пакет? лов – начиная с получения (скачивания) Для установки пакетов можно исисходных файлов, изменения исходных пользовать команду sysinstall (меню файлов для успешной компиляции про- «Configure», подменю «Packages»), одграммы для системы FreeBSD и меха- нако это не даст вам навыков по уснизм инсталляции/деинсталляции ПО. тановке пакетов вручную. Из командной строки пакеты устанавливаются при помощи команды pkg_add. Наиболее часто используемые пакеты посКакое программное тавляются на самом диске FreeBSD обеспечение готово в директории packages. Для их усдля использования? Посмотреть список программного тановки достаточно смонтрировать обеспечения, перенесенного на сис- CD-диск (команда «mount /cdrom») тему FreeBSD, вы можете по адресу и выполнить команду: http://www.freebsd.org/ports. Вы сумеpkg_add /cdrom/packages/All/ ↵ имя_пакета-версия.tgz ете узнать также точное название паЕсли вы не знаете точного имени кета, который вас интересует. и версии пакета, то его можно узнать при помощи команды:
Удаление установленного ПО
Для удаления установленного ПО необходимо использовать команду: pkg_delete имя_пакета
которая корректно удалит установленные пакетом файлы. Пакеты, установленные как зависимости, удалены не будут.
Какой пакет установил данный файл? Узнать, какой пакет установил данный файл, можно при помощи команды: pkg_info -W абсолютное_имя_файла
52
ls /cdrom/packages/All/имя_пакета*
Если вы скачали пакет из сети, то он устанавливается аналогично: pkg_add имя_файла
Сохранение установленных пакетов Если вы установили программное обеспечение из пакетов или при помощи портов, то вы можете всегда создать пакет для переноса ПО на другую систему или для удобства установки в следующий раз. Команда:
знак подчеркивания и число – это показывает на версию изменения порта, т.е. если версия программного обеспечения не изменилась, а в порт были внесены изменения, чтобы обеспечить лучшую интеграцию данного ПО в систему FreeBSD (lynx-2.8.5_2 – текстовый браузер lynx версии 2.8.5, в порт которого 2 раза вносились изменения). Когда меняется (повышается) версия программного обеспечения, версия порта сбрасывается и не пишется до первого обновления порта.
Если пакета нет на диске или вы хотите получить последнюю версию пакета, то можно попробовать команду: pkg_add -rv имя_порта
Скажем, для установки веб-сервера Apache версии 1.3.x можно набрать команду: pkg_add -rv apache13
которая обратится к серверу FreeBSD и сама скачает пакет, подходящий для вашей версии FreeBSD, во временную директорию и установит его. Если пакет для своей работы требует дополнительные библиотеки или другие пакеты, то команда «pkg_add» скачает и их тоже. После установки все временные файлы удаляются. Команда: pkg_add -K -rv apache13
не только скачает и установит порт, но и сохранит скачанный файл пакета в текущей директории. pkg_create -b имя_пакета-версия
создаст в текущей директории пакет, который можно устанавливать при помощи команды «pkg_add». Это особенно удобно, когда вы сконфигурировали ПО, установленное из портов для своих задач, и хотите создать пакет, который можно использовать в дальнейшем.
администрирование Просмотр списка установленных пакетов
Обновление портов при помощи системы CVSup
Для использования системы CVSup необходимо добавить несколько строк в файл /etc/make.conf (пример приведенной конфигурации есть в файле /usr/share/examples/etc/make.conf). Эти строчки в /etc/make.conf конфигуls /var/db/pkg рируют обновление коллекции портов В директории /var/db/pkg команды через протокол CVSup, который переpkg* хранят базу всех установленных дает только изменения, произошедпакетов. Посмотреть детальную ин- шие в коллекции портов, что сущесформацию по одному пакету можно твенно меньше, чем скачивание полпри помощи команды: ной коллекции. Вам потребуется либо прямое соединение с Интернетом, лиpkg_info имя_пакета бо с трансляцией адресов (NAT). Проскажем: токол CVSup не может работать через HTTP-прокси. Для просмотра можно использовать команду «pkg_info», которая выводит название пакета, версию и короткое описание. Другой способ – просто посмотреть список пакетов:
pkg_info xorg-6.9.0
Работа с портами Коллекция всех портов находится в директории /usr/ports. Если у вас она не установлена, то вы можете установить ее при помощи команды sysinstall (меню «Configure», подменю «Distributions», пункт меню «ports»). Другие способы – скачать всю коллекцию портов одним файлом, так же как и при обновлениях, или воспользоваться утилитой portsnap.
Обновление коллекции портов Коллекцию портов необходимо обновлять время от времени, если вы хотите отслеживать последние версии программ, доступные для системы FreeBSD. В частности, это нужно для получения обновлений, связанных с безопасностью ПО, – в новых версиях программ бывают исправлены ошибки. Есть несколько способов обновить коллекцию портов – скачать полностью новую коллекцию портов (на страничке http://www. freebsd.org/ru/ports линк «Сгрузите gzipархив») и распаковать в директорию /usr/ports. Это самый простой способ, но и самый требовательный к трафику – каждый раз вы будете скачивать файл размером где-то в 35 Мб.
SUP_UPDATE=YES SUP=/usr/bin/csup SUPFLAGS=-g -L 2 -z SUPHOST=cvsup.uk.FreeBSD.org SUPFILE=/usr/share/examples/ ↵
Автоматизация установки и обновления портов Для автоматизации процесса установки и обновления портов вам потребуется пакет portupgrade. Его можно установить либо из порта /usr/ports/sysutils/portupgrade, либо при помощи команды: pkg_add -rv portupgrade
Для обновления ПО сперва нужно обновить коллекцию портов (как это делать, описано выше). После этого вы можете инсталлировать и обновлять порты при помощи следующих команд: portinstall имя_порта
скачать исходные файлы, скомпилировать, установить данный порт и очистить рабочую директорию. portupgrade имя_порта
обновить порт по последней версии. При этом не нужно указывать версию установленного пакета, а нужно просто указать имя порта, скажем: portupgrade 'имя_порта*'
обновить все порты начинающиеся с данного префикса, скажем: portupgrade 'php5*'
№1, январь 2007
cvsup/standard-supfile PORTSSUPFILE=/usr/share/examples/ ↵ cvsup/ports-supfile
Если у вас FreeBSD версии 6.0 или ниже, то у вас должна быть строка: SUP=/usr/local/bin/cvsup
вместо указанной: SUP=/usr/bin/csup
и для обновления портов вам необходимо поставить пакет cvsup при помощи: pkg_add -rv cvsup-without-gui
После того как вы добавили эти строки в /etc/make.conf, необходимо перейти в директорию /usr/ports и запустить команду: make update
После успешного завершения у вас будет коллекция портов с последними обновлениями.
обновит сам интерпретатор php и все его установленные расширения. Именно для этого случая нам было нужно сохранить конфигурацию при помощи «make config» или записывая ее в файл /etc/make.conf. Portupgrade сам скачает новые версии исходных файлов, сконфигурирует их с теми опциями, которые были запомнены, сделает резервную копию старого пакета, удалит старую версию пакета, установит новую. Если этот процесс завершился успешно, то копия старого пакета будет удалена, если нет, то portupgrade установит ее обратно. Порты в FreeBSD разрабатываются так, чтобы при удалении порта не затрагивать файлы конфигурации. Таким образом, ваши старые файлы конфигурации останутся неизменными. Иногда это может привести к проблемам, и файлы конфигурации нужно исправлять для совместимости с новой версией установленного ПО. portupgrade -R 'имя_порта'
обновит не только порт, но и его зависимости, которые необходимы для его работы. portupgrade -a
обновит все установленные в системе пакеты.
53
администрирование make -DWITHOUT_X11=YES
Установки ПО при помощи портов Для установки порта необходимо перейти в его директорию (скажем, «cd /usr/ports/lang/php4» – для установки языка PHP). Имя порта можно узнать на сайте http://www.freebsd.org/ ports либо перейти в директорию /usr/ ports (командой «cd /usr/ports») и дать команду: make search key=ключевое_слово
Например: make search key=licq
для поиска всех портов, связанных с ICQ клиентом licq. Возможные операции для компи- ляции порта (должны выполнятся в директории порта – то есть /usr/ports/lang/ php4 в нашем случае): make config – запускает конфигуратор, если данный порт имеет диа- логовый текстовый интерфейс конфигурации. Выбранная конфигурация будет использована и в дальнейшем при обновлении данного порта. make fetch – только скачивает неНа стадии компиляции и установобходимые файлы, но не компилирует порт. Исходные файлы пор- ки порт может автоматически устатов скачиваются в директорию новить другие порты, необходимые /usr/ports/distfiles. для его работы. Разные опции команды make мож make – скачивает и компилирует порт. Если порт имеет опции, кото- но комбинировать друг с другом, рые могут быть указаны в коман- т.е. «make install clean» приведет к скадной строке, он сообщит об этом чиванию исходных текстов, компилядо начала процесса компиляции. ции, установке порта и очистке дирекВ командной строке опции зада- тории порта от рабочих файлов. ются как:
Другие команды для работы с портами pkg_which имя_файла
покажет пакет, который установил на файловую систему данный файл. portsclean
позволяет почистить /usr/ports от старых рабочих директорий, устаревших исходных файлов и т. д. portsclean -C
очистить рабочие директории. portsclean -D
54
Обновление портов
то есть при помощи флага -Dимя_ при помощи portsnap опции= значение. Если вы хоти- Если у вас система FreeBSD 6.0 и выте сохранить эти опции, чтоб они ше или 5.5 и выше, то в базовой сисиспользовались в дальнейшем теме есть утилита portsnap, котопри обновлениях, откройте файл рая облегчает обновление коллек/etc/make.conf и допишите их туда ции портов. В первый раз команда в виде опция=значение (т.е., ска- «portsnap fetch» скачивает сжатую вержем, WITHOUT_X11=YES). Эти оп- сию коллекции портов и сохраняет ее ции будут применяться при компи- в /var/db/portsnap. В последующие раляции всех портов. зы команда «portsnap fetch» скачивает make all – то же самое, что и коман- сжатые обновления для этого файла, что использует существенно меньший да make без аргументов. make install – устанавливает ском- трафик, чем полное скачивание колпилированный порт. лекции портов и даже обновление при make clean – очищает директорию помощи CVSup. Если у вас нет распапорта от рабочих файлов. кованной коллекции портов в /usr/ports, make distclean – аналогично make то ее можно создать при помощи коclean, но также стирает скачанные манды «portsnap extract». Для обновлеисходные файлы. ния распакованной коллекции портов, make deinstall – удаляет инсталли- после того как portsnap скачал сжарованную версию порта. тые изменения, используется команmake package – создает пакет да «portsnap update». То есть в первый раз вы должны выдля данной версии ПО. Эта команда подразумевает, что ПО установ- полнить команды: лено на жестком диске, в противportsnap fetch; portsnap extract ном случае она выполняет «make install», после чего создает пакет. а в последующие разы:
удалить старые исходные файлы портов. portsclean -DD
удалить все исходные файлы портов, которые не установлены в данный момент. pkg_version
после обновления коллекции портов показывает, какие имеются более новые версии и требуются обновления. pkg_deinstall 'имя_порта' // или pkg_deinstall 'имя_porta*'
позволяет удалить порт из системы
portsnap fetch; portsnap update
Можно указать командам «portsnap extract» и «portsnap update», чтоб они работали не со всей коллекцией портов, а только с ее частью. Так: portsnap update
databases/mysql
обновит только порты в директории databases, имя которых начинается на mysql.
или сразу удалить несколько портов из системы (по шаблону). pkg_deinstall -r имя_порта
удалить порт и все порты, которые требуют его в качестве зависимости (dependency). pkg_deinstall -R имя_порта
удалить порт и все порты, которые он требует в качестве зависимости (dependency).
Гаспар Чилингаров
администрирование
Unionfs во FreeBSD: разбираемся в текущей реализации
Сергей Супрунов В наши дни термин «файловая система» охватывает гораздо больше, чем просто способ организации данных на физическом носителе. «Многослойность» подсистемы работы с файлами не только повышает гибкость, но и предоставляет множество интересных возможностей. Одним из примеров такого «промежуточного уровня» является файловая система unionfs. 56
администрирование Про гибкость, vnode и файловые системы Как известно, на «физическом» уровне файлы в файловой системе ОС семейства UNIX определяются так называемыми индексными узлами (inode), которые хранят информацию об этих файлах. В первоначальных реализациях операционных систем файловые объекты, с которыми работала система, непосредственно сопоставлялись с inode. Со временем потребность в более гибком подходе, который позволил бы не переписывать каждый раз половину операционной системы, чтобы научить её работать с очередной файловой системой, породила промежуточный уровень между ядром операционной системы и физическим размещением данных на носителе – интерфейс vnode. То есть операционная система стала «общаться» с интерфейсом vnode, который уже, в свою очередь, преобразовывал запросы применительно к конкретной реализации файловой системы. Следующим шагом стали так называемые наращиваемые файловые системы. Интерфейс vnode достаточно гибок, чтобы позволить размещать несколько уровней vnode один над другим. В этом случае при получении запроса на выполнение той или иной операции с файловой системой, верхний уровень vnode может либо выполнить этот запрос сам, если располагает необходимой информацией, либо передать его на нижележащий уровень (без изменений или предварительно модифицировав). Следующий уровень vnode поступает аналогичным образом, и так до тех пор, пока запрос не будет удовлетворён, либо пока не будет возвращена ошибка «Операция не поддерживается». Во FreeBSD концепция наращиваемых файловых систем поддерживается достаточно широко, что позволяет помимо «традиционных» ФС реализовать целый ряд довольно полезных и эффективных «виртуальных» файловых систем, таких как unionfs.
на файловой системе nullfs. Она позволяет монтировать каталог как «обычную» файловую систему (в частности, задавать опции монтирования, такие как «ro»). С точки зрения рассмотренной выше схемы, nullfs реализуется очень просто – это должен быть, по сути, просто «прозрачный» слой vnode. То есть запросы на поиск объекта должны прозрачно передаватьРисунок 1. Работа файловой системы ся на нижележащий уровень, ответы nullfs также «транзитом» следовать обратвать на удаление файла или каталога но (см. рис. 1). В принципе, можно сказать, что всё, из «общей» папки? Можно ли испольчто делает nullfs, – это предоставля- зовать в качестве одного из каталогов ет доступ к «чистой» файловой систе- то, что смонтировано только для чтеме через дополнительную точку мон- ния (например, файловую иерархию на CD-диске)? И в каком из каталогов тирования. физически создавать новые файлы? Посмотрим, как это задумано на данUnionfs: теория Файловая система unionfs разраба- ный момент во FreeBSD. В реализации FreeBSD unionfs «натывалась как средство объединения различных файловых систем в единое кладывает» один каталог на другой, пространство имён, чтобы они воспри- руководствуясь следующими принципами: нимались как одно целое. Работа unionfs заключается в том, один из каталогов становится каталогом верхнего уровня (в дальнейчто она определённым образом наклашем для краткости я буду называть дывает один каталог на другой, делая его просто «верхним»), второй – возможным одновременное использокаталогом нижнего уровня («нижвание файлов и подкаталогов как в одним»); ном, так и в другом. То есть, в отличие от других ФС, unionfs не перекры- пользователю объекты каталогов доступны «сверху вниз», т.е. если вает при монтировании старые объзапрошенный объект есть в «веректы, размещаемые в каталоге, объхнем» каталоге, возвращается он, явленном как точка монтирования, независимо от наличия объекта а осуществляет объединение этих кас таким именем в «нижнем» кататалогов. логе; иначе возвращается объект Очевидно, здесь есть масса ню«нижнего» каталога; если запроансов. Что произойдёт, если в обоих шенного объекта нет ни там, ни там, объединяемых каталогах есть файлы возвращается ошибка «Нет такого или подкаталоги с одинаковыми имефайла или каталога» (см. рис. 2); нами? Как unionfs должна реагиро-
Небольшое отступление про nullfs Прежде чем переходить к основной теме статьи, коротко остановимся
№1, январь 2007
Рисунок 2. Объединение двух каталогов в union-систему
57
администрирование
Рисунок 3. Удаление файла, имя которого есть в обоих каталогах
рабочим каталогом является «верхний», то есть все действия пользователя по изменению данных отражаются только на каталоге верхнего уровня, не влияя на содержимое «нижнего» каталога. Последний пункт означает, что все каталоги, кроме каталога верхнего уровня, фактически можно рассматривать как подключенные «только для чтения». Однако для пользователя это остаётся незаметным: при попытке редактировать файл из «нижнего» каталога он копируется в «верхний», перекрывая оригинальный файл (так называемое «копирование при записи»). В результате пользователь может безограничений работать с этим файлом, в то время как в первоначальном месте он остаётся неизменным (см. на рис. 2 файл f5). Здесь выплывают два интересных момента. Допустим, файл f3 есть в обоих каталогах. Пользователь будет видеть «верхний». А если пользователь
этот файл удалит? Согласно изложенному выше, при запросе f3 пользователю должен быть возвращён «нижний» файл. Но тогда получается нестыковка со здравым смыслом – ведь пользователь только что этот файл удалил, и было бы нелогично увидеть его снова! Точнее, даже не «его», а, вполне вероятно, совершенно другой файл, просто с таким же именем. Этот случай unionfs должна обрабатывать особым образом – в «верхнем» каталоге создаётся особый элемент-заглушка (называемый элементом whiteout), и как только он будет найден по запросу на поиск объекта, сразу возвращается ошибка «Нет такого файла или каталога», без обращений к нижележащим уровням. Если файл с данным именем в дальнейшем будет создан, то он заменит собой элемент whiteout, и уже он будет перекрывать файл, размещённый на нижнем уровне (см. рис. 3). Кстати, поскольку модификация «нижнего» каталога не допускается, то при попытке удалить файл, физически размещающийся там (например, f2 на рис. 2) вместо физического удаления должен создаваться элемент whiteout в «верхнем» каталоге, чтобы перекрыть этот файл. Ещё более интересный случай – удаление и последующее восстановление каталога, имя которого присутствует на обоих уровнях. С удалением всё просто – так же, как и для файла, достаточно в «верхнем» каталоге создать элемент whiteout. Но вот если каталог после этого создать, то в нём сразу станут доступны файлы, храня-
Рисунок 4. Удаление и последующее восстановление каталога
58
щиеся в одноимённом каталоге нижнего уровня. Чтобы этого избежать, unionfs должна обрабатывать такие воссозданные каталоги особым образом – без передачи запросов на нижние уровни. То есть они должны вести себя так, как при обычном монтировании, когда верхний слой полностью перекрывает объекты нижележащего (см. рис. 4). Посмотрим, как это реализовано на практике (если вообще реализовано).
Монтирование unionfs во FreeBSD Во FreeBSD монтирование файловой системы unionfs выполняется с помощью утилиты mount_unionfs (если вам это кажется удобнее, можно использовать mount -t unionfs). Параметров немного – помимо «-o», позволяющего задавать стандартные опции монтирования, есть ещё два ключа: -r – заставляет при монтировании полностью скрыть объекты нижнего уровня, в результате чего поведение unionfs становится идентично работе файловой системы nullfs; -b – инвертирует верхний и нижний уровни таким образом, что видимая пользователю точка монтирования становится верхним уровнем, т.е. рабочим каталогом. Например: # mount_unionfs /usr/home/src ↵ /usr/src # mount -t unionfs -b ↵ /usr/home/src /usr/src
Первая команда смонтирует каталог /usr/home/src поверх /usr/src, и всё это будет доступно пользователю в точке монтирования /usr/src, причём рабочим каталогом (каталогом верхнего уровня, в котором будут происходить все изменения) будет /usr/home/src. Вторая команда отличается от первой ключом -b, так что результирующий каталог будет смонтирован в /usr/ home/src, который и станет «верхним». То есть ключ -b фактически изменяет точку монтирования. Если монтирование не выполняется, завершаясь ошибкой «Operation not supported by device», то первое, в чём следует убедиться, – это в том, что подгружается модуль unionfs.ko:
администрирование $ kldstat Id Refs Address Size 1 4 0xc0400000 3aef60 . . . . n 1 0xc2a3b000 9000
Name kernel unionfs.ko
При желании поддержку unionfs можно собрать и в ядре, для чего нужно добавить в конфигурационный файл ядра следующую строку (см. /usr/src/sys/conf/NOTES): options
UNIONFS
#Union filesystem
По умолчанию, учитывая неустойчивость нынешней реализации, поддержка этой ФС в ядро не включается.
Применение на практике Итак, что такое unionfs и как она работает (или, по крайней мере, должна работать), мы разобрались. Возникает вопрос: а зачем она вообще нужна? Первое, что приходит в голову, – монтирование пользовательского каталога поверх точки монтирования CD-диска. Раз нижний слой всё равно неизменяем, то доступность CD только для чтения никакой роли в данном случае не сыграет. Зато монтирование доступного на запись каталога верхнего уровня позволит, например, выполнять сборку и установку программ или системы «прямо с CD» – все временные файлы будут создаваться в пользовательском каталоге: # mount_unionfs /usr/home/cdrom /mnt/cdrom
Теперь в каталоге /mnt/cdrom можно выполнять любые изменения файлов – на самом деле они будут выполняться в /usr/home/cdrom. Кстати, так можно не только обходить явный запрет на запись, но и избегать записи там, где она нежелательна. Например, примонтировав пользовательский каталог поверх каталога с исходниками, можно смело экспериментировать с наложением патчей и сборкой, не боясь испортить «оригинал» или замусорить дерево исходных кодов временными файлами. Можно зайти ещё дальше – использовать в качестве каталога верхнего уровня файловую систему, размещаемую в памяти (во FreeBSD она реализуется с помощью mdmfs). В результате и скорость работы должна возрасти, и «мусор» за собой убирать вручную не придётся. Главное, чтобы выделение памяти под md-раздел было не в ущерб доступной для операций сборки: # mount_mfs -s 50m md /tmp/md1 # mount_unionfs /tmp/md1 /usr/ports/www/apache22
Ещё один близкий по духу пример: использование unionfs для целей обучения. Понятно, что если в университете каждого студента пускать «админить» реальную систему, то довольно часто придётся заниматься аварийно-восстановительными мероприятиями. Решений у этой проблемы много – и LiveCD, и заранее сохранённые «образы» системы, с которых можно легко восстановить исходное состояние. Здесь же можно применить и unionfs – примонтировать пользовательский каталог поверх реального /etc, сохранив тем самым первозданную чистоту оригинального каталога.
№1, январь 2007
Наконец, unionfs буUnionfs в Linux дет крайне полезна для построения jail-систем. В операционной системе Linux В Solaris «зоны» исполь- реализация unionfs также доступзуют похожую техноло- на и, похоже, является более зрегию – при создании зо- лой и устойчивой. Хотя на страничке в Wikipedia и говорится, ны она наследует файлы основной системы, но ес- что «UnionFS в Linux, в общем, ли какой-то из них изме- не рекомендуется для промышленного использования». няется, то эти изменения В Ubuntu 6.10 (ядро 2.6.17) её отражаются только внутри данной зоны. Это поз- поддержка «из коробки» отсутсволяет значительно эко- твует, но может быть установлена номить дис ковое про - из репозитариев в виде пакетов union-source и union-utils. странство, выделяя его лишь «по требованию», что особенно заметно, если выполняется построение множества однотипных зон. Так же и с jail – создавая виртуальную среду, например, для хостинга или тестирования ПО, можно не копировать в неё полностью все системные файлы, а использовать каталоги основной системы, поверх которых монтировать пользовательские каталоги в unionfs (фрагмент /etc/fstab): /bin /sbin /lib /libexec /usr
/var/jails/outers/bin /var/jails/outers/sbin /var/jails/outers/lib /var/jails/outers/libexec /var/jails/outers/usr
unionfs unionfs unionfs unionfs unionfs
0 0 0 0 0
0 0 0 0 0
В результате пользователь без дополнительных затрат дискового пространства получит себе систему, которую сможет менять как ему заблагорассудится – без угрозы для целостности основной системы.
Немного практики Осталось посмотреть, правда ли, что unionfs сегодня находится во FreeBSD в таком плачевном состоянии, как об этом все говорят? Для эксперимента заготовим два каталога следующего содержания: # ls -l md1 total 8 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 2
root root root root
wheel 6 wheel 6 wheel 6 wheel 512
22 22 22 22
дек дек дек дек
09:53 09:53 09:55 09:54
file1 file2 file5 subdir
root root root root
wheel 0 wheel 0 wheel 0 wheel 512
22 22 22 22
дек дек дек дек
09:54 09:54 09:54 09:54
file1 file2 file3 subdir
# ls -l md2 total 2 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 2
# ls -l md1/subdir total 0 -rw-r--r-- 1 root wheel 6 22 дек 09:58 file1
# ls -l md2/subdir total 0 -rw-r--r-- 1 root wheel 0 22 дек 09:54 file2
Файлы с одинаковыми именами будем различать по размеру – в каталоге md1 они занимают 6 байтов, в md2 – ну-
59
администрирование левой длины. Выполним монтирование в точку md1 (рабочим каталогом при этом станем md2): # mount_unionfs /tmp/md2 /tmp/md1 # ls -l /tmp/md2 total 2 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 2
root root root root
# vi md1/file5
wheel 0 wheel 0 wheel 0 wheel 512
22 22 22 22
дек дек дек дек
09:54 09:54 09:54 09:54
file1 file2 file3 subdir
wheel 0 wheel 0 wheel 0 wheel 6 wheel 512
22 22 22 22 22
дек дек дек дек дек
09:54 09:54 09:54 09:55 09:54
file1 file2 file3 file5 subdir
# ls -l /tmp/md1 total 4 -rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 1 4
root root root root root
# ls -l md2/subdir total 0 -rw-r--r-- 1 root wheel 0 22 дек 09:54 file2
# ls -l md1/subdir total 2 -rw-r--r-- 1 root wheel 6 22 дек 09:58 file1 -rw-r--r-- 1 root wheel 0 22 дек 09:54 file2
Именно так и должно быть – md2 мы видим в неизменном виде, а в md1 перемешались файлы обоих каталогов, причём, несмотря на то что точкой монтирования стала md1, в первую очередь там доступны файлы из md2 (нулевой длины). Попробуем удалить файл: # rm md2/file1 # ls -l md1
пытку удалить md1/subdir, так что посмотреть на практике на самые интересные моменты, связанные с функционированием unionfs, не получилось. Грустно...
md1/file5: 1 строк, 11 символов.
# ls -l md1 total 6 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 4
root root root root
wheel 0 wheel 0 wheel 11 wheel 512
22 22 22 22
дек дек дек дек
10:21 09:54 09:55 10:17
file2 file3 file5 subdir
root root root root
wheel 6 wheel 6 wheel 6 wheel 512
22 22 22 22
дек дек дек дек
09:53 09:53 09:55 09:54
file1 file2 file5 subdir
root root root root
wheel 0 wheel 0 wheel 11 wheel 512
22 22 22 22
дек дек дек дек
10:21 09:54 10:25 10:17
file2 file3 file5 subdir
# umount md1 # ls -l md1 total 8 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 2
# ls -l md2 total 4 -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x
1 1 1 2
Ну, по крайней мере, редактирование файла прошло должным образом – в md2 была создана копия файла file5, а md1/file5 остался в неприкосновенном виде.
С надеждой на лучшее...
Как видите, unionfs – весьма полезная и удобная во многих случаях система. И всё бы было хорошо, если бы не крайtotal 6 не неустойчивая реализация на данный момент и не «про-rw-r--r-- 1 root wheel 6 22 дек 09:53 file1 -rw-r--r-- 1 root wheel 0 22 дек 09:54 file2 белы» с удалением файлов (получается, что whiteout либо -rw-r--r-- 1 root wheel 0 22 дек 09:54 file3 не реализован вообще, либо работает неправильно). Ак-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5 тивное использование unionfs слишком часто приводит drwxr-xr-x 4 root wheel 512 22 дек 09:54 subdir к «падениям» всей системы, да и сами разработчики чес# ls -l md2 тно предупреждают на man-странице большими буквами: total 2 «ЭТОТ ТИП ФАЙЛОВОЙ СИСТЕМЫ ПОКА ЕЩЁ ПОДДЕР-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2 ЖИВАЕТСЯ НЕ ПОЛНОСТЬЮ (ЧИТАЙ: ОН НЕ РАБОТАЕТ), -rw-r--r-- 1 root wheel 0 22 дек 09:54 file3 drwxr-xr-x 2 root wheel 512 22 дек 09:54 subdir И ЕГО ИСПОЛЬЗОВАНИЕ НА САМОМ ДЕЛЕ МОЖЕТ УНИЧТОЖИТЬ ДАННЫЕ НА ВАШЕЙ СИСТЕМЕ. ИСПОЛЬЗУЙТЕ # rm md1/file2 ЕГО НА СВОЙ СТРАХ И РИСК». rm: md1/file2: Operation not supported В общем, несмотря на очень большой потенциал этой # rm md1/file1 технологии, нынешняя реализация с трудом годится даже # ls -l md1 для лабораторных исследований, не говоря уже про эксtotal 4 плуатацию на промышленных серверах. -rw-r--r-- 1 root wheel 0 22 дек 09:54 file2 Серьёзные проблемы в нынешней unionfs привели к то-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3 -rw-r--r-- 1 root wheel 6 22 дек 09:55 file5 му, что японский разработчик Daichi Goto (http://people. drwxr-xr-x 4 root wheel 512 22 дек 09:54 subdir freebsd.org/~daichi) взялся писать с нуля новую реализаНу вот – удаление напрямую из md2 (в обход unionfs) прохо- цию. На его домашней странице сообщается, что 2 декабря дит без ошибок, и в md1 вместо него становится видно другой 2006 года его патч был включён в текущее дерево FreeBSD file1 (собственно, unionfs и не должна блокировать непосредс- 7-CURRENT, так что будем надеяться, что рано или поздно твенный доступ к md2, так что данное поведение нужно при- мы получим-таки в своё распоряжение надёжную, устойчизнать нормальным, хотя это и может привести к некоторому вую и эффективную unionfs. замешательству). Удаление из md1 файла, который физически же в md1 и размещается, тоже проходит без эксцес- 1. http://people.freebsd.org/~daichi/unionfs – страница, посвящёнсов. А вот попытка удалить file2, принадлежащий каталогу ная новой реализации unionfs во FreeBSD. md2, из точки монтирования md1 заканчивается неудачей – 2. http://www.unionfs.org – сайт, на котором собрана информация «Операция не поддерживается». Та же судьба постигла и попо реализации unionfs для систем Linux.
60
bugtraq Переполнение буфера в xine-lib Программа: xine-lib версии до 1.1.3. Опасность: Высокая. Описание: 1. Уязвимость существует из-за ошиб ки проверки границ данных в функции real_parse_sdp() в src/input/libreal/real.c. Злоумышленник может заставить обманом пользователя подключиться к злонамеренному серверу, вызвать переполнение буфера и выполнить произвольный код на целевой системе. 2. Переполнение буфера обнаружено в библиотеке libmms. URL производителя: www.xinehq.de. Решение: Установите последнюю версию (1.1.3) с сайта производителя.
Уязвимость состояния операции в Intel 2200BG W29N51.SYS-драйвере Программа: Intel Wireless LAN Driver 9.0.3.9, возможно более ранние версии. Опасность: Средняя. Описание: Уязвимость состояния операции обнаружена в драйвере W29N51.SYS при обработке большого количества beacon-фреймов. Удаленный пользователь может с помощью специально сформированных beacon-фреймов перезаписать определенные структуры памяти ядра и выполнить произвольный код на целевой системе. URL производителя: www.intel.com. Решение: В настоящее время способов устранения уязвимости не существует.
Множественные уязвимости в Symantec Veritas Netbackup Программа: VERITAS Netbackup Advanced Client 6.x, VERITAS NetBackup Advanced Client 5.x, VERITAS NetBackup Server 6.x, VERITAS NetBackup Server 5.x, VERITAS NetBackup Enterprise Server 6.x, VERITAS NetBackup Enterprise Server 5.x. Опасность: Средняя. Описание: 1. Уязвимость существует из-за логической ошибки в службе Netbackup (bpcd.exe). Злоумышленник может заставить службу выполнить произвольные команды на системе. 2. Уязвимость существует из-за ошибки проверки границ данных в службе Netbackup (bpcd.exe) при обработке длинных запросов. Удаленный пользователь может с помощью запроса, содержащего специально сформированное поле длины, вызвать переполнение стека и выполнить произвольный код на целевой системе. 3. Уязвимость существует из-за ошибки проверки границ данных в службе Netbackup (bpcd.exe) при обработке CONNECT_OPTIONS-запросов. Удаленный пользователь может с помощью специально сформированного запроса вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.symantec.com. Решение: Установите исправление с сайта производителя.
№1, январь 2007
Переполнение буфера в Microsoft Outlook Express Программа: Microsoft Outlook Express 5.5, 6. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке Windows Address Book (.wab) файлов. Удаленный пользователь может с помощью специально сформированного WAB-файла вызвать переполнение буфера и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера в службе IMAP в MailEnable Программа: MailEnable Professional 1.6-1.84, 2.0-2.35, MailEnable Enterprise Edition 1.1-1.41, 2.0-2.35. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных в службе IMAP. Удаленный пользователь может с помощью специально сформированной последовательности команд и данных вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.mailenable.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера в AOL CDDBControl ActiveX-компоненте Программа: AOL 9.0 Security Edition revision 4156.910, AOL 8.0 revision 4129.230, America Online 7.0 revision 4114.563. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных в CDDBControlAOL.CDDBAOLControl ActiveXкомпоненте (cddbcontrol.dll) при обработке первого аргумента, передаваемого функции SetClientInfo(). Удаленный пользователь может передать уязвимой функции сроку, длиной более 256 байт, вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.aol.com. Решение: Обновление автоматически доступно для пользователей AOL 9.x.
Повреждение памяти в GnuPG Программа: GnuPG / gpg версии до 1.4.6 и 2.0.2. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки при дешифровке злонамеренных OpenPGP-сообщений. Удаленный пользователь может с помощью специально сформированого OpenPGP-сообщения вызвать повреждение памяти и выполнить произвольный код на целевой системе. URL производителя: www.gnupg.org. Решение: Установите последнюю версию с сайта производителя.
Составил Александр Антипов
61
администрирование
FreeBSD в домене Windows: дополнительные возможности
Рашид Ачилов Правильное подключение FreeBSD в домен Windows дает возможность работать с Active Directory для проверки паролей, членства в группах и т. д. Но это лишь некоторая часть того, для чего FreeBSD может использовать данную информацию.
Ваш компьютер может больше В журнале №3 за 2005 г. была опубликована статья «FreeBSD в домене Microsoft Windows», где рассказывалось о том, как отказаться от регистрации локальных пользователей и использовать пользователей, предоставляемых доменом Microsoft Windows. На тот момент это было действительно достижением – отпала необходимость отслеживать создание новых пользователей и создавать аналогичные учетные записи на файловом сервере, что значительно облегчило работу. На момент написания той статьи существовали некоторые нерешенные проблемы, над которыми я работал все это время, да и проект Samba не стоял на месте. Результатом нашей постоянной совместной работы стало то, что подключение в домен Windows можно использовать для значительно больших целей, чем простая авторизация в домене, а именно: Элементарный доступ к компьютеру через Microsoft Management Console. Раздача прав на файлы и каталоги с использованием имен пользователей и групп из домена Windows.
62
Кроме того, были решены следующие вопросы: Первая регистрация в системе. В прошлой статье была указана проблема: если новый пользователь добавлен через средства домена Microsoft Windows, то для него не создается домашнего каталога и автоматическое подключение ресурса может не сработать. Эта проблема была решена – для создания домашних каталогов для пользователей, регистрирующихся впервые с консоли (с использованием pam_winbind), был найден и доработан модуль pam_mkhomedir. Поскольку автор модуля не проявил никакого желания внести предложенный ему патч, то этот модуль, переименованный в pam_mkhome, с наложенным патчем был отправлен в дерево портов и скоро должен там появиться. Для пользователей, которые будут пользоваться только сетевыми ресурсами, было разработано два скрипта, которые автоматически создают домашний (или любой другой) каталог для пользователя, если данный каталог отсутствует.
Автоматическое монтирова ние сетевых ресурсов SMBFS «как в Windows». Здесь проблема заключается в очень скромной поддержке SMBFS во FreeBSD. По сути дела, после внесения в основную систему порта net/smbfs ничего не изменилось, хотя с тех пор прошло много времени. Но для FreeBSD team время словно остановилось. В настоящий момент задача автомонтирования решается скриптами из порта sysutils/mountsmb2, вызываемыми из логин-скрипта, но меня они не устраивают, поэтому ведется работа над PAM-модулем, который бы монтировал ресурсы во время входа в систему, используя с mountsmb2 один файл описания монтируемых ресурсов. В статье для тестирования всюду использовалась Microsoft Windows 2003 Server Enterprise Edition и FreeBSD 6.1 с Samba 3.0.24с. Чтобы избежать некоторой терминологической путаницы, всюду «домен» и «имя домена» обозначают не DNS-домен, а домен Windows (pre-Windows 2000).
администрирование Подключаемся к домену Windows «по-настоящему» Подключение FreeBSD к домену Windows так, как оно было описано в предыдущей статье, представляет FreeBSD для Windows как Windows NT. Простой и надежный способ, обладающий тем не менее множеством недостатков, наиболее крупный из которых – отсутствие поддержки протокола NTLMv2, что делает контроллер домена весьма уязвимым к подбору паролей пользователей. Поэтому первым делом был решен вопрос с подключением к домену Active Directory так, как это делает настоящая Windows – с использованием службы Kerberos. Для реализации этого необходимо, чтобы Samba была собрана со следующими параметрами: # make WITH_ADS=yes WITH_LDAP=yes <другие параметры, если необходимо>
При этом проводится автоматическое обнаружение программы Kerberos (MIT или Heimdal), и, если она отсутствует, вставляется соответствующая зависимость в порт. После сборки Samba каких-либо особых настроек делать не надо, за исключением: security = ads
Это настроит программы пакета Samba на роль члена домена Active Directory. realm = domain.ru
Это задает realm, к которому будет относиться данный компьютер. Параметр следует установить в значение, равное имени Active Directory, к которой будем подключаться. workgroup = DOMAIN_INC
Проверьте, что значение параметра workgroup соответствует значению имени домена (pre-Windows 2000). Пример, приведенный выше, выбран не случайно – имя Active Directory и имя домена имеют разные области применения и совершенно не обязаны быть одинаковыми. В документации к пакету Samba рекомендуется также явно установить параметр: client use spnego = yes
если версия Windows – 2003. Этот параметр задает использование описанного в RFC 2478 протокола согласования механизмов аутентификации. Перед запуском Samba необходимо создать конфигурационный файл системы Kerberos /etc/krb5.conf. Его формат достаточно подробно описан в man krb5.conf, поэтому я приведу только готовый рабочий пример с необходимыми комментариями. [libdefaults] default_realm = DOMAIN.RU dns_lookup_kdc = yes
№1, январь 2007
[realms] DOMAIN.RU = { kdc = win-dc.domain.ru kpasswd_server = win-dc.domain.ru admin_server = win-dc.domain.ru } [logging] default = SYSLOG:INFO:LOCAL1 [domain_realm] .domain.ru = DOMAIN.RU domain.ru = DOMAIN.RU
Здесь мы исходим из предположения, что имя Active Directory – domain.ru, имя домена NT – DOMAIN_INC, контроллер домена установлен на компьютере с именем win-dc.domain.ru. Разберем приведенный пример поподробнее. Секция [libdefaults] – default_realm указывает имя подсекции в секции [realms], указывающей, где размещены основные сервисы. Имя подсекции в секции [realms] должно в точности совпадать с написанием. dns_lookup_kdc задает необходимость искать расположение сервисов в DNS, используя записи SRV. Этот параметр следует устанавливать в yes, если на FreeBSD в /etc/resolv.conf указан DNS, работающий на контроллере домена. Теоретически сервер Active Directory может использовать внешний DNS-сервер, практически же приходится в любом случае (даже если он не будет использоваться) запускать DNS-сервер на контроллере домена, потому что иначе могут возникнуть проблемы с добавлением в домен рабочих станций Windows 2000. Следует иметь в виду, что начиная с версии 3.0.23d в пакете Samba обещана поддержка записей типа SRV, тех же самых, которые использует Windows для поиска контроллеров домена, поэтому рекомендуется в файл /etc/resolv.conf вписывать какой-нибудь последней строчкой адрес DNS-сервера AD. Секция [realms]– делится на подсекции, каждая из которых описывает один realm. Необходимыми параметрами каждой подсекции являются записи, указывающие на расположение сервисов kdc (контроллер домена), kpasswd и kadmin. Для Active Directory это, как правило, один и тот же компьютер. Секция [logging] – необязательная секция, указывающая настройки системы регистрации сообщений. Подробное описание смотрите в man krb5.conf. Секция [domain_realm] – устанавливает соответствие между DNS-именами и realms. Приведенные две строчки – минимально необходимые для работы, они указывают, что все компьютеры из домена domain.ru и собственно компьютер domain.ru относится к realm DOMAIN.RU. После создания файла /etc/krb5.conf надо получить билет администратора домена с помощью команды kinit: # kinit administrator@DOMAIN.RU administrator@DOMAIN.RU's Password: kinit: NOTICE: ticket renewable lifetime is 1 week
Приведенный ответ является нормальным. После успешного завершения команды в каталоге /tmp должен по-
63
администрирование В g e n c aс h c e.tdb и щ е тс я з а п и с ь SA F/ D O M A I N / DOMAIN.RU.
В gencache.tdb ищется запись NBT/DOMAIN.RU#1c. Выполняется поиск DC через DNS посредством поиска записи SRV _ldap._tcp.dc._msdcs.DOMAIN.RU.
Выполняется поиск DC в соответствии с параметром name resolv order. Если ни один из этапов поиска не позволил найти, как минимум, 1 DC, фиксируется ошибка. На этом «настоящее» подключение к домену Windows закончено. Проверить правильность подключения можно в любое время командой: # net ads testjoin Join is OK
Рисунок 1. Обьект «Компьютер», представляющий FreeBSD в AD
явиться файл krb5cc_0. Ошибки (а их больше, чем хотелось бы) описаны в разделе «Возможные ошибки и их устранение». Проверить, что получен билет администратора домена и им можно пользоваться, вы можете командой klist: # klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: administrator@DOMAIN.RU Issued Expires Principal Nov 27 16:25:29 Nov 28 02:25:29 krbtgt/DOMAIN.RU@DOMAIN.RU
После получения билета администратора домена можно к этому домену подключаться: # net ads join -U administrator -w domain.ru
administrator's password: Using short domain name -- DOMAIN_INC Joined 'VMFREE' to realm 'DOMAIN.RU'
Если вместо этой надписи увидите «Join is not valid», подключение к домену по каким-либо причинам невозможно. Подробнее о том, что можно сделать в таком случае, сказано в разделе «Возможные ошибки и их устранение». И вот теперь можно включать NTLMv2 (рис. 2). Кроме этого, в конфигурационном файле smb.conf нужно отключить NTLMv1, установив параметр: ntlm auth = no
и LM, если он все еще включен (шифровка LM очень слабая и может быть легко взломана): lanman auth = no
Убедиться в том, что используется именно NTLMv2, можно, включив отладку в Samba на уровень 5. Сделать это для одного пользователя проще через дополнительный файл конфигурации, который обычно подключается в самом конце конфигурационного файла smb.conf таком образом: include = /usr/local/samba/conf/smb.conf.%U
Здесь в параметре -U задается имя доменного пользователя с правами администратора домена (от его имени бу- то есть при загрузке конфигурационного файла обработдет создан обьект «Компьютер»), в параметре -w – имя чиком сеанса для пользователя administrator будет вклюActive Directory или имя домена. Имя Active Directory мож- чен файл с именем smb.conf.administrator. Он содержит всено задавать только в том случае, если в /etc/resolv.conf го две строки: есть запись, указывающая на DNS, работающий на одном [global] из контроллеров Windows-домена, и в /etc/krb5.conf указаlog level = 5 но dns_lookup_kdc=yes, в противном случае следует указывать имя домена (pre-Windows 2000 с точки зрения WindowsПосле этого в файле log.administrator можно найти среадминистраторов). Указанный здесь ответ является пра- ди прочего большого количества отладочной информации вильным, после этого в Active Directory должен появиться следующие строчки: соответствующий обьект. Указание имени домена являет[2006/10/15 00:27:20, 3] libsmb/ntlmssp.c:ntlmssp_server_auth(672) ся более надежным и реже приводит к ошибкам, хотя вклюGot user=[Administrator] domain=[DOMAIN] workstation=[CITYCAT] len1=24 len2=24 [2006/10/15 00:27:20, 5] auth/auth_ntlmssp.c:auth_ntlmssp_set_challenge(66) чение в домен должно проходить как в том, так и в другом auth_context challenge set by NTLMSSP callback (NTLM2 случае (рис. 1). Помните, что Samba при подключении к домену выполняет поиск DC для заданного домена следующим образом Используем MMC (если запись найдена, поиск прекращается, используются Возможность использования MMC для управления Samba, найденные данные): работающей на UNIX, была настоящей маленькой револю-
64
администрирование цией. Теперь администратор домена Windows может выполнять из привычной ему оболочки некоторый набор доступных операций по управлению сервером. Несмотря на пока еще очень скромный набор средств – на текущий момент все возможности управления исчерпываются запуском и остановом сервисов, само появление такой возможности вызывает бурный энтузиазм, и я нисколько не сомневаюсь в том, что вскоре их станет больше (рис. 3). Для того чтобы задействовать возможность запуска и останова сервисов, необходимо создать подкаталог svcctl в каталоге, указанном в параметре libdir при сборке Samba (по умочанию /usr/local/samba), и поместить в этот каталог символические линки на все стартовые скрипты тех сервисов, управление которыми вы хотите вынести на MMC. Эти скрипты должны поддерживать параметры start и stop для соответственно запуска и остановки сервиса. Во все файлы скриптов должна в виде комментария быть добавлена строка: # Description: Описание сервиса, как оно будет отображаться
Если этого не сделать, во все сервисы, которые не относятся к самому пакету Samba, будет подставлено «External Unix Service». Также в конфигурационном файле smb.conf следует указать список скриптов, которые будут вынесены в MMC. Список задается параметром: svcctl list = cups apache mysql ssh2
Список должен совпадать с именами символических линков (которые вовсе не обязательно совпадают с именами файлов, на которые они указывают). Если описание сервиса добавляется уже после того, как был хотя бы один раз указан параметр svcctl list, то, для того чтобы запомнить новое (или изменить старое) описание, необходимо удалить файл registry.tdb из каталога, указанного параметром lockdir при сборке Samba (рис. 4). Что еще можно сделать через MMC? Можно управлять локальными пользователями и группами, но ограниченно – почему-то создать пользователя или группу не удалось, можно только редактировать свойства, добавлять пользователей в группы, удалять группы и пользователей. Для создания локальных пользователей следует использовать smbpasswd: # smbpasswd -a ftp
New SMB password: Retype new SMB password: Added user ftp.
При этом, если используется passdb backend = tdbsam (а он используется по умолчанию), пользователь должен существовать в системе. Для создания локальных групп следует использовать net sam: # net sam createlocalgroup moretest Created local group moretest with RID 1002
№1, январь 2007
Рисунок 2. Редактирование групповой политики для включения NTLMv2
Net sam – это недокументированная часть команды net, предназначенная для непосредственного манипулирования данными о локальных и встроенных группах, хранящихся в файле group_mapping.tdb. Эта команда не работает с базой пользователей, подключаемой через passdb backend. Зато у нее есть встроенная справка, достаточная для работы с ней: # net sam net net net net net net net net net net
sam sam sam sam sam sam sam sam sam sam
createbuiltingroup createlocalgroup mapunixgroup addmem delmem listmem list show set provision
Create a new BUILTIN group Create a new local group Map a unix group to a domain group Add a member to a group Delete a member from a group List group members List users, groups and local groups Show details of a SAM entry Set details of a SAM account Provision a clean User Database
Использование учетных записей домена для назначения прав на локальные файлы Пожалуй, это наиболее ценная возможность winbind, одной из программ, составляющих пакет программ Samba. Что имеется в виду под использованием учетных записей домена? UNIX имел возможность назначить каждому файлу только одного владельца, одну группу владельцев и права «для всех прочих». Для корпоративных файл-серверов, где зачастую на файлы назначаются довольно-таки причудливые права, этого было явно недостаточно, и, чтобы выйти из положения, приходилось включать пользователя в большое количество групп и, достигая ограничения в 16 групп (максимальное число групп, в которые может входить пользователь), объяснять пользователям невозможность установить запрошенные права какими-нибудь придуманными «требованиями Windows». С появлением поддержки ACL в файловых системах FreeBSD все переменилось. Теперь на каждый файл или каталог можно назначить сколько угодно владельцев, групп владельцев и т. д. Все это управляется командами getfacl/setfacl с консоли, у которой только один недоста-
65
администрирование Пример более сложный, который показывает использование доменных групп, содержащих пробелы в названии, пользователей домена и локальных пользователей. Применяя дополнительные средства управления доступом в smb.conf (директивы inherit- и force-) будьте особенно внимательны – директивы inherit permissions, inherit owner и inherit acls ведут к наследованию соответственно прав, вла дельца и ACL-записей от родительского каталога, а директивы force user, force group и т. д. – к их принудительному заданию. При этом происходит следующее. При задании force user изменяется значение макроса %u. Если он используется для формирования пути к сетевому ресурсу, то можно неожиданно обнаружить, что создалась новая папка.Например, при использовании сетевого ресурса:
Рисунок 3. Консоль MMC после подключения к FreeBSD
Рисунок 4. Управление сервисами через консоль MMC на FreeBSD
ток – она не позволяет делать рекурсивные назначения. Поскольку система «знает» пользователей и группы домена, то их соответственно можно использовать для назначения прав в команде setfacl, а также в конфигурационном файле smb.conf. Приведу несколько примеров (все примеры взяты из рабочего файла, в котором подправлены только названия групп): [myshare1] comment = This is a comment path = /var/ftp/pub/quality write list = %D+user1,%D+user2, root
Наиболее простой пример, в котором доступ по записи предоставляется двум пользователям домена user1 и user2, а также локальному пользователю root. Макрос %D, используемый в конфигурационных файлах пакета Samba, принимает значение имени домена (параметра workgroup из smb.conf), символ «+» – это тот символ, который был задан параметром winbind separator. Если в параметре winbind separatror был указан другой символ, следует использовать его. Также можно использовать макрос %w. В итоге строка %D+user1 превратится в DOMAIN_INC+user1. Каким образом система «разберется», где локальный пользователь, а где доменный? По наличию в строке символа «+» (или любого другого, заданного параметром winbind separator) – без него пользователь считается локальным, с ним – часть до символа считается именем домена, после – именем пользователя. Домен можно указывать и напрямую, и совсем не обязательно это должен быть тот же домен, что и в параметре workgroup. [myshare2] comment = More comments were here path = /usr/local/share/assembly write list = @"Group one", @"Group two", root valid users = %D+user1, %D+user2, root, @"Group one", ↵ @"Group two", OTHERDOM_AIN+user3
66
[backup] comment = There are backup shares for each user path = /usr/share/dmbackup/%u
если для пользователя administrator добавить в файл smb. conf.administrator строку: force user = oneuser
то при подключении к ресурсу backup пользователь окажется в каталоге /usr/share/dmbackup/oneuser, а вовсе не в каталоге /usr/share/dmbackup/administrator. Задание force mode влияет на значение «прав по умолчанию». Например, задание в smb.conf.administrator: [backup] force create mode = 0666
при правах по умолчанию на каталог: drwx------ 3 root
wheel
512 15 Oct 22:59 root/
привело к появлению следующих прав на каталог: drwxrwx---+ 3 root
wheel
512 15 Oct 22:59 root/
К сожалению, изменять права на файлы или каталоги, добавлять или удалять ACL через «Properties» до сих пор невозможно – ошибок при этом не выдается, но и ничего не делается. Кроме того, ограничение на 16 групп тоже осталось и даже стало еще хуже – ведь теперь локальные группы объединяются с доменными. Зато каждый пользователь может входить в различные локальные группы на различных компьютерах, и на файлы, каталоги и ресурсы в smb.conf и персональных конфигурационных файлах можно назначать отдельные права для пользователей, и таких прав может быть сколь угодно много.
администрирование Автоматическое создание каталогов для новых пользователей Одна из серьезных проблем корпоративных файл-серверов под управлением FreeBSD – необходимость вручную создавать домашние или иные каталоги для сотрудников, вновь принимаемых на работу. В небольших организациях, как правило, это делается вручную, но если компания крупная, это становится неприемлемым. В предыдущий раз этот вопрос оставался нерешенным, но сейчас я с удовольствием предложу вам его решение. В этом поможет PAM, который, как известно, может все или почти все, что относится к вопросам регистрации в системе.
Первая регистрация с консоли При первой регистрации с консоли пользователь должен до запуска шелла получить домашний каталог и набор стандартных стартовых файлов, в противном случае в качестве домашнего каталога он получит каталог /: login as: testip SSH server: PAM authentication Using keyboard-interactive authentication. Password: sshd2[4267]: WARNING: Could not chdir to home directory /usr/home/testip: No such file or directory Last login: Thu Oct 26 2006 23:24:26 +0700 from shelton.net Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 6.1-RELEASE (VmFree) #1: Mon Oct 9 02:29:51 NOVST 2006 > pwd /
FreeBSD 6.1-RELEASE (VmFree) #1: Mon Oct 9 02:29:51 NOVST 2006 > pwd /usr/home/testip
Первое обращение по сети (Microsoft Network) Спрос на регистрацию с консоли не очень-то велик. Пока еще не очень много организаций, где в качестве рабочих станций стоят Linux- и FreeBSD-машины. Более интересный вариант – автоматическое создание домашнего и других каталогов при первом обращении по сети Microsoft Network. Поскольку Samba не предусматривает такой возможности (пока, по крайней мере), мною был разработан скрипт, который, выполняясь от пользователя root, создает домашние и любые другие каталоги при первом подключении к ним. Делается это использованием парамера root preexec: root preexec = csh -c '/usr/local/sbin/checkuserhome ↵ %u %D %U'
Указанный скрипт можно скачать с [1] в виде архива checkhomes-0.90.1.tar.bz2. Скрипт checkuserhome используется для создания домашних каталогов в ресурсе [homes], скрипт checkbackdir используется для создания персональных каталогов в произвольном ресурсе. Для установки скриптов их необходимо настроить на текущий конфигурационный файл Samba, для этого распакуйте архив в какой-нибудь каталог и запустите:
# configure –prefix=/usr/local В портах существует модуль pam_mkhomedir (security/ pam_mkhomedir). Но он не работает. Точнее, он работает, но не так, как надо. Проверка наличия домашнего каталоВместо /usr/local вы можете указать любой другой кага выполняется в категории Session management. Логичес- талог, где расположены каталог sbin и программа smbd. ки это так, только на практике имеется такой побочный эф- Configure проверит наличие ${prefix}/sbin/smbd и наличие фект, что первый раз пользователь все равно регистрирует- конфигурационного файла, расположение которого было ся так, как если бы у него не было домашнего каталога, по- указано при сборке пакета Samba. При отсутствии файтому что сначала запускается шелл, описанный для пользо- лов smbd в ${prefix}/sbin или smb.conf configure завершаетвателя в /etc/master.passwd, а уже потом выполняются сер- ся с соответствующей диагностикой. Затем настройте параметры в файле checkhomes.conf, висы из секции Session management. Эта ситуация была исправлена переносом проверки наличия домашнего катало- если это необходимо. га в категорию Account management, и теперь создание до- Параметр skel задает расположение каталога «скелемашнего каталога происходит действительно при первой тов» – шаблонов конфигурационных файлов, копируерегистрации в системе. Скачать доработанную версию момых в домашние каталоги пользователей. Используетдуля, который называется pam_mkhome, можно с [1]. Для зася при генерации checkuserhome. пуска добавьте в файл сервиса (/etc/pam.d/system для ре- Параметр dbackup задает расположение корневого кагистрации с консоли, /etc/pam.d/ssh для SSH-сессий и т. д.) талога ресурса, в котором будут создаваться подкатаследующую строку: логи. Используется при генерации checkbackdir. Параметры sysdirs и bdirs используются для задаaccount required pam_mkhome.so mode=0700 ния списка подкаталогов, которые должны быть созданы в каталоге, создаваемом checkuserhome или Дополнительно можно указать параметры skel=<каталог>, checkbackdir соответственно. который задает название каталога, в котором лежат «скеле- Параметры sysmode и bmode соответственно задают ты» типовых конфигурационных файлов и debug, который права доступа, устанавливаемые на эти каталоги. включает отладку. Теперь все работает как надо: Если не нужно создавать никаких подкаталогов, login as: testip нужно установить sysdirs (bdirs) равным пустой строке SSH server: PAM authentication Using keyboard-interactive authentication. (sysdirs=””). Password: После настройки checkhomes.conf запустите: Last login: Thu Oct 26 2006 23:48:44 +0700 from shelton.net Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved.
№1, январь 2007
# make
67
администрирование для генерации скриптов; # make single
для установки скрипта checkuserhome; # make double
для установки cкрипта checkbackdir. Для чего используются эти скрипты? Checkuserhome проверяет наличие каталога, описанного в ресурсе [homes] для текущего пользователя, для чего скрипту и передаются макросы %u, %D и %U, представляющие соответственно имя пользователя текущего сервиса, имя домена (значение параметра workgroup=) и имя пользователя в текущей сессии. Разница между %u и %U здесь проявляется в том, что первый макрос расширяется в имя пользователя после проверки по файлу подстановок users.map, а второй макрос расширяется в имя пользователя ДО подстановки. Разумеется, заметной она будет только, если пользователь описан в файле users.map, например, пусть в нем содержится такая строчка: root=DOMAIN_INC+administrator root=DOMAIN_INC+moreadmin
Для пользователей administrator и moreadmin будут созданы различные домашние каталоги. Если необходимо, чтобы все пользователи, которые соответствуют локальной учетной записи root, использовали один и тот же каталог, то в строке вызова, приведенной выше, заменить последний параметр с %U на %u. Checkbackdir используется для создания персонального каталога в произвольном ресурсе. Запускается добавлением в параметры ресурса в файле smb.conf, строчки: root preexec = csh -c '/usr/local/sbin/checkbackdir ↵ %u %D %U'
Значения макросов, передаваемых скрипту, те же самые. Возможно, в будущем это будет интегрировано непосредственно в сам проект Samba.
Автоматическое монтирование сетевых ресурсов Microsoft Windows при регистрации
сан в документации, и вставить в .cshrc строку, вызывающую монтирование всех описанных ресурсов. Естественно, каталоги, куда будут монтироваться ресурсы, должны заранее существовать. Монтирование выполняется последовательным вызовом mount_smbfs для всех перечисленных ресурсов. Настроить mountsmb2 не очень просто, но это связано не с недоработками скрипта, а исключительно со скромной, очень скромной реализацией SMB/CIFS во FreeBSD – скриптами, кроме того, что уже сделано, сделать больше нельзя. В настоящий момент ведутся работы по PAM-модулю, который бы выполнял подобную задачу. Существующие модули, известные мне, удалены из портов в связи с их старостью и заброшенностью. Позиция же FreeBSD Team по отношению к SMB/CIFS все больше напоминает буддистских обезьянок – «не вижу зла, не слышу зла, не делаю зла» – собственная, давно заброшенная реализация SMBFS (программа монтирования), и никакого желания взаимодействовать с Samba Team. Подобное снобистское невнимание к взаимодействию с Microsoft Network ничуть не способствует повышению престижа FreeBSD – трудно найти сеть, где бы не использовалась Microsoft Network, и игнорировать ее – значит сознательно ограничивать распространение системы.
Возможные ошибки и их устранение Для ошибок здесь поистине гигантский простор. Начнем мы с возможных ошибок при подключении в домен «понастоящему». Пожалуй, самая нелепая ошибка: # kinit administrator@DOMAIN.RU Exception: krb_error 0 Could not load configuration file /usr/local/jdk1.4.2/jre/lib/security/krb5.conf (No such file or directory) No error KrbException: Could not load configuration file /usr/local/jdk1.4.2/jre/lib/security/krb5.conf (No such file or directory) at sun.security.krb5.Config.<init>(DashoA6275:139) at sun.security.krb5.Config.getInstance(DashoA6275:72) at sun.security.krb5.internal.tools.Kinit.<init>(DashoA6275:135) at sun.security.krb5.internal.tools.Kinit.main(DashoA6275:104)
В первый раз она просто повергает в немое изумление. А на самом деле все очень просто – на компьютере установлена виртуальная машина Java, и в ней тоже есть программа kinit. И если в настройках /usr/local/bin окажется впереди /usr/bin, вы именно такую картину и увидите.
Пожалуй, это самая печальная тема. Печальна она тем, что к ней напрочь отсутствует хоть какой-либо интерес. Мо# kinit administrator@DOMAIN.RU жет быть, конечно, уже в Windows и не модно монтировать сетевые ресурсы, чтобы использовать однобуквенное симadministrator@DOMAIN.RU's Password: kinit: krb5_get_init_creds: unable to reach any KDC in realm DOMAIN.RU волическое имя для обращения к ним, но мне все равно хотелось добиться того, чтобы зарегистрировался в системе – и все нужные сетевые ресурсы подключены. Сначала мной Такая ошибка может возникнуть, если неверно указан KDC, был разработан скрипт mountsmb, написанный на tcsh, по- компьютер недоступен, там не запущен сервис или пратом он был переписан на sh и назван mountsmb2. В насто- вила файерволла запрещают доступ к указанному комящее время он присутствует в портах (sysutils/mountsmb2). пьютеру. Скрипт снабжен небольшой документацией, в которой опи# /usr/bin/kinit administrator@domain.ru сано, как его установить и настроить. По сути дела, там все сводится к тому, чтобы настроить /etc/nsmb.conf, создать administrator@domain.ru's Password: kinit: krb5_get_init_creds: unable to reach any KDC in realm domain.ru в домашнем каталоге файл .mssmbrc, формат которого опи-
68
администрирование Имя для Kerberos должно набираться с учетом регистра! Данный пример показывает, что DOMAIN.RU и domain.ru – это разные вещи. # net ads join -U administrator -w domain.ru administrator's password: [2006/10/29 00:49:58, 0] utils/net_ads.c:ads_startup(281) ads_connect: Operations error
Указывать имя Active Directory вместо имени домена (pre-Windows 2000) можно только в том случае, если Samba способна найти DC с помощью DNS-запроса. Это может быть обеспечено либо указанием в /erc/resolv.conf адреса DC (на котором обязательно должен работать DNS, даже если он никем не используется), либо внесением в любой DNS соответствующих записей. Если и после этого подключение не проходит, проверьте секцию [domain_realm] файла /etc/krb5.conf – записи: .domain.ru = DOMAIN.RU domain.ru = DOMAIN.RU
должны обязательно присутствовать там. # net ads join -U administrator -w domain.ru administrator's password: Using short domain name -- DOMAIN_INC Failed to set servicePrincipalNames. Please ensure that the DNS domain of this server matches the AD domain, Or rejoin with using Domain Admin credentials. Disabled account for 'VMFREE' in realm 'DOMAIN.RU'
Возможны два варианта – либо, действительно, полное имя компьютера, используемое для формирования принципала HOST/computer.domain.tld, не совпадает с именем Active Directory, либо используется Samba 3.0.23c, в которой из-за ошибки такое сообщение может выдаваться даже при правильной настройке. Разрешение полного имени компьютера производится только через /etc/hosts, в нем не участвуют ни /etc/nsswitch.conf, ни gethostbyaddr(). Имя, разрешенное таким образом, будет отображаться в свойствах обьекта «Компьютер». Проверьте, как именуется компьютер в /etc/hosts, и обновите версию Samba до 3.0.23d. В качестве обходного пути могу посоветовать подключаться к домену не через ads, а через MS-RPC: # net rpc join -U administrator -w DOMAIN_INC Password: Joined domain DOMAIN_INC.
Обратите внимание, что здесь может быть использована только форма pre-Windows 2000 имени домена. При подключении таким способом будет невозможно использовать MMC для подключения к компьютеру. При работе через MMC ошибиться практически негде. Не потому, что все работает как часы, а потому, что как раз мало что работает и просто нет места для ошибки. Единственное, что может вызвать недоумение, – это наименование и описание сервисов. Для добавления нового или изменения старого описания удалите registry.tdb. Описание можно набирать по-русски, но при этом текст должен быть
№1, январь 2007
Рисунок 5. Пример правильного и неправильного описания сервиса по-русски
в KOI8-R, а не в кодировке Windows. На рис. 5 видны два примера описаний – первое было набрано в KOI8-R, второе – в CP-1251. Новое наименование добавьте в файл services / services_db.c и пересоберите пакет Samba. Например, добавим наименование для сервиса INN: --- services_db.c.old +++ services_db.c @@ -80,6 +80,7 @@
Sun Oct 15 03:04:58 2006 Sun Oct 29 23:14:35 2006
"file transferring" }, { "ssh2", NULL, "SSH Secure Shell", "Provides service for secure connection for remote administration" }, { "sshd", NULL, "SSH Secure Shell", "Provides service for secure connection for remote administration" }, + { "inn", NULL, "InterNetwork News Server", NULL }, { NULL, NULL, NULL, NULL } };
При назначении прав на ресурсы с использованием ACL в файловой системе, а также доменных учетных записей, наследования и принудительного переопределения (force-параметров) будьте очень внимательны – конструкция %D+administrator задает доменного пользователя, в то время как просто administrator – локального, наследование (inherit-параметры) задает права на файл или каталог, равными родительскому каталогу, тогда как force-параметры их переопределяют. Особенно внимательно нужно быть к параметру force user – при его использовании все действия выполняются от форсированного имени, в том числе подстановка макросов %u и %U. В настройке автосоздания каталогов при первой консольной регистрации ошибиться негде, если только pam_mkhome вообще получает управление. Для этого модуль должен быть указан как required в секции account политики pam для сервиса. Для отладки pam можно использовать программу pamtester (security/pamtester). В настройке автосоздания каталогов при первом подключении к сетевому ресурсу все ошибки диагностируются включением отладки в строке шебанга скрипта. Вывод скрипта checkhomes пойдет на консоль, а checkuserhome – в файл лога Samba. Все ошибки могут быть связаны скорее всего с неверными параметрами, передаваемыми из Samba. Также следует проверить наличие и доступность GNU awk, и не вызывается ли BSD awk вместо него. При всей их внешней схожести скрипты для GNU awk могут не работать в BSD awk и наоборот. Удачи! 1. http://www.askd.ru/~shelton/newstore – упоминаемые в статье скрипты и патчи, а также доработанная версия модуля pam_ mkhomedir, который называется pam_mkhome. 2. Кондрин М. Развертываем Heimdal Kerberos. //«Системный администратор», №7, 2005 г. – С. 20-25.
69
человек номера
Снаряд – броня В этом соперничестве Алексей Раевский на стороне брони. Пользователям повезло.
А
может быть жизнь – это сказка? Цепь чудесных превращений. Главное – вовремя понять, что лягушка – царевна, в клубочке – путеводная нить, а смерть Кащея – на конце иглы, и нигде больше… Алексей Раевский нашел свое место под солнцем, а фирма «СекьюрИТ» – свой сегмент на рынке IT.
Когда компьютеры были большими… Банальная мысль, повторяющаяся из биографии в биографию, из очерка в очерк: все начинается с детства. Но идея верная! Очень многое зависит от того, что в нас заложили в детстве, в какое время мы появились на свет. Родись Алексей Раевский на пять лет раньше, кто знает, какую профессию он выбрал, кем бы стал. Интерес к токарным станкам на уроках труда, посе-
70
щение по-советски бесплатного кружка моделирования и ему подобных, радиолюбительство наверняка повторилось бы… Тем более, что радио школьник Алеша Раевский изучал довольно серьезно: «Там есть несколько направлений. Во-первых, конструирование. Спаять, включить, и чтобы этот самодельный приемник не задымился, а заработал. Во-вторых, скоростная радиотелеграфия, прием радиограмм азбукой Морзе на слух, запись стенографией и передача ключом. Это официальный спорт, соревнования по нему проходят, он и сейчас существует, несмотря на развитие Интернета. Соревнования проходят так: сидишь в радиоклассе с наушниками, тебе передают радиограмму, ты ее записываешь, сдаешь, судья смотрит: ошибся или нет и кто быстрее сделал. В-третьих, работа в эфире, с использованием
телеграфной азбуки. Когда я был радиолюбителем, начал входить в моду телетайп. Тогда это были механические аппараты, внешне похожие на печатные машинки, подключенные к радиостанции». Но все изменил один важный исторический факт – в нашу жизнь начали активно входить компьютеры, тогда еще большие, непохожие на современные PC. Ребята, увлеченные новейшими технологиями, искали игровые клубы, изучали «Агаты» и БК. Алексею повезло – в 8-м классе на олимпиаде по информатике в Московском университете он столкнулся с самой современной техникой: «Первый тур был теоретический, надо было на бумаге что-то запрограммировать. Потом те, кто хорошо запрограммировали, выходили в полуфинал, практический тур. Там был класс IBM PC, именно в нем состоялось мое первое знакомство с интегрированной средой Turbo Pascal. Я помню, что вместо того, чтобы решать задачу, я экспериментировал со средой, в которой были встроенные компилятор и отладчик. По сравнению с БК-0010, где загрузка была с магнитофонных кассет, это была просто фантастика». Первый звонок судьбы прозвенел. Пока очень тихо и неуверенно. Вряд ли пятнадцатилетний подросток осознал, что чудо в его жизни уже произошло. Все было прозаично. Восьмиклассник Алексей поехал в физико-математическую школу №542 при МИФИ на день открытых дверей. Походил, понравилось. И неизвестно что больше – физическая и химическая лаборатории или два хорошо оборудованных вычислительных класса. Где-то полгода проучившись в спецшколе, Алексей Раевский понял, что его будущее обязательно будет связано с компьютерами. Колокола судьбы зазвенели громче. Выбирая вуз, наш герой немного поколебался. Ему предложили поступать в Физтех (Московский физикотехнический институт) по сокращенной программе, сдавать вместо пяти всего два вступительных экзамена. Од-
человек номера нако сработала инерция, выпускные экзамены по окончании физико-математической школы засчитывались в качестве вступительных в Московский государственный инженерно-физический институт (технический университет). Однако выбор вуза уже не имел значения. Потому что выбор своего Дела был предрешен.
Просто инженер Скоро сказка сказывается, да не скоро дело делается. От интереса к системам защиты программного обеспечения от копирования до создания собственной фирмы было далеко… Но интерес этот оказался стойким, и на первых порах – хакерским, то есть Алексей Раевский взламывал эти самые защиты. Однако он был хакером в первоначальном, практически первобытном значении этого слова – исследовал проблему, находил уязвимости. Современные хакеры, считает генеральный директор ЗАО «СекьюрИТ», – это чаще всего подростки, которые вместо того, чтобы писать всякую ерунду на стенах в подъезде, включают компьютеры и хулиганят в сети, самоутверждаясь таким современным способом. Но их деятельность не похожа на открытие или искусство. «Как правило, это использование набора каких-то известных технологий для атаки на конкретные сайты. У меня есть инструментарий, к которому я не имею никакого отношения – молоток, отвертка, и я должен этими инструментами что-то расковырять…». Логично, что изучив уязвимости, Алексей перешел к созданию собственных систем защиты. Новый сказочный поворот в его жизни назревал. Судьба подбрасывала знаки. Вот Алексей Викторович Раевский, будучи еще студентом, становится внештатным экспертом, тестирующим стойкость систем защит производства российских и зарубежных компаний. Вот уже сам участвует в разработке систем для защиты программного обеспечения от несанкционированного копирования и систем защиты информации от несанкционированного доступа, в частности, Secret Disk и Secret Disk Server… Конечно, можно не увидеть ничего сказочного в обычной деятельнос-
№1, январь 2007
ти инженера-математика, который выбрал IT-сферу и постепенно укреплял в ней свои позиции. Однако я не устаю удивляться вполне житейским чудесам: как жизнь протягивает ниточку от легкого интереса к той или иной сфере к серьезному любопытству, желанию исследовать ее ближе и наконец к воплощению мечты – ты становишься активным строителем выбранной тобой сферы, ее надеждой и опорой. Спасибо судьбе или собственной интуиции, но в 2001 году Алексей Раевский становится учредителем ЗАО «СекьюрИТ» (ударение на последнюю гласную, так называют свою фирму ее создатели), с 2003 года является генеральным директором компании. За первые два года существования были разработаны системы защиты информации на рабочих станциях и серверах. И опять – чудо это? Раевский, конечно, на это бы ответил улыбкой. Алексей считает, что он ничего особенного не делает, всего-навсего занимается инженерной работой, которая по диплому «прописана»: берет идею, воплощает ее во что-то материальное, кладет в коробку, рекламирует продукт на рынке и продает. «Это как автомобиль сделать. Все узлы в ней известны. Двигатель изобрели, коробку, тормоза, но «Ауди» сделала машину, назвала «Ауди А6», покрасила в красивый цвет, назначила цену. С технической, идеологической точки зрения системы безопасного хранения данных достаточно просты, в них нет особых изобретений, за них не дают Нобелевских премий. Но это важно практически, ведь эти системы защищают данные, которые хранятся на жестких дисках, магнитных лентах, дисках CD на случай, если носитель попадет в чужие руки. До нас никто на этом не концентрировался, не делал производство и продажу этих систем основным бизнесом». Однако Раевский и его коллеги делают нечто более важное: они формируют в России рынок информационной безопасности от внутренних угроз, который создается очень медленно во многом из-за беспечности руководителей мелких и крупных компаний. Почему-то считается, что утечка информации – исключительно западная проблема. Это не так. У нас тоже
крадут базы данных и продают потом на дисках для всеобщего пользования. Просто у нас к этому относятся… как к неизбежному злу. Виновных, конечно, ищут, но профилактикой занимаются вяло. А почему за рубежом о таких случаях громко говорят и стараются не допустить? Потому что законы строгие и обычно выполняются. «У них если происходит такой инцидент, – объясняет Алексей, – по закону компания должна объявить о пропаже. Пропал ноутбук – во-первых, на своем сайте опубликуйте, какие у вас там были данные. Если потерян носитель с данными о клиентах, каждого необходимо в обязательном порядке известить. Ладно, если ноутбук сгорел, его переехала машина, он утонул в реке. А если попал в руки злоумышленников? В нем адреса, имена, номера счетов…». Я спрашиваю Алексея: «А в нашей стране фирмы озабочены безопасностью?» – «У нас еще далеко до озабоченности. Мы в самом начале пути. Хотя наиболее продвинутые российские фирмы заинтересованы в защите». Конечно, у нас и масштабы потерь от воровства важных сведений пока не велики. Зарубежные компании порой фиксируют астрономические цифры убытков. «Представьте, у Ситибанка пропало несколько лент, на них были данные о трех миллионах клиентов с номерами счетов и остальными данными. Каждому клиенту надо письмо послать, уведомить его… Даже если банк «дружит» с почтовой службой США, все равно это в копеечку влетит. Кроме этого, они предложили всем бесплатный кредитный мониторинг. В принципе, это услуга платная. Но обычно банки, которые допускают такие утечки, предлагают ее жертвам бесплатно. Ведь если средства пропадут со счетов, будет еще хуже…». Между прочим, средства защиты на Западе не так хороши, как те, что предлагает российская фирма «СекьюрИТ». За рубежом защита такого типа предлагается в основном аппаратная. Алексей Раевский со товарищи делает программные средства. Это дешевле, удобнее. Кто-то может сказать: но ведь фирмы, у которых есть секреты, могут просто-напросто установить строгую слежку за своими сотрудниками,
71
человек номера
не пускать на рабочее место со своей техникой, отбирать на входе все, вплоть до мобильников. Так, кстати, делают на военных «ящиках». А как вы думаете, уютно будет работать в такой компании? То-то и оно…
Золушка должна быть менеджером Сегодня фирме «СекьюрИТ» пять лет, и она занимает вполне прочные позиции на рынке ИТ. Говоря об этом, я себя чувствую сказочником, который рассказывает о Золушке, ставшей принцессой. Прямо голливудская история. Однако чудо это запрограммированное. Ведь мало выбрать свою сферу деятельности, правильно определиться с профессией. Надо еще свою идею красиво подать. Алексей Раевский награжден Почетным дипломом Российской Академии Наук за большой вклад в развитие информационных технологий в России, но будь он просто хорошим специалистом, успеха ему не видать. Алексей Викторович – хороший менеджер. Он рассуждает: «Есть хорошая американская пословица: тому,
72
кто придумал – один тные ценности компании, одинаково доллар, тому, кто сде- понимать основные принципы, на колал – десять долла- торых строится вся работа. – Что будет дальше? Что ваша фирров, тому, кто продал – сто долларов. ма предложит потребителям? На мой взгляд, она – Мы видим свое развитие в сонаиболее точно отра- вершенствовании средств защиты жает состояние науки от внутренних угроз. Здесь поле неи промышленности паханое. Ведь человек – это не робот. в современном мире. Даже суперлояльный, супермотивиПока идея не стала рованный сотрудник может из лучших самоокупаемой, она побуждений скопировать на флэшку не доказала своего данные, чтобы поработать дома, в выправа на существо- ходные. А потом потерять эту флэшку, вание. Любая идея на которой, к примеру, информация должна быть прове- о планах развития компании на пятирена рынком». летку, об инвестициях или что-то в этом – Что самое слож- роде. Такие случаи бывают. Надо пониное, когда создаешь мать, что инсайдер, которым всех пуфирму? гают, – это не обязательно злоумыш– По отдельности ленник, это может быть вполне лояльвсе кажется простым. ный сотрудник, просто немного рассеА все вместе увязать, янный, забывчивый… Хотя промышч то бы од но д руго - ленного шпионажа тоже никто не отму не противоречи- менял. У нас конкуренция пока только ло, все вместе рабо- начинается, и это в основном конкутало, – сложно. Мы ренция за ресурсы: завод, место для выступаем в качес- магазина, коммерческой палатки, трутве вендера. То есть ба, нефтяная скважина. Но государси придумываем про- тво собирается в ближайшем будущем дукт, и проектируем экспортировать высокие технологии. его, и разрабатываем, и тестируем, и Значит у нас наверняка произойдет то, контролируем качество, и разрабаты- что во всем мире происходит: удельная ваем дизайн, интерфейс, иконки, до- стоимость информационной составлякументацию, и укладываем в короб- ющей в продуктах по сравнению с маки. Потом все это надо продать. Что- териальной повысится. А поскольку бы хорошо продать, надо организо- стоимость информационного ресурса вать маркетинг, рекламу, участвовать будет расти, желающих его украсть був выставках. А затем оказывать поль- дет все больше и больше. Будем развивать дальше средства зователям техподдержку. Важно помнить обо всех деталях цикла, причем для борьбы с инсайдерами. USB-успредставлять, как смена одной детали тройство – не единственный споповлияет на все остальные. соб утечки, информацию можно еще – Вам важно, кто с вами работа- и по электронной почте отправить. Причем не обязательно через свой ет рядом? – Это проблема номер один. Мы все почтовый сервер, можно и через вместе работали в одной компании, mail.ru, например. Это тоже проблеушли оттуда и создали СекьюрИТ. Пер- ма, и многие не знают, как ее решить. вое время, естественно, было тяже- Тут соперничество: снаряд – броня. ло финансово. Наименее терпеливые Возникают новые технологии воровсне дождались лучших времен и уш- тва – появляются новые технологии ли. Осталось три человека, включая защиты от воровства. Процесс бесменя. Потом возник новый коллектив. конечный. Для меня важны не столько профессиНо разве не чудо, что в этом соперональные качества человека, его об- ничестве Алексей Раевский на стороне разование, количество дипломов, хо- брони? Как не повезло снаряду… тя, конечно, в нашем деле нужен опреТекст Оксана Родионова, деленный интеллектуальный уровень. фото Владимира Лукина Самое главное – разделять совмес-
безопасность
Руткиты режима ядра: алгоритмы работы и защита
Артем Баранов Случалось ли вам замечать, что в системе «живет» посторонний процесс. Но ни диспетчер задач, ни другие программы не могут его показать. Может быть, процесс скрывается и от них? Каковы методики скрытия в режиме ядра?
В
последнее время в мире NT получает все большее распространение технология руткитов. По сути, руткит (rootkit) представляет собой технологию, предназначение которой скрывать что-либо. Под технологией руткитов обычно понимают программу, которая «документированно» или нет использует перехват API-вызовов для фильтрации возвращаемых результатов системных функций. В предыдущей статье (см. №10 за 2006 г.) давалась вводная информация, а также были рассмотрены алгоритмы работы руткитов пользовательского режима. В данной статье внимание уделено алгоритмам работы руткитов режима ядра. Напомню, что руткиты режима ядра функционируют на нулевом кольце и имеют полный доступ к области памяти ядра NT, со всеми вытекающими отсюда последствиями. Например, руткит может модифицировать структуры данных Windows и тем самым скорректировать поведение ядра для достижения заданных целей: маскировка файлов, процессов, сетевых соединений. В статье описываются техники, используемые в современных руткитах режима ядра, включая fu и Shadow Walker. Так-
74
же описаны утилиты, с использованием которых можно выявлять скрытые руткитами объекты.
Классификация Для скрытия в системе каких-либо объектов руткиты либо перехватывают системные сервисы ядра, аналогично тому, как это делают руткиты пользовательского режима для DLL, либо модифицируют структуры данных ядра. В соответствии с таким подходом руткиты делятся на две следующие группы: модифицирующие путь выполнения потока (modify execution path); модифицирующие объекты ядра (directly kernel object manipulation, DKOM).
Руткиты, относящиеся к первому типу, заставляют поток, вызвавший системный сервис, отработать код руткита. Когда код руткита получает управление, он вызывает настоящий системный сервис по указателю, отфильтровывает данные и возвращает результат. Второй тип руткитов менее заметен, т.к. код руткита напрямую не выполняется. Руткит модифицирует одну (или несколько) структур данных ядра. Таким образом заставляя системную функцию работать с ложным объектом (или очередью объектов). Такие руткиты воздействуют на работу ядра косвенно. Рассмотрим каждый из методов более подробно.
Первые реализуются с использованием следующих методов: Перехват функций перехват функций через SSDT (таб- через SSDT лица диспетчеризации системных Если руткиту нужно перехватить инсервисов); терфейс ядра через таблицу диспетчеризации, он просто модифицирует перехват прерываний; изменение первых машинных ко- указатель в этой таблице на свой обманд перехватываемой функции работчик, сохранив перед этим указана jmp; тель на предыдущий. Для исключения путанницы, свя изменение указателей в объектах ядра, например KTHREAD.pService занной с терминологией, приведены DescriptorTable. структуры SST и SSDT.
безопасность typedef struct _SERVICE_DESCRIPTOR_TABLE { SYSTEM_SERVICE_TABLE ntoskrnl; SYSTEM_SERVICE_TABLE win32k; SYSTEM_SERVICE_TABLE Table3; SYSTEM_SERVICE_TABLE Table4; } SERVICE_DESCRIPTOR_TABLE, typedef struct _SYSTEM_SERVICE_TABLE { PNTPROC ServiceTable PDWORD CounterTable; DWORD ServiceLimit; PBYTE ArgumentTable; } SYSTEM_SERVICE_TABLE;
На рис. 1 показано нормальное выполнение системного сервиса WriteFile, а на рис. 2 выполнение того же сервиса, но руткит уже заменил указатель в SSDT на свою функцию. Таким образом, руткит может контролировать выполнение системного сервиса, отфильтровывая «ненужные» данные.
Перехват прерываний
Рисунок 1. Нормальный поток выполнения кода, вызвавшего WriteFile
Иногда руткиту приходится перехватывать прерывания или исключения, подменяя адреса в таблице диспетчеризации прерываний (IDT). Это может быть сделано, например, для скрытия своего присутствия, или руткиту необходимо знать, что произошло какое-то событие в системе. При этом прерывания можно также перехватить методом замены первых байт функции на команду jmp (описан ниже). Для наглядной демонстрации на рис. 3 показаны IDT и функции ядра, обрабатывающие прерывания до того, как на них воздействовал руткит, а на рис. 4 показано, как руткит перехватывает исключения #GP (General Protection) и #PF (Page Fault). Видно, что #PF перехватывается через IDT, а #GP – путем записи команды безусловного перехода в начало обработчика.
Изменение первых слов перехватываемой функции на jmp Руткит может перехватить вызов функции, не только подменяя адреса в SSDT. Достаточно затереть первые пять байт перехватываемой функции на jmp на функцию руткита, сохранив перед этим оригинальные байты. Когда будет необходим вызов, восстанавливать эти байты и передавать управление оригинальной функции. Обычно руткит записывает первым байтом опкод ближнего jmp – E9, а в последующих четырех байтах смещение от начала следующей инструкции до целевой функции (функции руткита).
Изменение указателя KTHREAD.pServiceDescriptorTable Когда поток вызывает системный сервис, ядро находит необходимую SDT (их две KeServiceDescriptorTable, KeServiceDescriptorTableShadow), обращаясь к структуре KTHREAD. KTHREAD является частью более общей структуры ETHREAD, которая представляет поток в ядре. Руткит может скопировать старую SDT (включая SSDT), подменить в SSDT указатели на свои обработчики и в KTHREAD.pServiceDescriptorTable записать новый адрес на вновь созданный дескриптор. Ниже на рис. 5 показаны два потока. Первый еще не вызывал USER или GDI-сервис, и его pServiceDescriptorTable указывает на сервисы, которые обслуживает ntoskrnl. PServiceDescriptorTable второго потока указывает на таблицу дескрипторов, включая де-
№1, январь 2007
Рисунок 2. Поток выполнения кода, вызвавшего WriteFile из переписанной SSDT, что приводит к активации руткита
скриптор для обслуживания USER и GDI сервисов – win32k. На рис. 6 видно, что руткит скопировал старую SDT, подменил указатели в SSDT и записал указатель на новую таблицу дескрипторов в KTHREAD.
Модификация объектов ядра На сегодняшний день существуют руткиты, которые скрывают процессы с использованием модификации системной очереди объектов ядра. Яркий представитель – fu. Суть этого подхода в следующем. В NT 5.x процессы, которые работают на данный момент в системе, увязываются в одном двунаправленном списке. Fu просто переставляет указатели соседних объектов скрываемого процесса. Таким образом, когда ядро проходится по списку, то не видит этот процесс. На рис. 7 представлена системная очередь, а на рис. 8 видно, что руткит скрыл второй процесс. Каким образом руткит определяет адрес системной очереди? Ответов на этот вопрос несколько: через экспортируемую переменную ядра PsActiveProcessHead; вычитая соответствующее смещение (0x88 в Windows XP), руткит определяет первый элемент очереди (всегда процесс System);
75
безопасность не участвуют в перераспределении процессорного времени, и ядру без разницы – осуществлять переключение контекста на поток того же процесса или на поток другого процесса. Все дело в том, что существуют еще очереди планировщика (диспетчера потоков), которые он использует для Рисунок 3. Таблица дескрипторов прерываний не зараженной системы осуществления операций, связанных с планированием. Таких очередей три: KiDispatcherReady ListHeader – очередь готовых к исполнению потоков, KiWaitInListHead, KiWaitOutListHead – две очереди потоков, которые пока не планируются, т.е. ждут какого-то события (например, завершение операции вводаРисунок 4. Таблица дескрипторов прерываний, вывода). На самом деле руткит перехватил Page Fault и General Protection первая очередь являет через регистр fs; при переключении ся таблицей из 32 элементов, каждый в привилегированный режим ядро из которых адресует очередь для конпомещает в регистр fs другой се- кретного приоритета потока. лектор, в результате fs будет адресоваться к структуре данных KPCR – Shadow Walker Processor Control Region (описы- Shadow Walker является руткитом, котовает процессор в ядре); в KPCR рый предназначен для скрытия fu в сиссодержится указатель на струк- теме. Делает он это достаточно неортуру KPRCB – Processor Control динарным способом. Во всяком случае Block, которая содержит указатель до Shadow Walker такой способ не прина ETHREAD потока, выполняюще- менял ни один руткит. Сам fu работагося в данный момент на процессо- ет в режиме ядра и предназначен для ре (член CurrentThread); определив скрытия процессов, добавления привиадрес ETHREAD, руткит, исполь- легий в маркер и прочее. Но несмотря зуя соответствующее поле, находит на предоставляемые богатые возможуказатель на EPROCESS, которому ности, его можно обнаружить простым принадлежит поток; этот подход ис- сигнатурным поиском в области памяпользует fu; ти ядра, со всеми вытекающими отсю через функцию IoGetCurrentProcess, да последствиями. Противостоять сигкоторая возвращает указатель натурному поиску, а тем более в памяти на EPROCESS процесса, который достаточно сложно, если не применять активен в данный момент. стандартные методы (например, полиморфизм). А fu его не применяет. Нужно Такая техника вводит многих людей было придумать такой метод, при котов замешательство. Они думают, что ес- ром код может получать доступ к страли такой процесс удалить из очереди, нице памяти при ее чтении и модифито он не сможет выполняться, т.к. систе- цировать ее данные. В Shadow Walker ма не будет его учитывать. Но все дело заложен следующий алгоритм: в том, что распределение процессор- сделать страницы кода fu в памяного времени в Windows NT осущестти недействительными, т.е. сбровляется между исполняемыми сущсить первый бит – Valid в аппаратностями – потоками. Процессы вообще ном PTE;
76
когда произойдет ошибка страницы (при ее чтении) в связи с тем, что PTE помечен как недействительный, руткит должен определить, является ли страница той, которую необходимо скрыть; если да, то каким-то образом заменить данные на странице; если происходит выполнение на странице кода руткита, просто сделать PTE действительным и дать процессору таким образом доступ к странице. Но каким образом можно определить, читает процессор данные из памяти или выполняет? Авторы руткита предлагают следующий прием. Если адрес в регистре CR2 (в этот управляющий регистр помещается линейный адрес, вызвавший ошибку страницы) совпадает с сохраненным в стеке адресом возврата (напомним, что ошибка в отличие от ловушки возвращает управление инструкции, которая вызвала ошибку), то процессор выполняет код на странице, в противном случае выполняется операция чтения. Но как возвратить потоку ложные данные, когда тот пытается прочитать код руткита? Разработчики Shadow Walker и здесь нашли элегантное решение. Все дело в том, что в процессорах типа x86 для быстрого преобразования адресов используется специальный процессно-зависимый буфер преобразования адресов (Translate Lookaside Buffer, TLB). Записи TLB хранят соответствия между номерами виртуальных страниц (Virtual Page Number, VPN) и соответствующими номерами фреймов страниц (Page Frame Number, PFN). На самом деле в x386 существует несколько TLB, ITLB для кэширования проекций инструкций и DTLB для кэширования проекций данных. В синхронизированном виде ITLB и DTLB содержат одинаковые элементы кэширования страниц кода и данных, см. рис. 9. После того, как руткит изменит вхождение в TLB буферы не будут находиться в синхронном состоянии. В итоге поток, читающий данные, получит в использование «левую» страницу, что и демонстрируется на рис. 10. Когда процессору необходимо считать данные со страницы, он обращается к DTLB, если необходимо, выполнит код к ITLB. В результате рассинхрони-
безопасность зации работы буферов преобразования адресов при чтении процессор видит одну страницу, а при записи – другую. Привить руткиту стелс-алгоритм также можно следующим методом. В процедуре инициализации драйвера выделяем регион памяти (например, в резидентном пуле). Затем копируем туда функцию, которая будет осуществлять перехват сервиса. Устанавливаем атрибут страниц со скопированным кодом на «чтение». Переписываем указатель в KiServiceTable на скопированную функцию. Затем необходимо, чтобы ядро выгрузило драйвер. Этого можно достичь, если процедура DriverEntry вернет отличное от STATUS_SUCCESS значение.
Противодействие руткитам режима ядра Рассмотрим программы, предназначенные для выявления руткитов, и алгоритмы их работы.
Рисунок 5. В структурах ETHREAD, указатель на таблицу SDT, указывает на SDT ядра
Klister Автор Joanna Rutkowska (http://invisiblethings.org/tools/ klister-0.4.zip). Эта программа предназначена для выявления скрытых процессов. Для этого она использует списки потоков планировщика (KiDispatcherReadyListHead, KiWaitOutList Head, KiWaitInListHead). Как уже упоминалось, эти списки указывают на структуры ETHREAD, с помощью которых исполнительная система представляет потоки в системе. А каждая из структур содержит член, указывающий на EPROCESS процесса, к которому принадлежит поток. Проходясь по этим спискам, klister собирает всю информацию по процессам и выводит ее пользователю. Соответственно, для выявления скрытого процесса нужно сравнить результаты, полученные с помощью klister, и те, которые отображает диспетчер задач. Klister состоит из драйвера режима ядра, принимающего запросы от программы пользовательского режима, – второй компонент klister. Драйвер и собирает всю статистику. К сожалению, символы KiDispatcherReady ListHead, KiWaitOutListHead, KiWaitInListHead не являются экспортируемыми, поэтому в klister еще на этапе компиляции были зашиты адреса списка потоков планировщика. В дистрибутиве с klister поставляются еще две программы: idt и sdt. Первая позволяет узнать адреса обработчиков прерываний и исключений, а вторая позволяет просмотреть таблицу дескрипторов системных сервисов.
Рисунок 6. В структурах ETHREAD указатель на таблицу SDT, указывает на SDT руткита
BlackLight Автор F-secure (http://www.f-secure.com/exclude/blacklight/ blbeta.exe). Программа предназначена для выявления скрытых процессов, файлов и каталогов. Для выявления процессов используется метод, получивший название PID Bruteforce (PIDB). Заключается он в следующем: для всевозможных значений PID (от 0x0 до 0x4E1C) вызывается функция OpenProcess, если процесс существует, то BlackLight фиксирует его в своем списке. Затем создается снимок процессов (CreateToolhelp32Snapshot) и оба списка сравниваются. Если происходит несовпадение по какому-либо процессу, значит, он скрыт.
RootkitRevealer Автор Sysinternals (http://download.sysinternals.com/Files/ RootkitRevealer.zip). Еще одно средство, которое поможет
№1, январь 2007
Рисунок 7. Очередь процессов, выполняющихся в системе
Рисунок 8. Модифицированная руткитом очередь процессов
в борьбе с руткитами. RootkitRevealer не занимается поиском скрытых процессов. Вместо этого он сосредоточен на поиске скрытых разделов реестра, файлов и папок. RootkitRevealer осуществляет техники выявления руткитов
77
безопасность RAIDE
Рисунок 9. Два буфера TLB, для кэширования проекций кода и данных в синхронизированном состоянии
Авторы James Butler, Peter Silberman (http://www.rootkit.com/ vault/petersilberman/RAIDE_Beta_1.zip). Эта программа предоставляет следующие возможности: обнаружение скрытых процессов восстановление SSDT, восстановление первых байт функции. Также RAIDE позволяет сделать скрытый процесс видимым. Восстановление адресов в SSDT RAIDE осуществляет, считывая KeServiceDescriptorTable из файла ntoskrnl.exe на диске и определяя указатель на SSDT, сверяет соответствующие указатели в таблице SSDT в памяти и на диске. Аналогичным образом она восстанавливает поврежденную руткитом функцию, т. е. функцию, первые байты которой руткит переписал на команду перехода. Программа считывает первые три инструкции функции с файла на диске и переписывает их в соответствующее место в памяти.
Заключение Руткиты режима ядра используют недокументированные возможности Windows NT, что не обеспечивает им переносимости на разных версиях NT. Microsoft не документирует устройство объектов ядра, т.к. оно меняется от версии к версии. Поэтому определения этих структур нельзя найти в DDK. Но при разработке руткита или средства его обнаружения можно опираться на определения структур, показанных Windbg (команда dt). Кроме того, Windbg предоставляет возможности ручного определения на предмет заражения системы. Например, можно продизассемблировать первые Рисунок 10. Два буфера TLB для кэширования проекций кода байты функции (u), а затем посмотреть, не стоит ли в пери данных в рассинхронизированном состоянии вых же байтах команда jmp. Аналогично можно проверить, не перехвачена ли функция в SSDT. Для этого нужно посмотреть адреса в SSDT, например, командой dd KiServiceTable, а затем для адреса, указанного там, вывести идентификатор командой ln. Если для адреса выводится идентификатор, значит, функция не перехвачена, в противном случае есть подозрение, что это адрес функции руткита. Рисунок 11. RootkitRevealer обнаружил «невидимые» Несмотря на весьма широкий выбор программ по выразделы реестра, скрытые руткитом HackerDefender явлению руткитов, лишь некоторые из них могут сказать, сканированием кустов реестра на низком (RAW) уровне, каким именно руткитом заражена система. В основном же т.е. анализируя реестр без характерных API-вызовов, а за- эти средства узкоспециализированны и базируются тольтем используя Win32 API, и сравнивает полученные резуль- ко на определенных техниках выявления. Стоит также оттаты. Аналогично RootkitRevealer выявляет и скрытые пап- метить, что техники, реализованные в тех или иных средски. Вначале сканирует раздел с использованием метадан- твах, также не гарантированно могут обнаружить, наприных файловой системы, а затем с использованием Win32 мер, скрываемый процесс. Так, IceSword и BlackLight не моAPI также сравнивает полученные результаты и выводит гут обнаружить руткит FuTo, который скрывает процессы соответствующие скрытые объекты. На рис. 11 показано, таким образом, что те функции API, на которые опираютчто RootkitRevealer выявил разделы, которые скрыл из поль- ся эти средства, работают с ложными данными, которые зовательского режима HackerDefender. руткит уже модифицировал. А средства выявления руткитов, опирающиеся только на сигнатурный поиск в памяти, VICE не смогут обнаружить Shadow Walker. Для выявления рутАвторы James Butler, Gregory Hoglund (http://www.rootkit.com/ китов режима ядра нужен комплексный подход к анализу vault/fuzen_op/vice.zip). VICE также является программой работы системы. Например, для выявления Shadow Walker для обнаружения руткитов. Его основная задача – обнаруже- прежде чем запускать сигнатурное сканирование в памяти, ние руткитов, модифицирующих путь выполнения (как в поль- нужно посмотреть правильный ли адрес указан в IDT для обзовательском режиме, так и в режиме ядра). После нажатия работчика ошибки страницы. Пока полнофункциональных на кнопку сканирования в окне VICE начнет проверять систе- средств, которые объединили бы все техники обнаружения, му на наличие руткитов. Процессы, на которые воздействует нет. Возможно, это обуславливается тем, что сама технируткит, показаны в списке. Рядом с названиями процессов ка реализации DKOM используется с недавнего времени. располагаются иконки, каждая из которых показывает, каким Да и изощренные техники скрытия кода в памяти, применяименно способом был заражен процесс руткитом. емые в Shadow Walker, до этого не использовались.
78
IMHO
Чего ждать от удаленной работы?
Крис Касперски Чужой опыт редко бывает полезным, особенно если он касается такого индивидуального аспекта, как поиск работы. У каждого из нас свои сильные и слабые стороны, свои цели и свои средства их достижения. Описывая сложную систему взаимоотношений соискателей с работодателями, я ни за что не агитирую и ни к чему не призываю. Просто… показываю один из многих путей выживания в этом мире.
П
оиск работы – это всегда ком- временно. Чтобы впоследствии не жапромисс между размером за- леть о бесцельно прожитых годах, раработка и величиной интереса ботать следует из удовольствия, полк ней. Только не путайте деньги с воз- ностью (или частично) отождествляя можностями, которые они предостав- собственное «Я» с тем, что это «Я» ляют. Деление жизни на «время рабо- делает, воспринимая деньги как неты» и «время отдыха» делает человека что само собой разумеющееся. А деи бедным, и глубоко несчастным одно- ньги в IT-индустрии вращаются воис-
80
тину огромные, и когда другие говорят о растущей безработице, у нас наблюдается устойчивый кадровый кризис. Везде полным-полно незанятых мест, а специалистов на всех не хватает. Зарабатывать > $1000 для программиста средней руки – вполне реально, правда, и вкалывать придет-
IMHO ся так, что… окружающий мир перестанет существовать и в сознании останется только клавиатура и монитор. Естественно, москвичи и жители других крупных городов находятся в более выигрышном положении, чем жители периферии, а в Штатах даже юниоры получают на порядок (двоичный) большие суммы. Кто-то, соблазнившись открывающимися перспективами (причем, не только финансовыми), перебирается из родной глубинки в столичные округа или даже пересекает океан, надеясь встретить на той стороне вечно голубое небо, пальму и белый пароход (не «Титаник»). Что ж, каждый выбирает свой путь сам, но существует тысяча мотивов, чтобы никуда не уезжать, а жить там, где ты родился. Интернет дает уникальную возможность удаленной работы из любой, даже самой глухой и отдаленной деревни. А что? Свежий воздух, экологически чистые продукты, частный дом, не идущий ни в какое сравнение с тесными городскими квартирами… Впрочем, дело даже не в деревне, а в образе жизни. Удаленная работа пользуется популярностью и в Москве, избавляя творчески настроенных людей от необходимости каждое утро таскать свое «тело» в офис, и расширяет границы охотничьих «владений» до размеров Земли.
За и против Ассоциация с «охотой» возник ла не случайно. В отличие от «firm job», удаленная работа зачастую вообще не имеет никакого юридического статуса, превращая нас в хищников, бегающих по просторам Интернета в поисках добычи. А хищника, как известно, ноги кормят. Сейчас, по прошествии десяти лет, проведенных на «вольных хлебах», я оглядываюсь назад и думаю: «Какое же это счастье иметь стабильную работу, на которую можно прийти и… тупо делать то, что тебе скажут (или… не делать, если не скажут). Где думают за тебя, решают за тебя, и креатив не является основой выживания». Но нет! Это все-таки не для меня! Есть люди, которые в любой ситуации привыкли полагаться только на самих себя. И я – один из них. Выполнять чужое распоряжение, зара-
№1, январь 2007
нее зная, что оно неправильное (неоптимальное) – это же какая сила воли (или безразличное наплевательство) требуется! Не говоря уже о том, чтобы являться в офис строго по расписанию, вступая в сложную связь с коллегами, начальством и попадая под слепую власть политических решений руководства. Только крупные фирмы могут позволить отдельным (наиболее талантливым) сотрудникам реализовать свой творческий потенциал, не требуя от них моментального «выхлопа». Во всех остальных случаях работа становится синонимом слова «несвобода», превращая человека в унифицированный зубец большого колеса, которое в свою очередь является лишь малой частью огромного механизма. Это вовсе не призыв к «революции». Это просто такая экономическая модель. Популярная, но не единственная. Возможность выбора уже есть, только далеко не каждый стремится выбраться из клетки на свободу, поскольку свобода требует ответственности и умения постоять за себя и свое право оставаться свободным и впредь. Вместо регулярной зарплаты – нестабильные доходы из серии «то густо, то пусто». Вместо поступательного продвижения по карьерной лестнице – хаотичное броуновское движение, где понятие «статуса» отсутствует как класс. Удаленная работа – это не райские кущи, и агитировать за нее могут только те, кто зарабатывает на жизнь агитацией. Прежде чем покидать клетку и отправляться в первобытные джунгли, следует, по крайней мере, совершить несколько предварительных вылазок, убедившись, что, вопервых, офисная жизнь вас действительно тяготит и, во-вторых, вы уже нашли альтернативный источник дохода, запаса которого хватит на достаточно продолжительное время, позволяющее спокойно осваиваться в новом мире, не хватаясь за первый попавшийся заказ (который зачастую является и последним, ведь «увязнуть» в одномединственном проекте и в самом
деле очень легко, особенно если одним из условий является его развитие и поддержка).
Виды удаленной работы «Свободный программист» традиционно ассоциируется с «шароварщиком». Профессия в наше время крайне распространенная, а потому не сильно привлекательная с коммерческой точки зрения. Рынок насыщен до предела, и нащупать незанятую нишу очень трудно, особенно если речь идет о продуктах массового потребления. С одной стороны, поджимают компании-гиганты, с другой – открытые проекты, созданные на голом энтузиазме и распространяемые на бесплатной основе. Но даже имея на руках конкурентоспособный продукт, львиную долю времени придется тратить на техническую поддержку, документирование, разборки с платежами и не платежами, устранение конфликтов с новым и старым железом и ОС. На творчество остаются лишь жалкие урывки, и вместо удовольствия работа станет приносить одно сплошное разочарование. К тому же всегда существует риск, что проект провалится, а создание (и раскрутка) нового за один день не делается. Сразу же возникает вопрос – как дальше жить? А без еды долго жить не получится, увы! Так что необходимо заблаговременно позаботиться о создании неприкосновенного запаса, в который входят не только деньги, но еще и интеллектуальные ценности (типа программ, библиотек и прочих ингредиентов, готовых к немедленной продаже). А вот другой п у т ь – в м е с то того чтобы создавать весь
81
IMHO
продукт целиком, лучше сосредоточиться на том, что вам действительно интересно, и работать в одном или нескольких узких направлениях – оптимизация, разработка защитных механизмов, дизассемблирование, поиск ошибок и т. д. Большинство мелких компаний (и программистских коллективов) не могут позволить себе держать в штате кучу узких специалистов, большую часть времени которые все равно окажутся незадействованными. Можно, конечно, поручить защиту программы своему самому «продвинутому» сотруднику или воспользоваться одним из широко разрекламированных протекторов (вот только каким именно?), но не лучше ли обратиться к независимому специалисту, «окучивающему» исключительно эту тему и знающему о ней если не все, то гораздо больше самого «продвинутого» из широкопрофильных программистов. Особенно это актуально для представителей редких (или вымирающих) специальностей. Представим себе человека, уверенно программирующего на ассемблере в реальном режиме и знающего все закоулки MS-DOS, но испытывающего устойчивое отвращение к Windows. Найти работу по своему профилю в родном городе и примыкающим к нему окрестностям крайне маловероятно, но! по всему миру работает огромное количество машин с MS-DOS, которые требуется обслуживать и удовлетворять рас-
82
тущие потребности их владельцев, но… только без перехода на Windows (поскольку, во-первых, Windows не является системой реального времени, а, во-вторых, стоимость перехода слишком велика, особенно если он включает в себя реинжиниринг спец иа ли з ир о в анны х ко н тр олл е ров (например, управляющих производственными процессами или телеметрией),вставляемых в ISA-слот и слыхом не слышавших ни про какую PCI). Программистский рынок делает ставку на молодых специалистов, осваивающих новейшие языки, методы разработки, библиотеки и прочие «инновации», сменяющие друг друга каждые несколько лет. Но с каждым годом переучиваться становится все сложнее и сложнее. Возникает естественное желание, ухватиться за какой-то один отдельно взятый язык, например, Си, и писать программы лишь на нем одном. Это увиличивает уровень профессионализма и улучшает качество кодирования (с одной стороны), но создает практически непреодолимые препятствия при поиске работы, на которую требуются люди «владеющие» Си++, C# и прочими модными словечками. И пускай опытный Си-программист выполнит поставленную задачу в десять рад быстрее и в сто раз эффективнее, чем студент, прослушивший курс лекций по Си++, но так и не осиливший парадигмы процедурного программирования, от чего исходные тексты пестрят глобальными переменными и массивами, передаваемыми по значению, а не указателю. Главное, что он позиционирует себя как Си++ программиста! Конечно, это несколько утрированный пример, и такие «специалисты» в большинстве случаев отсеиваются еще на собеседовании, но… факт остается фактом. Подавляющее большинство программистских контор при наборе персонала руководствуется шаблонными стереотипами. Даже посредственный программист, идущий в авангарде прогресса, с высокой степенью вероятности найдет себе работу в любой точке мира (правда, при этом ему придется конкуриро-
вать с девушками, окончившими двухмесячные курсы по С# и знающие язык исключительно на уровне синтаксиса, а там где есть толпа, создающая очередь, нечего надеяться на достойную зарплату). Удаленное сотрудничество многократно расширяет ареал поиска работы. В конечном счете намного выгоднее искать возможность применения уже существующих знаний и навыков, чем заниматься непрерывным самообразованием. Чтение компьютерных (и околокомпьютерных) книг и журналов вызывает устойчивое ощущение, что мир сошел с ума, и миллионы леммингов мигрируют на новые платформы задолго до их появления. Но при живом общении с реальными разработчиками, выпускающими реальные продукты (а не утилиты, написанные одним щелчком мыши) все становится на свои места. Основной программистский костяк стоит на трех китах (одним из которых является Си) и не собирается с них сходить. Проблема России в том, что крупные программные комплексы у нас уже давно не создаются (немногочисленные успешные проекты типа FineReader не в счет), а мелкие утилиты можно писать на чем угодно, хоть на DELPHI, хоть на С#. Им неведомо бремя совместимости, они совершенно не знают, каково сопровождать гигабайты кода, первые строки которого были заложены еще в начале девяностых и по которым можно прослеживать эволюцию развития процессоров, языков программирования, компиляторов и операционных систем. Переписывать все это хозяйство на С# никто не будет хотя бы уже потому, что к моменту завершения столь грандиозного процесса о C#, быть может, никто и не вспомнит, т.к. появятся новые языки. Кстати говоря, слухи о смерти Фортрана (и других древних реликтов) сильно преувеличены. Существует огромное количество кода и множество библиотек. Выпускаются компиляторы, оптимизированные под современные процессоры и т. д. и т. п. А это значит, что специалисты по языку по-прежнему остаются востребованными (пусть и не в таких количествах, как десять-двадцать лет тому назад). В практическом плане это значит,
IMHO что если вы собираетесь сотрудничать Сразу два совета (многократно про- ходного кода и готов заняться его опс отечественными компаниями, то с ве- веренных и перепроверенных на лич- тимизацией под конкретный процесроятностью, близкой к единице, в спи- ном опыте). сор (в аппаратных видеоплеерах они, Если компания не практикует уда- как -правило, достаточно маломощсок обязательных требований к кандидату попадет .NET. Практически нигде ленного сотрудничества по тем или ные). Отсюда следует важный вывод: вы не встретите объявлений, о розыс- иным причинам, не стоит ломиться совершенно необязательно быть акке «чистых» Си-программистов, знато- в закрытые двери – все равно не про- тивным участником Open Source-проков процессора, ассемблера и других ломишь. Это может быть и «бзик» ру- екта, достаточно просто в нем разби«доисторических» языков. За рубежом ководства, и принятый уклад органи- раться хотя бы в общих чертах и, ескартина иная. зации труда, и специфика, обусловлен- тественно, присутствовать в списке Во-первых, здесь создается мно- ная родом деятельности. Далеко не все developers (иначе, вас просто не сможество встраиваемых устройств с мик- можно передать через Интернет: доку- гут найти!). ропроцессорами (причем, «микро» менты, полученные самой компанией в прямом смысле слова), для програм- под подписку о неразглашении (также Как надо и как не надо мирования которых используется либо известном под аббревиатурой – NDA), составлять резюме чистый ассемблер, либо смесь ассемб- финансовые данные, обрабатывае- О резюме скажу предельно коротлера с Си. Во-вторых, даже в мире PC, мые программой (которые также не- ко. Составлял их я мало. Читал еще сплошь и рядом встречаются высокоп- льзя передавать на сторону и которые меньше, поэтому основной опыт, короизводительные библиотеки (или гра- очень сложно «правдоподобно» смо- торый я приобрел, – это опыт отрицафические движки), написанные на Си делировать), не говоря уже о контрол- ния. То есть, теперь я знаю путь, куда (или на Си++ в стиле Си), с ассемблер- лерах и прочем аппаратном обеспече- ходить не надо, но куда идут толпаными вставками. нии. Опять-таки, удаленный сотрудник ми мои коллеги, глядя на которых, так Количество проектов, использую- может внедрить в программу заклад- и хочется прибить к столбу табличку: щих более половины возможностей, ку, практически ничем не рискуя, пос- «Осторожно! Грабли!». Резюме – это сплошной официпредоставляемых языком Си++, ис- кольку компании (даже сильной и мочисляется единицами, и большинс- гучей) будет очень трудно до него до- оз. Это прокрустово ложе, пытающеетво из них находятся на грани прова- тянуться. К тому же возникают опре- ся загнать векторную величину (коей ла. Программисты в авральном поряд- деленные финансовые и юридические и является интеллект) в безликий скаке переписывают код, возвращаясь сложности при заключении контракта ляр. Возьмем, к примеру, Петю, участк истокам: проще! быстрее! надежнее! и переводе денег. А зачем бухгалтерии вовавшего в десяти проектах, все деТолько ведь на собеседовании не ска- лишняя головная боль? Если вам ска- сять из которых завершились полным провалом (потому что Петя, переоцежешь: ознакомившись с Си++ и попы- жут «нет», то это «нет». Совет номер два: Open Source-про- нив свои возможности, полез совсем тавшись применить его на практике, я убедился, что подавляющая часть екты (даже те из них, что распростра- не в ту степь, получив вместе с крапредоставляемых им возможностей няются по лицензии BSD, не требую- хом бесценный опыт по его преодомне совершенно ни к чему и не упро- щей отчислений в случае коммерчес- лению), и Васю, успешно поддержищает, а усложняет кодирование, ресур- кого применения) бесплатны только вающего три проекта и не имеющесоемкость, сопровождение и отладку. для «народа», а всем остальным при- го никакого представления о сущесЕстественно, это не проблемы отрас- ходится платить. Взять хотя бы кодек твовании тех проблем, которые Пели, а проблемы HR, которые совершен- XviD, поддерживаемый практически тя чует за версту и обходит на форно не разбираются в технологиях про- всеми современными автономными саже задолго до их появления на гограммирования и больше верят рекла- видеоплеерами. Что деризонте. Не знаю, как вы, а вот я с Васей в горы не поме, чем специалистам. шевле: скачать исходДругими словами, если в окрест- ные тексты и засушел, но… при обностях вашего обитания найти рабо- нуть их в плеер своработке резюме секретарем, дату по специальности никак не удает- ими силами или нася, почему бы не попробовать посот- нять на более-менее леким от програмрудничать с зарубежными компания- постоянную работу мирования, Вася поодного из учасми через Интернет? лучает сто очков, а Петников проектя… идет в горы. Другая проблема – та? Причем О компаниях честность. Точнее, ее Компании бывают разные – одни это необя отсутствие у некотоне приемлют удаленного сотрудни- з а т е л ь н о чества в принципе (это корпоративная должен быть рых из нас. Довольполитика у них такая, и не нам ее ме- ведущий разно часто спрашивают – можно ли врать в резюнять), для других же – это норма. Не- работчик. Покоторые на 90% из удаленных сотруд- дойдет любой, ме? Не с моральной точников и состоят (в особенности это ха- кто разобрался ки зрения, а вообще? Ну это как сказать… Перечень рактерно для Open Source-проектов). в структуре ис-
№1, январь 2007
83
IMHO Ч т о ж е к а с а е т с я не пытайтесь посмотреть, что будет, большого количества языков, умышленного завы- если кликнуть мышью по «вакансиям» средств разработки, библиотек и операционных сисшения опыта, то я на фирменном сайте и предложить им скажу так – врать свое тело (вместе с мозгами) в обмен тем, с которыми кандине с тои т, а вот на пачку вечнозеленых. Последствия дат якобы умеет рабоприврать сам Билл могут быть весьма неблагоприятные тать, обычно дальше корГейтс велел, только (особенно если указан контактный тезины не идет. Иногда, правглавное – не заврать- лефон). Привяжутся – не отстанешь, да, могут дернуть на собеседование – посмотреть: что это ся, а то может очень а если скажешь, что пошутил, и устза зверь такой, но надеятьлегко получиться, раиваться совершенно не собирался, – что ваш опыт ра- в будущем может сильно аукнуться. ся на это не стоит. Если вы действительно знаете весь боты с языком Ведь мир, как известно, тесен. Короче, подытожив сказанное, респектр языков и операцина несколько лет превысит время зюме мы отметаем как тупиковый ваонных систем, лучше состасуществование са- риант. вить несколько независимых резюме, пользуясь тем замемого языка (правчательным фактом, что русские да, тут всегда можно Стратегия поиска работы имена на английский манер можно пивыкрутиться, сославшись В жизни каждого программиста рано сать слегка по-разному. Это сущест- на то, что вы начинали с самых пер- или поздно наступает такой момент, венно увеличивает вероятность быть вых альфа-версий, не анонсированных когда не ты ищешь работу, а она тезамеченным. ни в каких пресс-релизах и доступных бя, что порождает совершено неведоОпыт работы с языком – весьма только по предварительной подписке – мую дотоле проблему: как тактично отпровокационный вопрос. Я никогда навряд ли работодатель захочет про- казать клиенту, одновременно с этим не понимал, что он в действительнос- верить этот факт, тем более что прове- не потеряв его. Не отказывать нельзя, иначе многолетние наслоения заказов ти означает и от чего предполагается рить его весьма затруднительно). вести отсчет: с момента первой откомСамое неприятное, что, заполняя прогнутся под собственной тяжестью, пилированной программы типа «hello, резюме, мы предоставляет массу све- возбуждая бурную тектоническую акworld!», с момента овладения язы- дений о себе, при этом не имея никакой тивность заказчиков и окончательный ком без поминутного подглядывания (или практически никакой) информа- съезд крыши исполнителя с глубоким в учебник/MSDN, с момента постиже- ции о работодателе. Особенно если ре- нервным истощением, граничащим ния стандарта и преодоления барьера зюме отправляется в кадровое агент- с высадкой на территорию психиатрипереносимости (т.е. умения писать про- ство (или вывешивается на сайт), а не ческой лечебницы. Какое же это счасграммы, которые компилируются и ра- вручается конкретному работодателю тье – иметь непрекращающийся поботают не только на машине их созда- персонально. Часто приходится стал- ток заказов, но какая же это пытка – теля), или же… с момента осознания киваться с такой картиной. Составля- осознавать, что он не закончится нитого факта, что проверка корректнос- ешь резюме, сидишь, ждешь, и вдруг когда и выкроить недельку-другую отти указателей зачастую (но не всегда!) звонок: «Мы рассмотрели ваше ре- дыха удастся разве что в иной жизни. несет больше вреда, чем пользы? В ре- зюме, все хорошо, вы нам подходите, Правда, когда ты молод, полон энергии зультате мы получаем «вилку» в деся- мы вас берем!». Кто это «мы»?! Смот- и сил, об этом не задумываешься и ниток лет, а то и больше. ришь… а там фирмочка размером чуть чего кроме перспективы не замечаешь. Любой кандидат может написать, больше собачьей конуры и совершен- А перспектива, как известно, – штука что имеет гигантский опыт работы но непрофильная (например, я ука- коварная. Параллельные рельсы схос Си++ и что он начинал программи- зывал в резюме: x86-ассемблер, Си, дятся в точке на горизонте, но по мере ровать на нем еще тогда, когда Си++ а они клепают сайты на PHP). Такое продвижения вперед эта точка все удабыл всего лишь front-end к Си. Естес- впечатление, что они берут всех, ко- ляется, удаляется и удаляется… Отсюда – при выборе работе предтвенно, подобная наглая ложь немед- го только удастся загрести, а из реленно выявляется на собеседовании зюме читают только контактный ад- почтение следует отдавать краткос(а, может, это и не ложь вовсе! Просто рес/телефон. рочным проектам, не влекующим человек так программирует, некоторые По моим наблюдениям (которые, за собой хвост всевозможных обярусские в Америке и по тридцать лет возможно, окажутся и неверны), нор- зательств (типа поддержки, сопроживут, а знают английский хуже само- мальные фирмы резюме не читают, вождения и т. д.). Такие проекты моучки, прошедшего двухмесячный курс а набирают сотрудников по другим ка- гут приносить немалый доход вначапо методу Ильи Франка). Так что поня- налам, вербуя известных (или подаю- ле, но требовать огромных (и практитие «опыта работы с языком» приме- щих надежды) специалистов из конку- чески неоплачиваемых) усилий в коннимо только к людям со средними спо- рирующих компаний или программис- це. Вести несколько проектов однособностями, и если ваши способнос- тов-одиночек. Также я бы хотел предо- временно – тяжелое испытание. Они ти отличаются от таковых, рекомен- стеречь от заполнения резюме просто затягивают словно болото и не отпусдуется сделать перерасчет в ту или «по приколу». Если вы не собираетесь кают, а все попытки вырваться обычно устраиваться в такую-то компанию, только усугубляют и без того незавидиную сторону.
84
IMHO ное положение. Удовольствие от рабо- учитель, вот только доверять им сле- работчиками. Быть может, они и приты исчезает, времени на «поковырять- дует с большой осторожностью. Типич- мут вас в свой клан.. Другой способ заявить о себе – ся» в новых языках/библиотеках/осях ный случай: «Когда я узнал о конструкнет и не предвидится. Кругозор сокра- ции Х, я стал применять ее везде, где это форумы, блоги и прочие электронщается в точку, стремительно коллап- только можно, в результате чего пои- ные (а еще лучше – бумажные) пубсирующую в черную дыру, откуда еще мел столько проблем, что решил на- ликации. Форумы, естественно, ангникому не удавалось выбраться. всегда отказаться от Х, но через не- лоязычные, причем достаточно серьГораздо лучше работать по принци- сколько лет, я все-таки пришел к вы- езные. Общие правила поведения – пу: «получил ТЗ, въехал в тему, сдал воду, что X – хорошая штука, если при- в полемику не встревать, не пытаться показаться слишком умным, не лезть проект, забыл». Конечно, в этом случае менять ее с умом». работать придется еще больше, но заЛучший способ научиться програм- в те дебри, в которых не разбираешьто работа будет разнообразной, и прак- мировать – дополнить чтение учебни- ся, отвечать обстоятельно и по делу. тически всегда можно выбрать время ков разбором чужих исходных текстов, Естественно, все это требует времедля отдыха или своих собственных не- пытаясь ответить на вопрос: почему ни, не гарантируя никакого эффекта. они написаны именно так, а не иначе? Блоги в этом отношении намного бокоммерческих проектов. «Американская мечта», описанная А как бы это написали вы? Естествен- лее предпочтительнее. Выбираем блог во многих книжках по «шароварос- но, это должны быть достойные исход- продвинутого программиста и начинатроению», как некий никому не извес- ные тексты, а не сочинения кота Мур- ем постить, но только ни в коем слутный программист, написал одну про- зика, который начал программировать, чае не отзывы на статьи, а уж тем бограмму (угробив на это свой отпуск), раньше, чем писать. Где брать достой- лее – сообщения об ошибках. Еще неа потом до конца жизни ничего не де- ные исходные тексты? Ну это, в общем- известно, что это за человек и как он лал, только пил пиво и вносил незна- то, не вопрос. Существует куча Open отреагирует на критику (не важно – чительные изменения в код – это кра- Source-проектов, по одному виду кото- конструктивную или нет). Лучше всесивый миф, но не более того. Конк- рых можно судить об их качестве.. го – делиться своими идеями, дополЕстественно, программисты не без- няющими статью или пытаться вызыретных примеров таких программ нет и не будет! Компьютерная индустрия грешны, и, роясь в исходных текстах, вать автора на обсуждение некоторых слишком быстро развивается, вынуж- мы наверняка найдем ошибки или технических проблем, которое переходая переписывать значительные кус- просто неэффективные фрагменты дит либо в перепалку, либо в очередки кода каждые несколько лет просто кода, которые так и просятся, чтобы ной заказ. для сохранения совместимости с су- их переписали. Отправляя исправленЗаводить свой собственный блог ществующим окружением, не говоря ные версии разработчикам, мы скорее стоит только в случае избытка свободуже о том, что требования к продук- всего получим приглашение вступить ного времени, поскольку моментальтам (и в особенности, к их интерфей- в их ряды и подписаться на закрытую ной отдачи он все равно не принесет, сам) неуклонно ужесточаются, а ес- рассылку. Как правило, большинство а поддерживать его в «живом» состоли популярный продукт стоит на мес- остальных участников проекта уже ра- янии быстро надоест и из развлечения те и не развивается, его тут же обхо- ботает в других компаниях (или даже превратится в пытку. Огромную отдавозглавляет свои), поэтому знакомс- чу приносит издание книг за рубежом. дят конкуренты. Но это что касается профессиона- тво с ними будет весьма не лишним. Заказы сыплются как из Рога Изобилов. А как быть новичкам? Они любой Дело тут даже не в заказах (которых лия, даже если сама книга практичесработе рады! И в этом-то и заключа- может и не быть). Это отличный канал ки не продается (а она и не будет проется их главная ошибка. Каждый вы- для получения документации и раз- даваться, если рассчитана на специаполненный заказ на раннем этапе раз- ных программ, распространялистов, коих единицы. Напротив, бойвития должен работать на ваш авто- емых либо за деньги (слишко раскупаемая книга, ориентироритет, чтобы его было не стыдно упо- ком большие для начинаюванная на массовую аудиторию, не принесет нимянуть при поиске всех последующих. щих программистов), лиПричем выбирать заказы следует на бо же только через NDA, чего, кроме пределе своих возможностей или да- но… из чисто дружеских гонорара, побуждений, зарубежда и тот же чуть-чуть выше их. н а Во-первых, сложные заказы – это ные коллеги охотно делятпрестижно, во-вторых, «повторение ся этим добром с остальными, пройденного» (т. е. написание простых особенно если живут под лопрограмм) отнимает время, но не дает зунгом «информация должна никакого нового опыта взамен. А для принадлежать миру». То же сауспешного «старта» важно за мини- мое (только в меньшей степени) мальное время освоить максимум тех- относится и к закрытым проектам. нологий, причем, «освоить» не в смыс- Если у вас есть идеи по улучшению ле «прочитать учебник», а в обязатель- продукта, а еще лучше – написанном порядке опробовать все это на ный плагин (или модифицированная вряд практике. Книги, бесспорно, отличный DLL/EXE), попробуйте списаться с разли оку-
№1, январь 2007
85
IMHO
пит время, потраченное на написание). Еще большую отдачу дает выступление на зарубежных конференциях. Предложения о сотрудничестве начинают поступать чуть ли не сразу после схождения с подиума. Ну тут я сужу уже не по своему опыту, т.к. сам никогда ни накаких конференциях не был и бывать не собираюсь. Достаточно многие форумы имеют «коммерческий» раздел, публикующий предложения о работе. При отсутствии заказов стоит залезть туда и посмотреть на «раздачу». Не всегда, но достаточно часто таким путем можно «выловить» хороших клиентов, с которыми потом завязывается продолжительное и весьма плодотворное сотрудничество, однако поиск на форумах – это крайняя мера, к которой я когда-либо прибегал. Во-первых, большая аудитория создает конкуренцию, ощутимо сбивающую цену, а, во-вторых, большинство предложений – провокация или мошенничество чистой воды.
Требования к кандидату Программы, окружающие нас, написаны такими же людьми, как и мы (многие из которых только учатся программированию), и если вы не умеете превращать байты в золото, ничего страшного в этом нет. В конечном счете главное – это умение преподнести себя, а программистские способности с уровнем зарплаты связаны очень слабо. В IT-индустрии сплошь и рядом можно встретить людей, получающих свыше 100 000$, разъезжающих на «Феррари», одевающихся в пиджаки индивидуального покроя с бэджиком «эксперт», но при этом знающие только одно: на сервере должен сто-
86
А вот без навыка быстрого письять RAID. Проблемы, создаваемые этим RAID, их совершенно ма (придется туго, поскольку писать не волнуют (они ведь придется много. Впрочем, язык легче не знают, что ту же всего осваивается в процессе общес а м у ю н а д еж- ния, так что заблаговременно учить ность можно его «вхолостую» без конкретного приобеспечить ложения означает понапрасну терять и другим пу- время. Языки программирования, протем), а восстановление цессоры и операционные системы – RAID (в случае это по выбору. Главное – не бояться краха) все равно ответить «нет», «не знаю», «это мы поручат не «экспер- не изучали». Нормальные компании ту», а технику в робе охотнее берут человека, способнос куда более скромной зарплатой. го обучаться, чем энциклопедичесНо зато этот техник знает кучу фай- кий словарь. Ни в коем случае не столовых систем, множество физичес- ит врать, утверждая, что вы знаете то, ких интерфейсов и переставляет чи- чего вы не знаете, поскольку элеменпы с закрытыми глазами, да так, что тарная проверка поставит вас в тупик, следы пайки видны только в лупу (а то и у работодателя сложится впечатлеи не видны совсем). ние, что и все остальное вы знаете точВсе очень просто. Одни люди стре- но так же, то есть никак. Важное замечание на счет ООП. мятся к знаниям, другие же тем временем делают карьеру. Но не сто- Есть два типа людей. Одни считаит думать, что сделать карьеру лег- ют, что парадигма программирования ко. Тут определенный тип личности (равно как и Господь Бог) должна быть нужен, каким-то седьмым, восьмым, одна на всех, другие же рассматривают девятым чувством угадывающим, ко- ООП не как венец эволюции, а рядовой, му следует льстить, а кого – топить. да к тому же весьма специфичный инсНо все это лирика. Пора перейти к су- трумент с ограниченной областью прировым реалиям. менения. Поэтому, если вам ближе по Знание английского разговорного душе процедурное программирование без словаря при сотрудничестве с за- в духе старого доброго Си, так об этом рубежными компаниями в общем-то и говорите. Отказать в приеме на ранеобязательно, но очень, очень же- боту могут, но на костре во всяком слулательно. чае не сожгут. По фильмам (с оригинальной звуковой дорожкой и субтитрами) за два- Трудоустройство три месяца язык осваивается до впол- Удаленное сотрудничество часто не приемлемого уровня и легко рас- не подкрепляется никакими бумагапознается на слух. Богатый словарный ми, ограничиваясь устной договорензапас для разговорной речи не пона- ностью, поэтому вас могут элементардобится. Напротив, по моим наблюде- но «кинуть», ничего не заплатив, но заниям, он только мешает. Важно не ко- ранее настраиваться на это не надо. личество слов, которые ты знаешь, Прием на работу или раздача закаа умение выразить свои мысли те- зов происходит достаточно буднично ми словами, которые сейчас крутят- и без юридической волокиты. Но это – ся в голове. За произношение волно- в идеале. Многие фирмы не успокоятся, поваться не надо. Я неоднократно слышал, как американцы (причем весь- ка не увидят того, кого они нанимама коренные и респектабельные) про- ют живьем, или не услышат его по теизносят «Core» как «Корэ», а «Work» лефону. как «Ворк». Не знаю, то ли они умышДля зарубежных компаний зволенно коверкают слова на манер на- нок обязателен (с российскими не шего «удава», то ли действительно пробовал) (звонок, естественно, опамериканская почва позволяет се- лачивается за их счет). Еще могут бе подобные вольности с английским попросить переслать какую-то заязыком, но факт остается фактом – гадочную сигнатуру в pdf с догововас поймут! ром. Так вот, эта «сигнатура» по-на-
IMHO шему будет роспись. Расписываемся на бумаге, прогоняем ее через сканер и вставляем в pdf любой утилитой, которая только есть под рукой. Маразм, конечно. Ведь так можно подделать любой документ, но против чужих нравов не попрешь. Так же могут потребовать переслать паспорт по факсу (у меня требовали только один раз, но я отказал, в пылу спора мне сначала в резкой форме отказали, но на следующий день мы пришли к компромиссу: я не посылаю паспорт, а они не говорят мне тех слов, которые я не могу здесь напечатать). Договоры (если таковые все-таки составляются) не передаются по факсу практически никогда. Вместо этого они печатаются на лазерном принтере в двух-трех экземплярах, после чего вы расписываетесь на каждой странице и отправляете договор по почте, а через некоторое время ловите ваш экземпляр с подписью работодателя и печатью. Прекрасное средство личной гигиены, надо сказать! Да! На счет гигиены. Если кто думает, что договор перед подписью нужно показать юристу, то он здорово ошибается, поскольку договор в 9 из 10 случаев типовой и каким бы то ни было изменениям не подлежит. В тексте договора может быть все что угодно. Любая нелепица. Вплоть до передачи компании прав собственности на вашего домашнего кота Мурзика. Но попытки исключить подобные пункты из договора ни к чему (хорошему) не приводят, поскольку человек, отправляющий текст договора вам на подпись, обычно не уполномочен менять этот самый договор ни на бит. С другой стороны, договор – это для юристов. Реальный расклад задается устной договоренностью. Даже если в договоре черным по белому написано, что вы не имеете права использовать компоненты разработанного вами продукта в других проектах, вы можете делать это, договорившись с фирмой по-хорошему. И если не сильно наглеть, на договор можно вообще не смотреть. В особо «ответственных» случаях потребуется вылет за рубеж или в российское представительство компании. Зарубежный перелет (и все связанные
№1, январь 2007
с ним расходы) в 100% случаях опла- иностранцев в смятение и ужас, и они чивает компания, которая вас нани- приводят тысячи доводов, почему рубмает. Поездку в российское предста- левый сбербанковский счет это бэд. вительно, как правило, приходится оп- Но если твердо стоять на своем, то… лачивать самостоятельно, но если упе- куда они денутся. Переведут. Правда, реться, то можно не ехать, а, позвонив могут содрать до 10% в качестве мопо телефону, попробовать договорить- ральной компенсации, но это уже расся как человек с человеком. Во всяком плата за удобство. Жителям больших случае у меня это получалось (с неко- городов, возможно, удобнее всего поторого времени я стал тяжел на подъ- лучать деньги на кредитную картоем и уже давно никуда не езжу, а рань- чку. Ну тут я не знаю. У нас всего один ше довольно много мотался по России, «банкомат», да и тот находится в слегостанавливаясь в номерах «люкс», оп- ка разобранном состоянии. лачиваемых, естественно, фирмой. эх… молодость… но потом все это на- Как избежать обмана доело). Начнем с грустного. Полностью застраховаться от обманов и невыплат Финансовые вопросы при удаленной работе практически Неразвитость отечественных платеж- невозможно. Ни имя компании, ни наных систем создает значительные про- личие договора – это еще не гарант. блемы при регулярном переводе денег Меня обманывали и крупные, и мелиз зарубежных стран в Россию. Лично кие компании всеми способами какие меня механизм перевода волновал только есть. Самый распространенменьше всего. Поговорив со знающим ный вариант – это когда вам говорят, человеком, я выяснил, что наибольшей что вот сейчас вы получите совсем популярностью пользуются два пути: немножко, чтобы не умереть с голооткрытие валютного счета в коммер- ду, а потом пойдут отчисления от проческом или сбербанке и чеки, пере- даж продукта, объем которых проконсылаемые по почте. Чеки идут от не- тролировать практически невозможскольких месяцев до полугода, причем но, а даже если было бы и возможно – банки их то принимают, то отвергают что с того? Деньги-то ведь все равно без объяснения причин (хорошо, если не заплатят. не обвиняют в попытке подделки или Менее распространенный, но гомошенничестве), а регулярные пере- раздо более гадкий способ – найводы на валютный счет вызывают по- ти в вашей программе пару мелких дозрения у всех спецслужб, которые ошибок и поднять вселенский вопль, только есть в нашей стране. И не толь- что из-за них компания понесла огромко налоговой (с налоговой как раз про- ные убытки и теперь имеет все осноще всего: заплатил налоги – и спи спо- вания для подачи на вас в суд (брехкойно). Экс-КГБ может запросто пожа- ня, конечно, но что мы можем сказать ловать с визитом и поинтересоваться: в ответ?), поэтому ни о каких выплаа вы случайно не Родину на секреты тах речь вообще не идет. Как вариант, продаете? Может, вы шпион? А вы точ- компания может постоянно вносить но доступа к секретной значительные изменения в ТЗ, давая информации не имеминимум времени на их реалиете? Ну это вы гозацию, а за всякую ворите, что не имезадержку – штраете, а если провефовать. рить? Вдруг какойто секрет просочился в Интернет (ведь у вас есть Интернет, правда?), а вы его того. В смысле взяли и продали. На дежнее вс его перевод на рублевый сбербанковский счет, упоминание о котором приводит
87
IMHO
Та к ч то к концу работы будет непонятно, кто кому платить должен. А могут просто взять программу, сказать «спасибо» и… ничего не заплатить. На первых порах (пока ни имени, ни опыта сотрудничества еще нет), остается надеяться только на удачу и проявлять максимум осмотрительности в выборе партнеров. Как правило, компании среднего звена в этом
88
плане наиболее честные, поскольку ются, но… лично меня это не сильно если они будут «кидать» программис- волнует, поскольку заказов и так вытов направо-налево, об этом быстро ше крыши… надо же как-то эту крыузнают все остальные и тут же разо- шу расчищать… рвут партнерские отношения. Мелким компаниям это не грозит, пос- Заключение кольку им нечего терять. Они просто Удаленная работа – это реально! закроются и тут же откроются вновь Это хороший способ совместить припод новым именем. Крупные компа- ятное с полезным и заработать деньги, нии, которые правят балом, могут вы- не выходя из дома. Кстати, «дом» – творять все, что им вздумается, в том это ключевой момент. Далеко не кажчисле и не оплачивать разработку дому понравится подобное (и к тому же продукта. Монополисты… К та- добровольное) «затворничество». Еским и на бульдозере не подъ- ли одиночество вас угнетает – ходите в офис, работая среди людей! Или…. едешь! Вот почему сотруд- совмещайте оба вида работы сразу, ничество с новой (для если, конечно, «корпоративный устав» вас) компанией следует это позволяет. Компании, в которых начинать с небольших про- мне довелось работать, крайне ревектов и только потом, убедив- ностно относились к интеллектуальшись в ее честности, переходить к по- ной собственности и считали, что все настоящему серьезным вещам, ра- написанное программистом в рабочее бота над которыми может занять не- время принадлежит им, и если просколько лет. граммист продает свой труд на сторону, Что же касается меня, то с непро- он должен платить «мзду». Что ж! Вполверенными заказчиками я работаю не логично! Именно поэтому я там больлибо из спортивного интереса, ли- ше не работаю, а… сотрудничаю с нибо при 100% предоплате. Естествен- ми через Интернет! На гораздо более но, не все заказчики на это соглаша- выгодных (для меня) условиях.
bugtraq Переполнение буфера в Clam AntiVirus Программа: Clam AntiVirus (clamav) версии до 0.88.7. Опасность: Средняя. Описание: Переполнение стека обнаружено при сканировании сообщений с глубоко разветвленным multipart-контентом. Удаленный пользователь может с помощью специально сформированного e-mail-сообщения вызвать отказ в обслуживании приложения. URL производителя: www.clamav.net. Решение: Установите последнюю версию (0.88.7) с сайта производителя.
Переполнение буфера в ядре Linux Программа: Linux Kernel версии до 2.4.33.5, Linux Kernel 2.6.x. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке входных CAPI-сообщений в файле net/bluetooth/cmtp/capi.c. Злоумышленник может перезаписать определенные структуры данных ядра и вызвать отказ в обслуживании. URL производителя: www.kernel.org. Решение: Установите последнюю версию (2.4.33.5) с сайта производителя. Для ядра версий 2.6.x рекомендуется отключить поддержку bluetooth.
Множественные уязвимости в Microsoft Internet Explorer Программа: Microsoft Internet Explorer 5.01, 6.x Опасность: Высокая. Описание: 1. Повреждение памяти обнаружено при обработке определенных DHTML-функций, вызывающих некорректно созданные элементы. Удаленный пользователь может с помощью специально сформированной веб-страницы выполнить произвольный код на целевой системе. 2. Уязвимость существует при обработке «drag and drop»операций. Удаленный пользователь может с помощью специально сформированной страницы получить содержимое папки TIF (Temporary Internet Files). 3. Уязвимость существует из-за ошибки при обработке тегов OBJECT. Удаленный пользователь может с помощью специально сформированной веб-страницы получить данные о пути к каталогу TIF (Temporary Internet Files) и заполучить его содержимое. 4. Уязвимость существует из-за ошибки при обработке исключений ошибок в сценариях. Злоумышленник может с помощью веб-страницы, содержащей специально сформированный JavaScript-код и вызывающей одновременно определенные типы ошибок, выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
№1, январь 2007
Уязвимость при обработке POST-запросов в Microsoft Project Server Программа: Microsoft Project Server 2003, возможно, другие версии. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки при обработке POST-запросов в сценарии projectserver/logon/ pdsrequest.asp. Удаленный пользователь может получить имя пользователя и пароль к учетной записи MSProjectUser. Пример: POST http://SERVER/projectserver/logon/pdsrequest.asp HTTP/1.0 Accept: */* Accept-Language: en-nz Pragma: no-cache Host: SERVER Content-length: 87 Proxy-Connection: Keep-Alive Cookie: PjSessionID=<valid cookie> <Request> <GetInitializationData> <Release>1</Release> </GetInitializationData> </Request> <Reply> <HRESULT>0</HRESULT> <STATUS>0</STATUS> <UserName>theuser</UserName> <GetInitializationData> <GetLoginInformation> <DBType>0</DBType> <DVR>{SQLServer}</DVR> <DB>ProjectServer</DB> <SVR>SERVER</SVR> <ResGlobalID>1</ResGlobalID> <ResGlobalName>resglobal</ResGlobalName> <UserName>MSProjectUser</UserName> <Password>sekretpass</Password> <UserNTAccount>SERVER\USER</UserNTAccount> </GetLoginInformation> </Reply>
<---<----
URL производителя: www.microsoft.com. Решение: В настоящее время способов устранения уязвимости не существует.
Двойное освобождение памяти в Microsoft Windows CSRSS Программа: Microsoft Windows 2000, Microsoft Windows XP, Microsoft Windows 2003. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки двойного освобождения памяти при обработке HardError-сообщений в библиотеке WINSRV.DLL. Локальный пользователь может выполнить произвольный код на системе в контексте процесса CSRSS с привилегиями учетной записи SYSTEM путем установки специально сформированных параметров для функции MessageBox() (строка должна начинаться с последовательности символов «\??\»). URL производителя: www.microsoft.com. Решение: В настоящее время способов устранения уязвимости не существует.
89
ретроспектива
Прошлое операционных систем семейства BSD
Кто-то назовет BSD старой операционной системой. Но те из нас, кто работает над ней, видят ее скорее системой со зрелым кодом. Мэтт Дилан, разработчик FreeBSD
Илья Александров Операционные системы семейства BSD признаны всем компьютерным сообществом и получили статус идеального программного обеспечения для серверов. Кто-то из вас использует эту ОС на домашнем компьютере. А знакомы ли вы с историей легендарной системы?
Университет Беркли
(The University of California, Berkeley). Как известно, все работающие под уп- Для новой операционной системы был равлением UNIX компьютеры отсчиты- даже куплен компьютер PDP-11/45 комвают системное время с даты 1970.01.01. пании DEC, что для 1973 года было неКонечно же, UNIX не была создана кон- позволительной роскошью. Как правило, UNIX в университекретно в этот день, однако именно эту дату принято считать днем её рождения. тах устанавливал лично Кен Томпсон, А значит, и днем рождения BSD, кото- однако в Беркли студенты справились рая является прямым потомком дети- с этой задачей собственными силами. ща Кена Томпсона (Kenneth Thompson) Правда, к помощи разработчиков всётаки пришлось прибегнуть – во время и Денниса Ритчи (Dennis Ritchie). В начале 70-х годов о профессио- своей работы система регулярно даванальном применении UNIX речь ещё ла сбои. Отладка ошибок велась Томпне шла, и компания AT&T, в которой соном удалённо посредством подклюбыла создана эта ОС, бесплатно рас- чения компьютера университета через пространяла её по университетам, модем к телефонной сети. Несмотря чтобы её изучали студенты. Дискета на сотрудничество университета с комс UNIX не миновала и знаменитый Ка- панией AT&T, UNIX функционировала лифорнийский университет в Беркли на компьютере лишь с 8 до 16 часов
90
дня. Все остальное время на нем работала более популярная в то время ОС RSTS (кто сейчас вспомнит названия некогда перспективных проектов?). Из-за постоянно возрастающей потребности студентов в дополнительном машинном времени в 1975 году в университете появился еще один компьютер от DEC. На нем была инсталлирована System V6, являвшаяся в то время самой совершенной версией UNIX. Новый компьютер обеспечивал студентов-программистов необходимыми ресурсами для разработки собственных проектов.
Появление BSD В 1976 году в университете уже был целый ряд компьютеров, работавших
ретроспектива под управлением UNIX. При всем уважении к этой блестящей ОС надо отметить, что ей еще не доставало многих функций, необходимых пользователю. Заниматься доработкой никто не хотел, пока над системой не начали корпеть два аспиранта – Уильям (Билл) Джой (William (Bill) Joy) и Чак Хэйли (Chak Haylee). Поначалу они работали с компилятором языка Pascal, приспосабливая его для обучения студентов. Затем Джой, разочаровавшись в стандартном текстовом редакторе UNIX, написал собственный, получивший имя «ex».Этот редактор в измененном и доработанном варианте до сих пор входит в состав FreeBSD. В определенный момент друзья поняли, что с постоянным «латанием дыр» UNIX далеко не уедешь, и решили создать собственный дистрибутив. Под их предводительством небольшая группа разработчиков, состоявшая в основном из студентов, объединились в Группу по Исследованию Компьютерных Систем (Computer System Research Group, CSRG). Первая версия их дистрибутива, вышедшего в 1977 году, включала в себя вышеупомянутый компилятор, среду разработки Pascal, а также текстовый редактор. Кроме того, в ней были исправлены ошибки, имевшиеся на тот момент в UNIX. Дистрибутив получил название Berkley Software Distribution. Сокращенно – известная вам аббревиатура BSD. Впоследствии для него была написана новая система ввода, улучшена совместимость между терминалами, а также проведено тестирование системы в нескольких университетах. В это же время Билл Джой занялся написанием текстового редактора, использующего все возможности BSD. Новый редактор получил название visual editor (сокращённо – vi). Его доработанная версия, которой пользуются по сей день, называется VIM и огромным количеством пользователей операционных систем считается лучшим текстовым редактором. В конце 1979 года состоялся выход новой версии операционной системы – 2BSD. Тогда же был произведён перенос этой ОС со старых PDP-11 на компьютеры VAX. К тому времени BSD была единственной системой, полностью реализовавшей возможности
№1, январь 2007
Лицензия BSD Кратко суть BSD-лицензии можно сформулировать следующим образом: Операционная система и все входящие в комплект дистрибутива программы защищены авторским правом. При распространении ПО, использующего код Калифорнийского университета, копирайт должен быть обязательно сохранен в исходных текстах. Нельзя ограничивать права пользователей своей программы путем скрытия исходного кода или каким-либо другим образом. Любой пользователь, работающий с программой, которая распространяется по лицензии BSD, может изучать и модифицировать исходный код,
новых систем по работе с виртуальной памятью.
Сетевая ОС В начале 1980-х Министерство обороны США столкнулось со сложной проблемой. Парк компьютеров в их сети ARPAnet устарел, в результате чего назрела необходимость в их замене. Однако при этом необходимо было переносить программное обеспечение на новую архитектуру, что требовало полного переписывания важнейших частей кода. Для поддержания работоспособности сети была необходима операционная система, успешно работающая на самых разных типах компьютеров. Альтернативу UNIX, которая, как известно, работает практически на любых электротехнических приборах, придумать было сложно. Военные обратили внимание на только что вышедшую 3BSD и подписали с Калифорнийским университетом контракт. Получившие финансирование программисты наконец-то смогли сосредоточиться на своей работе по-настоящему. Для поддержки новых ёмких жестких дисков была создана новая файловая система. FFS (Fast File System) отличалась от других повышенной надежностью и скоростью копирования файлов. Но, конечно, главные нововведения касались работы с сетью. Уже в восьмидесятые было ясно, что будущего у операционной системы без нормальной поддержки сетевых протоколов нет. Роб Гурвиц
а также использовать код для написания своих программ. Говоря проще, программы по этой лицензии можно использовать бесплатно и делать с ее исходным кодом все, что душе заблагорассудится. Согласитесь, более свободную лицензию найти трудно. BSD-лицензия очень похожа на лицензию GPL, однако у неё есть одно важное отличие. Все программы, лицензированные как GPL, обязаны сопровождаться исходным кодом. В случае же использования BSD возможно распространение ПО в бинарных файлах. Кроме того, все программы, разработанные при помощи GPL-лицензированных утилит, также автоматически попадают под действие этой лицензии.
(Rob Gurwitz), Кирк Маккусик (Kirk McKusick) написали для ядра BSD реализацию стека TCP/IP, а также создали несколько важнейших утилит для связи и удаленного управления компьютером: rsh и rlogin. Эти нововведения сделали новую версию ОС сверхпопулярной. BSD 4.1 (изначально релиз планировалось назвать 5BSD, но в AT&T беспокоились, что пользователь может перепутать проект Беркли с её System V) явно была лучше любой другой UNIX-системы того времени. Весной 1982-го Билл Джой объявил о прекращении работы над проектом и своём уходе. «Отец» ОС перешел работать в Sun Microsystems, где его ждала SunOS. Без него работа застопорилась, и следующий релиз BSD вышел лишь в 1986 году. После того как компьютеры VAX в конце 80-х стали стремительно устаревать как в моральном, так и техническом плане, разработчики BSD доработали ОС для её более лёгкого переноса на другие платформы. Первой ласточкой стала новая архитектура Power 6/32 от компании Computer Consoles Incorporated. И хотя ей не суждено было стать массовой, полученный в результате опыт позволил разработчикам в дальнейшем создать версии BSD для самых различных платформ. Вообще можно выделить две ветки развития UNIX. Первая, основанная на System V, дала жизнь таким системам, как HP-UX, Solaris, AIX. Главная
91
ретроспектива Символ BSD Символом операционной системы FreeBSD является демон (а не чертенок, как многие его ошибочно называют) по имени Beastie. Происхождение его объясняется очень просто: он не demon, а daemon – именно так в греческой мифологии называли добрых духов. «Демонами» также называют опре-
их особенность – коммерческая основа, а также принадлежность одной определённой компании. Вторая ветка – различные вариации BSD с открытым исходным кодом и свободным распространением: FreeBSD, NetBSD и OpenBSD. Существует, конечно же, ещё и Linux, однако о ней в этой статье мы говорить не будем.
386 BSD Разработчики BSD были правы, когда сделали ставку на сетевые возможности системы. В конце 80-х годов прошлого столетия этот «пункт» оказался особенно востребованным, и BSD начала быстро находить себе новых пользователей. Программисты, разрабатывавшие ПО с открытым исходным кодом, к тому времени уже объединились в единое Open Source-сообщество, в результате чего другие компании и разработчики также захотели воспользоваться реализацией протокола TCP/IP для реализации собственных сетевых продуктов, базировавшихся на данном стеке. Однако BSD хоть и являлась самостоятельной системой, во многом опиралась на код, унаследованный еще от UNIX компании AT&T. Так что коммерческое использование BSD без покупки лицензии у этой компании было невозможным. Стоит отметить, что сетевые компоненты ОС были написаны программистами без использования коммерческого ПО, вследствие чего под лицензию AT&T не попадали. И тогда Калифорнийский университет принял решение создать миниатюрный дистрибу-
Рисунок 1. Символ FreeBSD
92
деленный вид программ под UNIX, выполняющих свою работу незаметно для глаз пользователя. Придумал и нарисовал Beastie Кирк Маккусик, однако за прошедшее время различными энтузиастами было нарисовано огромное количество различных вариаций на тему этого символа.
разработчики Patchkit – Нейт Вильямс (Nate Williams), Род Граймс (Rod Grimes), Джордан Хаббард (Jordan Hubbard). Товарищи посовещались и решили взяться за полную переработку ОС. В результате история BSD получила новый толчок своего развития, имя которому – FreeBSD.
FreeBSD
тив, который включал бы в себя лишь Постепенно доработка 386/BSD начареализацию сетевого стека да самые ла превращаться в нечто большее, ненеобходимые утилиты. жели постоянное исправление ошиЭтот программный пакет получил бок. К проекту присоединились еще название Networking Release 1 (NR1). два разработчика – Джулиан Элишер Для системы была разработана спе- (Julian Elischer) и Дэвид Гринмен (David циальная лицензия, разрешавшая ис- Greenman). Дэвид, кстати, придумал пользовать её исходный код в любых имя новой системе – FreeBSD. целях при условии сохранения в нём Для более широкого распространеавторских прав Калифорнийского уни- ния новой системы Джордан Хаббард верситета. Несмотря на то что учебное обратился в компанию Walnut Creek заведение просило за одну DAT-карт- CD-ROM, известную своим содействиридж с NR1 1000 долларов, любой че- ем свободно распространяемому ПО. ловек мог бесплатно и полностью ле- В начале 90-х годов прошлого столегально скопировать дистрибутив у то- тия Walnut Creek распространяла CDго, кто уже приобрёл кассету с ПО. Од- дистрибутивы Linux, в частности, ленако буквально сразу же некоторые гендарный Slackware. Сотрудники комприверженцы Open Source выложили пании не только занялись тиражировадистрибутив для свободного скачива- нием дисков с FreeBSD, но и предостания на анонимных ftp-серверах, благо- вили разработчикам мощный компьюдаря чему сразу несколько сотен ком- тер с доступом в Интернет. паний получили в своё распоряжеПервая версия системы, FreeBSD 1.0, ние бесплатные средства для работы была доступна как на CD-ROM, так и для с TCP/IP-протоколом. бесплатного скачивания с ftp-серверов. Переносом BSD на стремительно ОС базировалась на NR2, дополненной набиравшую популярность платформу частями кода из 386/BSD и утилитами IBM-совместимых компьютеров занял- из Free Software Foundation. С момента ся Билл Джолитц (Bill Jolitz). Переписав своего появления новый проект начал основные компоненты следующей вер- пользоваться невероятным успехом, сии Networking Release под номером 2, и уже через несколько месяцев была он создал 386/BSD – первую открытую анонсирована FreeBSD 1.1. систему для архитектуры PC. Однако в этот момент произошёл Эта ОС, по мнению общественнос- весьма досадный инцидент, грозивший ти, отличалась нестабильностью и тре- перерасти в катастофу. Как вы помнибовала серьезной доработки. Но дело те, исходный код операционный систебыло не в недостатке знаний у Джо- мы UNIX принадлежал AT&T. В 1994 голитца, а в нехватке свободного време- ду компания Novell, занявшаяся покупни. К счастью, благодаря тому, что 386/ кой прав на различное ПО (например, BSD находилась на ftp-серверах, она DR-DOS с WordPerfect), выкупила прабыстро попала в руки многих програм- ва и на UNIX. Сразу после этого она помистов, которые взялись за улучшение дала в суд на Калифорнийский универсистемы. Созданный независимыми ситет, обвинив его в незаконном расразработчиками пакет Patchkit устра- пространении дистрибутива NR2, банял основные недостатки ОС, а также зировавшегося на коде, принадлежавдобавлял в неё новые возможности. шем Novell. В результате долгого суК 1993 году Билл Джолиц боль- дебного разбирательства университет ше не смог продолжать работать над был вынужден изъять из ОС все чужие 386/BSD и отошел от дел. Координа- фрагменты кода. А эти фрагменты явторами по развитию проекта стали лялись основой системы, самой важ-
ретроспектива ной её частью. В результате была выпудущее, пьют пиво, отдыхают. Также они щена новая версия операционной сис- Сообщество OpenBSD темы, 4.4BSD-Lite, состоявшая исклю- Разработчики OpenBSD – не только хоро- проводят компьютерные конкурсы и сочительно из свободного кода. Однако шие программисты, но еще и очень инте- здают рисунки для фирменных футбоиз-за отсутствия многих важных ком- ресные люди; вдобавок ко всему – твор- лок встречи. О рисунках разговор отдельный – на обпонентов NR2 система 4.4BSD-Lite об- чески настроенные. Ежегодно они собираются в одном ложке каждого нового релиза OpenBSD ладала массой ограничений, вследствие чего стала большим разочарова- из городов в Канаде или в США на мероп- красуется картинка (рис. 2) с довольно зариятие, именуемое «hackathons». Програм- мысловатым сюжетом. Нарисована она, еснием для поклонников BSD. На помощь пришла группа про- мисты общаются, делятся планами на бу- тественно, самими разработчиками. граммистов из лагеря FreeBSD. Они решили переписать недостающие ком- тированной на разработчиков, а также форменность все же не оправдалась. поненты, практически заново воссо- продвинутых пользователей системы. Миром правит PC, да и на компьютерах Apple поклонников NetBSD не видно… здав прежнюю операционную систему. Над вторым рождением NR2 в об- NetBSD разе новой версии FreeBSD работал NetBSD – результат деятельности OpenBSD весь мир: сочувствующие BSD про- большой группы программистов, счи- Проект OpenBSD своим существоваграммисты вносили свой посильный тающих своей главной целью сделать нием обязан Тео Де Раадту (Theo de вклад в разработку нового кода. Впос- систему максимально аппаратно не- Raadt). Этот человек был одним из тех, ледствии подобный способ разработ- зависимой. В 1993 году, когда они взя- кто стоял у истоков NetBSD. Но, отки блестяще реализовал Линус Тор- лись за работу, эта идея как раз стано- личаясь суровым нравом, Тео в 1995 году поссорился с товарищами и навальдс (Linus Torvalds), когда в рабо- вилась актуальной. Операционная система была осно- чал работать над собственным проекте над его ядром Linux приняло участие большое количество программис- вана на различных свободно-распро- том. Основывался Тео на все той же страняемых программных компонен- BSD4.4-Lite. Кроме самостоятельных тов со всего земного шара. Реинкарнация системы заняла око- тах, главным образом – на дистрибу- компонентов, OpenBSD по мере своело года. Еще пара месяцев ушла на ус- тиве 4.4BSD-Lite, являвшейся прароди- го развития включала в себя разратранение шероховатостей в версии ОС тельницей FreeBSD. Работа над систе- ботки из лагерей FreeBSD и NetBSD. для платформы x86. В январе 1995 го- мой стартовала в январе 1993-го, и уже В первые годы своего существования да пользователи заполучили в свои ру- к апрелю была выпущена первая вер- OpenBSD была больше всего похожа ки дистрибутив FreeBSD 2.0. В июне сия. Функционировала NetBSD тог- именно на NetBSD, отличаясь от неё вышел доработанный и дополненный да только под i386. Чуть позже ОС пе- лишь некоторыми дополнительными ренесли на архитектуры Commodore функциями. релиз под номером 2.0.5. Главным козырем системы стала В дальнейшем ОС изменялась Amiga, Sun Sparc и Apple Macintosh. В сентябре 1995-го была создана её высокая защищённость, о которой «на глазах»: жесточайший мониторинг ядра, постоянные (каждые 3-5 организация NetBSD Foundation, коор- уже слагают легенды. OpenBSD измесяцев) обновления. Рассказывать динировавшая дальнейшее развитие вестна как самая «неприступная» ОС, о том, какие нововведения появились проекта. Сегодня NetBSD продолжа- и ошибки, связанные с безопасносво FreeBSD с изменением ее версий, ет развиваться согласно изначальной тью, разработчики устраняют мгновеня не буду. Для этого существует об- концепции – возможности работать но. «Бесплатная. Функциональная. Беширный файл с описанием изменений на максимально широком круге аппа- зопасная» (Free. Functional. Security) – ратных платформ. Новые релизы сис- вот девиз OpenBSD, подчеркивающий (change-log), доступный в Интернете. Упомяну лишь, что с 1996 года на- темы включают в себя поддержку DEC ее главные достоинства. В рамках эточал применяться новый принцип на- VAX и Alpha, Motorola PowerPC и др. го проекта были созданы файервол звания версий системы. Все только что Список платформ, на которых NetBSD Packet Filter, который считается самым вышедшие новые версии ОС называ- чувствует себя комфортно, исчисляет- безопасным среди программ такого ются Release. В ветке STABLE, ориен- ся сотнями. Установить ОС можно да- рода, а также наиболее популярная реализация протокола SSH – OpenSSH. тированной на рядовых пользователей, же на игровую консоль. Однако, несмотря на то что разра- Также разработчики OpenBSD с осоисправляются ошибки и иногда добавляются некоторые изменения. Все же ботчики NetBSD пишут свой код в рам- бенной тщательностью следят за докардинально новые задумки реализу- ках POSIX, статус системы, соответс- кументацией к системе и категориются в рамках ветки CURRENT, ориен- твующей этим стандартам, она вряд чески возражают против не свободли получит. За стандартизацию нужно ных программ. заплатить, а разработчики и так считаЧто ж, у операционных систем сеют, что их ОС является самой лучшей мейства BSD долгая и славная исиз свободно распространяемых. Впол- тория. Будем надеяться, что их ждет не объяснимая и понятная позиция про- не менее достойное будущее! граммиста по отношению к своему труРисунок 2. Обложка последнего релиза Редактор Дмитрий Мороз ду. Вот только ставка на мультиплатOpenBSD
№1, январь 2007
93
подписка на 2007 год
Как стать обладателем диска, если вы не оформили годовую подписку, читайте на сайте журнала www.samag.ru Редакционная подписка для физических лиц
Вы можете оформить подписку на любой российский адрес.
При заполнении квитанции разборчиво укажите фамилию, имя, отчество полностью, почтовый индекс и адрес получателя, контактный телефон.
94
Вы можно оформить подписку с лю-
Копию заполненного и оплаченно-
бого месяца на любой срок. В графе «Сумма» проставьте сумму за выбранное количество номеров. Стоимость одного номера журнала 150 руб. За год – 1800 руб. НДС и почтовые расходы включены в стоимость.
го бланка отправьте в редакцию по факсу: (495) 628-8253 или на электронный адрес: info@samag.ru Журнал высылается почтой простой бандеролью только после поступления денег на расчетный счет.
подписка на 2007 год Российская Федерация
Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать»
Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru
СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры «АРЗИ»: Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению
печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»
Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) Молдавия – по каталогу через ГП «Пошта Молдовей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220
Подписные индексы:
20780* 81655** по каталогу агентства «Роспечать»
87836 по каталогу агентства «Пресса России» * **
№1 январь 2007
годовой полугодовой
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №1(50), Январь, 2007 год УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Редактор Алексей Коршунов Внештатные редакторы Алексей Барабанов Сергей Супрунов Дмитрий Мороз Крис Касперски РЕКЛАМНАЯ СЛУЖБА тел./факс: (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
ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Принципы построения доменов Active Directory Многие системные администраторы по сей день используют старые и потому, по их мнению, надежные принципы логического построения сети. Речь, конечно же, идет о рабочих группах. И хотя решения на базе Active Directory давно перешли в разряд консервативных, зачастую во многих организациях с большим парком компьютеров можно увидеть, как системный администратор бегает от одного пользователя к другому, пытаясь корректно раздать им права или настроить учетную запись. Переход на домены Windows не спасет вас полностью от проблем, возникающих на местах пользователей, но позволит сэкономить огромное количество времени и сил, а также повысить контроль за безопасностью локальной сети.
Профессиональная компрессия видео Потребность в сжатии видео растет с каждым днем. Источником может быть и камера наблюдения, и «грабитель экрана», используемый для подготовки презентаций, и обычная цифровая/аналоговая камера, и плата видео-захвата – всего не перечислишь!
популярные программы сжатия (такие, как DivX, XviD) имеют множество настроек, предоставляя огромное количество рычагов управления, но не объясняют, как ими пользоваться. Как совместить минимальную потерю качества с максимальной степенью сжатия, читайте в следующем выпуске журнала.
Мониторинг нагрузки операционной системы Solaris После установки нового сервера, как правило, проводятся измерения исходной рабочей нагрузки. Впоследствии необходимо вести периодические измерения использования ресурсов системы: оперативной памяти, подсистемы дискового ввода-выовда, сети и центрального процессора, чтобы выявлять «узкие места», препятствующие производительной работе системы. Предлагаемая методика известна давно и в целом применима к любому компьютеру, под управлением любой операционной системы. В следующем номере рассмотрим её упрощённый вариант для грубой предварительной оценки загрузки серверов под управлением операционной системы Solaris.
Уважаемые читатели! Обратите внимание, что теперь оформить подписку вы можете не только на полугодие, но и сразу на весь год. Годовой индекс по каталогу «Роспечать» – 20780. Интер-почта – заказ журналов по тел.(495) 500-00-60. Подписка on-line – SetBook.ru. Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
Доставка почтой в любую точку России.