98
№1(50) январь 2007 №1(50) январь 2007 подписной индекс 20780 www.samag.ru Как быстро и эффективно провести учет компьютерной техники Разбираемся в корпоративных программах лицензирования Microsoft FreeBSD в домене Windows: еще больше возможност ей Какова в действии система резервирования AMANDA ISA 2004: настраиваем удаленный доступ к сети П ользовательские бюджеты в LDAP П ротиводействуем руткитам режима ядра Чего ждать от удаленной работы?

050 Системный Администратор 01 2007

Embed Size (px)

DESCRIPTION

№1(50) январь 2007 подписной индекс 20780 www.samag.ru №1(50) январь 2007 КАНИКУЛЫ НЧИЛИСЬ ИДАННО ГОДНИЕ ДЕНЬГИ РАБО ТЕ НЕО Ж ЗАКО НО НА БЫ ВО №5(30) май 2005 №5(30) май 2005 подписной индекс 81655 www.samag.ru подписной индекс 81655 www.samag.ru

Citation preview

№1(

50)

янва

рь 2

007

№1(50) январь 2007подписной индекс 20780www.samag.ru

Как быстро и эффективнопровести учет компьютерной техники

Разбираемся в корпоративных программах лицензирования Microsoft

FreeBSD в домене Windows: еще больше возможностей

Какова в действии система резервирования AMANDA

ISA 2004: настраиваем удаленный доступ к сети

Пользовательскиебюджеты в LDAP

Противодействуем руткитам режима ядра

Чего ждать от удаленной работы?

Роспечать – 20780, 81655Пресса России – 87836Интер-почта – тел. (095) 500-00-60

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

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!

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

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

ЗАКОНЧИЛИСЬ Д

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№5(30) май 2005подписной индекс 81655www.samag.ru

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

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

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

танавливаем Symantec Antivirus 9.0в корпоративной сети

Эффективно управляем полями пользователей в AD

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

Интервью с Ларри Уоллом –создателем языка Perl

№5(30) май 2005подписной индекс 81655www.samag.ru

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

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

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

танавливаем Symantec Antivirus 9.0в корпоративной сети

Эффективно управляем полями пользователей в AD

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

Интервью с Ларри Уоллом –создателем языка Perl

1№1, январь 2007

в номере

19, 51, 61, 89 BUGTRAQ

РЕПОРТАЖ

«Платформа 2007» – будущее, которое нам обещает Microsoft

4

Итоги восьмой ежегодной конференции.Алексей Барабанов

[email protected]

ТЕНДЕНЦИИ7

АДМИНИСТРИРОВАНИЕ

Как купить ПО от Microsoft?Часть 2. Разбираемся в корпоративных программах лицензирования

8

Не надо думать, кто корпоративные лицензии на софт – это удел суперкорпораций. Воспользоваться системой лицензирования вполне может и ваша компания, если в ней есть хотя бы три компьютера.

Дмитрий Бутянов[email protected]

Reporting Services: составляем отчеты14Ваш начальник требует отчета о трафике и итоги инвен-таризации сети? Бухгалтерия умоляет помочь с отчетом в Excel? А вы можете предоставить тольком аловразу-мительный текстовый файл? Узнайте о современных технологиях разработки отчетов. Павел Купцов

[email protected]

Как быстро и эффективно провести учет компьютерной техники

20

Используем программный комплекс CheckCfg + Sklad.Алексей Бережной

[email protected]

Настраиваем удаленный доступ к сети с помощью MS ISA 2004

26

Возможность доступа к необходимым бизнес-ресурсам из любой точки мира – одно из условий успешной рабо-ты компании. Но это не должно быть в ущерб безопас-ности. Рассмотрим реализацию технологий удаленно-го доступа с помощью Microsoft ISA 2004.

Андрей Бирюков[email protected]

Подробное руководство по настройке тонких клиентов на основе дистрибутива Thinstation и протокола NX. Часть 2

32

Особенности эксплуатации, дополнительные настрой-ки NX и Thinstation. Евгений Бушков

[email protected]

Размещаем пользовательские бюджеты в LDAP. Часть 1

36

Тема имеет столько способов реализации, сколько ав-торов. Но типичные ошибки повторяются от раза к ра-зу. Попробуем построить среду для хранения пользова-тельских бюджетов в LDAP оптимальным образом.

Алексей Барабанов[email protected]

Какова в действии система резервирования AMANDA

44

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

[email protected]

Устанавливаем и обновляем программное обеспечение в системе FreeBSD

52

Полезные советы для начинающих.Гаспар Чилингаров

[email protected]

Unionfs в FreeBSD: разбираемся в текущей реализации

56

Термин «файловая система» охватывает гораздо боль-ше, чем способ организации данных на физическом но-сителе. «Многослойность» подсистемы работы с фай-лами не только повышает гибкость, но и предоставляет множество интересных возможностей. Один из приме-ров такого «промежуточного уровня» – unionfs.

Сергей Супрунов[email protected]

Снаряд – броня70

Оксана Родионова[email protected]

В этом соперничестве Алексей Раевский на стороне бро-ни. Пользователям повезло.

ЧЕЛОВЕК НОМЕРА

Руткиты режима ядра: алгоритмы работы и защита

74

Случалось ли вам замечать, что в системе «живет» пос-торонний процесс, но ни диспетчер задач, ни другие программы не могут его показать? Может быть, про-цесс скрывается и от них? Каковы методики скрытия в режиме ядра?

БЕЗОПАСНОСТЬ

Артем Баранов[email protected]

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

IMHO

Крис Касперски[email protected]

Прошлое операционных систем семейства BSD

90

Илья Александров [email protected]

РЕТРОСПЕКТИВА

ОС семейства BSD признаны компьютерным сообщест-вом и получили статус идеального программного обес-печения для серверов. А знакомы ли вы с историей ле-гендарной системы?

Подарочный DVD-диск с библиотекой всех номеров жур-нала с 2002 по 2006 год вложен в январский выпуск всем читателям, которые оформили подписку на весь 2007 год.

Как стать обладателем диска, если вы не оформили годо-вую подписку, читайте на сайте журнала www.samag.ru

FreeBSD в домене Windows: дополнительные возможности

62

Правильное подключение FreeBSD в домен Windows позволит работать с Active Directory для проверки па-ролей, членства в группах и т. д. Но это только некото-рая часть того, для чего FreeBSD может использовать данную информацию. Рашид Ачилов

[email protected]

50

О т л и ц а к о м п а н и и

Linuxcenter.Ru и журнала

LinuxFormat я сердечно

поздравляю наших дру-

зей из «Системного Ад-

министратора» с выпус-

ком юбилейного, 50-го

номера! Нам очень при-

ятно наблюдать, как ваш

журнал становится все интереснее и интереснее от номера

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

духе и приобетать все больше и больше подписчиков!

Павел Фролов,

Генеральный директор

компании Linuxcenter.RU

От лица компании «Фаматек» хочу поз-дравить редакцию журнала «Систем-ный администратор» с выходом в свет юбилейного, пятидесятого по счету но-мера. За время своего существования журнал успел завоевать популярность у профессионалов в сфере IT, которые всегда внимательно следят за совре-менными тенденциями в мире высо-ких технологий. Индустрия IT растет и развивается, проис-ходит масса интересных событий, и «Системный админис-тратор» никогда не остается в стороне от освещения инно-вационных решений, представленных на российских и за-рубежных рынках.

От всей души желаю редакции журнала «Системный администратор» еще больше содержательных и интерес-ных материалов, талантливых авторов, а также дальней-ших профессиональных и творческих успехов».

Дмитрий Курашев,Генеральный директор компании «Фаматек Россия»

Поздравляем журнал «Систем-ный администратор»! Новых до-стижений, тиражей, щедрых рек-ламодателей, активных подпис-чиков. За недолгое время сотруд-ничества мы успели оценить по-тенциал журнала. Смело могу ут-верждать, что «Системный ад-министратор» – команда профессионалов, которую ждет успех!

Сергей Рыжиков,Директор компании «Битрикс»

Наши отношения с журналом «Системный администратор» можно охарактеризовать как пар-тнерство с первого взгляда. До-статочно пролистать один номер журнала, чтобы понять, что это наиболее полезное издание для IT-специалистов на русском языке, содержащее максимальное количество практичес-кой информации. При этом и актуальность информации, и формат ее изложения выше всяких похвал. Я хочу от ли-ца нашей компании и от себя лично поздравить коллектив редакции с достижением очередной вершины и пожелать всегда оставаться на гребне волны интереса таких приве-редливых читателей, как системные администраторы. Уда-чи вам, высоких тиражей, лояльных читателей и сговорчи-вых рекламодателей!

Алексей Раевский, Генеральный директор компании SecurIT

Мне хочется поздравить с юбилейным

50-м выпуском журнал и его читателей.

Объективные материалы, оперативная,

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

позволили завоевать журналу доверие

и уважение читателей. Желаю всей ко-

манде журнала творческих успехов, а самому журналу –

дальнейшего процветания.

Сергей Вахонин,

IT-директор SmartLine Inc.

От лица компании Softline я рада возможнос-ти поздравить коллектив журнала «Систем-ный администратор» с выходом в свет юби-лейного пятидесятого номера! 50 – тот ру-беж, который позволяет подвести проме-жуточные итоги и сделать выводы об ус-пешности проекта. «Системный Админис-тратор» – отличный пример востребованного профессио-нального издания, получившего высокое признание сре-ди читателей. Желаем вам процветания, дальнейших твор-ческих успехов, новых профессиональных идей и динамич-ного развития!

Наталья Вьюникова, заместитель директора по PR компании Softline

Рад от имени ALT Linux поздравить «Сис-

темный Администратор» с выпуском юби-

лейного номера. Журнал с самого начала,

уже своим названием, взялся за трудную

задачу держать высокую профессиональ-

ную планку и на протяжении пятидесяти

номеров сумел этот уровень выдержать.

Редакция сформировала яркий и профессиональный авто-

рский коллектив, который создает свое лицо для каждого

нового номера. Мне очень приятно, что в каждом номере

достойное место занимают материалы по свободным про-

граммам. Это материалы о профессиональном использо-

вании свободных программ, а не пустые «религиозные вой-

ны». Желаю вам новых талантливых авторов и много но-

вых вдумчивых и требовательных читателей.

Алексей Смирнов,

Генеральный директор ALT Linux

выпусков – наш общий юбилей!Сисадмины, спасибо, что Вы с нами!

3№1, январь 2007

доска почета

Победители в номинации «За лучшую серию материалов»:

1 место (30 000 руб.) за серию статей «Как работает Sendmail? Полезные под-робности» получает Сергей Супрунов, инженер-программист Константиновской группы развития и эксплуатации програм-мно-технических средств Усть-Донецкого ЛТЦ Морозовского УЭС Ростовского фи-лиала ОАО «Южная Телекоммуникацион-ная Компания».

2 место (20 000 руб.) за серию статей «Современный Linux-сервер» получает Алексей Барабанов, специалист по об-служиванию и эксплуатации информаци-онных ресурсов, предприниматель, редак-тор нашего журнала.

2 место (20 000 руб.) за серию статей «Вы всё ещё не используете WMI?», «Уз-най секреты WMI» получает Константин Леонтьев, консультант в области инфра-структурных проектов российского пред-ставительства компании Microsoft.

3 место (10 000 руб.) за серию статей «Су-ровая правда, скрытая за «розовыми оч-ками»: история компании Transmeta» полу-чает Дмитрий Мороз, студент последне-го курса Житомирского Государственного Технологического Университета, журна-лист в изданиях «MacUP/RE», «Телефон», «Inflight Review», «3DNews».

Победители в номинации «За лучшую новую авторскую тему»:

1 место (30 000 руб.) за статью «Подроб-ное руководство по настройке тонких кли-ентов на основе дистрибутива Thinstation и протокола NX» получает Евгений Буш-ков, ведущий программист «Корпорации «Аксион».

2 место (20 000 руб.) за статью «Клас-теризация + виртуализация: Linux HA + OpenVZ» получает Евгений Прокопьев, инженер-программист Южной Телеком-муникационной Компании.

3 место (10 000 руб.) за статью «Выдер-жит ли нагрузку ваш веб-сервер? Обзор программ для стресс-тестирования» по-лучает Сергей Яремчук, инженер груп-пы автоматизации одной из правительс-твенных организаций Украины.

3 место (10 000 руб.) за статью «На что способен дистрибутив SystemRescueCd Linux» получает Иван Максимов, cистем-ный администратор компании «КСАНФ».

Номинация «За лучшую аналитическую статью» была сня-та с конкурса – среди авторов не нашлось желающих по-бороться за эту премию.

ПОЗДРАВЛЯЕМ ПОБЕДИТЕЛЕЙ!Подведены итоги авторского конкурса 2006Номинации1. За лучшую серию материалов2. За лучшую новую авторскую тему3. За лучшую аналитическую статью

Кто участвовалУчастие приняли все авторы, опубликовавшие свои ста-тьи в журнале «Системный администратор» в течение 2006 года.

О номинациях1. Серией материалов считается блок из не менее чем

двух статей. Тема серии – по собственному выбору ав-тора или же по выбору редакции.

2. Статья, написанная на тему, придуманную автором и одобренную редакцией.

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

Кто судьиВ состав жюри вошли сотрудники редакции.

Денежные призы 1 место – 30 000 рублей 2 место – 20 000 рублей 3 место – 10 000 рублей

4

репортаж

Аудитория – все потребители про-дукции и участники бизнес-про-цесса Microsoft. Центральное

событие – презентация Windows Vista, Office 2007 и Exchange Server 2007. Нет смысла педантично повторять стро-ки стандартного прессрелиза. Скажу лишь самое важное на мой взгляд.

Windows Vista получилась? Это по-кажет рынок. Но одно несомненно – она состоялась! Теперь уже точно мож-но определить, что день грядущий нам готовит. Компьютерному рынку пред-стоят большие перемены.

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

Во-вторых, под новую платформу… будут выпущены новые компьютеры!

Вы не ослышались. Все десктопы и но-утбуки, в которых менее 1 Гб памяти, и скромные видеоадаптеры с видео-памятью менее 64 Мб после выхода Windows Vista непременно обесценят-ся. Этим объясняется осеннее удешев-ление и распродажа бюджетных моде-лей от всех ведущих производителей, таких как HP, например.

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

думаться, то точно так же не получит-ся запустить в автоматическом режи-ме unattended-установку программно-го обеспечения от третьего произво-дителя в формате не msi.

Да и вообще, новая система пол-ностью ориентирована на развертыва-ние из образов, то есть очень не дру-жественна к разработкам производи-телей, не входящим в сферу притяже-ния Microsoft. Для драйверов это бы-ло заявлено прямо, а для приклад-ного ПО косвенным образом тоже ус-тановлен режим вытеснения чужа-ков. Должно быть совершенно ясно, что переход на Vista может оказаться просто разорительным даже для не-маленьких компаний. Осознавая это, в Microsoft особенное внимание уде-ляют вопросам миграции на новую платформу. Для планирования пере-

«Платформа 2007» – будущее, которое нам обещает Microsoft

Восьмая ежегодная конференция Microsoft успешно прошла в Москве 13-14 декабря 2006 года. На ней было зарегистрировано почти 3 тысячи участников, что в полтора раза больше, чем в прошлом году.

5№1, январь 2007

репортаж

хода на Windows Vista даже разрабо-тан специальный инструментарий – Microsoft Application Compatibility Toolkit. Он по сути является средством инвен-таризации (кстати, бесплатным), поз-воляющим выяснить степень совмес-тимости существующего оборудова-ния и ПО с требованиями новой опе-рационной системы.

Наметился также прогресс в раз-витии Office. Теперь эта прикладная система на платформе Vista может ис-пользовать возможности многоядер-ных процессоров вне зависимости от стандартного планировщика ядра. Но самые неожиданные результаты бы-ли продемонстрированы в ходе расска-за о продукте под названием SoftGrid. Эта система позволяет виртуализовать среду выполнения прикладной про-граммы так, что становится возмож-ным портировать ее вместе с необходи-мыми компонентами на любой хост для исполнения. Нечто вроде prelink, соб-ранного в пакет. Преимущество в том, что такая компонента исполняется без установки в хостовую систему и в слу-чае атаки не повреждает ее, так как су-ществует в изолированной виртуаль-ной среде. Неожиданный эффект со-стоит в том, что приложение, виртуали-зованное подобным образом, не может защищаться привязкой к параметрам системы запуска, так как все они вир-туальные. То есть, внедрение такого подхода заставит пересмотреть многие традиционные решения в области кон-троля за соблюдением лицензий на ПО. Хотя неуклонно внедряемая виртуали-зация так или иначе заставит это сде-лать. Все это и многие другие специ-альные вопросы были рассмотрены в докладах конференции.

«Платформа 2007» длилась 2 дня. Это и много, так как приходилось ра-ботать по настоящему: доклады – это не только шутки ведущих и репли-ки из зала, и одновременно это очень мало. Иногда даже катастрофичес-ки недостаточно. Например, был за-менен единственный доклад на тему Virtual Server. К докладчикам в пере-рывах очень трудно пробиться, так как вопросы не прекращаются и желающие спросить стоят стеной. Кроме лекцион-ной формы, были предложены лабо-раторные работы (например, настрой-ка брандмауэра в Windows Vista). Увы, я, прибывший туда как представитель

прессы, в то время как резервирова-лись места на лабораторных, был за-нят на пресс-конференции и упустил возможность записаться. Лаборатор-ные работы были расписаны желаю-щими на два дня вперед еще до нача-ла самого форума! «Платформа» про-исходила в СК «Олимпийский». Центр спортивной арены был выделен под вы-ставку, трибуны размечены под залы для докладов. Вечером первого дня для уставших организовали развле-кательную программу, куда была при-глашена группа «Несчастный Случай», а для неудовлетворенных – «круглые столы» с участием очень известных персон в отечественном информаци-онном бизнесе.

Теперь попробую выразить свои личные впечатления. «Платформа» –

Участники пресс-конференции

это событие, которое стоит посетить каждому вне зависимости от отноше-ния к MS Windows и бизнесу Microsoft. Во многом это не столько официальное мероприятие, это почти клуб с систе-мой скидок членам клуба! Среди посе-тителей можно было встретить все воз-расты – от тинейджеров до тех, «кому за сорок». Очень много представитель-ниц прекрасного пола, гораздо больше, чем на аналогичных мероприятиях, на-пример, линуксовой направленности. На докладах царила дружественная атмосфера. Все (без преувеличения все) докладчики от Microsoft свободно ориентировались в предметах, держа-ли внимание аудитории и даже успева-ли разыгрывать маленькие презенты среди слушателей (от мышек до X-Box). Организаторы настойчиво интересова-лись мнением гостей об уровне всех мероприятий. Не знаю, какое вопло-щение получит широко разрекламиро-ванный слоган «People-Ready» в биз-нес-реалиях, но на «Платформе» все свидетельствовало в пользу подобно-го отношения. Всего лишь за сданные анкеты с отзывами-оценками разных аспектов данного события организа-торы пообещали каждому посетителю по комплекту из Windows Vista и Office 2007 в личное пользование сразу пос-ле их выхода на рынок. Посмотрите на стоимость участия в конференции, подумайте немного и сделайте выводы, что следующая «Платформа» не долж-на пройти без вас.

Текст Алексея Барабанова.Фотографии предоставлены

компанией MicrosoftВыступление Жана-Филиппа Куртуа (Jean-Philippe Courtois), президента Microsoft International Keynote

7№1, январь 2007

тенденции

Firefox продолжает набирать популярностьИсследователи из французской фирмы Xiti Monitor обна-родовали новую статистику по использованию веб-бра-узеров в Европе. По этим данным, популярность Firefox среди веб-пользователей выросла с апреля текущего го-да почти на 4 процента, благодаря чему она теперь со-ставляет 23,2% (тогда его доля среди всех браузеров ог-раничивалась отметкой в 19,4%). Среди стран, в которых Firefox пользуется наибольшим (в процентном отношении) спросом, – Словения (40,5%), Финляндия (39,3%), Польша (33,6%), Германия (33%), Хорватия (32,8%), Эстония (31,5%) и Венгрия (31,1%).

Организация FSF начинает кампанию против VistaОрганизация свободного программного обеспечения 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 превратит компью-теры, управляемые пользователями, в машины «Большо-го брата», где за каждым действием пользователя следят, а ему не остается иного выбора.

В FSG/LSB создана рабочая группа по Linux-пакетамВ рамках проекта стандартизации дистрибутивов, основан-ных на Linux-ядре, Linux Standard Base (LSB), была созда-на рабочая группа, которая займется проблемами работы со сторонними пакетами программного обеспечения в сис-теме. Рабочая группа LSB Packaging появилась как следс-твие проведенного саммита FSG Packaging Summit, посвя-щенного вопросам установки программного обеспечения

от независимых поставщиков (ISV) в среде операционных систем на базе Linux и управления такими пакетами. Пер-вой целью LSB Packaging стало создание API для пакет-ных систем Linux с тем, чтобы ISV смогли «прозрачно» ра-ботать с ними, не задумываясь о внутреннем устройстве самих систем (таких, как RPM). Как пишет в своем блоге Ян Мердок (Ian Murdock), основатель проекта Debian GNU/Linux, главный технолог Free Standards Group и глава всей рабочей группы Linux Standard Base: «Мотив к этому есть у всех: дистрибутивы получат больше приложений, которые сделают платформу более привлекательной; у ISV снизят-ся затраты, что повысит их экономический интерес к Linux-версиям ПО и потенциально откроет новые рынки».

Один из авторов Mandrake начал новый проектГаэль Дюваль (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

8

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

Как купить ПО от Microsoft?Часть 2. Разбираемся в корпоративных программах

лицензирования

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

Дмитрий Бутянов

9№1, январь 2007

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

У программ корпоративного лицен-зирования есть входной порог, но какой! Всего пять лицензий,

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

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

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

Корпоративное лицензионное со-глашение позволяет отделить собс-твенно лицензию от второстепенных услуг: носителей (для установки про-граммного обеспечения), документа-ции и упаковки, что позволяет форми-ровать цену строго с учетом ваших пот-ребностей и размера заказа.

Часть цены программного продук-та составляют упаковка, документа-ция и носители (дискеты или компакт-диски). Покупая продукты по програм-мам корпоративного лицензирования, вы будете платить только за лицензи-онные права.

В некоторых программах корпора-тивного лицензирования носители для установки продукта предоставляются бесплатно, в некоторых их надо поку-пать отдельно, но по себестоимости (порядка 20 $).

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

Уже при покупке 5 лицензий вы по-лучите значительную скидку по срав-нению со стоимостью приобретения тех же продуктов в виде коробки, и чем большее количество лицензий купите,

тем большую скидку получите.

Лицензии, приоб-ретенные по програм-ме корпоративного лицензирования, пре-доставляют больше прав, чем коробоч-ная лицензия (FPP) или OEM-лицензия. Лицензия, приобре-тенная по програм-ме корпоративного лицензирования, мо-жет переноситься от одного компьюте-ра к другому (за ис-ключением операци-онных систем).

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

Лицензия является подтверждени-ем легальности происхождения про-граммного продукта при условии соб-людения правил его использования. В подавляющем большинстве случа-ев лицензия является юридическим понятием. Иными словами лицензия – это документ. Сам программный про-дукт можно использовать практичес-ки как угодно, в нем не встроено ника-ких технологических барьеров. Только в некоторых продуктах лицензия со-провождается программным ограни-чением, например, Terminal Services или SBS.

Однако если вы будете использо-вать софт с нарушением ограничений, изложенных в Правилах использова-ния продуктов и Лицензии, то станете пиратом. Почитайте статью «Как ку-пить ПО от Microsoft? Особенности приобретения и использования OEM-версий» в №12 номере за 2006 г., в ней описаны последствия.

Основные типы лицензийПоскольку сети, которые мы лицензи-руем, строятся на основе клиент-сер-верной технологии, модель лицензи-рования состоит из серверных и кли-ентских лицензий. Серверная лицен-зия дает право установить сервер (од-

на штука). Клиентская лицензия – ус-тановить клиентский компьютер (од-на штука).

Если осилите статью до конца, то узнаете про вариант установки не-скольких серверов по одной лицензии. Читайте-читайте.

Таким образом, установленное программное обеспечение, например сервер Windows Server 2003, требует наличия серверной лицензии, а для клиентских рабочих станций, на ко-торых установлена клиентская опе-рационная система Windows XP Pro, также требуется лицензия, но кли-ентская. Отдельно сервер и отдельно клиент не составляет сеть. Разуме-ется, клиентские компьютеры долж-ны иметь доступ к серверному про-граммному обеспечению. Чтобы це-ны на серверное программное обес-печение были пропорциональны ко-личеству обращений к нему, на эти обращения также необходимо при-обретать лицензии, которые называ-ются клиентскими лицензиями на до-ступ, или CAL (Client Access Licenses). Чем больше сеть – тем больше обра-щений к серверу – тем дороже полу-чится сервер, т.к. за обращения надо платить (см. рис. 1) . И наоборот, в не-больших сетях, где количество обра-щений невелико, итоговая стоимость сервера будет ниже.

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

Рисунок 1. Соотношение клиентских и серверных лицензий

10

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

ские лицензии вам нужно будет за-казать отдельно.

Клиентская лицензия на доступ – это предоставление права осущест-влять доступ или использовать сер-верное программное обеспечение. Клиентские лицензии на доступ (CAL) нематериальны, и это часто вызывает путаницу и трудности.

Давайте рассмотрим конкретный пример: предположим, у нас имеется сеть из десяти клиентских компьюте-ров Windows XP Professional, а также сервер Microsoft SQL Server 2005, ус-тановленный на базе Windows Server 2003 (см. рис. 2).

Серверные лицензии: одна на Windows Server, одна на SQL Server. Это даст право поставить серверную часть.

Клиентские лицензии: Windows XP Pro в виде OEM, например.

Теперь надо соединить всё это в сеть, обеспечив клиентские ком-пьютеры возможностью пользования серверным программным обеспече-нием. Для этого нужно купить лицен-зии на клиентский доступ.

В нашем примере десять клиент-ских машин подключаются к серве-ру Microsoft SQL (причем протоколы и пр. значения не имеют), т.е. требу-ется 10 лицензий клиентского досту-па Microsoft SQL CAL. Эти же 10 кли-

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

О б р а т и т е в н и -мание – тип клиент-ской лицензии опре-деляется сервером, а не клиентом. В дан-ном примере все кли-ентские лицензии бу-дут клиентскими ли-цензиями на доступ к SQL Server незави-симо от того, какой клиент используется на рабочих станциях, которые обращают-ся к серверу.

Если, в нашем примере, доступ к серверу осуществляется при помощи сетевых терминалов (т.н. «тонких кли-ентов) или даже специальных перенос-ных устройств, то тогда для каждого из этих устройств также должна быть приобретена клиентская лицензия на доступ к SQL Server (см. рис. 3).

Наличие терминальных служб, а также программных или аппарат-ных мультиплексоров не избавляют от необходимости приобретения ли-цензий. Например, если установлен терминальный сервер с установлен-ным Microsoft Office, которым пользу-ются 20 человек, то потребуется при-обрести 20 лицензий на Office. Даже с учетом того, что на самом деле все пользователи работают с одной копи-ей продукта.

Версия CAL должна быть не ни-же версии сервера, к которому осу-ществляется доступ, т.е. для доступа к Windows Server 2003 нужна Windows Server 2003 CAL. Но эта же лицензия на клиентский доступ может исполь-зоваться для подключения к Windows Server 2000, так как ее версия в этом случае будет не ниже версии сервера. СAL не включена ни в одну из настоль-ных операционных систем.

Не требует лицензирования ано-нимный доступ к ресурсам, например, не лицензируется доступ к серверам

IIS, если пользователи при этом не ав-торизуются.

Лицензии клиентского доступа делятся на две большие группы – это «Лицензии на устройство» (Device CAL) и «Лицензии на пользователя» (User CAL).

Первая – Device CAL – лицензиру-ет доступ устройства; при этом за этим устройством может работать любой пользователь. Если в вашей сети за од-ним компьютером работают несколь-ко пользователей, например, посмен-но, то эта лицензия для вас.

Вторая – User CAL – лицензиру-ет доступ пользователя с любого воз-можного устройства. Этот тип наибо-лее выгоден и удобен в администри-ровании там, где много мобильных со-трудников, которым необходим доступ к корпоративной сети с произвольных устройств, или сотрудников, использу-ющих несколько устройств для доступа к сети независимо от способа доступа (по локальной сети, VPN или каким-то иным способом).

Если говорить в двух словах, то бе-рите те лицензии, которых понадо-бится меньше: если людей больше, чем компьютеров, то берите лицензии «на устройство», а если компьютеров больше, чем людей, то берите лицен-зии «на пользователя». Стоят эти ли-цензии одинаково, так что надо прос-то выбрать, какая именно вам нужна с точки зрения затрат или удобства контроля их использования.

Лицензии «на процессор»В модели лицензирования c исполь-зованием серверных/клиентских ли-цензий серверная лицензия относит-ся к физическому серверу, независимо от того, насколько мощный этот сервер. Пропорциональность цены лицензии (т.е., лицензия на большую сеть стоит дороже, чем лицензия на малую сеть) достигается необходимостью приоб-ретать клиентские лицензии на до-ступ для каждого клиента. Такая мо-дель может быть сложна в примене-нии. Для большинства серверных при-ложений (например, SQL Server) пре-дусмотрена простая альтернатива – приобретение вместо этого лицензии «на процессор».

Процессорные лицензии дороже, чем обычные серверные лицензии, но зато при этом не требуются кли-

Рисунок 2. Пример лицензирования SQL Server

11№1, январь 2007

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

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

При расширении сети может воз-никнуть необходимость увеличить ко-личество процессоров для обслужи-вания большего количества клиен-тов. При этом в модели лицензирова-ния «на процессор» при добавлении процессора вы должны приобрести дополнительную лицензию «на про-цессор», а не дополнительные кли-ентские лицензии на доступ к сер-веру при каждом добавлении кли-ента. Лицензии «на процессор» до-ступны для большинства серверов приложений Майкрософт, например для Microsoft SQL Server (важное ис-ключение – для Microsoft Exchange и Microsoft Windows Server лицензий «на процессор» не существует).

И еще одно важное замечание: в модели лицензирования «на процес-сор» платить надо только за те процес-соры, на которых выполняется дан-ный продукт.

Например, если вы имеете че-тырехпроцессорный блок, на кото-ром работает SQL Server, использу-ющий только один процессор из че-тырех, то и лицензию «на процессор» вам нужно купить только одну. Много-ядерность не учитывается. Один про-цессор – одна лицензия. А сколько ядер там внутри – не волнует совер-шенно. При этом если на одном сер-вере вы установите несколько копий серверного программного обеспече-ния, которые используют одни и те же процессоры сервера, нет необходи-мости приобретать отдельную лицен-зию для каждой копии серверного про-дукта. Кроме того, вы можете устанав-ливать и использовать любое количес-тво копий серверного продукта на лю-бом процессоре, для которого имеет-

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

Лицензирование бизнес-партнеров… и просто хороших клиентовЕще одна проблема возникает тогда, когда к серверному программному обеспечению подключаются внешние пользователи, число которых трудно или невозможно определить. Эту про-блему можно решить путем покуп-ки лицензии «на процессор», однако не все продукты могут лицензировать-ся по такой схеме. Выходом может быть покупка лицензии «External Connector». Эта лицензия позволяет подключиться к серверному ПО любому количеству внешних пользователей, заменяя для них клиентские лицензии на доступ. Понятие «внешний пользователь» оп-ределяется совершенно четко. Это ли-цо, которое не является: сотрудником вашей компании

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

лицом из числа временного пер-сонала, работающего по агент-ским соглашени-ям, или незави-симым подрядчи-ком, работающим у вас по заданию;

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

Еще хочется ска-зать, что лицензиро-вание отдельных сер-

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

А вот и программы…Как я уже говорил, вариантов приобре-тения программного обеспечения до-статочно много, и вы можете выбирать подходящий вам вариант. Каждая про-грамма имеет свои особенности, на ко-торых можно будет сыграть в стремле-нии сократить итоговую стоимость ПО. Чтобы вам было четко понятно, как эти программы согласуются между со-бой, они представлены в виде схемы (см. рис. 4).

На схеме программы корпоратив-ного лицензирования рассматривают-ся с двух точек зрения.

По вертикали представлены про-граммы лицензирования в зависимос-ти от размера компании – покупате-ля. Эти компании разбиты на два сег-мента: малые и средние предприятия, к которым относятся компании от 5 до 500 ПК, и большие компании, более

Рисунок 3. Лицензирование при мультиплексировании

Скидки для филиалов и аффилированных лицЕсли у вашей компании есть аффилиро-ванные лица cо степенью участия 50%, тo по программе Open License этим аф-филированным лицам можно предоста-вить возможность размещать заказы с ис-пользованием достигнутого уровня скид-ки для свершения сколь угодно малых за-купок (не менее одной штуки), но только на территории ответственности московско-

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

12

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

250 ПК. Обратите внимание, что эти категории перекрываются. Для каж-дого из этих сегментов предусмотре-на своя программа корпоративного лицензирования, а программа Open License подходит как небольшим орга-низациям, так и крупным предприяти-ям. Кроме того, крупные предприятия иногда пользуются программой кор-поративного лицензирования, пред-назначенной для малого и среднего бизнеса, например в случаях, когда им требуется сравнительно немного ли-цензий. По горизонтали представле-ны программы лицензирования в за-висимости от типа лицензии и мето-да оплаты.

Модель лицензирования с едино-временной оплатой требует приобре-тения лицензии до установки. На этом подходе основаны лицензии для пос-тавщиков вычислительной техники (OEM), коробочные лицензии, а так-

же программа Open License. Посколь-ку единовременная оплата всей стои-мости программного обеспечения тре-бует существенных затрат и отвлече-ния ресурсов от других сфер бизнеса (что может быть неудобно для ваше-го предприятия), Microsoft ввел про-граммы периодической оплаты ли-цензии. Фактически это означает воз-можность приобрести ПО с трехлетней рассрочкой или вообще ничего не по-купать, а брать софт в аренду на три года с правом последующего продле-ния аренды или выкупа. Преимущес-тва очевидны: кардинальное умень-шение административных накладных расходов и распределение платежей во времени.

Microsoft Open LicenseПрограмма Open License предназна-чена для тех, кому необходимо при-обрести небольшое количество копий

(лицензий) одного или нескольких про-граммных продуктов 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 полу-чит бесплатно. Преимущества очевид-

Как переоформить лицензию Open License, если ваша компания меняет свое название или адрес?Если ваша компании приобрела продук-ты по Open License, меняет свое название или адрес и желает переоформить лицен-зию, то необходимо сделать следующее: Направить запрос на переоформление

лицензии в связи с изменением назва-ния (адреса) своему реселлеру. Необ-ходимо сообщить Authorization Number и License Number.

Microsoft выпишет дополнительный документ с указанием нового наиме-нования (адреса) заказчика. Этот до-кумент будет содержать водяной знак «Недействительно без исходной лицен-зии». Новый заказ размещать не нужно. Сроки соглашения Open License, набор продуктов и номер лицензии остаются без изменений. Какая-либо дополни-тельная оплата не производится.

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

Процедура передачи лицензии позво-ляет передать продукты, купленные по про-граммам корпоративного лицензирования, другому юридическому лицу. Для выполне-ния процедуры необходимо предоставить письменный запрос в адрес Инфоцентра Microsoft, включающий:

Письмо-запрос от заказчика – компа-нии, на которую выписана лицензия.

Подтверждение согласия с условия-ми Лицензионного соглашения Open License со стороны организации, кото-рой лицензия передается.

Ксерокопию передаваемой лицензии.

Инфоцентр Microsoft проверяет пра-вомерность передачи лицензии. В том случае, если передача возможна, Инфо-центр отправляет заказчику подтвержде-ние. Заказчик возвращает исходную ли-цензию своему реселлеру вместе с копи-ей письма-запроса и подтверждения Ин-фоцентра.

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

На передачу лицензии наложены сле-дующие ограничения: Должны быть переданы все лицензи-

онные сертификаты (отдельные лицен-зии), полученные под одним и тем же авторизационным номером, и все пра-ва на размещение дополнительных за-казов по этому номеру.

Если речь идет о лицензии на опера-ционные системы, то такая лицензия может быть передана только как часть программно-аппаратного комплекса.

13№1, январь 2007

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

Рисунок 4. Общая структура систем лицензирования коммерческих организаций

ны – новый и более дорогой продукт можно получить, заплатив 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) и лицензия

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 свет корпора-тивных программ не сошелся. Есть еще более интересные предложе-ния как по ценам, так и по возмож-ностям.

Но об этом – в следующей статье.Удачи!

14

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

Reporting Services: составляем отчеты

Павел Купцов

Ваш начальник требует отчета о трафике? Об итогах инвентаризации сети? Бухгалтерия умоляет помочь с отчетом в Excel? А вы можете предоставить только маловразумительный текстовый файл и рассуждаете о приобретении ERP-системы? Тогда, возможно, вы ещё не знаете о современных технологиях разработки отчетов.

15№1, январь 2007

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

Во многих организациях широ-ко применяется 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 и 2 должны сто-ять на одном компьютере, в то время как 3 и 4 компоненты могут быть уста-новлены где угодно.

Во время установки Reporting Services (далее RS) нужно будет вы-брать, где будет установлена БД сер-вера отчетов.

Для этого вы ука-жите: сервер SQL; п о л ь з о в а т е л я

с соответствую-щими привилеги-ями (для создания новых БД);

имя БД (можно ос-тавить по умолча-нию).

Инсталлятор, про-верив введенные дан-ные, создаст необхо-димые БД на указан-ном вами SQL-сер-вере.

Слу жбы RS ис -пользуют две базы данных SQL-серве-ра для внутренне-го хранения экземп-ляра сервера отче-тов: одну для хране-ния данных, а другую в качестве временно-го хранилища.

Эти базы данных создаются одновре-менно и связывают-ся по имени.

П о у м олч а н и ю базам данных при-

сваиваются имена соответственно reportserver и reportservertempdb.

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

Рисунок 1. Вид главной страницы веб-узла службы RS

Рисунок 2. Создание нового проекта в VS

Рисунок 3. Определение источника данных для проекта

16

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

это сообщение можно смело игнориро-вать. Для того чтобы в Visual Studio (да-лее VS) появились шаблоны для созда-ния отчетов – необходимо запустить установку RS на компьютере для раз-работки отчетов, инсталлятор устано-вит только шаблоны, и они станут до-ступны при создании проектов в VS.

зу данных. Параметры соединения задаются по нажатию кнопки «Edit» (см. рис .4).

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

Для наших примеров будем ис-пользовать тестовую базу данных Northwind, которая создается на сер-вере MSSQL в процессе его установ-ки. Структуру этой базы я не буду опи-сывать, при желании, изучить структу-ру этой базы, вы сможете самостоя-тельно. Название сервера баз данных в наших примерах будет CTX (у вас это может быть localhost или любое другое), в зависимости от того, где вы будете устанавливать службу RS. Для примеров можете использовать тот же SQL-сервер, где установили RS или любой другой в вашей сети, глав-ное – наличие на нем базы Northwind. Никаких особых настроек для этой БД делать не требуется.

Следующий шаг определяет строку запроса. По нажатию на кнопку «Edit» вызывается редактор Query Builder, хотя мне кажется это лишнее, запрос можно просто вставить в окно масте-ра (см. рис. 5).

Для первого отчета используем та-кой запрос:

Названия полей можно определять через псевдонимы (ключевое слово AS), если не делается выборка * (ALL), в последнем случае мастер сам назна-чит псевдонимы для полей.

В следующем шаге мастера выбе-рите тип отчета Tabular (табличный). Тип отчета Matrix (матричный) исполь-зуется для отчетов с перекрестными ссылками, о нем мы не будем говорить в нашей статье.

Шаг Design the Table определяет, какие поля запроса будут доступны для просмотра в отчете, каким обра-зом они будут группироваться.

Созданные отчеты можно просмат-ривать с помощью веб-соединения или как часть приложения Microsoft Windows или портала SharePoint. Ес-ли на сервере, куда вы устанавливаете RS, уже развернута служба SharePoint, то потребуется дополнительная на-стройка IIS, подробности будут сооб-щены инсталлятором в процессе ус-тановки.

Думаю, что с установкой службы RS вы справитесь. Примерную картину после установки смотрите на рис. 1.

О функционале этой страницы я скажу позже. Перейдем к самому ин-тересному – созданию отчетов.

Первый отчетИтак, установка службы на сервер прошла удачно, добавление шабло-на для разработки отчетов в VS вы-полнено. Теперь можно приступать к написанию первого отчета. Запус-каем VS и открываем новый проект (см. рис 2.).

Новый шаблон, который добавился в VS, называется Business Intelligence

Project. Запустить со-здание этого проекта можно в двух режи-мах, в режиме мас-тера и в обычном ре-жиме.

Для первого от-чета запустим созда-ние проекта в режи-ме «мастера» (Report Project Wizard). Пе-ред запуском мас-тера можно выбрать название для отчета (это будет название папки проекта), и его расположение.

Первый шаг «мас-тера» предлагает нам выбрать название для источника данных (это может быть лю-бое название), и па-раметры соединения (см. рис .3).

И с т о ч н и к д а н -ных можно сделать общим (Shared), это удобно, когда в про-екте несколько ви-дов отчетов исполь-зуют одну и ту же ба-

Рисунок 4. Окно редактирования свойств подключения

Рисунок 6. Выбор группировки полей в отчете

Рисунок 5. Строка запроса SQL, определяющая выборку данных для отчета

SELECT OrderID AS 'Номер заказа', ↵ OrderDate AS 'Дата заказа', ↵ RequiredDate AS ↵ 'Дата исполнения', ↵ Freight AS 'Стоимость'FROM OrdersWHERE CustomerID = (SELECT CustomerID FROM Customers WHERE CompanyName LIKE ↵ 'Familia%')

17№1, январь 2007

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

Поле Page определяет назва-ние страницы отчета, и в этом случае на каждой странице отчета будет оче-редной результат выборки.

Поле Group определяет поля запро-са, по которым осуществляется груп-пировка значений.

Поле Details определяет поля за-проса, которые будут выводится в от-чете (см. рис. 6).

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

списков (Enable drilldown), полезная опция в случае большого количест-ва сгруппированных данных;

возможность расчета промежуточ-ных итогов (Include subtotals).

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

Последний шаг, который мы выпол-ним, будет – определение внешнего ви-да отчета. Здесь уже все зависит от ва-ших цветовых и стилистических пред-почтений. На выбор дается пять вари-антов оформления. После этого шага нажмем в «мастере» кнопку «Finish» (пропустим шаг публикации отчета на сервере RS). Теперь назовем наш от-чет «Информация о заказах» и, пос-тавив галочку в «Preview report», наж-мем «Finish».

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

Работать с отчетом нам предстоит в основном в трех вкладках, это: Preview – для просмотра отчета. Layout – для редактирования

свойств таблицы и внешнего вида отчета.

Data – для редактирования тела за-проса и источника данных.

В поле Layout находится наиболь-шее количество полезных для нас на-строек. Их я опишу подробнее позже, когда мы будем создавать более слож-

Теперь переходим на вкладку «Layout», и кликнем правой кнопкой мыши на поле ниже нашей табли-цы (см. рис. 10). Переходим в пункт «Report Parameters». В открывшем-ся окне – вы увидите уже определен-ный параметр Company. Как видите, VS обработал наш запрос, и перемен-ные с префиксом @ автоматически за-считал как параметры, передающие-ся в запрос. В окне Report Parameters, можно опреде-лить несколь-ко полезных свойс тв д ля переменной. Здесь мы уже о п р е д е л я е м тип перемен-ной, значение по умолчанию, список доступ-ных значений, псевдоним для запроса поль-зователю и т. п. (см. рис. 11).

Н е м н о г о о т ф о р м а т и -руем таблицу отчета, и пе-рейдем к фи-нальной ста-

ный отчет. Сейчас же мы лишь немно-го подкорректируем ширину столбцов (это выполняется прос-тым перетаскивани-ем «мышкой» границ полей, как в Excel), и о т ф о р м а т и р у -ем свойства полей с датой и стоимос-тью. Для этого клик-нем правой кнопкой «мыши» в соответс-твующих полях и перейдем на пункт «Properties» (свойства). Откроется ок-но, в котором можно задать формат для данной ячейки (см. рис. 7).

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

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

Если при создании проекта в «мас-тере» вы пометили источник данных как общий, то в окне Solution Explorer у вас должна быть картинка примерно как на рис. 9.

Кликнем, правой кнопкой мыши на папке Reports и выберем пункт «Add New Report». Откроется привыч-ный «мастер», но мы уже можем ис-пользовать «Общий» источник дан-ных. Проходим все шаги «мастера» точно так же как и для первого от-чета, только изменим немного стро-ку запроса:

Те, кто знаком с Transact SQL, сра-зу же заметят ошибку в запросе. Пе-ременная @Company не объявлена и не типизирована. Но это особенность работы с VS и службой RS.

Рисунок 7. Выбор формата ячейки

Рисунок 8. Предпросмотр готового отчета в VS

Рисунок 9. Добавление нового отчета в проект

SELECT OrderID AS 'Номер заказа', ↵ OrderDate AS 'Дата заказа', ↵ RequiredDate AS ↵ 'Дата исполнения', ↵ Freight AS 'Стоимость'FROM OrdersWHERE CustomerID = (SELECT CustomerID FROM Customers WHERE CompanyName LIKE ↵ @Company+'%')

Рисунок 10. Доступ к списку параметров отчета

18

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

дии создания отчета – размещение его на сервере с RS.

Публикация отчетаПубликовать отчет на сервере можно двумя способами: Из VS (публикуется весь проект). Через веб-интерфейс RS.

Я рассмотрю второй способ, так как он дает большее понимание процесса публикации, чем непрозрачные дейст-вия VS.

Для размещения отчета, мы долж-ны через браузер зайти на страни-цу RS. На этой странице есть меню для операций с отчетами, источни-ками данных, и некоторой настрой-ки веб-узла. Первое, что я посовето-вал бы сделать, – разместить в отде-льной папке Источник данных. Для это-го создаем папку Data. При этом ста-

вим галочку «Hide in list view» (не отобра-жать в списке), что-бы она не отобража-лась в обычном пред-ставлении на веб-уз-ле (см. рис. 12).

В е р н у в ш и с ь на узел, мы не уви-дим созданную на-ми папку, до тех пор, пока не нажмем на кнопку «Show Details» (подробно). Перей-дем в папку Data и на-жмем кнопку «New

Data Source» (новый источник данных). Откроется окно для создания источни-ка данных. В поле Name, Description можно вводить произвольные данные, отметим пункт «Hide in list view и Enable data source», тип соединения выбира-ем SQL Server.

Данные в поле Connection String имеют следующий формат.

где: data source – Net-BIOS-имя серве-

ра MS SQL (это может быть как IP-адрес, так полное доменное имя сервера);

initial catalog – имя нашей БД на сервере.

Указываем имя пользователя и па-роль для доступа к БД и жмем «ОК».

Теперь можно загру-зить оба наших от-чета.

Для загрузки от-четов используем пункт «Upload File» (загрузка файла) . Из нашего проекта мы должны загрузить файлы с расширени-ем rdl. После загруз-ки файлов, перей-дем в свойства од-ного из загруженных отчетов.

На вкладке «Data source» (источник данных) нужно ука-зать созданный нами ранее источник дан-ных и нажать «Apply»

(см. рис. 13).Для отчета с параметром (вто-

рой отчет) будет доступна опция «Parameters», в которой можно перео-пределить некоторые значения. Каж-дому отчету можно установить лимит на выполнение, и разграничить до-ступ к нему по пользователям из Active Directory.

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

Теперь можно запускать отчеты на выполнение, по вкладке «View» (см. рис. 14).

Сформированный отчет можно эк-спортировать в 7 форматов, в их чис-ле Excel, PDF, XML, html и т. п.

РезюмеОтчеты – важная составляющая функ-ционала любой базы данных. Удобный инструмент для их разработки должен иметь, как минимум, 3 качества: Позволять пользователю выбирать

параметры для запроса. Уметь разграничивать доступ к раз-

личным отчетам. Экспортировать в различные фай-

ловые форматы результаты запро-са.

Всеми этими свойствами система обладает.

Минусы этой системы очевидны: высокая стоимость. Использование ре-шений на основе Open Source гораздо дешевле для внедрения и использова-ния, но лично мне неизвестны подоб-ные Open Source-проекты, учитывая, что мы рассмотрели лишь вершину ай-сберга этой технологии.

1. http://msdn2.microsoft.com/ru-ru/library/ms166344.aspx.

2. ht tp : / /c i t forum.ru /database /mssql /reporting_services.

data source=CTX; ↵ initial catalog=Northwind

Рисунок 11. Редактирование свойств переменной

Рисунок 12. Создание папки на веб-узле RS

Рисунок 14. Так выглядит отчет, размещенный на сервере RS

Рисунок 13. Назначение источника данных для отчета

19№1, январь 2007

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.Решение: Установите последнюю версию с сайта произ-водителя.

Множественные уязвимости в 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) с сайта производителя.

Составил Александр Антипов

Несколько уязвимостей в антивирусе 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 или более высокую версию.

20

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

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

нии. Решить эту проблему можно по-разному.

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

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

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

новлении, отслеживании изменений в конфигурации оборудования. Хо-рошо, если в сети 10-20 компьюте-ров. Гораздо хуже обстоит дело, ес-ли имеется крупная сеть свыше 500 компьютеров. В этом случае отсле-дить все производимые изменения затруднительно.

Несколько лучше обстоят дела, ког-да вместо табличного редактора ис-пользуется программа на базе попу-лярной системы управления базами данных, например 1С. В этом случае значительно облегчен поиск данных, производится проверка дублирова-

Как быстро и эффективно провести учет компьютерной техники

Алексей Бережной

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

21№1, январь 2007

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

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

И, наконец, третий вариант – вос-пользоваться программой для авто-матического сбора информации об аппаратной конфигурации компьюте-ров с последующим занесением в ба-зу данных. Этот вариант имеет следу-ющие преимущества: сбор конфигура-ции производится автоматически и тре-бует лишь небольшого редактирования в дальнейшем. Хранение информации в формате базы данных значительно облегчает последующее построение отчетов. Автоматическое обновление информации о конфигурациях компью-теров позволяет повысить оператив-ность при работе с базой данных.

Сегодня речь пойдет о программном комплексе CheckCfg + Sklad. Автор этих программ – Андрей Татуков. Офици-альный сайт: http://checkcfg.narod.ru/index.htm.

Идеология использованияПрограмма CheckCfg анализирует кон-фигурацию компьютера и записывает полученную информацию в файл.

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

Что сразу немного не понравилось – для запуска программы Sklad_2.exe требуется установить Borland Database Engine (BDE). Хотя это не проблема, по-тому что установочный вариант с инс-трукцией выложен на сайте программы по адресу: http://checkcfg.narod.ru/soft/bde_all.zip. Нужно только скачать и рас-паковать этот архив в каталог Windows и запустить файл install.bat.

Устанавливаем программыТеперь рассмотрим работу програм-много комплекса более подробно на примере.

Мы настроим программы CheckCfg и Sklad для дальнейшей работы, со-здадим шаблон некой организации и на его основе рассмотрим проце-дуры занесения информации в базу данных, ее редактирование и созда-ние отчетов.

У нас в сети имеется компьютер Comp1 с папкой для общего доступа Program. Программа CheckCfg распо-ложена в этой папке. Таким образом, путь к программе CheckCfg: \\comp1\programs\checkcfg. Настроим автома-тический запуск программы на ком-пьютерах клиентов. Способов для это-го существует масса: добавить ярлык в «Автозагрузку» (StartUp), помес-тить соответствующий ключ в реестр или организовать запуск стартового скрипта через GPO. При каждом стар-те компьютеров программа CheckCfg будет обновлять файлы c результата-ми работы. Найти их можно в катало-ге \\comp1\programs\checkcfg\date. Ка-талог будет создан при первом запус-ке программы CheckCfg. По умолча-нию эти файлы носят названия, соот-ветствующие MAC-адресам сетевых карт компьютеров. Мы предполагаем, что программа Sklad будет запускать-ся с компьютера Comp1. Поэтому боль-шинство путей настроек будет указа-но в виде c:\programs\checkcfg. В слу-чае, если предполагается иная конфи-гурация сети, в настройках програм-мы должны быть указаны соответс-твующие пути.

Распакуем программу Sklad в ката-лог c:\programs\Sklad. Остается только прописать пути к файлам, созданным

в результате проверки CheckCfg. В на-шем случае c:\programs\checkcfg\date.

Создаем структуру компанииПеред первым запуском программы вас поприветствуют и вежливо побла-годарят за ее использование. После этого вам предложат создать пример структуры на базе некоего абстракт-ного предприятия. Лучше согласить-ся на этот шаг, чтобы у вас перед гла-зами был понятный образец. А ненуж-ные элементы всегда можно удалить. Мы же будем использовать получившу-юся структуру в качестве примера для иллюстрации работы программы.

Наконец, мы добрались до пер-воначального окна программы Sklad (см. рис. 1).

Окно программы напоминает окно обычной MMC-консоли Windows. Точно так же вверху мы видим меню програм-мы, справа – дерево объектов (контей-неров), слева – информацию о выбран-ном объекте. Внизу находится панель инструментов, позволяющая нам со-хранить сделанные изменения, найти нужный объект в дереве, вставить но-вый объект в соответствующий контей-нер. Манипулировать объектами мож-но при помощи мыши или используя пункт меню «Навигация».

Рисунок 1. Окно первого запуска программы Sklad

Основные возможности совместного использования программ CheckCfg и Sklad Сбор данных об аппаратной и програм-

мной конфигурации. Автоматическое занесение полученной

информации в базу данных. Легкость настройки программы и ре-

дактирования данных.

Применение гибкой конфигурации уче-та компьютерной техники вашей орга-низации.

Занесение информации о ремонтах и модернизациях.

Генерация отчетов. Приятные мелочи, полезные для сис-

темного администратора.

22

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

Благодаря созданию примера структуры предприятия у нас не пустое окно, а уже созданные подразделения: «Дирекция» и «Бухгалтерия», содер-жащие соответствующие контейнеры пользователей: Иванов Иван Иванович и Петров Петр Петрович с Сидоровым Сидором Сидоровичем соответствен-но. Также на нижней панели есть кноп-ка удаления и checkbox для разреше-ния автосохранения. Последняя кноп-ка с изображением собачки на нижней панели означает выход из програм-мы. (Пользователям программы нужно привыкнуть, что рисунок собачки озна-чает то же самое, что и «Выход».)

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

Добавлять организационные еди-ницы в виде отделов и сотрудников, а также компьютеры, мониторы и дру-гие объекты можно, используя ме-ню «Навигация → Добавить» или на-жав правую клавишу мыши, выбрать из появившегося меню соответствую-щий пункт. Но для иллюстрации рабо-ты программы нам вполне хватит и по-лучившейся структуры.

Заносим информацию в базу данныхТеперь нам нужно занести в базу данных существующие конфигура-ции компьютеров. Для этого нужно из меню «File» выбрать пункт «Нас-тройки → Настройки CheckCfg». По-является окно с напоминанием того,

что мы должны указать путь к файлу checkcfg.ini. В этом окне в правом вер-хнем углу щелкаем мышкой на кноп-ке «Настроить» и в новом окне вво-дим путь к файлу checkcfg.ini, создан-ному программой CheckCfg, в нашем случае – c:\programs\checkcfg. Клик-нем мышкой на кнопке с изображе-нием собачки и возвращаемся в окно «Настройки CheckCfg». После указания пути к файлу checkcfg.ini у нас в поле «Каталог для выходных данных» появи-лось соответствующее значение.

Нам остается только закачать дан-ные, получившиеся после работы CheckCfg, в программу Sklad. Для этого выбираем меню «File → Обновить дан-ные… → Всего предприятия». Здесь нам снова необходимо выбрать путь нахождения файлов с результатами работы программы CheckCfg. Щелкаем мышкой на верхнюю кнопочку с изобра-жением открытой папки. В появившем-ся окне выбора выбираем путь к фай-лам, созданным программой CheckCfg. Потом нажимаем мышкой на кнопку «< Добавить». И после всего активизи-руем процесс закачки файлов, нажав на кнопку «Пуск» в данном окне.

Далее программа попросит под-твердить возможность создать ката-лог sklad.tmp для хранения времен-ных файлов. (Честно говоря, я не ви-жу причин, из-за которых мы должны отказаться.)

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

ев особой роли не играют, поэтому ос-тавляю этот шаг на ваше усмотрение.

Всё, данные внесены, теперь мо-жем приступить к распределению компьютеров по ответственным со-трудникам.

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

Избежать этого можно, создав внут-ри контейнера сотрудника хотя бы один объект вручную. Поэтому мы пойдем на небольшую хитрость: сначала созда-дим внутри контейнеров пользователей объекты типа «Примечание», а потом уже будем перетаскивать на них кон-тейнеры компьютеров. Почему имен-но «Примечание»? Мы могли бы сразу создать что-то более полезное, напри-мер объект типа «Монитор». Пока речь идет о рабочих станциях, это выглядит логичным. Но если понадобится учиты-вать серверное оборудование и т. п., мо-ниторов, принтеров и другого перифе-рийного оборудования, в данном слу-чае может и не быть. Нажимаем правой кнопкой мыши на контейнере соответс-твующего пользователя, выбираем из меню пункт «Добавить». Из появивше-гося окна выбираем объект «Примеч.». Нажимаем кнопку «Добавить». Теперь объект «сотрудник» с именем «Иванов Иван Иванович» превратился в полно-ценный контейнер, и в него можно по-местить другие объекты и контейнеры, например, объект компьютер.

Перетаскиваем мышкой на объект «Примечание» значок компьютера. По-является окно с вопросом, например: «Переместить Computer1 перед << Текст Примечания >>». Подобные манипуля-ции необходимо провести над всеми контейнерами пользователей. В ито-ге должно получиться что-то похожее на окно, изображенное на рис. 2.

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

Рисунок 2. Распределенная техника

Рисунок 3. Окно просмотра журнала

23№1, январь 2007

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

жав в левой части окна вкладку «До-полнительно», заполняем следующие поля: «Модель», «Заводской номер», «Дата прихода», «Стоимость», «Пос-тавщик», «Накладная №», «Гарантия до», «Инв. №», «Пломба №», «№ поме-щения», «№ раб. места», «Должность», «Телефон» (если необходимо), «ФИО мат. отв.» (Фамилия Имя Отчество ма-териально ответственного лица).

Следует отметить, программа Sklad не так уж проста, как кажется. Боль-шинство действий, производимых в программе, регистрируются в жур-нале. Просмотреть журнал можно, вы-брав пункт меню «Навигация → Про-смотреть журнал».

Пример выполненных перемеще-ний, занесенных в журнал, приведен на рис. 3.

Формируем отчетыПосле занесения информации в базу данных мы можем начать строить от-четы. Отмечу, что помимо просмотра все отчеты можно сохранять в форма-тах: RTF, формате с разделителями для импорта в Excel и в обычном тек-стовом файле.

Первое, что нас интересует, это статистика о том, какое оборудование и программное обеспечение использу-ется на предприятии.

Для этого существует меню «От-четы → Своды», далее из подменю со списком сводов выбираем пункт «Свод по предприятию». Это общий перечень оборудования, использую-щегося на предприятии. Внешний вид получившегося документа смотрите на рис. 4. Чтобы сохранить получен-ные результаты, нужно нажать мыш-кой кнопочку с изображением диске-ты внизу окна.

Пункт «Свод по отделу» формиру-ет аналогичный свод в рамках одно-го подразделения. Для выбора соот-ветствующего отдела нужно выбрать мышкой нужное подразделение в де-реве объектов.

Следующий документ, который нам не менее интересен – «Свод по вла-дельцам». Любому системному адми-нистратору хотя бы раз в год необходи-мо знать, какое оборудование исполь-зуется конкретным пользователем.

И еще один полезный для сис-темных администраторов пункт меню «Своды → Свод по программам». Осо-

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

Еще очень полезная функция – «Учетная карточка технических средств». Для того чтобы напечатать учетную карточку, необходимо пред-варительно выделить интересующий компьютер. Потом выбираем пункт меню «Отчеты → Учетная карточка». Теперь можно распечатать карточку и вручить пользователю под роспись.

Функция «Паспорт компьютера» вызывается аналогичным образом –

выбираем нужный компьютер, по-том меню «Отчеты → Паспорт ком-пьютера». Выводится длинный пере-чень технических характеристик все-го, что установлено, в том числе нас-тройки SMTP и POP3-протоколов поч-тового клиента и многое другое. Пре-красный способ держать «руку на пуль-се», контролируя вверенные сетевые и локальные ресурсы.

И наконец, теперь переходим к главному. Ведомость инвентариза-ции. Выбираем «Отчеты → Инвентари-зация… → Инвентаризационная ведо-мость». Появится окно с возможностью выбора характеристик, по которым бу-дет проводиться инвентаризация. От-мечаем необходимые пункты, которые мы хотим увидеть в инвентарной ведо-мости. Определяем формат вывода: файл, совместимый с Excel или DBF. Поскольку формировать ведомость будем в Excel, выбираем соответству-ющий пункт. Нажимаем мышкой кно-почку «Сформировать». Появится ок-но с предложением выбрать имя сохра-няемого файла.

Вводим нужное нам имя файла и получаем текстовый файл, пригод-

Рисунок 4. Свод компьютерной техники по предприятию. Окно сохранения в различных форматах

Рисунок 5. Образец инвентаризационной ведомости

24

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

ный для открытия в Excel. Образец файла смотрите на рис. 5.

С такой ведомостью и в бухгалте-рии показаться не стыдно.

Учет ремонтов, модернизаций и инспекцийПомимо учета установленного обо-рудования по факту программа Sklad умеет вести учет ремонтов, модерни-заций, а также выводить статистику о проведенных инспекциях. Для ил-люстрации этого создадим записи о ремонте и модернизации одного ком-пьютера. Потом введем информацию о проведенной инспекции. И построим соответствующие отчеты.

Раскрываем учетную единицу «со-трудник» «Петров Петр Петрович» в подразделении «Бухгалтерия». Выби-раем объект Computer2. В правой сто-роне окна выбираем вкладку «Допол-нительно». Внизу окна есть поля для ввода дополнительной информации. Отмечаем пункт «Ремонты» и нажима-ем кнопочку «Добавить» внизу окна или выбираем пункт меню «Навигация → Добавить». Программа задаст вопрос «Создать новую запись в журнале Ре-монты?» После утвердительного отве-та создается запись с соответствую-щим порядковым номером и текущей датой. Изменить номер и дату можно, повторно щелкнув мышкой на имени записи. После этого введем необходи-мые значения в поля «Ремонтирующая организация», «Характер неисправнос-ти», «Стоимость ремонта», «Дата полу-чения из ремонта» и нажимаем кнопоч-ку «Записать». Аналогичную операцию проделаем, перейдя на объект Monitor в организационной единице «сотруд-ник» «Иванов Иван Иванович» в под-разделении «Дирекция». Все, теперь можем построить отчет о ремонтах.

Для этого выбираем меню «Отчеты → Журналы → Ремонты». Получившийся отчет можно увидеть на рис. 6.

Аналогичным образом поступаем и в случае учета модернизаций. Выде-ляем необходимый объект, в данном случае снова Computer2. Выбираем вкладку «Дополнительно». Внизу, в ок-не ввода дополнительной информации выделяем пункт «Модернизации». Ана-логичным образом, как и в случае с вво-дом информации о ремонтах, добав-ляем новую запись в журнал модерни-заций. Заполняем необходимые поля: «Модернизируемый блок», «Описание работ по модернизации», «Стоимость работ», «Кем проводились работы». Теперь пробуем построить отчет. Вы-бираем меню «Отчеты → Журналы → Модернизации». Внешний вид отчета очень похож на отчет о ремонтах.

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

Приятные мелочи для системного администратораСтоит обратить ваше внимание на не-сколько забавных, на мой взгляд, функций подменю «Администратору сети» из меню «Отчеты». Одна из них «Hosts» (вызывается «Отчеты → Ад-

министратору сети → Hosts») форми-рует нормальный рабочий файл Hosts, вполне пригодный к использованию (напомним, что этот файл использо-вался в сетях TCP/IP до изобретения служб DNS и используется по сей день в малых сетях, не имеющих собствен-ного DNS-сервера).

Пример файла hosts:

Еще очень полезная функция – формирование файла с перечнем имен компьютеров и соответствующими MAC и IP-адресами. Вызывается эта функция через меню «Отчеты → Адми-нистратору сети → MAC and IP-addr».

Пример формируемого файла mac_ip.txt:

Очень удобная вещь, особенно при настройке DHCP-сервера.

И последняя функция Static IP. Вы-зывается через меню «Отчеты → Ад-министратору сети → Static IP». На мой взгляд, не очень нужна, ибо практичес-ки дублирует функцию mac_ip.txt. Вид формируемого файла staticip.txt при-веден ниже:

РезюмеМы рассмотрели большой объем функ-ций, предоставляемых программным комплексом CheckCfg + Sklad. Для спе-циалистов IT-подразделений появи-лась возможность сэкономить массу времени, воспользовавшись этим про-граммным комплексом. Только пред-ставьте себе, что всё проделанное при-шлось бы делать по старинке, вручную занося данные о компьютерах в элект-ронную таблицу.

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

Рисунок 6. Журнал ремонтов

# Local hosts192.168.9.31 COMP1192.168.9.32 COMP2192.168.9.33 COMP3

# MAC IP Host0006298FC845 192.168.9.31 COMP1000A5E6416D2 192.168.9.32 COMP200C026AC48DB 192.168.9.33 COMP3

# Static IP-address192.168.9.31 COMP1 0006298FC845192.168.9.32 COMP2 000A5E6416D2192.168.9.33 COMP3 00C026AC48DB

26

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

Ставим задачуВ предыдущей статье [1] мы разобра-лись с основными моментами раз-вертывания межсетевого экрана ISA Server 2004 при подключении к Ин-тернету, предоставили доступ в Ин-тернет из локальной сети. Теперь на-стало время организовать удаленный доступ к локальным ресурсам.

Предположим, у нас есть некото-рое веб-приложение, например, сис-тема заказов on-line. Нужно организо-вать защищенный доступ к этому ре-

сурсу с помощью SSL. Также сотруд-ники компании ездят в командировку и иногда работают из дома, поэтому им необходимо предоставить доступ по VPN. А еще у компании есть фили-ал, сотрудникам которого также тре-буется доступ в локальную сеть цен-трального офиса. Приступим к реше-нию всех этих задач.

Защищаем веб-трафикИтак, нам необходимо организовать защищенный доступ к веб-ресурсам

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

Настраиваем удаленный доступ к сети с помощью MS ISA 2004

Возможность доступа к необходимым бизнес-ресурсам из любой точки мира – одно из условий успешной работы компании. Но это не должно быть в ущерб безопасности. Рассмотрим реализацию технологий удаленного доступа с помощью MS ISA 2004.

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

27№1, январь 2007

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

кованном веб-сервере и затем связать этот сертификат с сервером 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-протокола. Причиной этому является то, что многие системные админис-траторы плохо знакомы с этими тех-нологиями и предпочитают обходить-

ся без них. Однако на самом деле все не так уж и сложно.

Служба С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Межсетевой экран ISA должен быть способен выдать себя за опубли-кованный веб-сер-вер и идентифи-цировать себя на удаленном клиенте как опубликован-ный сервер. Дру-гими словами, ISA становится посред-ником при созда-нии защищенного соединения между удаленным клиен-том и веб-сервером. Ключевым компо-нентом такой ими-тации служит пол-ное доменное имя

(FQDN) веб-сайта, на который выпи-сывается сертификат. Для выполнения этой задачи нужно установить серти-фикат веб-сайта на сервере ISA. Пер-вый шаг – экспорт сертификата с сай-та защищенного веб-сервера. [3]

Когда экспортируете сертификат, убедитесь, что включен приватный ключ. Одна из самых распространен-ных причин отказа в работе правил публикации веб-серверов – экспорт сертификата веб-сайта без его при-ватного ключа.

Затем сертификат веб-сайта им-портируется в хранилище сертифика-тов на сервере ISA.

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

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

Так как нельзя воспользоваться ос-насткой Certificates (Сертификаты) кон-соли ММС для запроса сертификата учетной записи, воспользуемся воз-

Рисунок 1. Редактирование системных политик

28

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

можностью импортировать пользова-тельский сертификат, применяя веб-сайт регистрации. Чтобы запросить сертификат для брандмауэра ISA с веб-сайта регистрации, мы должны снача-ла создать учетную запись пользова-теля для сервера ISA. Создайте учет-ную запись пользователя с именем isafirewall в службе каталогов Active Directory до выполнения следующих процедур.

Далее необходимо выполнить сле-дующие шаги, чтобы запросить сер-тификат для учетной записи сервиса Firewall. Для этого откройте консоль администрирования ISA, на вклад-ке «Tasks» выберите «Show System Policy Rules». В списке «System Policy Rules» щелкните правой кнопкой мы-ши «Allow all HTTP traffic from ISA Server to all networks (for CRL downloads)» и левой кнопкой мыши команду «Edit System Policy». Тем самым мы разре-шили весь HTTP-трафик от брандма-уэра ISA ко всем сетям, для загрузок списков сертификатов пользователей. Нажмем кнопку «Apply» для сохране-ния изменений и обновления полити-ки брандмауэра. Затем применим но-вую конфигурацию, нажав «Apply New Configuration» (рис. 1).

Мы сконфигурировали межсете-вой экран для предоставления серти-фиката пользователя. Теперь необхо-димо получить сертификат. Для этого откройте браузер на сервере ISA и вве-дите http://<certificateserver>/certsrv, где certificateserver – имя или IP-ад-рес ЦС предприятия в корпоративной сети. В диалоговом окне «Connect to» введите верительные данные учетной записи isafirewall и щелкните мышью кнопку «ОК».

Далее на страни-це «Welcome» щелк-ните кнопкой мыши на ссылку «Request a certificate». Затем в ы би рае м «Use r Certificate». Устанав-ливаем сертификат, нажав «Install this certificate» (рис. 2).

После установ-ки сертификат не-обходимо экспор-тировать, для этого в разделе браузе-ра «Internet options»

зайдите на вкладку «Content», далее «Certificates». Выбрав isafirewall, на-жмите кнопку «Export». Экспорт не-обходимо осуществлять вместе с сек-ретным ключом, указав «Export Private Key». После этого, указав пароль для файла сертификата, мы получа-ем необходимый файл.

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

Наконец, приступаем к завершаю-щему этапу подготовки к публикации веб-ресурса по протоколу SSL, им-портируем сертификат в учетную за-пись сервиса Firewall. Для этого от-кройте новую консоль MMC, выбери-те в меню «File» опцию «Addr/Remove Snap-in», далее оснастка Certificates. После подключения оснастки выби-райте параметр «Services account». За-тем – сервис Microsoft Firewall из спис-ка Service account.

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

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

Делается это следующим образом. В консоли администрирования открой-

те узел Firewall Policy, затем выбери-те вкладку «Tasks», далее «Publish a Secure Web Server» (опубликовать защищенный веб-сервер). После это-го вам предстоит ответить на вопро-сы мастера установки. Здесь почти все действия аналогичны публика-ции веб-ресурса без использования SSL, описанного в [1]. Какие отличия? На странице Publishing Mode есть два переключателя: SSL Bridging и SSL Tunneling (рис. 3).

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

Что же касается SSL-туннелирова-ния, то в этом режиме ISA не может осуществлять контроль за проходящим через него контентом. Поэтому старай-тесь не использовать тунеллирование до тех пор, пока не потребуется опуб-ликовать приложения, не совместимые с веб-прокси HTTP 1.1.

Подробнее о SSL-bridging и SSL-tunneling можно прочесть в статье [4].

На странице Bridging Mode (режим сопряжения) есть три переключателя: Secure connection to clients (защи-

щенное соединение с клиентами); Secure connection to Web server

(защищенное соединение с веб-сервером);

Secure connection to clients and Web server (защищенное соедине-ние с клиентами и веб-сервером).

Вариант Secure connection to clients устанавливает соединение как сопря-

Рисунок 2. Редактирование системных политик

29№1, январь 2007

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

жение 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-соеди-нений: клиент-сервер и узел-узел.

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

Второй вариант позволяет соеди-нять сети через защищенный тун-нель.

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

Выбор протоколаСледующий аспект – это протокол, ис-пользуемый для VPN-соединения.

Для соединения узел-узел мож-но использовать PPTP и L2TP/IPSEC, но большинство разработанных сто-ронними фирмами VPN-шлюзов не под-держивают протоколы PPTP и L2TP/IPSec для межшлюзовых VPN-каналов. Вместо этого они требуют применения туннельного режима протокола IPSec для VPN-соединения. Межсетевой эк-ран ISA 2004 в отличие от предыдущей версии ISA 2000 поддерживает тун-нельный режим про-токола IPSec, таким образом позволяя создавать VPN-со-единения узел-узел меж ду VPN-шлю-зом ISA и шлюзом стороннего произ-водителя. Кроме то-го, что вы можете применять прото-кол РРТР или прото-кол L2TP/IPSec с вы-соким уровнем за-щиты для создания каналов типа узел в узел между дву-мя ISA Server/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/

Рисунок 3. Публикация защищенного веб-ресурса

30

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

VPN-сервером.VPN-шлюзы ОС Windows 2000

и Windows Server 2003 также можно настроить для применения секрет-ного ключа и установки соединений узел в узел.

Секретные ключи являются попу-лярным средством аутентификации. Их преимущество – простота первона-чальной настройки, так как достаточ-но лишь распространить ключ между участниками соединения.

Однако имеется и ряд недостат-ков. Например, при использовании в соединениях клиент-сервер, в слу-чае изменения ключа на сервере, не-обходимо будет вручную внести из-менения на всех клиентах, в против-ном случае установка соединения бу-дет невозможна.

Другим средством аутентификации является использование инфраструк-туры открытого ключа PKI (Public Key Infrastructure). Технология использует сертификаты, о которых уже шла речь

в первой части этой статьи [1], поэтому в примерах настроек, приведенных да-лее, не будем рассматривать исполь-зование PKI. Подробнее об этом спо-собе вы можете прочитать в [5].

Другим возможным вариантом реализации VPN является использо-вание протокола PPTP, для которо-го не требуется ни PKI, ни pre-shared key. Об этом методе и пойдет речь далее.

Приступая к реализации, прежде всего определимся с вариантами раз-вертывания VPN. Будем организо-вывать сначала доступ по VPN в ло-кальную сеть организации для уда-ленных клиентов, а затем реализу-ем соединение узел-узел для филиа-ла компании.

Клиент-серверПервым делом при организации VPN-подключения клиентов необходимо в консоли администрирования ISA вы-брать меню «Tasks» (задачи) и затем «Enable VPN Client Access». Затем не-обходимо применить изменения, на-жав «Apply New Configuration».

Настройка VPN-сервераНа вкладке «Tasks» выбираем «Configure VPN Client Access», далее на вклад-ке «General» в диалоговом окне «VPN Clients Properties» измените значение параметра «Maximum number of VPN clients allowed» с 5 на 10 (рис. 4).

Версия Standard Edition брандмау-эра ISA поддерживает до 1000 парал-лельных VPN-соединений.

Далее добавляем группы, вы-брав вкладку «Group» и нажав кноп-ку «Add». В диалоговом окне «Select

Groups» нажимаем кнопку «Locations», указываем домен, потом нужно ука-зать группу пользо-вателей, которым буд е т р а з р е ш е н удаленный доступ. В общем случае это может быть группа Domain Users.

Обращаю ваше внимание на то, что сервер ISA должен быть членом доме-на. Если он не на-ходится в домене,

то для подтверждения подлинности можно использовать RADIUS-аутенти-фикацию или локальные группы поль-зователей.

На вкладке «Protocols» устанавли-ваем «Enable РРТР». Тем самым со-единение будет осуществляться с по-мощью PPTP. Затем включаем «User Mapping» и флажок «When username does not contain a domain, use this domain», указав имя домена. Эта опция полезна в случаях, когда было введено только имя пользователя, без домена.

Далее необходимо применить из-менения. Теперь на вкладке «Tasks» щелкните кнопкой мыши строку «Select Access Networks». В диалого-вом окне «Virtual Private Networks (VPN) Properties» выберите вкладку «Access Networks».

Обратите внимание на то, что уста-новлен флажок «External» (внешняя). Это означает, что внешний интерфейс ожидает входящие соединения от VPN-клиентов.

Настройка IP-адресацииЭто важный шаг, в случае невер-ной настройки проблемы с доступом для VPN-клиентов обеспечены. Вы-бираем вкладку «Address Assignment», в раскрывающемся списке указыва-ем «Use the following network to obtain DHCP, DNS and WINS services» элемент «Internal». Затем выбираем вклад-ку «Authentication» (аутентификация) Должен быть установлен только фла-жок «Microsoft encrypted authentication version 2 (MS-CHAPv2)».

Необходимо применить настрой-ки, нажав «Apply», и перегрузить сер-вер ISA. После перезагрузки ISA полу-чит блок IP-адресов от DHCP-сервера во внутренней сети.

Доступ для VPN-клиентовСоздается как стандартное правило доступа, где в качестве исходящих протоколов указываются All Outbound protocols, а в качестве источника в пра-виле доступа – VPN Clients.

Настройка доступа по VPN на кли-ентской машине производится с помо-щью стандартного мастера Windows.

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

Рисунок 4. Разрешаем доступ клиентам по VPN

Рисунок 5. Создаем сеть «узел-узел»

31№1, январь 2007

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

сам локальной сети удаленному офи-су. Для этого мы воспользуемся со-единением с использованием PPTP (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 мастер создания нового правила до-ступа. Далее стандартный процесс со-здания правила, в качестве сети на-значения также указываем удаленный офис. После завершения работы мас-тера необходимо предоставить доступ

VPN-клиентам. Для этого в закладке «VPN-Clients» указываем «Enable VPN Client Access».

Шаг 4. Создайте в центральном офисе учетную запись VPN-шлюзДля этого необходимо, чтобы у учет-ной записи пользователя было то же имя, что и у интерфейса вызова по тре-бованию. То есть необходимо создать локальную учетную запись на серве-ре ISA, имя которой будет совпадать с именем интерфейса. В свойствах этой учетной записи нужно разрешить доступ Dial-In.

Шаг 5. Сконфигурируйте межсетевой экран ISA в филиалеДля этого необходимо повторить те же шаги, что и для центрального офиса, с той лишь разницей, что начинать на-до с создания сети удаленного офиса на брандмауэре филиала.

Шаг 6. Создайте сетевое правило в филиалеЗдесь действия будут аналогичны про-изведенным при настройке правил для центрального офиса, только сеть-источник и сеть-назначения меняют-ся местами.

Шаг 7. Создайте правила доступа в филиалеЭто правило также аналогично создан-ному ранее для центрального офиса.

Шаг 8. Создайте в филиале учетную запись VPN-шлюзаПрежде всего создаем учетную запись пользователя, которую VPN-шлюз цен-трального офиса сможет использовать для аутентификации при установке со-единения. Имя также должно совпа-дать с именем интерфейса.

Шаг 9. Активизируйте каналы типа узел в узелДля активизации соединения необхо-димо с рабочей станции, находящей-ся в удаленном офисе, попытаться про-пинговать узел в сети главного офиса. Если соединение конфигурации узел в узел заканчивается неудачей, убе-дитесь, что вы правильно определи-ли назначения допустимых IP-адресов для VPN-клиентов и шлюзов.

Обычная причина сбоев VPN-со-единений заключается в том, что сер-веры ISA не могут получить адрес от DHCP-сервера и нет адресов, от-веденных для пула статических ад-ресов. В этой ситуации ISA назна-чает VPN-клиентам и шлюзам IP-ад-реса в диапазоне автосети (APIPA, 169.254.0.0/16).

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

Завершая разговорИтак, мы рассмотрели возможнос-ти межсетевого экрана 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/p r o d t e c h / w i n d o w s s e r v e r 2 0 0 3 /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.

32

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

Подробное руководство по настройке тонких клиентовНа основе дистрибутива Thinstation

и протокола NX

Часть 2

В №12 за 2006 г. вы прочтёте о том, как собрать серверную часть NX и настроить дистрибутив Thinstation для работы с ней. Сегодня разберёмся каковы особенности эксплуатации, дополнительные настройки NX и Thinstation и как решать встречающиеся проблемы.

Евгений Бушков

33№1, январь 2007

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

Доработка функционального окна VNCПри использовании VNC управление сеансом по умолча-нию осуществляется клавишей <F8>. В нашей компании пользователи используют dosemu c Dos Navigator, в нем ак-тивно используется эта клавиша. Чтоб избежать конфлик-та, я подправил в исходниках файл /nx_build_dir/nxviewer/nxviewer/argsresources.c. Укажу, какие строчки я отредак-тировал:

Таким образом, функция вызова меню VNC переназна-чается c <F8> на <F12>, вместо 6 доступных в меню строк осталось только 2: закрыть меню при случайном нажатии «Close» и послать код <F12>, если вдруг встретилась та-кая функциональная клавиша. Если вы не используете VNC-агента nxviewer, то вам это не пригодится.

Проблема связки NX, Thinstation, FirefoxПочему я стал использовать nxviewer? Сам по себе NX ра-ботает замечательно и в режиме приложений, и в режи-ме работы с удаленным рабочим столом. Но вот что вы-яснилось: при работе в Firefox на внутреннем сайте на-шей компании встречаются страницы, необходимые для работы, размером от 400 Кб и больше. Во время вывода таких страничек на экран изображение останавливает-ся, и тонкий клиент перестает отвечать на запросы («ве-шается»).

Что я только не делал: менял сочетания версий Firefox, Thinstation, NX, менял настройки Firefox в строке «about:config», задавал вопросы в форумах. Ничего не помогло, большие странички от 400 Кб вызывают проблему. Причем эти же страницы нормально отображаются в Opera, но это противоречит нашей ориентации на открытый Firefox. Со-здалось ощущение, что это связано с особенностями движ-ка данного браузера.

Тогда пришлось перейти к использованию RVB/VNC-сессий в NX: на NX-сервере в настройках сервиса xinetd включается VNC-сервер. В первой части статьи (см. №12 за 2006 г.) на рисунке 3 показаны файлы настроек сес-сий NX и TUX1C. В итоге там, где нужен Firefox, я исполь-зую VNC-сессии в NX, во всех остальных случаях – обыч-ный режим NX.

Основным недостатком использования VNC являет-ся необходимость дважды вводить пароль: в окошке при-глашения NX-клиента, а потом при авторизации с помо-щью оконного менеджера, например KDE, при соединении с VNC-сервером. Но на скорости работы это почти не отра-жается, так что все сказанное об NX справедливо и для сес-сий VNC под NX.

Настройки VNC-сессии NX-клиента вы можете посмот-реть на рис. 1.

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

Например, у меня для запуска программы 1С под эму-лятором WINE применяется sh-скрипт /usr/bin/1c, в ко-тором используются некоторые проверки, подключает-ся нужный шрифт, вносятся изменения в реестр с помо-щью reg-файла (для указания названий и путей баз 1С), и перед запуском самого 1С выполняется указанная вы-ше строчка. При запуске сессии удаленного стола можно также выполнить эту строчку в стартовых скриптах до-машнего каталога (~/.profile или ~/.bashrc) или системы (/etc/bash.bashrc.local).

Тогда всё должно наладиться.

Использование дисковых устройств тонких клиентовЕще одна тонкость. Если пользователям необходимо об-ращаться к дискетам или локальному диску с разделом FAT16 (32) на своих тонких клиентах, то придется разо-браться с Samba. Для этого добавляем в файл build.conf (см. №12 за 2006 г.) модули floppy, fvat, supermount и пакет samba-server.

В первой части статьи (см. №12 за 2006 г.) на рисунке 3 показано содержимое файла thinstation.conf.group-smb_hard,

#<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()",

xterm -e setxkbmap -rules xorg -model pc105 ↵ -layout "us,ru" -variant ",winkeys" ↵ -option "grp:ctrl_shift_toggle,grp_led:scroll"

Рисунок 1. Настройки VNC-сессии NX-клиента

34

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

в нем два последних параметра указывают: нет поддержки жесткого диска, но есть поддержка флоппи-диска. Таких групп у меня несколько с различными сочетаниями значе-ний параметров – в зависимости от необходимости в нуж-ных устройствах. На этом же рисунке также показано со-держимое файла thinstation.conf-MAC, в нем видно, что до-бавлена подгрузка пакетов samba-base и samba-server.

Теперь нужно создать ярлычки на рабочем столе поль-зователей в KDE. При этом если на тонком клиенте уст-ройства нет, то и ярлычка этого устройства быть не долж-но. Проверка осуществляется командой smbclient, а IP-ад-рес клиента выясняется с помощью nxserver (я не настаи-ваю, что это единственный способ).

Для возможности запуска nxserver в файл /etc/sudoers добавляем строку:

То есть пользователям разрешается только пролис-тать текущие NX-сессии. Далее пришлось написать на shell небольшой код, который нужно добавить в файл /etc/bash.bashrc.local:

Единственное, что вы захотите здесь поменять, – это в строчке с sudo изменить «grep 10\\.» в соответствии с на-стройками вашей сети. То есть если сеть 192.168.10.0/255, то это будет «grep 192\\.», у меня используется сеть 10/8. Я думаю, идея вам понятна. Теперь ярлычки на рабочем сто-ле будут появляться только тогда, когда на тонком клиенте имеются соответствующие ярлыкам устройства.

И еще добавлю замечание по поводу памяти: 32 Мб на тонком клиенте хватает на то, чтобы кроме ядра Thinstation (в котором уже имеется NX-клиент) работали па-кеты sshd и lprng, но не хватает на поддержку Samba, же-лательно ставить немного больше памяти, хотя бы 40 Мб, этого хватит на всё.

Примеры использования 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.

Рисунок 2. Обычная работа на тонком клиенте

ALL ALL = NOPASSWD: /srv/NX/bin/nxserver --list*, ↵ !/srv/NX/bin/nxserver [!-]*

# We test floppy and HD existing by requesting samba server# on thin clientname=`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

echo "X-SuSE-translate=true" >> ↵ ~/Desktop/Harddisk.desktop else rm -f ~/Desktop/Harddisk.desktop 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 fifi

35№1, январь 2007

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

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) на экра-не тонкого клиента.

При использовании тонких кли-ентов в локальной сети достаточ-

никак не отразится на работе других пользователей.

В заключение скажу, что в августе 2006 года на прошедшей в Сан-Фран-циско выставке «LinuxWorld» фир-ма Nomachine получила награду жур-нала «LinuxJournal» за свой продукт NX Server 2.0 «BEST INTEGRATION SOLUTION» (за лучшее интеграцион-ное решение) [21].

В целом у NX видятся неплохие перспективы, сообщество Open Source тоже не дремлет. Так что если реши-тесь использовать его у себя, то не по-жалеете.

И удачи!P.S. Некоторые из описанных про-

блем, возможно, будут уже решены на момент выхода журнала, присо-единяйтесь к обсуждению статьи на форуме журнала http://www.samag.ru/forum.

1. Дистрибу тив Thinstat ion – ht tp : / /sourceforge.net /p ro jec t /show f i les .p h p ? g r o u p _ i d = 8 0 4 0 8 & p a c k a g e _id=82039.

2. Сайт Nomachine – http://www.nomachine.com.

3. http://www.ssc.com/node/20.4. Бушков Е. Подробное руководство по

настройке тонких клиентов на основе дистрибутива Thinstation и протокола NX. //Системный администратор, №12, 2006 г. – C. 16-23.

Рисунок 3. NX-сессия Wmaker в режиме приложения

но пропускной способности 10 Мбит, однако начальная загрузка образа Thinstation (у меня образ чуть меньше 9 Мб) ускорится, если использовать сеть 100 Мбит. Если тонкие клиенты в филиале связаны с терминальным сервером xDSL-модемами (или ины-ми низкоскоростными соединения-ми), то лучше предусмотреть нали-чие tftp-сервера на территории само-го филиала: это позволит не прокачи-вать каждый раз образ через узкий канал связи, а брать его с локально-го сервера.

Могу лишь добавить, что процес-сы NX на сервере занимают немно-го памяти и оказывают незначитель-ную нагрузку на процессор(ы) отно-сительно других приложений. Мне ка-жется, что протокол NX уже коррект-но сравнивать не с протоколом RFB, используемым VNC, а с протоколом ICA от Citrix (хотя они и используют-ся в разных системах): протоколы примерно схожи по производитель-ности и эффективности, вот только NX обойдется гораздо дешевле, если не бесплатно. Кроме того, если гово-рить о надежности, вспомните, что бы-вает, когда виснет один из основных сервисов Citrix на сервере Windows? Это сразу «ощутят» все пользователи Citrix. В Linux с NX для каждого поль-зователя запускаются отдельные про-цессы NX, и падение любого из них

36

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

Размещаем пользовательские бюджеты в LDAPЧасть 1

Эта тема имеет столько способов реализации, сколько авторов. Но типичные ошибки повторяются от раза к разу. Попробуем построить среду для хранения пользовательских бюджетов в LDAP оптимальным образом.

Алексей Барабанов

37№1, январь 2007

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

Считается, что в данном вопросе уже нет ничего не-ясного. Счет вариантов настройки, предлагаемых, например, на www.opennet.ru, давно уже идет на де-

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

Рассмотрим все это подробнее.В качестве рабочей среды выберем openSUSE 10.1

и 10.2, и будем использовать все пакеты, в них включен-ные. Например, под LDAP далее станем понимать реали-зацию OpenLDAP, поставляемую в указанных дистрибу-тивах, а именно openldap2-2.3.19-18.10 для openSUSE 10.1 и openldap2-2.3.27-25 для openSUSE 10.2.

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

Для сравнения предлагаю вам обратиться к одному из самых светлых документов на эту тему [1]. Светлых по-тому, что это руководство принадлежит к тому небольшо-му числу работ, где видно, что авторы очень хорошо пони-мают, о чем идет речь. Но и их мы тоже немножечко по хо-ду изложения поправим.

Определим исходное состояние. Предположим, что уже выполнена базовая установка openSUSE. В качестве ау-тентификационной базы используются стандартные фай-лы с парольными хешами, что собственно является единс-твенно возможным решением при инсталляции изолиро-ванной системы.

И вот с этого места начнем работу.

Зачем нужен LDAPИли, точнее, без чего он не нужен! Это не праздный воп-рос. Многие понимают LDAP как дополнительное хранили-ще бюджетов виртуальных пользователей. Часто этим ув-лекаются разработчики почтовых серверов. В какой-то сте-пени это верно. LDAP – это, в сущности, простая база дан-ных весьма причудливого формата. Но в рассматриваемом случае предполагается в ней хранить бюджеты пользовате-лей. Так в чем преимущество перед традиционной средой хранения учетных записей? В скорости? Нет!

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

И второе преимущество – так как LDAP является се-тевым сервисом, то с его помощью можно создать масш-табируемую среду аутентификации и авторизации (далее АиА) пользователей. Но так как LDAP сам по себе не мо-жет функционировать, поскольку даже его запуск происхо-

дит под контролем традиционной файловой системы АиА, то настройки подобной службы должны удовлетворять ря-ду требований.

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

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

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

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

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

Теперь, после того как известны и отправная точка, и цель работы, можно приступить к настройке серверной части.

Установка сервера OpenLDAPНа этом этапе надо убедиться, что все необходимые для ра-боты пакеты установлены в систему.

Структура дерева LDAP

38

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

Это можно сделать следующим образом:

Если что-то не будет найдено, то запустится 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:

Кстати, то же самое можно сделать, если что-то не пон-равится после установки, выполненной по рекомендациям настоящей статьи.

Теперь все готово к настройке. Все используемые сер-вером конфигурационные файлы лежат в /etc/openldap.

Здесь самое время вспомнить о первом требовании к хранилищу бюджетов. Используемая в АиА база дан-ных должна содержать все необходимые для работы поля. То есть надо в перечне включаемых схем указать те, что со-держат требуемые структуры.

Прежде всего, core.schema и cosine.schema – это ми-нимум-миниморум для работы LDAP, на определения этих схем ссылаются практически все остальные

Далее rfc2307bis.schema, которая, собственно, содер-жит определения для класса posixAccount, содержаще-го эквиваленты всем используемым в стандартной АиА полям. Эта схема пришла на смену ранее используемой nis.schema.

Затем то, что позволит добавить дополнительные дан-ные к определениям бюджетов – inetorgperson.schema.

Немного полезного для работы почтового сервера – misc.schema.

И, наконец, поместим в базу поля, требуемые для ра-боты 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 на этапе инициализации использу-

# 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

# rcldap stop# I=/var/lib/ldap ; \ for i in $(ls -1 $I | grep -v ^DB_CONFIG) ; \ do rm -f $I/$i ; done

39№1, январь 2007

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

ется так называемый 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 ничто не помешает в даль-нейшем сменить «на ходу». В итоге должно получиться что-то вроде следующего:

Приведенные выше команды создадут конфигурацион-ный файл нужного содержания. После чего можно попро-бовать запустить сам сервер.

В openSUSE стартовый скрипт использует парамет-ры из файла /etc/sysconfig/openldap. Настроим их так, что-бы сервер LDAP прослушивал лишь внутренний петлевой интерфейс lo:

Такая настройка позволит не заниматься сейчас обес-печением шифрования трафика обмена данными с LDAP, так как это связано с множеством других служб и такими вопросами, как создание локального Центра Сертифика-ции, что совершенно не укладывается в тематику статьи.

После настройки /etc/sysconfig/openldap проверим пра-вильность настроек, запустив сервер:

Если печальное сообщение не последовало, то можно включать сервер LDAP в режим автоматического запуска «chkconfig --add ldap».

# 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<<EOTinclude /etc/openldap/schema/core.schemainclude /etc/openldap/schema/cosine.schemainclude /etc/openldap/schema/inetorgperson.schemainclude /etc/openldap/schema/rfc2307bis.schemainclude /etc/openldap/schema/misc.schemainclude /etc/openldap/schema/samba3.schema#schemacheck on#pidfile /var/run/slapd/slapd.pidargsfile /var/run/slapd/slapd.argsreplogfile /var/lib/ldap/replica.logloglevel 0#allow bind_v2## Load dynamic backend modules:modulepath /usr/lib/openldap/modules

## ACL's definitionsaccess 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 definitionsdatabase bdbsuffix "$SUFFIX"checkpoint 1024 5cachesize 10000rootdn "$ROOTDN"rootpw $Tdirectory /var/lib/ldap## Indices to maintainindex objectClass eqindex cn pres,sub,eqindex sn pres,sub,eqindex uid pres,sub,eqindex displayName pres,sub,eqindex uidNumber eqindex gidNumber eqindex memberUid eqindex sambaSID eqindex sambaPrimaryGroupSID eqindex sambaDomainName eqindex default subEOT

# 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

# rcldap start# LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ LDAPINT="$LDAPSERVER:$LDAPPORT" ; \ netstat -apn | grep "LISTEN.*slapd" | \ grep $LDAPINT >/dev/null 2>&1 || echo «увы, не работает!»

40

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

В противном случае надо закомментировать строч-ку «loglevel 0», произвести перезапуск LDAP и пос-мотреть, что является причиной неудачи в протоколе /var/log/messages. После исправления ошибок следует сно-ва вернуть параметр loglevel, так как в противном случае протоколы системы будут просто забиваться огромным чис-лом сообщений от сервера LDAP, участвующем в каждом процессе аутентификации.

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

Иначе говоря, ищите опечатки!

Настройка клиентаТеперь, когда в системе есть доступный LDAP-сервер, мож-но приступить к настройке клиентской части.

Клиентом будут пользоваться все программы, которым понадобится информация из базы, хранимой в LDAP. Имен-но на этом принципе основано свойство масштабирования. Хотя тогда уже, скорее всего, придется изменить адрес, про-слушиваемый сервером LDAP.

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

В качестве подобных ключевых библиотек, которые на-страиваются на получение данных из LDAP, очень выгод-но применять nss и pam. Две эти подсистемы практичес-ки на 100% позволяют воспользоваться преимуществами LDAP, совершенно не изменяя другие аутентификацион-ные подсистемы, входящие в целевые пакеты, например в courier-imap. Иначе говоря, именно nss и pam далее и бу-дут настраиваться.

В openSUSE библиотеки nss и pam читают свои настрой-ки из одного и того же файла /etc/ldap.conf. Что очевид-но, так как они фактически предоставляют информацию одним и тем же программам на разных этапах их работы. Путь к этому файлу «зашит» в самих библиотеках. Можно проверить его точное значение в системах, где эта истина не очевидна, например для nss:

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

Названия контейнеров можно изменять произвольным образом, но так как они являются результатом соглаше-ния разработчиков, то лучше следовать предложенному и, например, регистрировать учетные записи пользовате-лей в «ou=Peolple».

Конфигурацию нашего клиента создадим следующим образом:

Обращаю внимание – никаких паролей в этом файле не содержится! Всякое упоминание в этом файле специ-альных пользователей и их паролей свидетельствует о не-верной настройке ограничений доступа в LDAP. Часто из-за невозможности работать c установленными правами на объекты базы LDAP от имени обычных пользователей прибегают к использованию или специального пользова-теля с полными правами на всю базу, или, что еще хуже, просто заставляют клиента соединяться с LDAP-сервером как rootdn, все это лишь от нежелания разобраться в сущ-ности происходящего.

Для того чтобы заставить систему обращаться к LDAP в поиске идентификационных данных, настроим службу nss. Эта служба управляется с помощью своего конфигураци-онного файла /etc/nsswitch.conf, в котором задаются пути поиска информации в системе.

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

# cat <<EOT >$/etc/nsswitch.conf.tmppasswd: compatshadow: filesgroup: compat

# strings $(rpm -ql nss_ldap | grep lib) | grep ldap.conf

# LDAPSERVER=127.0.0.1 ; \ LDAPPORT=389 ; \ LDAPINT="$LDAPSERVER:$LDAPPORT" ; \ SUFFIX="dc=office,dc=localnet" ; \ cat <<EOT >/etc/ldap.confhost $LDAPINTbase $SUFFIX## Don't try forever if the LDAP server is not reacheablebind_policy soft# RFC2307bis naming contextsnss_base_passwd ou=People,$SUFFIX?onenss_base_shadow ou=People,$SUFFIX?onenss_base_group ou=Group,$SUFFIX?onenss_base_hosts ou=Hosts,$SUFFIX?onenss_base_services ou=Services,$SUFFIX?onenss_base_networks ou=Networks,$SUFFIX?onenss_base_protocols ou=Protocols,$SUFFIX?onenss_base_rpc ou=Rpc,$SUFFIX?onenss_base_ethers ou=Ethers,$SUFFIX?onenss_base_netmasks ou=Networks,$SUFFIX?onenss_base_bootparams ou=Ethers,$SUFFIX?onenss_base_aliases ou=Aliases,$SUFFIX?onenss_base_netgroup ou=Netgroup,$SUFFIX?one# attribute/objectclass mapping# Syntax:nss_map_attribute rfc2307attribute ↵ mapped_attributenss_map_objectclass rfc2307objectclass ↵ mapped_objectclass#ldap_version 3ssl no## pampam_password exoppam_filter objectclass=posixAccountpam_login_attribute uidpam_member_attribute memberUidEOT

41№1, январь 2007

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

Вот теперь во всех актуальных для нас путях указано искать еще и в LDAP, а для passwd и group назначен спе-циальный совместимый режим, в котором также добавлен путь поиска в LDAP.

Здесь очень важно, что поиск shadow остался толь-ко в файловой базе. Это верно, тут нет ошибки. Так как shadow это не просто база, это совершенно конкретный алгоритм хранения хешей. И подменять его на LDAP не следует. Тем более не надо делать такого «винегрета» – shadow: tcb ldap files nisplus nis, как указано в [1]. Пусть все парольные хеши, что доставляются из shadow, останутся оригинальными. Pam сможет и так воспользоваться хеша-ми из LDAP, а применение nss для доступа к хешам заста-вит использовать самые простейшие из криптоалгоритмов. Подробнее об этом в [2].

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

На этапе проверки механизмов функционирования nss следует отключить кэширование запросов «rcnscd stop». Это позволит проверять работу системы сразу же после ее модификации. В штатном режиме Name Service Cache Daemon будет работать как следует.

Последнее, что осталось в настройке АиА, – переклю-чить pam в режим работы с LDAP. В openSUSE применяет-ся исключительно оригинальный механизм подключения LDAP в pam. Вместо традиционного указания порядка и пре-имущества использования разных источников АиА-инфор-мации применяется композитный модуль pam_unix2, кото-рый имеет собственный конфигурационный файл. То есть вместо настройки общих системных файлов в /etc/pam.d используется /etc/security/pam_unix2.conf.

Кроме неявной политики указания очередности поис-ка, что очень подробно критикуется в [2], такой подход со-здает еще и лишнюю точку настройки. Самое смешное, что вплоть до релиза 10.1 pam_unix2 искал свой собствен-ный файл настроек, а вот, начиная с openSUSE 10.2, он уже его не ищет, а снова принимает параметры из традицион-ных файлов /etc/pam.d. Но для управления ими теперь стала применяться утилита pam-config, которая согласно каким-то своим, прописанным в ее бинарном коде, правилам создает конфигурационные файлы для подсистемы pam.

Но и тут не без юмора: эта утилита, которую написал тот же автор, что и pam_unix2 – Thorsten Kukuk, поддержи-вает pam_unix2.conf, несмотря на то, что сам pam_unix2 уже не имеет этого конфигурационного файла. Изучение исходного текста позволяет узнать, что лишь с целью об-ратной совместимости. Откровением будет то, что пара-

метр use_ldap для pam_unix2 с помощью этой утилиты не подставить никак. То есть можно предположить, что в са-мом ближайшем будущем этот ключ пропадет и в самом pam_unix2. Иначе говоря, в SUSE, начиная с версии 10.2, для работы с LDAP предполагается использовать тради-ционный для остальных дистрибутивов pam_ldap. К сожа-лению, как и многое в SUSE, это решение не получило гра-мотного технологического воплощения. Да и вопрос, зачем тогда нужен pam_unix2, если есть опять же традиционный pam_unix, остается открытым.

Итак, для openSUSE 10.1 исправляем настройки pam_unix2 и тем самым решаем все проблемы:

Для openSUSE 10.2 можно применить такой же «сило-вой» вариант и просто дописать в каждую строку вызова pam_unix2 параметр use_ldap :

Можно еще выполнить «pam-config -a --ldap» и получить конфигурацию, которая будет почти работоспособной. И да-же воспользоваться такой настройкой ..., если, точнее, ког-да будут исправлены описки в pam-config. А пока прибегнем к описанному выше способу с использованием параметра use_ldap, так как нашей целью является создание нужной конфигурации оптимальным путем, а не бесконечное ис-правление ошибок разработчиков. Обладатели дистрибу-тивов, отличных от openSUSE, могут взять вариант настро-ек pam из [1], опять же с поправкой на особенности вклю-ченных в дистрибуцию утилит.

Осталось добавить специальные разделители в те фай-ловые базы, которые, как было указано выше, работают в режиме совместимости (compat):

Все, теперь настройка клиента завершена.

Инициализация базы LDAPКак уже было сказано ранее, в этом процессе нам поможет пакет smbldap-tools. Безусловно, можно обойтись и без не-го. Но так мы сократим работу за счет автоматизации час-ти операций.

Пакет smbldap-tools представляет собой набор про-грамм, которые помогают манипулировать учетными запи-сями, размещенными в LDAP. Все эти программы исполь-

# cat <<EOT >/etc/security/pam_unix2.confauth: use_ldapaccount: use_ldappassword: use_ldapsession: noneEOT

#!/bin/shfor 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

# grep "^+:::" /etc/passwd >/dev/null || ↵ echo "+::::::" >>/etc/passwd# grep "^+:::" /etc/group >/dev/null || ↵ echo "+:::" >>/etc/group

services: files ldapnetgroup: files ldapaliases: files ldappasswd_compat: ldapgroup_compat: ldapEOT# grep -v "^\(#\|$\|passwd\|shadow\|group\| ↵ services\|netgroup\|aliases\)" \ /etc/nsswitch.conf >>/etc/nsswitch.conf.tmp# mv /etc/nsswitch.conf.tmp /etc/nsswitch.conf

42

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

зуют единый конфигурационный файл /etc/smbldap-tools/smbldap.conf, который надо перед началом работы отре-дактировать или создать заново, что в данном случае про-ще. Параметры, важные в настройке, определяют сетевой адрес, на котором доступен сервер LDAP, суффикс базы и некоторые параметры, специфичные для PDC, который можно организовать в случае необходимости с помощью samba3 и той базы LDAP, что будет проинициализирована. Кроме уже ранее обсуждавшихся параметров добавились: имя домена NT, имя сервера, почтовый домен (кстати, опять же не имеющий никакого отношения к реально получаемой почте) и так называемый SID, который используется в пос-троении учетных номеров домена NT. Если далее не пла-нируется использовать samba на этом хосте, то все пере-численные параметры можно назначить достаточно произ-вольно. Итак, сделаем это:

И после настройки конфигурации smbldap-tools доба-вим к ней еще один маленький файлик, в котором укажем учетные данные, с которыми утилиты из пакета smbldap-tools будут обращаться к LDAP:

Все параметры, использованные в скрипте, как и ра-нее, перечислены в самом начале. Они должны совпадать с ранее использованными и меняться в случае их модифи-кации. Кстати сказать, это единственное место, где пароль администратора 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:

Все в полученном файле хорошо, кроме того, что ряд записей закомментирован – поправим, уберем коммента-рий, да еще забыт очень важный для создания групп класс nisNetgroup – поправим, добавим. Полученный файл со-храним. Если что-то еще не устраивает, его можно отре-дактировать вручную. Рекомендую его обязательно про-смотреть и сравнить с тем, что предлагается в [1]. Можно сказать так, в [1] минимальный вариант, а тот, что создает smbldap-populate – предпочтительный.

Вот самый важный момент, после которого номиналь-но LDAP начинает работать – загрузка базы:

Таким образом, база проинициализирована, корне-вой объект LDAP, соответствующий выбранному суффик-су «dc=office,dc=localnet», создан, и можно приступить к её наполнению.

# 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

# 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

# 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# mainSID="$LOCALSID"sambaDomain="$NT4DOM"# ldapslaveLDAP="$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"# accountsuserLoginShell="/bin/false"userHome="/home/%U"userHomeDirectoryMode="700"userGecos="Office User"defaultUserGid="513"defaultComputerGid="515"skeletonDir="/etc/skel"defaultMaxPasswordAge="99"# sambauserSmbHome="\\\\$NBTNAME\\homes\%U"userProfile="\\\\$NBTNAME\\profiles\%U"userHomeDrive="H:"userScript="%U.cmd"mailDomain="$MAILDOM"# miscwith_smbpasswd="0"smbpasswd="/usr/bin/smbpasswd"with_slappasswd="0"slappasswd="/usr/sbin/slappasswd"EOT

# SUFFIX="dc=office,dc=localnet" ; \ LDAPADMIN="ldapadmin" ; \ ADMINDN="cn=$LDAPADMIN,$SUFFIX" ; \

ADMINPW="admin" ; \ cat >/etc/smbldap-tools/smbldap_bind.conf <<EOTslaveDN="$ADMINDN"slavePw="$ADMINPW"masterDN="$ADMINDN"masterPw="$ADMINPW"EOT

43№1, январь 2007

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

Первым делом добавим учетную запись служебного пользователя – администратора LDAP:

После добавления бюджета «cn=ldapadmin,dc=office, dc=localnet» можно использовать его отличительное имя для дальнейшей модификации базы LDAP и, значит, встро-енный бюджет rootdn более не понадобится, и его отличи-тельное имя и пароль можно безбоязненно удалить из кон-фигурационного файла:

И перезапустить сам LDAP-сервер «rcldap restart» для то-го, чтобы изменения вступили в силу. Ну вот, теперь систе-ма АиА, использующая LDAP для хранения бюджетов поль-зователей, практически полностью готова к работе. Прак-тически, да не совсем.

Здесь уже возникают соображения совсем не триви-ального характера и свойственные, скорее всего, лишь для среды openSUSE. Дело в том, что создание пользова-тельских бюджетов сопровождается регистрацией в соот-ветствующих группах. При использовании smbldap-tools пользовательские бюджеты будут размещаться в группах, характерных для samba окружения. А при использовании «useradd ...» будут использоваться те параметры, которые записаны в /etc/default/useradd:

То есть, согласно этим настройкам, каждый пользова-тель будет регистрироваться в группах video и dialout. Мож-но, конечно, их модифицировать, но тогда надо забыть о принципе прозрачности представления сервиса LDAP, не говоря уже о том, что это может создать трудности, пос-кольку на принадлежности к группам строится традицион-ная иерархия прав в UNIX. Значит, указанные группы не-обходимо тоже разместить в базе LDAP. Чтобы не созда-вать проблем на будущее, проще ВСЕ группы продублиро-вать в LDAP. Воспользуемся для этого вот таким простень-ким скриптом:

Все группы, кроме «users», добавятся без ошибок, а ошибка добавления «users» не должна привести в заме-шательство, так как это очевидно, поскольку она уже со-здана как «Users».

Состояние базы LDAP можно посмотреть с помощью утилиты slapcat или через интерфейс консольного кли-ента:

Проверяется работа LDAP с помощью утилиты getent. Эта программа позволяет вывести содержимое любой сис-темной базы из nsswitch.conf так, как она «видится» систе-ме. В базах passwd и group должны присутствовать объек-ты, размещенные в LDAP.

Например, проверим group:

Первая строка из файловой базы, а вторая из 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.

# 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 $ROOTPWdn: $ADMINDNcn: $LDAPADMINsn: $LDAPADMINobjectClass: personobjectClass: topdescription: LDAP Administrator stuffuserPassword: $(slappasswd -s $ADMINPW -h $SCHEMA)EOT

# I=/etc/openldap/slapd.conf ; \ grep -v "root\(dn\|pw\)" $I >$I.tmp ; \ mv $I.tmp $I

# cat /etc/default/useraddGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelGROUPS=video,dialoutCREATE_MAIL_SPOOL=no

#!/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 ; docat <<EOTdn: cn=$GNAME,ou=Group,$SUFFIXobjectClass: posixGroupobjectClass: nisNetgroupobjectClass: topcn: $GNAMEgidNumber: $GIDdescription: Unix group "$GNAME"userPassword: {crypt}x-- пустая строка --EOTdone | ldapmodify -v -a -D "$ADMINDN" ↵ -H ldap://localhost -x -w $ADMINPW

# 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

# strings $(rpm -ql nss_ldap | grep lib) | grep ldap.conf

video:x:33:alekseybbvideo:*:33:

44

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

Проект 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 на такой

файловой системе вы получите что-то вроде:

При работе с 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,

Какова в действии система резервирования AMANDA

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

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

/dev/hda5: Bad magic number in super-block while opening filesystem

45№1, январь 2007

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

но основное его назначение – безопасное восстановление информации с помощью утилиты 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 описа-но, как использовать вместо ленты жесткий диск, но CDRW-Taper также с этим справляется на отлично, к тому же при его использовании не требуется никаких особых манипуляций.

Все это можно установить одной командой^

И если планируется резервировать информацию и сервера, а также Samba-ресурсов, то добавляем и amanda-client.

Если планируется установка с исходных текстов, то в об-щем случае никаких параметров задавать не надо, deb-па-кет сервера AMANDA собран с такими параметрами:

. /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+rw-tools, а также для отправки отчетов по электронной поч-те и SMTP-сервер. В качестве последнего вы можете ис-пользовать Sendmail, QMail или Postfix. CDRW-Taper явля-ется Perl-скриптом.

Вся установка производится вручную. Сначала пере-именовываем файл taper, находящийся в каталоге, на ко-торый указывает переменная libexecdir. То есть в случае с KUbuntu /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 будет его искать

$ sudo apt-get update$ sudo apt-get install amanda-server cdrw-taper

$ sudo /usr/lib/amanda/taper /usr/lib/amanda/taper.orig

46

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

в каталоге --sysconfdir=/etc, то есть /etc/amanda. В этом случае команду для резервирования amdump, да и осталь-ные можно будет запускать без каких-либо дополнитель-ных параметров. Считается хорошим тоном для каждо-го задания на резервирование создавать свой подката-лог в /etc/amanda.

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

Каждый подкаталог хранит настройки отдельного зада-ния, то есть в том случае, если у вас два стриммера, созда-ются два каталога с настройками и так далее. К команде в этом случае добавляется название каталога. Кроме не-го, в этом же каталоге находится файл disklist, в котором указываются ресурсы, которые должны резервироваться при выполнении этого задания, и файл tapelist с информа-цией о лентах. Последний файл необходимо создать, за-полняется он автоматически или с помощью утилит amlabel и amlabel-cdrw.

Конфигурационный файл amanda.confРассмотрим пример файла /etc/amanda/DailySet1/amanda.conf применительно к использованию CDRW-Taper.

Описания dumptype в amanda.confДальше в файле идут описания типов резервирования, ко-торые будут использоваться в файле disklist. Каждое опи-сание может содержать до 23 параметров.

Привожу часть из них, чтобы показать некоторые воз-можности AMANDA: auth – аутентификация по умолчанию bsd, возможны

krb4, krb5 и ssh. comment – комментарий. comprate – степень сжатия, отдельно для полно-

го и для инкрементного. По умолчанию «comprate 0.50, 0.50», если второй цифры нет, то используется первая.

$ sudo touch /etc/amanda/daily/tapelist$ sudo chown backup:backup /etc/amanda/daily/tapelist

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 дня

#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}

47№1, январь 2007

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

compress – конкретизируются параметры сжатия. На-звания говорят сами за себя. Например, по умолчанию используется client fast, есть none, server server best и другие.

program – программа для создания копии, dump по умол-чанию, возможно GNUTAR.

encrypt – шифрование файлов: none (умолчание), client, server.

kencrypt – шифрование потока. vexclude – список шаблонов файлов, которые не будут

резервироваться. index – создание индекса файлов. strategy – стратегия создания дампа: standard – первая версия полная, последующие ин-

крементные; nofull – всегда изменения; noinc – всегда полный; skip – пропуск; incronly – только инкрементное, но в отличие от nofull

полная копия при первом запуске не создается.

Названия заготовок также говорят сами за себя.

Настройка ресурсов для архивированияРесурсы для архивирования описываются в другом файле – disklist. Каждая запись состоит из трех полей. В первом по-ле – имя узла, отвечающего за создание архива, причем рекомендовано применение полного имени. Если архиви-руется ресурс Samba, то здесь указывают узел, на котором установлен клиент AMANDA, работающий с smbclient. Ес-ли это локальная система, также необходимо использовать реальное имя системы, отличное от localhost.

Во втором поле – архивируемый ресурс, здесь может использоваться имя раздела диска (hda3), имя устройс-тва (/dev/hda3), но лучше использовать имена каталогов файловой системы (/home), так как при переконфигура-ции диска не потребуется изменение настроек AMANDA и с tar проблем не будет. В случае сетевого UNIX/Samba ресурса следует использовать схему //имя_системы/ре-сурс – //host1/C$.

И последнее поле – тип архивирования, взятый с amanda.conf, его название должно быть правильным, иначе вы по-лучите ошибку.

Например:

За создание архива ресурса //client1/backupc отвечает компьютер client1, именно к нему будет отправлен запрос при запуске amdump. Архивирование //windows1/C$ и /home будет производить сам сервер, поэтому на нем также дол-жен быть установлен клиент AMANDA.

Учтите, что такая запись работать не будет:

Ошибка в журнале описана так:

Описание типа comp-user-tar предполагает использова-ние tar, а он работает только со смонтированными ресурса-ми. Замените на comp-user, который подразумевает dump, или укажите вместо файла устройства /dev/hda5 точку мон-тирования. Для описания параметров доступа к Samba-ре-сурсам используется файл /etc/amandapass. В нем должно содержаться описание системы, пароль и опционально мо-жет быть указана рабочая группа. Примерно так:

При стандартной (bsd) аутентификации доступа к UNIX-системам применяется файл amandahosts, который являет-ся аналогом .rhosts только для AMANDA. По умолчанию этот файл должен находиться в домашнем каталоге пользователя backup – ~backup/.amandahosts. Но в большинстве дистрибу-тивов каталог пользователя AMANDA не создается, поэтому можно использовать /etc/amandahosts. Он состоит из строк, описывающих узлы и пользователя, который имеет к ним до-ступ, с версии 2.5.1 добавился и третий параметр – имя сер-виса. Так, на клиенте этот файл будет выглядеть так:

На сервере:

Если использовать в последнем примере вместо име-ни узла localhost.

То клиент, запущенный на этом же компьютере, работать откажется, а в журнале появится такая запись:

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 //client1/backupc comp-user-taramandaserver //windows1/C$ comp-user-taramandaserver /home comp-user-tar

amandaserver /dev/hda5 comp-user-tar

sendsize[5573]: time 0.151: /bin/tar: hda9: Cannot chdir: No such file or directorysendsize[5573]: time 0.152: /bin/tar: Error is not recoverable: exiting now

//windows1/C$ p@ssw0rd WORKGROUP

client1 backup amindexd amidxtapedamandaserver backup amdump# это для работы клиента на этом же узле

amandaserver backup amdump

localhost backup amdump

amandad: time 0.003: bsd security: remote host localhost user backup local user backupamandad: time 0.029: check failed: [access as backup not allowed from backup@localhost] amandahostsauth failed

48

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

Владельцем файлов amandahosts и amandapass должен быть пользователь backup, права доступа устанавливают-ся как 0600 или лучше 0400.

Настройка сетевых сервисовТеперь осталось настроить сетевые сервисы. В первую оче-редь убеждаемся, что в файле /etc/services они записаны.

Далее необходимо настроить работу демонов, от-вечающих за архивирование, через xinetd. На клиенте это amandad, на сервере настраивается запуск демонов amindexd, amidxtaped, отвечающих за создание индексов и работу с устройствами хранения. Для восстановления ин-формации потребуется и работа amandad на сервере. За-носим в файл /etc/xinetd либо в отдельные файлы в катало-ге /etc/xinet.d/ информацию о сервисах. Здесь также, начи-ная с версии 2.5.1, есть изменения, направленные на уси-ление безопасности.

Так, на клиенте файл должен иметь примерно такой вид:

На сервере параметр server_args должен дополнительно включать amindexd amidxtaped, а only_from – описания всех клиентов. Привожу пример для bsdtcp аутентификации.

Кстати, при установке с помощью пакетов был создан конфигурационный файл для inetd с необходимыми запи-сями. Полный комплект. Но при попытке заставить перечи-тать xinetd свои конфигурационные файлы «/etc/init.d/xinetd reload» выяснилось, что хотя в системе автоматически со-зданы все полагающиеся каталоги и файлы как для xinetd, так и inetd, но они сами в системе не установлены. Стран-но, что при построении зависимостей об этом не позабо-тились. Поэтому в Ubuntu xinetd необходимо проверить его наличие и при отсутствии – установить.

С AMANDA закончили.

Настройка CDRW-TaperСерверы уже работают и могут выполнять свою функцию, остался CDRW-Taper. Его конфигурационный файл назы-вается /etc/cdrw-taper.conf, хотя можно обойтись и без не-го, указав все настройки непосредственно в taperlib.pm и amlabel-cdrw. Но это неправильно.

Создаем каталог для промежуточных файлов /var/cache/cdrw-taper.

Как проверить настройкиВ комплекте AMANDA идет несколько утилит, позволяющих проверить настройки и работу отдельных компонентов. На-пример, запуск amcheck без параметров позволит прове-рить настройки сервера и доступность клиентских систем, а также ресурсов на них. Выполняться они должны от име-ни пользователя backup.

$ sudo su backup -c "amcheck DailySet1"

service amanda{ only_from = amandaserver # добавилось в 2.5.1 socket_type = dgram protocol = udp wait = yes user = backup group = backup groups = yes server = /usr/lib/amanda/amandad server_args = -auth=bsd amdump disable = no }

service amanda{ only_from = client1 client2 amandaserver socket_type = stream protocol = tcp wait = no user = amandabackup group = disk groups = yes server = /usr/lib/amanda/amandad server_args = -auth=bsdtcp amdump amindexd amidxtaped disable = no }

# Местонахождение конфигурационных файлов 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;

$ sudo mkdir /var/cache/cdrw-taper$ sudo chown backup:backup /var/cache/cdrw-taper

Amanda Tape Server Host Check-----------------------------Holding disk /var/cache/cdrw-taper: 10952816 kB disk space available, that's plentyERROR: /media/cdrom0: Permission denied (expecting a new tape)NOTE: skipping tape-writable testServer 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

amanda 10080/udpamandaidx 10082/tcpamidxtape 10083/tcp

49№1, январь 2007

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

Первая ошибка «ERROR: /media/cdrom0: Permission denied» – результат адаптации AMANDA и ее утилит под работу со стриммерами. Поэтому с СD/DVD-дисками неко-торые тесты не проходят. На нее внимание можно не обра-щать, система работала нормально, хотя ошибка постоянно выдавалась. Файл /etc/amanda/exclude.gtar описан в прави-ле архивирования. Даже если не планируется его исполь-зование, лучше его создать пустым, иначе в журналах она будет фигурировать постоянно. Запись «Holding disk» гово-рит о доступном месте в каталоге (разделе), в который бу-дут складываться промежуточные файлы.

После редактирования файлов конфигурации следу-ет проверять права доступа, например, такая ошибка го-ворит о том, что процесс не может получить доступ к фай-лу для записи:

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

Первое заданиеПеред первым архивированием необходимо разметить DVD-диски в количестве, равном tapecycle. В AMANDA для этих целей используется утилита amlabel, но она CD-диски раз-мечать не умеет. В CDRW-Taper для разметки есть своя утилита amlabel-cdrw. В качестве параметра она принима-ет название задания и метки соответствующей labelstr. Ес-ли попробовать другую метку, получите:

На диске сейчас записан единственный файл AMANDA_LABEL, содержащий строку local1. Повторяем эту операцию со всеми 9 дисками, меняя метку. Вся информация о дис-ках будет заноситься в файл tapelist. После первого диска запись будет такая:

Первое задание желательно запустить вручную и оце-нить результат и работу всех компонентов.

После запуска этой команды в каталоге /var/cache/cdrw-taper должен появиться подкаталог local1 с такой структурой файлов внутри:

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

Пришлось отдельно устанавливать и dump.

По окончании создания архива, создается iso-об-раз, который автоматически записывается на DVD-диск. Если объем архива превышает для установленного в $MEDIABLOCKS типа дисков, будет создан следующий подкаталог. И так далее. Даже если при предыдущем ар-хивировании не был занят весь объем, то для следующе-го задания будет задействован диск уже с другой меткой. Текущий затребуется для перезаписи, только когда прой-дет полный круг. Может возникнуть ситуация, когда тре-буется перезаписать архив на болванку вручную. Сделать это просто. Например, так можно повторно записать архи-вы с метками local1 и local2.

ERROR: tape list /etc/amanda/DailySet1/tapelist: not writable

$ 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

$ sudo /usr/sbin/amlabel-cdrw DailySet1 metka

taper: ERROR: Label metka does not match labelstring "^local[0-9]*$".

00000000 local1 reuse

$ sudo su backup -c "amdump DailySet1"

$ sudo ls -al /var/cache/cdrw-taper/local1

total 138260drwx------ 2 backup backup 2048 2006-11-30 22:12 .drwxr-xr-x 7 root root 192 2006-10-28 19:23 ..-rw------- 1 backup backup 7 2006-11-30 22:12 AMANDA_LABEL-rw------- 1 backup backup 141575082 2006-11-30 22:12 grinder.hda9.0.dump.gz-rw------- 1 backup backup 191 2006-11-30 22:12 grinder.hda9.0.info

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 directorysendsize: time 0.010: pid 12309 finish time Thu Nov 30 21:16:59 2006sendsize[12307]: time 0.011: running /usr/lib/amanda/killpgrp

$ sudo apt-get install dump

$ sudo /usr/lib/amanda/taper DailySet1 -flush local1 local2

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

$ sudo /usr/sbin/amlabel-cdrw DailySet1 local1

50

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

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

Когда задание выполнено успешно, автоматизируем его запуск через cron.

Восстановление информацииДля восстановления информации служит утилита amrecover, с ее помощью можно восстанавливать как отдельные фай-лы, так и целые разделы. По характеру работы amrecover на-поминает консольный ftp-клиент. Восстанавливать инфор-мацию может только пользователь с правами администра-тора, для которого в файле amandahostsauth также должна существовать запись. Иначе:

При попытке зайти с правами backup, получим «amrecover must be run by root». Добавляем следующую стро-ку в файл /etc/ amandahostsauth:

Но для восстановления можно использовать запись с localhost:

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

В данном случае файл был найден на жестком диске, иначе вас попросят вставить CD/DVD с нужной меткой.

ИтогКак видите – AMANDA мощный и гибкий инструмент, кото-рый позволит вам выполнить любую задачу по резервиро-ванию важной информации. Поддержка разных платформ только добавляет ему преимуществ. Также отмечу отлич-ную документацию, из которой вы подробно узнаете о ра-боте всех компонентов AMANDA. Кстати, в файле using.txt найдете и главу из книги Джона Джексона (John R. Jackson) «UNIX Backup and Recovery», которая посвящена AMANDA (http://www.backupcentral.com/amanda.html).

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.

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.3ERROR taper label on media in /dev/hdc:0,0,0 is not localCannot load media with label local!

$ sudo crontab -u backup -e0 10 * * 1-5 /usr/sbin/amcheck -m DailySet145 0 * * 2-6 /usr/sbin/amdump DailySet1

$ 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

amandaserver root amindexd amidxtaped

localhost root amindexd amidxtaped

$ sudo amrecover DailySet1

AMRECOVER Version 2.4.5p1. Contacting server on localhost ...220 grinder AMANDA index server (2.5.1p1) ready.200 Access OKSetting 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.

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 /homeContinue [?/Y/n]? y

Extracting from file /var/cache/cdrw-taper/20061202142102/grinder._media_other.0./ test_file

amrecover> quit

200 Good bye.

Trying disk / ...Trying disk rootfs ...Can't determine disk and mount point from $CWD '/home/grinder'

51№1, январь 2007

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.Решение: Установите исправление с сайта производи-теля.

Переполнение буфера в службе POP в MailEnableПрограмма: MailEnable Professional 2.35, возможно, более ранние версии; MailEnable Enterprise 2.35, возможно, бо-лее ранние версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных в службе POP при обработке аргументов команды PASS. Удаленный пользователь может с помощью слишком длиной строки вызвать переполнение стека и вы-полнить произвольный код на целевой системе.URL производителя: www.mailenable.com.Решение: Установите исправление с сайта производи-теля.

Уязвимость при обработке SIT- и CPIO-архивов в Sophos Anti-VirusПрограмма: Sophos Anti-Virus for Windows 6.x, Sophos Anti-Virus 3.x, Sophos Anti-Virus 4.x, Sophos Anti-Virus 5.x.Опасность: Высокая.Описание: 1. Уязвимость существует из-за ошибки про-верки границ данных в veex.dll при обработке CPIO-архи-вов. Удаленный пользователь может с помощью специаль-но сформированного CPIO-архива, содержащего слиш-ком длинное не терминированное имя файла, вызвать пе-реполнение стека и выполнить произвольный код на целе-вой системе.

2. Уязвимость существует из-за ошибки проверки гра-ниц данных в veex.dll при обработке SIT-архивов. Удален-ный пользователь может с помощью специально сфор-мированного SIT-архива, содержащего слишком длинное не терминированное имя файла, вызвать переполнение ди-намической памяти и выполнить произвольный код на це-левой системе.URL производителя: www.sophos.com/products/software/antivirus.Решение: Установите исправление с сайта производи-теля.

Множественные уязвимости в 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.Решение: Установите исправление с сайта производи-теля.

Переполнение буфера в службе SNMP в Microsoft WindowsПрограмма: Microsoft Windows Server 2003 Enterprise Edition, Microsoft Windows Server 2003 Datacenter Edition, Microsoft Windows XP Professional, Microsoft Windows XP Home Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Datacenter Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows Server 2003 Standard Edition, Microsoft Windows Server 2003 Web Edition.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных в службе SNMP. Удаленный пользова-тель может с помощью специально сформированного со-общения вызвать переполнение буфера и выполнить про-извольный код на целевой системе.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производи-теля.

Составил Александр Антипов

52

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

Устанавливаем и обновляем программное обеспечение в системе FreeBSD

Как установить пакет?Для установки пакетов можно ис-пользовать команду sysinstall (меню «Configure», подменю «Packages»), од-нако это не даст вам навыков по ус-тановке пакетов вручную. Из коман-дной строки пакеты устанавливаются при помощи команды pkg_add. Наибо-лее часто используемые пакеты пос-тавляются на самом диске FreeBSD в директории packages. Для их ус-тановки достаточно смонтрировать CD-диск (команда «mount /cdrom») и выполнить команду:

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

Если вы скачали пакет из сети, то он устанавливается аналогично:

pkg_add /cdrom/packages/All/ ↵ имя_пакета-версия.tgz

ls /cdrom/packages/All/имя_пакета*

pkg_add имя_файла

Если пакета нет на диске или вы хо-тите получить последнюю версию па-кета, то можно попробовать команду:

Скажем, для установки веб-сер-вера Apache версии 1.3.x можно на-брать команду:

которая обратится к серверу FreeBSD и сама скачает пакет, подходящий для вашей версии FreeBSD, во времен-ную директорию и установит его. Если пакет для своей работы требует допол-нительные библиотеки или другие па-кеты, то команда «pkg_add» скачает и их тоже. После установки все вре-менные файлы удаляются.

Команда:

не только скачает и установит порт, но и сохранит скачанный файл пакета в текущей директории.

pkg_add -rv apache13

pkg_add -K -rv apache13

pkg_add -rv имя_порта

создаст в текущей директории пакет, который можно устанавливать при по-мощи команды «pkg_add». Это особен-но удобно, когда вы сконфигурирова-ли ПО, установленное из портов для своих задач, и хотите создать пакет, который можно использовать в даль-нейшем.

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

Команда:

pkg_create -b имя_пакета-версия

Какой пакет установил данный файл?Узнать, какой пакет установил данный файл, можно при помощи команды:

pkg_info -W абсолютное_имя_файла

Что такое пакет? Что такое порт?В ОС FreeBSD существует два механиз-ма для установки программного обеспе-чения – пакеты и порты. Пакеты – зара-нее скомпилированные файлы с бинар-ными файлами. Они не требуют ком-пиляции из исходных файлов и более просты в установке. Пакеты неудобны только тем, что скомпилированы с коп-ределённым набором опций по умолча-нию, под конкретную платформу, а вам для конкретной задачи нужны допол-нительные опции. Порты предоставля-ют автоматизированный механизм для установки программ из исходных фай-лов – начиная с получения (скачивания) исходных файлов, изменения исходных файлов для успешной компиляции про-граммы для системы FreeBSD и меха-низм инсталляции/деинсталляции ПО.

Версии пакетов и портовВы можете думать о пакетах как о кон-кретной версии программы, а о порте – как об описании, как создать версию пакета. Через некоторое время порт может быть обновлен и он уже будет генерировать пакет с другим номером версии. То есть mysql51-server – это на-звание порта с версией сервера MySQL 5.1.x, а пакет mysql-server-5.1.12 – это уже скомпилированные бинарные фай-лы сервера MySQL версии 5.1.12 . Иног-да после номера версии добавляется

знак подчеркивания и число – это по-казывает на версию изменения порта, т.е. если версия программного обес-печения не изменилась, а в порт были внесены изменения, чтобы обеспечить лучшую интеграцию данного ПО в сис-тему FreeBSD (lynx-2.8.5_2 – текстовый браузер lynx версии 2.8.5, в порт кото-рого 2 раза вносились изменения). Ког-да меняется (повышается) версия про-граммного обеспечения, версия порта сбрасывается и не пишется до перво-го обновления порта.

Какое программное обеспечение готово для использования?Посмотреть список программного обеспечения, перенесенного на сис-тему FreeBSD, вы можете по адресу http://www.freebsd.org/ports. Вы суме-ете узнать также точное название па-кета, который вас интересует.

pkg_delete имя_пакета

Удаление установленного ПОДля удаления установленного ПО не-обходимо использовать команду:

которая корректно удалит установ-ленные пакетом файлы. Пакеты, ус-тановленные как зависимости, уда-лены не будут.

53№1, январь 2007

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

Просмотр списка установленных пакетовДля просмотра можно использовать команду «pkg_info», которая выводит название пакета, версию и короткое описание. Другой способ – просто пос-мотреть список пакетов:

В директории /var/db/pkg команды pkg* хранят базу всех установленных пакетов. Посмотреть детальную ин-формацию по одному пакету можно при помощи команды:

скажем:

ls /var/db/pkg

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 Мб.

Обновление портов при помощи системы CVSupДля использования системы CVSup необходимо добавить несколько строк в файл /etc/make.conf (пример при-веденной конфигурации есть в фай-ле /usr/share/examples/etc/make.conf). Эти строчки в /etc/make.conf конфигу-рируют обновление коллекции портов через протокол CVSup, который пере-дает только изменения, произошед-шие в коллекции портов, что сущес-твенно меньше, чем скачивание пол-ной коллекции. Вам потребуется либо прямое соединение с Интернетом, ли-бо с трансляцией адресов (NAT). Про-токол CVSup не может работать через HTTP-прокси.

Если у вас FreeBSD версии 6.0 или ниже, то у вас должна быть строка:

вместо указанной:

и для обновления портов вам необходи-мо поставить пакет cvsup при помощи:

После того как вы добавили эти стро-ки в /etc/make.conf, необходимо перей-ти в директорию /usr/ports и запустить команду:

После успешного завершения у вас будет коллекция портов с последними обновлениями.

make updateSUP_UPDATE=YESSUP=/usr/bin/csupSUPFLAGS=-g -L 2 -zSUPHOST=cvsup.uk.FreeBSD.orgSUPFILE=/usr/share/examples/ ↵

SUP=/usr/local/bin/cvsup

SUP=/usr/bin/csup

pkg_add -rv cvsup-without-gui

cvsup/standard-supfilePORTSSUPFILE=/usr/share/examples/ ↵ cvsup/ports-supfile

Автоматизация установки и обновления портовДля автоматизации процесса установ-ки и обновления портов вам потребу-ется пакет portupgrade.

Его можно установить либо из пор-та /usr/ports/sysutils/portupgrade, либо при помощи команды:

Для обновления ПО сперва нужно обновить коллекцию портов (как это делать, описано выше). После это-го вы можете инсталлировать и об-новлять порты при помощи следую-щих команд:

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

обновить порт по последней версии. При этом не нужно указывать версию установленного пакета, а нужно прос-то указать имя порта, скажем:

обновить все порты начинающиеся с данного префикса, скажем:

обновит сам интерпретатор php и все его установленные расширения.

Именно для этого случая нам бы-ло нужно сохранить конфигурацию при помощи «make config» или за-писывая ее в файл /etc/make.conf. Portupgrade сам скачает новые вер-сии исходных файлов, сконфигури-рует их с теми опциями, которые бы-ли запомнены, сделает резервную ко-пию старого пакета, удалит старую версию пакета, установит новую. Ес-ли этот процесс завершился успешно, то копия старого пакета будет удалена, если нет, то portupgrade установит ее обратно. Порты в FreeBSD разрабаты-ваются так, чтобы при удалении порта не затрагивать файлы конфигурации. Таким образом, ваши старые файлы конфигурации останутся неизменны-ми. Иногда это может привести к про-блемам, и файлы конфигурации нужно исправлять для совместимости с новой версией установленного ПО.

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

обновит все установленные в систе-ме пакеты.

pkg_add -rv portupgrade

portinstall имя_порта

portupgrade имя_порта

portupgrade 'имя_порта*'

portupgrade 'php5*'

portupgrade -R 'имя_порта'

portupgrade -a

54

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

или сразу удалить несколько портов из системы (по шаблону).

удалить порт и все порты, которые требуют его в качестве зависимости (dependency).

удалить порт и все порты, которые он требует в качестве зависимости (dependency).

Гаспар Чилингаров

удалить старые исходные файлы пор-тов.

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

после обновления коллекции портов показывает, какие имеются более но-вые версии и требуются обновления.

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

Другие команды для работы с портами

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

позволяет почистить /usr/ports от ста-рых рабочих директорий, устаревших исходных файлов и т. д.

очистить рабочие директории.

то есть при помощи флага -Dимя_опции= значение. Если вы хоти-те сохранить эти опции, чтоб они использовались в дальнейшем при обновлениях, откройте файл /etc/make.conf и допишите их туда в виде опция=значение (т.е., ска-жем, WITHOUT_X11=YES). Эти оп-ции будут применяться при компи-ляции всех портов.

make all – то же самое, что и коман-да make без аргументов.

make install – устанавливает ском-пилированный порт.

make clean – очищает директорию порта от рабочих файлов.

make distclean – аналогично make clean, но также стирает скачанные исходные файлы.

make deinstall – удаляет инсталли-рованную версию порта.

make package – создает пакет для данной версии ПО. Эта коман-да подразумевает, что ПО установ-лено на жестком диске, в против-ном случае она выполняет «make install», после чего создает пакет.

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

Разные опции команды make мож-но комбинировать друг с другом, т.е. «make install clean» приведет к ска-чиванию исходных текстов, компиля-ции, установке порта и очистке дирек-тории порта от рабочих файлов.

Установки ПО при помощи портовДля установки порта необходимо пе-рейти в его директорию (скажем, «cd /usr/ports/lang/php4» – для уста-новки языка PHP). Имя порта можно узнать на сайте http://www.freebsd.org/ports либо перейти в директорию /usr/ports (командой «cd /usr/ports») и дать команду:

Например:

для поиска всех портов, связанных с ICQ клиентом licq.

Возможные операции для компи-ляции порта (должны выполнятся в ди-ректории порта – то есть /usr/ports/lang/php4 в нашем случае): make config – запускает конфигу-

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

make fetch – только скачивает не-обходимые файлы, но не компили-рует порт. Исходные файлы пор-тов скачиваются в директорию /usr/ports/distfiles.

make – скачивает и компилирует порт. Если порт имеет опции, кото-рые могут быть указаны в коман-дной строке, он сообщит об этом до начала процесса компиляции. В командной строке опции зада-ются как:

make search key=ключевое_слово

make search key=licq

make -DWITHOUT_X11=YES

pkg_which имя_файла

portsclean

portsclean -C

portsclean -D

portsclean -DD

pkg_version

pkg_deinstall 'имя_порта'// илиpkg_deinstall 'имя_porta*'

pkg_deinstall -r имя_порта

pkg_deinstall -R имя_порта

Обновление портов при помощи portsnapЕсли у вас система FreeBSD 6.0 и вы-ше или 5.5 и выше, то в базовой сис-теме есть утилита portsnap, кото-рая облегчает обновление коллек-ции портов. В первый раз команда «portsnap fetch» скачивает сжатую вер-сию коллекции портов и сохраняет ее в /var/db/portsnap. В последующие ра-зы команда «portsnap fetch» скачивает сжатые обновления для этого файла, что использует существенно меньший трафик, чем полное скачивание кол-лекции портов и даже обновление при помощи CVSup. Если у вас нет распа-кованной коллекции портов в /usr/ports, то ее можно создать при помощи ко-манды «portsnap extract». Для обновле-ния распакованной коллекции портов, после того как portsnap скачал сжа-тые изменения, используется коман-да «portsnap update».

То есть в первый раз вы должны вы-полнить команды:

а в последующие разы:

Можно указать командам «portsnap extract» и «portsnap update», чтоб они работали не со всей коллекцией пор-тов, а только с ее частью. Так:

обновит только порты в директории databases, имя которых начинается на mysql.

portsnap fetch; portsnap extract

portsnap fetch; portsnap update

portsnap update databases/mysql

56

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

Unionfs во FreeBSD: разбираемся в текущей реализации

В наши дни термин «файловая система» охватывает гораздо больше, чем просто способ организации данных на физическом носителе. «Многослойность» подсистемы работы с файлами не только повышает гибкость, но и предоставляет множество интересных возможностей. Одним из примеров такого «промежуточного уровня» является файловая система unionfs.

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

57№1, январь 2007

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

Про гибкость, vnode и файловые системыКак известно, на «физическом» уров-не файлы в файловой системе ОС се-мейства UNIX определяются так назы-ваемыми индексными узлами (inode), которые хранят информацию об этих файлах. В первоначальных реализа-циях операционных систем файловые объекты, с которыми работала сис-тема, непосредственно сопоставля-лись с inode.

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

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

Во FreeBSD концепция наращива-емых файловых систем поддержива-ется достаточно широко, что позволя-ет помимо «традиционных» ФС реали-зовать целый ряд довольно полезных и эффективных «виртуальных» файло-вых систем, таких как unionfs.

Небольшое отступление про nullfsПрежде чем переходить к основной теме статьи, коротко остановимся

на файловой системе nullfs. Она позво-ляет монтировать каталог как «обыч-ную» файловую систему (в частнос-ти, задавать опции монтирования, та-кие как «ro»). С точки зрения рассмот-ренной выше схемы, nullfs реализу-ется очень просто – это должен быть, по сути, просто «прозрачный» слой vnode. То есть запросы на поиск объ-екта должны прозрачно передавать-ся на нижележащий уровень, ответы также «транзитом» следовать обрат-но (см. рис. 1).

В принципе, можно сказать, что всё, что делает nullfs, – это предоставля-ет доступ к «чистой» файловой систе-ме через дополнительную точку мон-тирования.

Unionfs: теорияФайловая система unionfs разраба-тывалась как средство объединения различных файловых систем в единое пространство имён, чтобы они воспри-нимались как одно целое.

Работа unionfs заключается в том, что она определённым образом накла-дывает один каталог на другой, делая возможным одновременное использо-вание файлов и подкаталогов как в од-ном, так и в другом. То есть, в отли-чие от других ФС, unionfs не перекры-вает при монтировании старые объ-екты, размещаемые в каталоге, объ-явленном как точка монтирования, а осуществляет объединение этих ка-талогов.

Очевидно, здесь есть масса ню-ансов. Что произойдёт, если в обоих объединяемых каталогах есть файлы или подкаталоги с одинаковыми име-нами? Как unionfs должна реагиро-

вать на удаление файла или каталога из «общей» папки? Можно ли исполь-зовать в качестве одного из каталогов то, что смонтировано только для чте-ния (например, файловую иерархию на CD-диске)? И в каком из каталогов физически создавать новые файлы? Посмотрим, как это задумано на дан-ный момент во FreeBSD.

В реализации FreeBSD unionfs «на-кладывает» один каталог на другой, руководствуясь следующими принци-пами: один из каталогов становится ката-

логом верхнего уровня (в дальней-шем для краткости я буду называть его просто «верхним»), второй – каталогом нижнего уровня («ниж-ним»);

пользователю объекты каталогов доступны «сверху вниз», т.е. если запрошенный объект есть в «вер-хнем» каталоге, возвращается он, независимо от наличия объекта с таким именем в «нижнем» ката-логе; иначе возвращается объект «нижнего» каталога; если запро-шенного объекта нет ни там, ни там, возвращается ошибка «Нет такого файла или каталога» (см. рис. 2);

Рисунок 1. Работа файловой системы nullfs

Рисунок 2. Объединение двух каталогов в union-систему

58

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

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

Последний пункт означает, что все каталоги, кроме каталога верхнего уровня, фактически можно рассмат-ривать как подключенные «только для чтения». Однако для пользователя это остаётся незаметным: при попытке редактировать файл из «нижнего» ка-талога он копируется в «верхний», пе-рекрывая оригинальный файл (так на-зываемое «копирование при записи»). В результате пользователь может бе-зограничений работать с этим файлом, в то время как в первоначальном месте он остаётся неизменным (см. на рис. 2 файл f5).

Здесь выплывают два интерес-ных момента. Допустим, файл f3 есть в обоих каталогах. Пользователь будет видеть «верхний». А если пользователь

щиеся в одноимённом каталоге ниж-него уровня. Чтобы этого избежать, unionfs должна обрабатывать такие воссозданные каталоги особым обра-зом – без передачи запросов на ниж-ние уровни. То есть они должны вести себя так, как при обычном монтиро-вании, когда верхний слой полностью перекрывает объекты нижележащего (см. рис. 4). Посмотрим, как это реа-лизовано на практике (если вообще реализовано).

Монтирование unionfs во FreeBSDВо FreeBSD монтирование файловой системы unionfs выполняется с помо-щью утилиты mount_unionfs (если вам это кажется удобнее, можно использо-вать mount -t unionfs). Параметров не-много – помимо «-o», позволяющего задавать стандартные опции монти-рования, есть ещё два ключа: -r – заставляет при монтировании

полностью скрыть объекты нижне-го уровня, в результате чего пове-дение unionfs становится идентично работе файловой системы nullfs;

-b – инвертирует верхний и ниж-ний уровни таким образом, что ви-димая пользователю точка монти-рования становится верхним уров-нем, т.е. рабочим каталогом.

Например:

Первая команда смонтирует ка-талог /usr/home/src поверх /usr/src, и всё это будет доступно пользова-телю в точке монтирования /usr/src, причём рабочим каталогом (катало-гом верхнего уровня, в котором бу-дут происходить все изменения) бу-дет /usr/home/src.

Вторая команда отличается от пер-вой ключом -b, так что результирую-щий каталог будет смонтирован в /usr/home/src, который и станет «верхним». То есть ключ -b фактически изменяет точку монтирования.

Если монтирование не выполняет-ся, завершаясь ошибкой «Operation not supported by device», то первое, в чём следует убедиться, – это в том, что под-гружается модуль unionfs.ko:

Рисунок 3. Удаление файла, имя которого есть в обоих каталогах

Рисунок 4. Удаление и последующее восстановление каталога

# mount_unionfs /usr/home/src ↵ /usr/src# mount -t unionfs -b ↵ /usr/home/src /usr/src

этот файл удалит? Согласно изложен-ному выше, при запросе f3 пользовате-лю должен быть возвращён «нижний» файл. Но тогда получается нестыков-ка со здравым смыслом – ведь поль-зователь только что этот файл удалил, и было бы нелогично увидеть его сно-ва! Точнее, даже не «его», а, вполне вероятно, совершенно другой файл, просто с таким же именем.

Этот случай unionfs должна обра-батывать особым образом – в «верх-нем» каталоге создаётся особый эле-мент-заглушка (называемый элемен-том whiteout), и как только он будет най-ден по запросу на поиск объекта, сра-зу возвращается ошибка «Нет такого файла или каталога», без обращений к нижележащим уровням. Если файл с данным именем в дальнейшем будет создан, то он заменит собой элемент whiteout, и уже он будет перекрывать файл, размещённый на нижнем уров-не (см. рис. 3).

Кстати, поскольку модификация «нижнего» каталога не допускается, то при попытке удалить файл, физи-чески размещающийся там (напри-мер, f2 на рис. 2) вместо физического удаления должен создаваться элемент whiteout в «верхнем» каталоге, чтобы перекрыть этот файл.

Ещё более интересный случай – удаление и последующее восстанов-ление каталога, имя которого присутс-твует на обоих уровнях. С удалением всё просто – так же, как и для файла, достаточно в «верхнем» каталоге со-здать элемент whiteout. Но вот если каталог после этого создать, то в нём сразу станут доступны файлы, храня-

59№1, январь 2007

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

При желании поддержку unionfs можно собрать и в ядре, для чего нужно добавить в конфигурационный файл ядра следующую строку (см. /usr/src/sys/conf/NOTES):

По умолчанию, учитывая неустойчивость нынешней ре-ализации, поддержка этой ФС в ядро не включается.

Применение на практикеИтак, что такое unionfs и как она работает (или, по край-ней мере, должна работать), мы разобрались. Возникает вопрос: а зачем она вообще нужна? Первое, что приходит в голову, – монтирование пользовательского каталога по-верх точки монтирования CD-диска. Раз нижний слой всё равно неизменяем, то доступность CD только для чтения никакой роли в данном случае не сыграет. Зато монтиро-вание доступного на запись каталога верхнего уровня поз-волит, например, выполнять сборку и установку программ или системы «прямо с CD» – все временные файлы будут создаваться в пользовательском каталоге:

Теперь в каталоге /mnt/cdrom можно выполнять любые изменения файлов – на самом деле они будут выполнять-ся в /usr/home/cdrom. Кстати, так можно не только обходить явный запрет на запись, но и избегать записи там, где она нежелательна. Например, примонтировав пользователь-ский каталог поверх каталога с исходниками, можно сме-ло экспериментировать с наложением патчей и сборкой, не боясь испортить «оригинал» или замусорить дерево исход-ных кодов временными файлами.

Можно зайти ещё дальше – использовать в качестве ка-талога верхнего уровня файловую систему, размещаемую в памяти (во FreeBSD она реализуется с помощью mdmfs). В результате и скорость работы должна возрасти, и «му-сор» за собой убирать вручную не придётся. Главное, что-бы выделение памяти под md-раздел было не в ущерб до-ступной для операций сборки:

Ещё один близкий по духу пример: использование unionfs для целей обучения. Понятно, что если в универ-ситете каждого студента пускать «админить» реальную систему, то довольно часто придётся заниматься аварий-но-восстановительными мероприятиями. Решений у этой проблемы много – и LiveCD, и заранее сохранённые «об-разы» системы, с которых можно легко восстановить ис-ходное состояние. Здесь же можно применить и unionfs – примонтировать пользовательский каталог поверх реаль-ного /etc, сохранив тем самым первозданную чистоту ори-гинального каталога.

Наконец, unionfs бу-дет крайне полезна для построения jail-систем. В Solaris «зоны» исполь-зуют похожую техноло-гию – при создании зо-ны она наследует файлы основной системы, но ес-ли какой-то из них изме-няется, то эти изменения отражаются только внут-ри данной зоны. Это поз-воляет значительно эко-номить дисковое про-странство, выделяя его лишь «по требованию», что особенно заметно, если выполняется построение мно-жества однотипных зон. Так же и с jail – создавая вирту-альную среду, например, для хостинга или тестирования ПО, можно не копировать в неё полностью все системные файлы, а использовать каталоги основной системы, поверх которых монтировать пользовательские каталоги в unionfs (фрагмент /etc/fstab):

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

Немного практикиОсталось посмотреть, правда ли, что unionfs сегодня нахо-дится во FreeBSD в таком плачевном состоянии, как об этом все говорят? Для эксперимента заготовим два каталога следующего содержания:

Файлы с одинаковыми именами будем различать по раз-меру – в каталоге md1 они занимают 6 байтов, в md2 – ну-

$ kldstat

Id Refs Address Size Name 1 4 0xc0400000 3aef60 kernel. . . . n 1 0xc2a3b000 9000 unionfs.ko

options UNIONFS #Union filesystem

# mount_unionfs /usr/home/cdrom /mnt/cdrom

# mount_mfs -s 50m md /tmp/md1# mount_unionfs /tmp/md1 /usr/ports/www/apache22

/bin /var/jails/outers/bin unionfs 0 0/sbin /var/jails/outers/sbin unionfs 0 0/lib /var/jails/outers/lib unionfs 0 0/libexec /var/jails/outers/libexec unionfs 0 0/usr /var/jails/outers/usr unionfs 0 0

# ls -l md1

total 8-rw-r--r-- 1 root wheel 6 22 дек 09:53 file1-rw-r--r-- 1 root wheel 6 22 дек 09:53 file2-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5drwxr-xr-x 2 root wheel 512 22 дек 09:54 subdir

# ls -l md2

total 2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file1-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3drwxr-xr-x 2 root wheel 512 22 дек 09:54 subdir

# 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

Unionfs в LinuxВ операционной системе Linux реализация unionfs также доступ-на и, похоже, является более зре-лой и устойчивой. Хотя на стра-ничке в Wikipedia и говорится, что «UnionFS в Linux, в общем, не рекомендуется для промыш-ленного использования».

В Ubuntu 6.10 (ядро 2.6.17) её поддержка «из коробки» отсутс-твует, но может быть установлена из репозитариев в виде пакетов union-source и union-utils.

60

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

левой длины. Выполним монтирование в точку md1 (рабо-чим каталогом при этом станем md2):

Именно так и должно быть – md2 мы видим в неизмен-ном виде, а в md1 перемешались файлы обоих каталогов, причём, несмотря на то что точкой монтирования стала md1, в первую очередь там доступны файлы из md2 (нуле-вой длины). Попробуем удалить файл:

Ну вот – удаление напрямую из md2 (в обход unionfs) прохо-дит без ошибок, и в md1 вместо него становится видно другой file1 (собственно, unionfs и не должна блокировать непосредс-твенный доступ к md2, так что данное поведение нужно при-знать нормальным, хотя это и может привести к некоторому замешательству). Удаление из md1 файла, который физи-чески же в md1 и размещается, тоже проходит без эксцес-сов. А вот попытка удалить file2, принадлежащий каталогу md2, из точки монтирования md1 заканчивается неудачей – «Операция не поддерживается». Та же судьба постигла и по-

пытку удалить md1/subdir, так что посмотреть на практике на самые интересные моменты, связанные с функциони-рованием unionfs, не получилось. Грустно...

Ну, по крайней мере, редактирование файла прошло должным образом – в md2 была создана копия файла file5, а md1/file5 остался в неприкосновенном виде.

С надеждой на лучшее...Как видите, unionfs – весьма полезная и удобная во многих случаях система. И всё бы было хорошо, если бы не край-не неустойчивая реализация на данный момент и не «про-белы» с удалением файлов (получается, что whiteout либо не реализован вообще, либо работает неправильно). Ак-тивное использование unionfs слишком часто приводит к «падениям» всей системы, да и сами разработчики чес-тно предупреждают на man-странице большими буквами: «ЭТОТ ТИП ФАЙЛОВОЙ СИСТЕМЫ ПОКА ЕЩЁ ПОДДЕР-ЖИВАЕТСЯ НЕ ПОЛНОСТЬЮ (ЧИТАЙ: ОН НЕ РАБОТАЕТ), И ЕГО ИСПОЛЬЗОВАНИЕ НА САМОМ ДЕЛЕ МОЖЕТ УНИЧ-ТОЖИТЬ ДАННЫЕ НА ВАШЕЙ СИСТЕМЕ. ИСПОЛЬЗУЙТЕ ЕГО НА СВОЙ СТРАХ И РИСК».

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

Серьёзные проблемы в нынешней unionfs привели к то-му, что японский разработчик Daichi Goto (http://people.freebsd.org/~daichi) взялся писать с нуля новую реализа-цию. На его домашней странице сообщается, что 2 декабря 2006 года его патч был включён в текущее дерево FreeBSD 7-CURRENT, так что будем надеяться, что рано или поздно мы получим-таки в своё распоряжение надёжную, устойчи-вую и эффективную unionfs.

1. http://people.freebsd.org/~daichi/unionfs – страница, посвящён-ная новой реализации unionfs во FreeBSD.

2. http://www.unionfs.org – сайт, на котором собрана информация по реализации unionfs для систем Linux.

# umount md1# ls -l md1

total 8-rw-r--r-- 1 root wheel 6 22 дек 09:53 file1-rw-r--r-- 1 root wheel 6 22 дек 09:53 file2-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5drwxr-xr-x 2 root wheel 512 22 дек 09:54 subdir

# vi md1/file5

md1/file5: 1 строк, 11 символов.

# ls -l md1

total 6-rw-r--r-- 1 root wheel 0 22 дек 10:21 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3-rw-r--r-- 1 root wheel 11 22 дек 09:55 file5drwxr-xr-x 4 root wheel 512 22 дек 10:17 subdir

# ls -l md2

total 4-rw-r--r-- 1 root wheel 0 22 дек 10:21 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3-rw-r--r-- 1 root wheel 11 22 дек 10:25 file5drwxr-xr-x 2 root wheel 512 22 дек 10:17 subdir

# mount_unionfs /tmp/md2 /tmp/md1# ls -l /tmp/md2

total 2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file1-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3drwxr-xr-x 2 root wheel 512 22 дек 09:54 subdir

# ls -l /tmp/md1

total 4-rw-r--r-- 1 root wheel 0 22 дек 09:54 file1-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5drwxr-xr-x 4 root wheel 512 22 дек 09:54 subdir

# 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

# rm md2/file1# ls -l md1

total 6-rw-r--r-- 1 root wheel 6 22 дек 09:53 file1-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5drwxr-xr-x 4 root wheel 512 22 дек 09:54 subdir

# ls -l md2

total 2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file2-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3drwxr-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-rw-r--r-- 1 root wheel 0 22 дек 09:54 file3-rw-r--r-- 1 root wheel 6 22 дек 09:55 file5drwxr-xr-x 4 root wheel 512 22 дек 09:54 subdir

61№1, январь 2007

bugtraq

Переполнение буфера в 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.Решение: Установите последнюю версию с сайта произ-водителя.

Составил Александр Антипов

Переполнение буфера в 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.Решение: Установите исправление с сайта производи-теля.

62

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

Ваш компьютер может большеВ журнале №3 за 2005 г. была опуб-ликована статья «FreeBSD в домене Microsoft Windows», где рассказывалось о том, как отказаться от регистрации локальных пользователей и использо-вать пользователей, предоставляемых доменом Microsoft Windows. На тот мо-мент это было действительно достиже-нием – отпала необходимость отслежи-вать создание новых пользователей и создавать аналогичные учетные за-писи на файловом сервере, что значи-тельно облегчило работу. На момент на-писания той статьи существовали неко-торые нерешенные проблемы, над кото-рыми я работал все это время, да и про-ект Samba не стоял на месте. Результа-том нашей постоянной совместной ра-боты стало то, что подключение в домен Windows можно использовать для зна-чительно больших целей, чем простая авторизация в домене, а именно: Элементарный доступ к компью-

теру через Microsoft Management Console.

Раздача прав на файлы и каталоги с использованием имен пользова-телей и групп из домена Windows.

Кроме того, были решены следую-щие вопросы: Первая регистрация в системе.

В прошлой статье была указана проблема: если новый пользова-тель добавлен через средства до-мена 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).

FreeBSD в домене Windows: дополнительные возможности

Правильное подключение FreeBSD в домен Windows дает возможность работать с Active Directory для проверки паролей, членства в группах и т. д. Но это лишь некоторая часть того, для чего FreeBSD может использовать данную информацию.

Рашид Ачилов

63№1, январь 2007

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

Подключаемся к домену Windows «по-настоящему»Подключение FreeBSD к домену Windows так, как оно бы-ло описано в предыдущей статье, представляет FreeBSD для Windows как Windows NT. Простой и надежный способ, обладающий тем не менее множеством недостатков, на-иболее крупный из которых – отсутствие поддержки про-токола NTLMv2, что делает контроллер домена весьма уяз-вимым к подбору паролей пользователей. Поэтому пер-вым делом был решен вопрос с подключением к домену Active Directory так, как это делает настоящая Windows – с использованием службы Kerberos. Для реализации это-го необходимо, чтобы Samba была собрана со следующи-ми параметрами:

При этом проводится автоматическое обнаружение про-граммы Kerberos (MIT или Heimdal), и, если она отсутствует, вставляется соответствующая зависимость в порт.

После сборки Samba каких-либо особых настроек де-лать не надо, за исключением:

Это настроит программы пакета Samba на роль члена до-мена Active Directory.

Это задает realm, к которому будет относиться данный компьютер. Параметр следует установить в значение, равное имени Active Directory, к которой будем подклю-чаться.

Проверьте, что значение параметра workgroup соответству-ет значению имени домена (pre-Windows 2000). Пример, при-веденный выше, выбран не случайно – имя Active Directory и имя домена имеют разные области применения и совер-шенно не обязаны быть одинаковыми.

В документации к пакету Samba рекомендуется также явно установить параметр:

если версия Windows – 2003. Этот параметр задает исполь-зование описанного в RFC 2478 протокола согласования механизмов аутентификации.

Перед запуском Samba необходимо создать конфигу-рационный файл системы Kerberos /etc/krb5.conf. Его фор-мат достаточно подробно описан в man krb5.conf, поэтому я приведу только готовый рабочий пример с необходимы-ми комментариями.

Здесь мы исходим из предположения, что имя 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:

Приведенный ответ является нормальным. После ус-пешного завершения команды в каталоге /tmp должен по-

# make WITH_ADS=yes WITH_LDAP=yes <другие параметры, если необходимо>

security = ads

realm = domain.ru

workgroup = DOMAIN_INC

client use spnego = yes

[libdefaults] default_realm = DOMAIN.RU dns_lookup_kdc = yes

[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

# kinit [email protected]

[email protected]'s Password:kinit: NOTICE: ticket renewable lifetime is 1 week

64

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

явиться файл krb5cc_0. Ошибки (а их больше, чем хоте-лось бы) описаны в разделе «Возможные ошибки и их ус-транение».

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

После получения билета администратора домена мож-но к этому домену подключаться:

Здесь в параметре -U задается имя доменного пользова-теля с правами администратора домена (от его имени бу-дет создан обьект «Компьютер»), в параметре -w – имя Active Directory или имя домена. Имя Active Directory мож-но задавать только в том случае, если в /etc/resolv.conf есть запись, указывающая на DNS, работающий на одном из контроллеров Windows-домена, и в /etc/krb5.conf указа-но dns_lookup_kdc=yes, в противном случае следует указы-вать имя домена (pre-Windows 2000 с точки зрения Windows-администраторов). Указанный здесь ответ является пра-вильным, после этого в Active Directory должен появиться соответствующий обьект. Указание имени домена являет-ся более надежным и реже приводит к ошибкам, хотя вклю-чение в домен должно проходить как в том, так и в другом случае (рис. 1).

Помните, что Samba при подключении к домену выпол-няет поиск DC для заданного домена следующим образом (если запись найдена, поиск прекращается, используются найденные данные):

В gencaсhce.tdb ищется запись SAF/ DOMAIN /DOMAIN.RU.

В gencache.tdb ищется запись NBT/DOMAIN.RU#1c. Выполняется поиск DC через DNS посредством поиска

записи SRV _ldap._tcp.dc._msdcs.DOMAIN.RU. Выполняется поиск DC в соответствии с параметром

name resolv order.

Если ни один из этапов поиска не позволил найти, как минимум, 1 DC, фиксируется ошибка.

На этом «настоящее» подключение к домену Windows закончено. Проверить правильность подключения можно в любое время командой:

Если вместо этой надписи увидите «Join is not valid», под-ключение к домену по каким-либо причинам невозможно. Подробнее о том, что можно сделать в таком случае, сказа-но в разделе «Возможные ошибки и их устранение».

И вот теперь можно включать NTLMv2 (рис. 2).Кроме этого, в конфигурационном файле smb.conf нуж-

но отключить NTLMv1, установив параметр:

и LM, если он все еще включен (шифровка LM очень сла-бая и может быть легко взломана):

Убедиться в том, что используется именно NTLMv2, можно, включив отладку в Samba на уровень 5. Сделать это для одного пользователя проще через дополнитель-ный файл конфигурации, который обычно подключает-ся в самом конце конфигурационного файла smb.conf та-ком образом:

то есть при загрузке конфигурационного файла обработ-чиком сеанса для пользователя administrator будет вклю-чен файл с именем smb.conf.administrator. Он содержит все-го две строки:

После этого в файле log.administrator можно найти сре-ди прочего большого количества отладочной информации следующие строчки:

Используем MMCВозможность использования MMC для управления Samba, работающей на UNIX, была настоящей маленькой револю-

# klist

Credentials cache: FILE:/tmp/krb5cc_0 Principal: [email protected]

Issued Expires Principal Nov 27 16:25:29 Nov 28 02:25:29 krbtgt/[email protected]

# net ads join -U administrator -w domain.ru

administrator's password:Using short domain name -- DOMAIN_INCJoined 'VMFREE' to realm 'DOMAIN.RU'

Рисунок 1. Обьект «Компьютер», представляющий FreeBSD в AD

# net ads testjoin

Join is OK

ntlm auth = no

lanman auth = no

include = /usr/local/samba/conf/smb.conf.%U

[global]log level = 5

[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

65№1, январь 2007

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

цией. Теперь администратор домена Windows может выпол-нять из привычной ему оболочки некоторый набор доступ-ных операций по управлению сервером. Несмотря на пока еще очень скромный набор средств – на текущий момент все возможности управления исчерпываются запуском и остановом сервисов, само появление такой возможнос-ти вызывает бурный энтузиазм, и я нисколько не сомнева-юсь в том, что вскоре их станет больше (рис. 3).

Для того чтобы задействовать возможность запус-ка и останова сервисов, необходимо создать подкаталог svcctl в каталоге, указанном в параметре libdir при сборке Samba (по умочанию /usr/local/samba), и поместить в этот каталог символические линки на все стартовые скрипты тех сервисов, управление которыми вы хотите вынести на MMC. Эти скрипты должны поддерживать параметры start и stop для соответственно запуска и остановки сервиса. Во все файлы скриптов должна в виде комментария быть добавлена строка:

Если этого не сделать, во все сервисы, которые не отно-сятся к самому пакету Samba, будет подставлено «External Unix Service». Также в конфигурационном файле smb.conf следует указать список скриптов, которые будут вынесены в MMC. Список задается параметром:

Список должен совпадать с именами символических линков (которые вовсе не обязательно совпадают с име-нами файлов, на которые они указывают). Если описание сервиса добавляется уже после того, как был хотя бы один раз указан параметр svcctl list, то, для того чтобы запомнить новое (или изменить старое) описание, необходимо уда-лить файл registry.tdb из каталога, указанного параметром lockdir при сборке Samba (рис. 4).

Что еще можно сделать через MMC? Можно управлять локальными пользователями и группами, но ограничен-но – почему-то создать пользователя или группу не уда-лось, можно только редактировать свойства, добавлять пользователей в группы, удалять группы и пользователей. Для создания локальных пользователей следует исполь-зовать smbpasswd:

При этом, если используется passdb backend = tdbsam (а он используется по умолчанию), пользователь должен существовать в системе.

Для создания локальных групп следует использовать net sam:

Net sam – это недокументированная часть команды net, предназначенная для непосредственного манипулирова-ния данными о локальных и встроенных группах, храня-щихся в файле group_mapping.tdb. Эта команда не рабо-тает с базой пользователей, подключаемой через passdb backend. Зато у нее есть встроенная справка, достаточная для работы с ней:

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

Что имеется в виду под использованием учетных запи-сей домена? UNIX имел возможность назначить каждому файлу только одного владельца, одну группу владельцев и права «для всех прочих». Для корпоративных файл-сер-веров, где зачастую на файлы назначаются довольно-таки причудливые права, этого было явно недостаточно, и, что-бы выйти из положения, приходилось включать пользова-теля в большое количество групп и, достигая ограничения в 16 групп (максимальное число групп, в которые может вхо-дить пользователь), объяснять пользователям невозмож-ность установить запрошенные права какими-нибудь при-думанными «требованиями Windows».

С появлением поддержки ACL в файловых систе-мах FreeBSD все переменилось. Теперь на каждый файл или каталог можно назначить сколько угодно владельцев, групп владельцев и т. д. Все это управляется командами getfacl/setfacl с консоли, у которой только один недоста-

Рисунок 2. Редактирование групповой политики для включения NTLMv2

# Description: Описание сервиса, как оно будет отображаться

svcctl list = cups apache mysql ssh2

# smbpasswd -a ftp

New SMB password:Retype new SMB password:Added user ftp.

# net sam createlocalgroup moretest

Created local group moretest with RID 1002

# net sam

net sam createbuiltingroup Create a new BUILTIN groupnet sam createlocalgroup Create a new local groupnet sam mapunixgroup Map a unix group to a domain groupnet sam addmem Add a member to a groupnet sam delmem Delete a member from a groupnet sam listmem List group membersnet sam list List users, groups and local groupsnet sam show Show details of a SAM entrynet sam set Set details of a SAM accountnet sam provision Provision a clean User Database

66

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

ток – она не позволяет делать рекурсивные назначения. Поскольку система «знает» пользователей и группы доме-на, то их соответственно можно использовать для назна-чения прав в команде setfacl, а также в конфигурационном файле smb.conf. Приведу несколько примеров (все приме-ры взяты из рабочего файла, в котором подправлены толь-ко названия групп):

Наиболее простой пример, в котором доступ по записи предоставляется двум пользователям домена user1 и user2, а также локальному пользователю root. Макрос %D, ис-пользуемый в конфигурационных файлах пакета Samba, принимает значение имени домена (параметра workgroup из smb.conf), символ «+» – это тот символ, который был за-дан параметром winbind separator. Если в параметре winbind separatror был указан другой символ, следует использо-вать его. Также можно использовать макрос %w. В итоге строка %D+user1 превратится в DOMAIN_INC+user1. Ка-ким образом система «разберется», где локальный поль-зователь, а где доменный? По наличию в строке символа «+» (или любого другого, заданного параметром winbind separator) – без него пользователь считается локальным, с ним – часть до символа считается именем домена, пос-ле – именем пользователя. Домен можно указывать и на-прямую, и совсем не обязательно это должен быть тот же домен, что и в параметре workgroup.

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

Применяя дополнительные средс-тва управления доступом в smb.conf (директивы inherit- и force-) будьте особенно внимательны – директи-вы inherit permissions, inherit owner и inherit acls ведут к наследованию соответственно прав, владельца и ACL-записей от родительского ка-талога, а директивы force user, force group и т. д. – к их принудительному заданию. При этом происходит сле-дующее.

При задании force user изменяет-ся значение макроса %u. Если он ис-пользуется для формирования пути к сетевому ресурсу, то можно неожи-данно обнаружить, что создалась но-вая папка.Например, при использова-нии сетевого ресурса:

если для пользователя administrator добавить в файл smb.conf.administrator строку:

то при подключении к ресурсу backup пользователь окажет-ся в каталоге /usr/share/dmbackup/oneuser, а вовсе не в ка-талоге /usr/share/dmbackup/administrator.

Задание force mode влияет на значение «прав по умол-чанию». Например, задание в smb.conf.administrator:

при правах по умолчанию на каталог:

привело к появлению следующих прав на каталог:

К сожалению, изменять права на файлы или каталоги, добавлять или удалять ACL через «Properties» до сих пор невозможно – ошибок при этом не выдается, но и ничего не делается. Кроме того, ограничение на 16 групп тоже ос-талось и даже стало еще хуже – ведь теперь локальные группы объединяются с доменными. Зато каждый поль-зователь может входить в различные локальные группы на различных компьютерах, и на файлы, каталоги и ре-сурсы в smb.conf и персональных конфигурационных фай-лах можно назначать отдельные права для пользователей, и таких прав может быть сколь угодно много.

Рисунок 3. Консоль MMC после подключения к FreeBSD

[myshare1] comment = This is a comment path = /var/ftp/pub/quality write list = %D+user1,%D+user2, root

[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

[backup]force create mode = 0666

force user = oneuser

drwx------ 3 root wheel 512 15 Oct 22:59 root/

drwxrwx---+ 3 root wheel 512 15 Oct 22:59 root/

[backup] comment = There are backup shares for each user path = /usr/share/dmbackup/%u

Рисунок 4. Управление сервисами через консоль MMC на FreeBSD

67№1, январь 2007

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

Автоматическое создание каталогов для новых пользователейОдна из серьезных проблем корпоративных файл-серве-ров под управлением FreeBSD – необходимость вручную создавать домашние или иные каталоги для сотрудников, вновь принимаемых на работу. В небольших организациях, как правило, это делается вручную, но если компания круп-ная, это становится неприемлемым. В предыдущий раз этот вопрос оставался нерешенным, но сейчас я с удовольстви-ем предложу вам его решение. В этом поможет PAM, кото-рый, как известно, может все или почти все, что относится к вопросам регистрации в системе.

Первая регистрация с консолиПри первой регистрации с консоли пользователь должен до запуска шелла получить домашний каталог и набор стан-дартных стартовых файлов, в противном случае в качест-ве домашнего каталога он получит каталог /:

В портах существует модуль pam_mkhomedir (security/pam_mkhomedir). Но он не работает. Точнее, он работает, но не так, как надо. Проверка наличия домашнего катало-га выполняется в категории Session management. Логичес-ки это так, только на практике имеется такой побочный эф-фект, что первый раз пользователь все равно регистрирует-ся так, как если бы у него не было домашнего каталога, по-тому что сначала запускается шелл, описанный для пользо-вателя в /etc/master.passwd, а уже потом выполняются сер-висы из секции Session management. Эта ситуация была ис-правлена переносом проверки наличия домашнего катало-га в категорию Account management, и теперь создание до-машнего каталога происходит действительно при первой регистрации в системе. Скачать доработанную версию мо-дуля, который называется pam_mkhome, можно с [1]. Для за-пуска добавьте в файл сервиса (/etc/pam.d/system для ре-гистрации с консоли, /etc/pam.d/ssh для SSH-сессий и т. д.) следующую строку:

Дополнительно можно указать параметры skel=<каталог>, который задает название каталога, в котором лежат «скеле-ты» типовых конфигурационных файлов и debug, который включает отладку. Теперь все работает как надо:

Первое обращение по сети (Microsoft Network)Спрос на регистрацию с консоли не очень-то велик. Пока еще не очень много организаций, где в качестве рабочих станций стоят Linux- и FreeBSD-машины. Более интересный вариант – автоматическое создание домашнего и других каталогов при первом обращении по сети Microsoft Network. Поскольку Samba не предусматривает такой возможности (пока, по крайней мере), мною был разработан скрипт, ко-торый, выполняясь от пользователя root, создает домашние и любые другие каталоги при первом подключении к ним. Делается это использованием парамера root preexec:

Указанный скрипт можно скачать с [1] в виде архива checkhomes-0.90.1.tar.bz2.

Скрипт checkuserhome используется для создания до-машних каталогов в ресурсе [homes], скрипт checkbackdir используется для создания персональных каталогов в про-извольном ресурсе.

Для установки скриптов их необходимо настроить на те-кущий конфигурационный файл Samba, для этого распа-куйте архив в какой-нибудь каталог и запустите:

Вместо /usr/local вы можете указать любой другой ка-талог, где расположены каталог sbin и программа smbd. Configure проверит наличие ${prefix}/sbin/smbd и наличие конфигурационного файла, расположение которого было указано при сборке пакета Samba. При отсутствии фай-лов smbd в ${prefix}/sbin или smb.conf configure завершает-ся с соответствующей диагностикой.

Затем настройте параметры в файле checkhomes.conf, если это необходимо. Параметр skel задает расположение каталога «скеле-

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

Параметр dbackup задает расположение корневого ка-талога ресурса, в котором будут создаваться подката-логи. Используется при генерации checkbackdir.

Параметры sysdirs и bdirs используются для зада-ния списка подкаталогов, которые должны быть со-зданы в каталоге, создаваемом checkuserhome или checkbackdir соответственно.

Параметры sysmode и bmode соответственно задают права доступа, устанавливаемые на эти каталоги.

Если не нужно создавать никаких подкаталогов, нужно установить sysdirs (bdirs) равным пустой строке (sysdirs=””).

После настройки checkhomes.conf запустите:

login as: testipSSH server: PAM authenticationUsing keyboard-interactive authentication.Password:sshd2[4267]: WARNING: Could not chdir to home directory /usr/home/testip: No such file or directoryLast login: Thu Oct 26 2006 23:24:26 +0700 from shelton.netCopyright (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/

account required pam_mkhome.so mode=0700

login as: testipSSH server: PAM authenticationUsing keyboard-interactive authentication.Password:Last login: Thu Oct 26 2006 23:48:44 +0700 from shelton.netCopyright (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/usr/home/testip

root preexec = csh -c '/usr/local/sbin/checkuserhome ↵ %u %D %U'

# configure –prefix=/usr/local

# make

68

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

для генерации скриптов;

для установки скрипта checkuserhome;

для установки cкрипта checkbackdir.Для чего используются эти скрипты? Checkuserhome

проверяет наличие каталога, описанного в ресурсе [homes] для текущего пользователя, для чего скрипту и передают-ся макросы %u, %D и %U, представляющие соответствен-но имя пользователя текущего сервиса, имя домена (зна-чение параметра workgroup=) и имя пользователя в теку-щей сессии.

Разница между %u и %U здесь проявляется в том, что первый макрос расширяется в имя пользователя после проверки по файлу подстановок users.map, а второй мак-рос расширяется в имя пользователя ДО подстановки. Ра-зумеется, заметной она будет только, если пользователь описан в файле users.map, например, пусть в нем содер-жится такая строчка:

Для пользователей administrator и moreadmin будут со-зданы различные домашние каталоги. Если необходимо, чтобы все пользователи, которые соответствуют локаль-ной учетной записи root, использовали один и тот же ката-лог, то в строке вызова, приведенной выше, заменить пос-ледний параметр с %U на %u.

Checkbackdir используется для создания персонального каталога в произвольном ресурсе. Запускается добавлени-ем в параметры ресурса в файле smb.conf, строчки:

Значения макросов, передаваемых скрипту, те же самые. Возможно, в будущем это будет интегрировано непос-

редственно в сам проект Samba.

Автоматическое монтирование сетевых ресурсов Microsoft Windows при регистрацииПожалуй, это самая печальная тема. Печальна она тем, что к ней напрочь отсутствует хоть какой-либо интерес. Мо-жет быть, конечно, уже в Windows и не модно монтировать сетевые ресурсы, чтобы использовать однобуквенное сим-волическое имя для обращения к ним, но мне все равно хо-телось добиться того, чтобы зарегистрировался в системе – и все нужные сетевые ресурсы подключены. Сначала мной был разработан скрипт mountsmb, написанный на tcsh, по-том он был переписан на sh и назван mountsmb2. В насто-ящее время он присутствует в портах (sysutils/mountsmb2). Скрипт снабжен небольшой документацией, в которой опи-сано, как его установить и настроить. По сути дела, там все сводится к тому, чтобы настроить /etc/nsmb.conf, создать в домашнем каталоге файл .mssmbrc, формат которого опи-

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

Настроить mountsmb2 не очень просто, но это связано не с недоработками скрипта, а исключительно со скром-ной, очень скромной реализацией SMB/CIFS во FreeBSD – скриптами, кроме того, что уже сделано, сделать больше нельзя.

В настоящий момент ведутся работы по PAM-модулю, ко-торый бы выполнял подобную задачу. Существующие мо-дули, известные мне, удалены из портов в связи с их старо-стью и заброшенностью. Позиция же FreeBSD Team по от-ношению к SMB/CIFS все больше напоминает буддистских обезьянок – «не вижу зла, не слышу зла, не делаю зла» – собственная, давно заброшенная реализация SMBFS (про-грамма монтирования), и никакого желания взаимодейс-твовать с Samba Team. Подобное снобистское невнима-ние к взаимодействию с Microsoft Network ничуть не спо-собствует повышению престижа FreeBSD – трудно найти сеть, где бы не использовалась Microsoft Network, и игно-рировать ее – значит сознательно ограничивать распро-странение системы.

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

Пожалуй, самая нелепая ошибка:

В первый раз она просто повергает в немое изумление. А на самом деле все очень просто – на компьютере установ-лена виртуальная машина Java, и в ней тоже есть програм-ма kinit. И если в настройках /usr/local/bin окажется впере-ди /usr/bin, вы именно такую картину и увидите.

Такая ошибка может возникнуть, если неверно указан KDC, компьютер недоступен, там не запущен сервис или пра-вила файерволла запрещают доступ к указанному ком-пьютеру.

# make single

# make double

root=DOMAIN_INC+administrator root=DOMAIN_INC+moreadmin

root preexec = csh -c '/usr/local/sbin/checkbackdir ↵ %u %D %U'

# kinit [email protected]

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 errorKrbException: 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)

# kinit [email protected]

[email protected]'s Password:kinit: krb5_get_init_creds: unable to reach any KDC in realm DOMAIN.RU

# /usr/bin/kinit [email protected]

[email protected]'s Password:kinit: krb5_get_init_creds: unable to reach any KDC in realm domain.ru

69№1, январь 2007

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

Имя для Kerberos должно набираться с учетом регистра! Данный пример показывает, что DOMAIN.RU и domain.ru – это разные вещи.

Указывать имя Active Directory вместо имени домена (pre-Windows 2000) можно только в том случае, если Samba способна найти DC с помощью DNS-запроса. Это может быть обеспечено либо указанием в /erc/resolv.conf адреса DC (на котором обязательно должен работать DNS, даже если он никем не используется), либо внесением в любой DNS соответствующих записей. Если и после этого подклю-чение не проходит, проверьте секцию [domain_realm] фай-ла /etc/krb5.conf – записи:

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

Возможны два варианта – либо, действительно, полное имя компьютера, используемое для формирования при-нципала 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:

Обратите внимание, что здесь может быть использова-на только форма pre-Windows 2000 имени домена. При под-ключении таким способом будет невозможно использовать MMC для подключения к компьютеру.

При работе через MMC ошибиться практически негде. Не потому, что все работает как часы, а потому, что как раз мало что работает и просто нет места для ошибки. Единс-твенное, что может вызвать недоумение, – это наименова-ние и описание сервисов. Для добавления нового или из-менения старого описания удалите registry.tdb. Описание можно набирать по-русски, но при этом текст должен быть

в KOI8-R, а не в кодировке Windows. На рис. 5 видны два примера описаний – первое было набрано в KOI8-R, вто-рое – в CP-1251.

Новое наименование добавьте в файл services/services_db.c и пересоберите пакет Samba. Например, до-бавим наименование для сервиса INN:

При назначении прав на ресурсы с использованием 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.

# 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

.domain.ru = DOMAIN.RUdomain.ru = DOMAIN.RU

# net ads join -U administrator -w domain.ru

# net rpc join -U administrator -w DOMAIN_INC

administrator's password: Using short domain name -- DOMAIN_INCFailed to set servicePrincipalNames. Please ensure thatthe DNS domain of this server matches the AD domain,Or rejoin with using Domain Admin credentials.Disabled account for 'VMFREE' in realm 'DOMAIN.RU'

Password:Joined domain DOMAIN_INC.

Рисунок 5. Пример правильного и неправильного описания сервиса по-русски

--- services_db.c.old Sun Oct 15 03:04:58 2006+++ services_db.c Sun Oct 29 23:14:35 2006@@ -80,6 +80,7 @@ "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 }};

70

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

А может быть жизнь – это сказка? Цепь чудесных превращений. Главное – вовремя понять, что

лягушка – царевна, в клубочке – путе-водная нить, а смерть Кащея – на кон-це иглы, и нигде больше… Алексей Ра-евский нашел свое место под солнцем, а фирма «СекьюрИТ» – свой сегмент на рынке IT.

Когда компьютеры были большими…Банальная мысль, повторяющаяся из биографии в биографию, из очер-ка в очерк: все начинается с детства. Но идея верная! Очень многое зависит от того, что в нас заложили в детстве, в какое время мы появились на свет. Родись Алексей Раевский на пять лет раньше, кто знает, какую профессию он выбрал, кем бы стал. Интерес к то-карным станкам на уроках труда, посе-

щение по-советски бесплатного круж-ка моделирования и ему подобных, радиолюбительство наверняка пов-торилось бы… Тем более, что радио школьник Алеша Раевский изучал до-вольно серьезно: «Там есть несколь-ко направлений. Во-первых, констру-ирование. Спаять, включить, и чтобы этот самодельный приемник не зады-мился, а заработал. Во-вторых, скоро-стная радиотелеграфия, прием радио-грамм азбукой Морзе на слух, запись стенографией и передача ключом. Это официальный спорт, соревнования по нему проходят, он и сейчас существует, несмотря на развитие Интернета. Со-ревнования проходят так: сидишь в ра-диоклассе с наушниками, тебе пере-дают радиограмму, ты ее записыва-ешь, сдаешь, судья смотрит: ошибся или нет и кто быстрее сделал. В-треть-их, работа в эфире, с использованием

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

Но все изменил один важный исто-рический факт – в нашу жизнь нача-ли активно входить компьютеры, тог-да еще большие, непохожие на совре-менные PC. Ребята, увлеченные новей-шими технологиями, искали игровые клубы, изучали «Агаты» и БК. Алек-сею повезло – в 8-м классе на олим-пиаде по информатике в Московском университете он столкнулся с самой современной техникой: «Первый тур был теоретический, надо было на бу-маге что-то запрограммировать. По-том те, кто хорошо запрограммиро-вали, выходили в полуфинал, прак-тический тур. Там был класс IBM PC, именно в нем состоялось мое первое знакомство с интегрированной сре-дой Turbo Pascal. Я помню, что вместо того, чтобы решать задачу, я экспери-ментировал со средой, в которой бы-ли встроенные компилятор и отладчик. По сравнению с БК-0010, где загрузка была с магнитофонных кассет, это бы-ла просто фантастика».

Первый звонок судьбы прозвенел. Пока очень тихо и неуверенно. Вряд ли пятнадцатилетний подросток осознал, что чудо в его жизни уже произошло. Все было прозаично. Восьмиклассник Алексей поехал в физико-математи-ческую школу №542 при МИФИ на день открытых дверей. Походил, понрави-лось. И неизвестно что больше – фи-зическая и химическая лаборатории или два хорошо оборудованных вычис-лительных класса. Где-то полгода про-учившись в спецшколе, Алексей Раев-ский понял, что его будущее обязатель-но будет связано с компьютерами. Ко-локола судьбы зазвенели громче.

Выбирая вуз, наш герой немного поколебался. Ему предложили пос-тупать в Физтех (Московский физико-технический институт) по сокращенной программе, сдавать вместо пяти все-го два вступительных экзамена. Од-

Снаряд – броняВ этом соперничестве Алексей Раевский на стороне брони. Пользователям повезло.

71№1, январь 2007

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

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

Однако выбор вуза уже не имел значения. Потому что выбор своего Дела был предрешен.

Просто инженерСкоро сказка сказывается, да не ско-ро дело делается. От интереса к сис-темам защиты программного обес-печения от копирования до созда-ния собственной фирмы было дале-ко… Но интерес этот оказался стой-ким, и на первых порах – хакерским, то есть Алексей Раевский взламывал эти самые защиты. Однако он был хакером в первоначальном, практи-чески первобытном значении этого слова – исследовал проблему, нахо-дил уязвимости. Современные хаке-ры, считает генеральный директор ЗАО «СекьюрИТ», – это чаще всего подростки, которые вместо того, что-бы писать всякую ерунду на стенах в подъезде, включают компьютеры и хулиганят в сети, самоутверждаясь таким современным способом. Но их деятельность не похожа на открытие или искусство. «Как правило, это ис-пользование набора каких-то извест-ных технологий для атаки на конкрет-ные сайты. У меня есть инструмента-рий, к которому я не имею никакого отношения – молоток, отвертка, и я должен этими инструментами что-то расковырять…». Логично, что изучив уязвимости, Алексей перешел к со-зданию собственных систем защиты. Новый сказочный поворот в его жиз-ни назревал. Судьба подбрасывала знаки. Вот Алексей Викторович Ра-евский, будучи еще студентом, ста-новится внештатным экспертом, тес-тирующим стойкость систем защит производства российских и зарубеж-ных компаний. Вот уже сам участву-ет в разработке систем для защиты программного обеспечения от несан-кционированного копирования и сис-тем защиты информации от несанк-ционированного доступа, в частности, Secret Disk и Secret Disk Server…

Конечно, можно не увидеть ниче-го сказочного в обычной деятельнос-

ти инженера-математика, который вы-брал IT-сферу и постепенно укреплял в ней свои позиции. Однако я не ус-таю удивляться вполне житейским чу-десам: как жизнь протягивает ниточ-ку от легкого интереса к той или иной сфере к серьезному любопытству, же-ланию исследовать ее ближе и нако-нец к воплощению мечты – ты стано-вишься активным строителем выбран-ной тобой сферы, ее надеждой и опо-рой. Спасибо судьбе или собствен-ной интуиции, но в 2001 году Алексей Раевский становится учредителем ЗАО «СекьюрИТ» (ударение на пос-леднюю гласную, так называют свою фирму ее создатели), с 2003 года яв-ляется генеральным директором ком-пании. За первые два года существо-вания были разработаны системы за-щиты информации на рабочих станци-ях и серверах.

И опять – чудо это? Раевский, ко-нечно, на это бы ответил улыбкой.

Алексей считает, что он ничего осо-бенного не делает, всего-навсего зани-мается инженерной работой, которая по диплому «прописана»: берет идею, воплощает ее во что-то материальное, кладет в коробку, рекламирует про-дукт на рынке и продает. «Это как ав-томобиль сделать. Все узлы в ней из-вестны. Двигатель изобрели, коробку, тормоза, но «Ауди» сделала машину, назвала «Ауди А6», покрасила в кра-сивый цвет, назначила цену. С техни-ческой, идеологической точки зрения системы безопасного хранения дан-ных достаточно просты, в них нет осо-бых изобретений, за них не дают Но-белевских премий. Но это важно прак-тически, ведь эти системы защищают данные, которые хранятся на жестких дисках, магнитных лентах, дисках CD на случай, если носитель попадет в чу-жие руки. До нас никто на этом не кон-центрировался, не делал производс-тво и продажу этих систем основным бизнесом».

Однако Раевский и его коллеги де-лают нечто более важное: они фор-мируют в России рынок информаци-онной безопасности от внутренних уг-роз, который создается очень медлен-но во многом из-за беспечности руко-водителей мелких и крупных компа-ний. Почему-то считается, что утечка информации – исключительно запад-ная проблема. Это не так. У нас тоже

крадут базы данных и продают потом на дисках для всеобщего пользова-ния. Просто у нас к этому относятся… как к неизбежному злу. Виновных, ко-нечно, ищут, но профилактикой зани-маются вяло. А почему за рубежом о таких случаях громко говорят и ста-раются не допустить? Потому что за-коны строгие и обычно выполняются. «У них если происходит такой инци-дент, – объясняет Алексей, – по зако-ну компания должна объявить о про-паже. Пропал ноутбук – во-первых, на своем сайте опубликуйте, какие у вас там были данные. Если потерян носитель с данными о клиентах, каж-дого необходимо в обязательном по-рядке известить. Ладно, если ноутбук сгорел, его переехала машина, он уто-нул в реке. А если попал в руки зло-умышленников? В нем адреса, имена, номера счетов…».

Я спрашиваю Алексея: «А в нашей стране фирмы озабочены безопаснос-тью?» – «У нас еще далеко до озабо-ченности. Мы в самом начале пути. Хо-тя наиболее продвинутые российские фирмы заинтересованы в защите».

Конечно, у нас и масштабы потерь от воровства важных сведений пока не велики. Зарубежные компании по-рой фиксируют астрономические циф-ры убытков. «Представьте, у Ситибан-ка пропало несколько лент, на них бы-ли данные о трех миллионах клиентов с номерами счетов и остальными дан-ными. Каждому клиенту надо пись-мо послать, уведомить его… Даже ес-ли банк «дружит» с почтовой служ-бой США, все равно это в копеечку влетит. Кроме этого, они предложили всем бесплатный кредитный монито-ринг. В принципе, это услуга платная. Но обычно банки, которые допускают такие утечки, предлагают ее жертвам бесплатно. Ведь если средства пропа-дут со счетов, будет еще хуже…».

Между прочим, средства защи-ты на Западе не так хороши, как те, что предлагает российская фирма «СекьюрИТ». За рубежом защита та-кого типа предлагается в основном ап-паратная. Алексей Раевский со това-рищи делает программные средства. Это дешевле, удобнее.

Кто-то может сказать: но ведь фирмы, у которых есть секреты, мо-гут просто-напросто установить стро-гую слежку за своими сотрудниками,

72

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

не пускать на рабочее место со сво-ей техникой, отбирать на входе все, вплоть до мобильников. Так, кстати, делают на военных «ящиках». А как вы думаете, уютно будет работать в такой компании? То-то и оно…

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

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

– Что самое слож-ное, когда создаешь фирму?

– По отдельности все кажется простым. А все вместе увязать, чтобы одно друго-му не противоречи-ло, все вместе рабо-тало, – сложно. Мы выступаем в качес-тве вендера. То есть и придумываем про-дукт, и проектируем

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

– Вам важно, кто с вами работа-ет рядом?

– Это проблема номер один. Мы все вместе работали в одной компании, ушли оттуда и создали СекьюрИТ. Пер-вое время, естественно, было тяже-ло финансово. Наименее терпеливые не дождались лучших времен и уш-ли. Осталось три человека, включая меня. Потом возник новый коллектив. Для меня важны не столько професси-ональные качества человека, его об-разование, количество дипломов, хо-тя, конечно, в нашем деле нужен опре-деленный интеллектуальный уровень. Самое главное – разделять совмес-

тные ценности компании, одинаково понимать основные принципы, на ко-торых строится вся работа.

– Что будет дальше? Что ваша фир-ма предложит потребителям?

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

Будем развивать дальше средства для борьбы с инсайдерами. USB-ус-тройство – не единственный спо-соб утечки, информацию можно еще и по электронной почте отправить. Причем не обязательно через свой почтовый сервер, можно и через mail.ru, например. Это тоже пробле-ма, и многие не знают, как ее решить. Тут соперничество: снаряд – броня. Возникают новые технологии воровс-тва – появляются новые технологии защиты от воровства. Процесс бес-конечный.

Но разве не чудо, что в этом сопер-ничестве Алексей Раевский на стороне брони? Как не повезло снаряду…

Текст Оксана Родионова,фото Владимира Лукина

74

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

В последнее время в мире NT полу-чает все большее распростране-ние технология руткитов. По су-

ти, руткит (rootkit) представляет собой технологию, предназначение которой скрывать что-либо. Под технологией руткитов обычно понимают программу, которая «документированно» или нет использует перехват API-вызовов для фильтрации возвращаемых результа-тов системных функций. В предыдущей статье (см. №10 за 2006 г.) давалась вводная информация, а также были рас-смотрены алгоритмы работы руткитов пользовательского режима. В данной статье внимание уделено алгоритмам работы руткитов режима ядра.

Напомню, что руткиты режима яд-ра функционируют на нулевом кольце и имеют полный доступ к области па-мяти ядра NT, со всеми вытекающими отсюда последствиями.

Например, руткит может модифи-цировать структуры данных Windows и тем самым скорректировать пове-дение ядра для достижения задан-ных целей: маскировка файлов, про-цессов, сетевых соединений. В статье описываются техники, используемые в современных руткитах режима яд-ра, включая fu и Shadow Walker. Так-

же описаны утилиты, с использовани-ем которых можно выявлять скрытые руткитами объекты.

КлассификацияДля скрытия в системе каких-либо объ-ектов руткиты либо перехватывают сис-темные сервисы ядра, аналогично тому, как это делают руткиты пользователь-ского режима для DLL, либо модифи-цируют структуры данных ядра. В соот-ветствии с таким подходом руткиты де-лятся на две следующие группы: модифицирующие путь выполне-

ния потока (modify execution path); модифицирующие объекты ядра

(directly kernel object manipulation, DKOM).

Первые реализуются с использо-ванием следующих методов: перехват функций через SSDT (таб-

лица диспетчеризации системных сервисов);

перехват прерываний; изменение первых машинных ко-

манд перехватываемой функции на jmp;

изменение указателей в объектах ядра, например KTHREAD.pService DescriptorTable.

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

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

Рассмотрим каждый из методов бо-лее подробно.

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

Для исключения путанницы, свя-занной с терминологией, приведены структуры SST и SSDT.

Руткиты режима ядра: алгоритмы работы и защита

Случалось ли вам замечать, что в системе «живет» посторонний процесс. Но ни диспетчер задач, ни другие программы не могут его показать. Может быть, процесс скрывается и от них? Каковы методики скрытия в режиме ядра?

Артем Баранов

75№1, январь 2007

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

На рис. 1 показано нормальное выполнение системного сервиса WriteFile, а на рис. 2 выполнение того же сервиса, но руткит уже заменил указатель в SSDT на свою функцию. Таким образом, руткит может контролировать выполнение системного сервиса, отфильтровывая «ненужные» данные.

Перехват прерыванийИногда руткиту приходится перехватывать прерывания или исключения, подменяя адреса в таблице диспетчеризации прерываний (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 второ-го потока указывает на таблицу дескрипторов, включая де-

скриптор для обслуживания USER и GDI сервисов – win32k. На рис. 6 видно, что руткит скопировал старую SDT, подме-нил указатели в SSDT и записал указатель на новую табли-цу дескрипторов в KTHREAD.

Модификация объектов ядраНа сегодняшний день существуют руткиты, которые скры-вают процессы с использованием модификации систем-ной очереди объектов ядра. Яркий представитель – fu. Суть этого подхода в следующем. В NT 5.x процессы, ко-торые работают на данный момент в системе, увязываются в одном двунаправленном списке. Fu просто переставляет указатели соседних объектов скрываемого процесса. Та-ким образом, когда ядро проходится по списку, то не видит этот процесс. На рис. 7 представлена системная очередь, а на рис. 8 видно, что руткит скрыл второй процесс.

Каким образом руткит определяет адрес системной оче-реди? Ответов на этот вопрос несколько: через экспортируемую переменную ядра PsActive-

ProcessHead; вычитая соответствующее смещение (0x88 в Windows XP), руткит определяет первый эле-мент очереди (всегда процесс System);

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 ServiceTablePDWORD CounterTable; DWORD ServiceLimit; PBYTE ArgumentTable; } SYSTEM_SERVICE_TABLE;

Рисунок 2. Поток выполнения кода, вызвавшего WriteFile из переписанной SSDT, что приводит к активации руткита

Рисунок 1. Нормальный поток выполнения кода, вызвавшего WriteFile

76

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

через регистр fs; при переключении в привилегированный режим ядро помещает в регистр fs другой се-лектор, в результате fs будет адре-соваться к структуре данных KPCR – Processor Control Region (описы-вает процессор в ядре); в KPCR содержится указатель на струк-туру KPRCB – Processor Control Block, которая содержит указатель на ETHREAD потока, выполняюще-гося в данный момент на процессо-ре (член CurrentThread); определив адрес ETHREAD, руткит, исполь-зуя соответствующее поле, находит указатель на EPROCESS, которому принадлежит поток; этот подход ис-пользует fu;

через функцию IoGetCurrentProcess, которая возвращает указатель на EPROCESS процесса, который активен в данный момент.

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

когда произойдет ошибка страни-цы (при ее чтении) в связи с тем, что 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. В результате рассинхрони-

Рисунок 4. Таблица дескрипторов прерываний, руткит перехватил Page Fault и General Protection

не участвуют в перерас-пределении процессор-ного времени, и ядру без разницы – осуществлять переключение контекста на поток того же процес-са или на поток другого процесса. Все дело в том, что существуют еще оче-реди планировщика (дис-петчера потоков), кото-рые он использует для осуществления операций, связанных с планирова-нием. Таких очередей три: KiDispatcherReady ListHeader – очередь го-товых к исполнению по-токов, KiWaitInListHead, KiWaitOutListHead – две очереди потоков, кото-рые пока не планируют-ся, т.е. ждут какого-то со-бытия (например, завер-шение операции ввода-вывода). На самом деле первая очередь являет-

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

Shadow WalkerShadow Walker является руткитом, кото-рый предназначен для скрытия fu в сис-теме. Делает он это достаточно неор-динарным способом. Во всяком случае до Shadow Walker такой способ не при-менял ни один руткит. Сам fu работа-ет в режиме ядра и предназначен для скрытия процессов, добавления приви-легий в маркер и прочее. Но несмотря на предоставляемые богатые возмож-ности, его можно обнаружить простым сигнатурным поиском в области памя-ти ядра, со всеми вытекающими отсю-да последствиями. Противостоять сиг-натурному поиску, а тем более в памяти достаточно сложно, если не применять стандартные методы (например, поли-морфизм). А fu его не применяет. Нужно было придумать такой метод, при кото-ром код может получать доступ к стра-нице памяти при ее чтении и модифи-цировать ее данные. В Shadow Walker заложен следующий алгоритм: сделать страницы кода fu в памя-

ти недействительными, т.е. сбро-сить первый бит – Valid в аппарат-ном PTE;

Рисунок 3. Таблица дескрипторов прерываний не зараженной системы

77№1, январь 2007

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

зации работы буферов преобразования адресов при чтении процессор видит одну страницу, а при записи – другую.

Привить руткиту стелс-алгоритм также можно следую-щим методом. В процедуре инициализации драйвера вы-деляем регион памяти (например, в резидентном пуле). Затем копируем туда функцию, которая будет осущест-влять перехват сервиса. Устанавливаем атрибут страниц со скопированным кодом на «чтение». Переписываем ука-затель в KiServiceTable на скопированную функцию. Затем необходимо, чтобы ядро выгрузило драйвер. Этого мож-но достичь, если процедура DriverEntry вернет отличное от STATUS_SUCCESS значение.

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

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. Пер-вая позволяет узнать адреса обработчиков прерываний и ис-ключений, а вторая позволяет просмотреть таблицу дескрип-торов системных сервисов.

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). Еще одно средство, которое поможет

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

Рисунок 6. В структурах ETHREAD указатель на таблицу SDT, указывает на SDT руткита

Рисунок 8. Модифицированная руткитом очередь процессов

Рисунок 5. В структурах ETHREAD, указатель на таблицу SDT, указывает на SDT ядра

Рисунок 7. Очередь процессов, выполняющихся в системе

78

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

RAIDEАвторы 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 предоставляет возможности ручного определения на предмет заражения системы. Например, можно продизассемблировать первые байты функции (u), а затем посмотреть, не стоит ли в пер-вых же байтах команда jmp. Аналогично можно проверить, не перехвачена ли функция в SSDT. Для этого нужно посмот-реть адреса в SSDT, например, командой dd KiServiceTable, а затем для адреса, указанного там, вывести идентифика-тор командой ln. Если для адреса выводится идентифика-тор, значит, функция не перехвачена, в противном случае есть подозрение, что это адрес функции руткита.

Несмотря на весьма широкий выбор программ по вы-явлению руткитов, лишь некоторые из них могут сказать, каким именно руткитом заражена система. В основном же эти средства узкоспециализированны и базируются толь-ко на определенных техниках выявления. Стоит также от-метить, что техники, реализованные в тех или иных средс-твах, также не гарантированно могут обнаружить, напри-мер, скрываемый процесс. Так, IceSword и BlackLight не мо-гут обнаружить руткит FuTo, который скрывает процессы таким образом, что те функции API, на которые опирают-ся эти средства, работают с ложными данными, которые руткит уже модифицировал. А средства выявления рутки-тов, опирающиеся только на сигнатурный поиск в памяти, не смогут обнаружить Shadow Walker. Для выявления рут-китов режима ядра нужен комплексный подход к анализу работы системы. Например, для выявления Shadow Walker прежде чем запускать сигнатурное сканирование в памяти, нужно посмотреть правильный ли адрес указан в IDT для об-работчика ошибки страницы. Пока полнофункциональных средств, которые объединили бы все техники обнаружения, нет. Возможно, это обуславливается тем, что сама техни-ка реализации DKOM используется с недавнего времени. Да и изощренные техники скрытия кода в памяти, применя-емые в Shadow Walker, до этого не использовались.

Рисунок 10. Два буфера TLB для кэширования проекций кода и данных в рассинхронизированном состоянии

Рисунок 11. RootkitRevealer обнаружил «невидимые» разделы реестра, скрытые руткитом HackerDefender

сканированием кустов реестра на низком (RAW) уровне, т.е. анализируя реестр без характерных API-вызовов, а за-тем используя Win32 API, и сравнивает полученные резуль-таты. Аналогично RootkitRevealer выявляет и скрытые пап-ки. Вначале сканирует раздел с использованием метадан-ных файловой системы, а затем с использованием Win32 API также сравнивает полученные результаты и выводит соответствующие скрытые объекты. На рис. 11 показано, что RootkitRevealer выявил разделы, которые скрыл из поль-зовательского режима HackerDefender.

VICEАвторы James Butler, Gregory Hoglund (http://www.rootkit.com/vault/fuzen_op/vice.zip). VICE также является программой для обнаружения руткитов. Его основная задача – обнаруже-ние руткитов, модифицирующих путь выполнения (как в поль-зовательском режиме, так и в режиме ядра). После нажатия на кнопку сканирования в окне VICE начнет проверять систе-му на наличие руткитов. Процессы, на которые воздействует руткит, показаны в списке. Рядом с названиями процессов располагаются иконки, каждая из которых показывает, каким именно способом был заражен процесс руткитом.

Рисунок 9. Два буфера TLB, для кэширования проекций кода и данных в синхронизированном состоянии

80

IMHO

Поиск работы – это всегда ком-промисс между размером за-работка и величиной интереса

к ней. Только не путайте деньги с воз-можностями, которые они предостав-ляют. Деление жизни на «время рабо-ты» и «время отдыха» делает человека и бедным, и глубоко несчастным одно-

временно. Чтобы впоследствии не жа-леть о бесцельно прожитых годах, ра-ботать следует из удовольствия, пол-ностью (или частично) отождествляя собственное «Я» с тем, что это «Я» делает, воспринимая деньги как не-что само собой разумеющееся. А де-ньги в IT-индустрии вращаются воис-

тину огромные, и когда другие гово-рят о растущей безработице, у нас на-блюдается устойчивый кадровый кри-зис. Везде полным-полно незанятых мест, а специалистов на всех не хва-тает. Зарабатывать > $1000 для про-граммиста средней руки – вполне ре-ально, правда, и вкалывать придет-

Чего ждать от удаленной работы?

Крис Касперски

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

81№1, январь 2007

IMHO

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

Кто-то, соблазнившись открыва-ющимися перспективами (причем, не только финансовыми), перебира-ется из родной глубинки в столичные округа или даже пересекает океан, на-деясь встретить на той стороне веч-но голубое небо, пальму и белый па-роход (не «Титаник»). Что ж, каждый выбирает свой путь сам, но сущест-вует тысяча мотивов, чтобы никуда не уезжать, а жить там, где ты родил-ся. Интернет дает уникальную возмож-ность удаленной работы из любой, да-же самой глухой и отдаленной дерев-ни. А что? Свежий воздух, экологи-чески чистые продукты, частный дом, не идущий ни в какое сравнение с тес-ными городскими квартирами… Впро-чем, дело даже не в деревне, а в об-разе жизни. Удаленная работа поль-зуется популярностью и в Москве, из-бавляя творчески настроенных людей от необходимости каждое утро таскать свое «тело» в офис, и расширяет гра-ницы охотничьих «владений» до раз-меров Земли.

За и противАссоциация с «охотой» возникла не случайно. В отличие от «firm job», удаленная работа зачастую вообще не имеет никакого юридического ста-туса, превращая нас в хищников, бе-гающих по просторам Интернета в по-исках добычи. А хищника, как извест-но, ноги кормят. Сейчас, по прошест-вии десяти лет, проведенных на «воль-ных хлебах», я оглядываюсь назад и думаю: «Какое же это счастье иметь стабильную работу, на которую мож-но прийти и… тупо делать то, что тебе скажут (или… не делать, если не ска-жут). Где думают за тебя, решают за те-бя, и креатив не является основой вы-живания».

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

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

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

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

деле очень легко, особенно если од-ним из условий является его развитие и поддержка).

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

Но даже имея на руках конкурен-тоспособный продукт, львиную долю времени придется тратить на техни-ческую поддержку, документирова-ние, разборки с платежами и не пла-тежами, устранение конфликтов с но-вым и старым железом и ОС. На твор-чество остаются лишь жалкие урыв-ки, и вместо удовольствия работа ста-нет приносить одно сплошное разоча-рование. К тому же всегда существует риск, что проект провалится, а созда-ние (и раскрутка) нового за один день не делается. Сразу же возникает воп-рос – как дальше жить? А без еды дол-го жить не получится, увы! Так что не-обходимо заблаговременно позабо-титься о создании неприкосновенно-го запаса, в который входят не толь-ко деньги, но еще и интеллектуаль-ные ценности (типа программ, библи-

отек и прочих ингредиен-тов, готовых к немед-

ленной продаже).А вот другой

пу ть – вместо того чтобы со-

здавать весь

82

IMHO

продукт целиком, лучше со-средоточить-ся на том, что вам действительно ин-тересно, и работать в одном или не-скольких узких направлениях – опти-мизация, разработка защитных ме-ханизмов, дизассемблирование, по-иск ошибок и т. д. Большинство мел-ких компаний (и программистских кол-лективов) не могут позволить себе де-ржать в штате кучу узких специалис-тов, большую часть времени которые все равно окажутся незадействован-ными. Можно, конечно, поручить за-щиту программы своему самому «про-двинутому» сотруднику или восполь-зоваться одним из широко разрекла-мированных протекторов (вот только каким именно?), но не лучше ли обра-титься к независимому специалисту, «окучивающему» исключительно эту тему и знающему о ней если не все, то гораздо больше самого «продви-нутого» из широкопрофильных про-граммистов.

Особенно это актуально для пред-ставителей редких (или вымирающих) специальностей. Представим себе че-ловека, уверенно программирующе-го на ассемблере в реальном режи-ме и знающего все закоулки MS-DOS, но испытывающего устойчивое от-вращение к Windows. Найти работу по своему профилю в родном городе и примыкающим к нему окрестнос-тям крайне маловероятно, но! по все-му миру работает огромное количест-во машин с MS-DOS, которые требует-ся обслуживать и удовлетворять рас-

тущие потребности их владель-цев, но… только без перехо-

да на Windows (поскольку, во-первых, Windows не яв-ляется системой реального

времени, а, во-вторых, стои-мость перехода слишком ве-

лика, особенно если он вклю-чает в себя реинжиниринг спе-

циализированных контролле-ров (например, управляющих про-

изводственными процессами или телеметрией),вставляемых в ISA-слот

и слыхом не слышавших ни про ка-кую PCI).

Программистский рынок де-лает ставку на молодых специа-листов, осваивающих новейшие

языки, методы разработки, библи-отеки и прочие «инновации», сменя-

ющие друг друга каждые несколько лет. Но с каждым годом переучивать-ся становится все сложнее и сложнее. Возникает естественное желание, ух-ватиться за какой-то один отдельно взятый язык, например, Си, и писать программы лишь на нем одном. Это увиличивает уровень профессиона-лизма и улучшает качество кодиро-вания (с одной стороны), но создает практически непреодолимые препятс-твия при поиске работы, на которую требуются люди «владеющие» Си++, C# и прочими модными словечками. И пускай опытный Си-программист выполнит поставленную задачу в де-сять рад быстрее и в сто раз эффек-тивнее, чем студент, прослушивший курс лекций по Си++, но так и не оси-ливший парадигмы процедурного про-граммирования, от чего исходные тек-сты пестрят глобальными переменны-ми и массивами, передаваемыми по значению, а не указателю. Главное, что он позиционирует себя как Си++ программиста!

Конечно, это несколько утриро-ванный пример, и такие «специалис-ты» в большинстве случаев отсеи-ваются еще на собеседовании, но… факт остается фактом. Подавляющее большинство программистских контор при наборе персонала руководствует-ся шаблонными стереотипами. Даже посредственный программист, иду-щий в авангарде прогресса, с высо-кой степенью вероятности найдет се-бе работу в любой точке мира (прав-да, при этом ему придется конкуриро-

вать с девушками, окончившими двух-месячные курсы по С# и знающие язык исключительно на уровне синтаксиса, а там где есть толпа, создающая оче-редь, нечего надеяться на достойную зарплату).

Удаленное сотрудничество много-кратно расширяет ареал поиска ра-боты. В конечном счете намного вы-годнее искать возможность примене-ния уже существующих знаний и на-выков, чем заниматься непрерывным самообразованием. Чтение компью-терных (и околокомпьютерных) книг и журналов вызывает устойчивое ощу-щение, что мир сошел с ума, и милли-оны леммингов мигрируют на новые платформы задолго до их появления. Но при живом общении с реальными разработчиками, выпускающими ре-альные продукты (а не утилиты, напи-санные одним щелчком мыши) все ста-новится на свои места. Основной про-граммистский костяк стоит на трех ки-тах (одним из которых является Си) и не собирается с них сходить.

Проблема России в том, что круп-ные программные комплексы у нас уже давно не создаются (немного-численные успешные проекты типа FineReader не в счет), а мелкие утили-ты можно писать на чем угодно, хоть на DELPHI, хоть на С#. Им неведомо бремя совместимости, они совершен-но не знают, каково сопровождать ги-габайты кода, первые строки которо-го были заложены еще в начале де-вяностых и по которым можно про-слеживать эволюцию развития про-цессоров, языков программирования, компиляторов и операционных сис-тем. Переписывать все это хозяйство на С# никто не будет хотя бы уже по-тому, что к моменту завершения столь грандиозного процесса о C#, быть мо-жет, никто и не вспомнит, т.к. появят-ся новые языки. Кстати говоря, слухи о смерти Фортрана (и других древних реликтов) сильно преувеличены. Су-ществует огромное количество кода и множество библиотек. Выпускают-ся компиляторы, оптимизированные под современные процессоры и т. д. и т. п. А это значит, что специалисты по языку по-прежнему остаются вос-требованными (пусть и не в таких ко-личествах, как десять-двадцать лет тому назад).

В практическом плане это значит,

83№1, январь 2007

IMHO

что если вы собираетесь сотрудничать с отечественными компаниями, то с ве-роятностью, близкой к единице, в спи-сок обязательных требований к канди-дату попадет .NET. Практически нигде вы не встретите объявлений, о розыс-ке «чистых» Си-программистов, знато-ков процессора, ассемблера и других «доисторических» языков. За рубежом картина иная.

Во-первых, здесь создается мно-жество встраиваемых устройств с мик-ропроцессорами (причем, «микро» в прямом смысле слова), для програм-мирования которых используется либо чистый ассемблер, либо смесь ассемб-лера с Си. Во-вторых, даже в мире PC, сплошь и рядом встречаются высокоп-роизводительные библиотеки (или гра-фические движки), написанные на Си (или на Си++ в стиле Си), с ассемблер-ными вставками.

Количество проектов, использую-щих более половины возможностей, предоставляемых языком Си++, ис-числяется единицами, и большинс-тво из них находятся на грани прова-ла. Программисты в авральном поряд-ке переписывают код, возвращаясь к истокам: проще! быстрее! надежнее! Только ведь на собеседовании не ска-жешь: ознакомившись с Си++ и попы-тавшись применить его на практике, я убедился, что подавляющая часть предоставляемых им возможностей мне совершенно ни к чему и не упро-щает, а усложняет кодирование, ресур-соемкость, сопровождение и отладку. Естественно, это не проблемы отрас-ли, а проблемы HR, которые совершен-но не разбираются в технологиях про-граммирования и больше верят рекла-ме, чем специалистам.

Другими словами, если в окрест-ностях вашего обитания найти рабо-ту по специальности никак не удает-ся, почему бы не попробовать посот-рудничать с зарубежными компания-ми через Интернет?

О компанияхКомпании бывают разные – одни не приемлют удаленного сотрудни-чества в принципе (это корпоративная политика у них такая, и не нам ее ме-нять), для других же – это норма. Не-которые на 90% из удаленных сотруд-ников и состоят (в особенности это ха-рактерно для Open Source-проектов).

Сразу два совета (многократно про-веренных и перепроверенных на лич-ном опыте).

Если компания не практикует уда-ленного сотрудничества по тем или иным причинам, не стоит ломиться в закрытые двери – все равно не про-ломишь. Это может быть и «бзик» ру-ководства, и принятый уклад органи-зации труда, и специфика, обусловлен-ная родом деятельности. Далеко не все можно передать через Интернет: доку-менты, полученные самой компанией под подписку о неразглашении (также известном под аббревиатурой – NDA), финансовые данные, обрабатывае-мые программой (которые также не-льзя передавать на сторону и которые очень сложно «правдоподобно» смо-делировать), не говоря уже о контрол-лерах и прочем аппаратном обеспече-нии. Опять-таки, удаленный сотрудник может внедрить в программу заклад-ку, практически ничем не рискуя, пос-кольку компании (даже сильной и мо-гучей) будет очень трудно до него до-тянуться. К тому же возникают опре-деленные финансовые и юридические сложности при заключении контракта и переводе денег. А зачем бухгалтерии лишняя головная боль? Если вам ска-жут «нет», то это «нет».

Совет номер два: Open Source-про-екты (даже те из них, что распростра-няются по лицензии BSD, не требую-щей отчислений в случае коммерчес-кого применения) бесплатны только для «народа», а всем остальным при-ходится платить. Взять хотя бы кодек XviD, поддерживаемый практически всеми современными автономными видеоплеерами. Что де-шевле: скачать исход-ные тексты и засу-нуть их в плеер сво-ими силами или на-нять на более-менее постоянную работу одного из учас-тников проек-та? Причем это необя-з а т е л ь н о должен быть ведущий раз-работчик. По-дойдет любой, кто разобрался в структуре ис-

ходного кода и готов заняться его оп-тимизацией под конкретный процес-сор (в аппаратных видеоплеерах они, как -правило, достаточно маломощ-ные). Отсюда следует важный вывод: совершенно необязательно быть ак-тивным участником Open Source-про-екта, достаточно просто в нем разби-раться хотя бы в общих чертах и, ес-тественно, присутствовать в списке developers (иначе, вас просто не смо-гут найти!).

Как надо и как не надо составлять резюмеО резюме скажу предельно корот-ко. Составлял их я мало. Читал еще меньше, поэтому основной опыт, ко-торый я приобрел, – это опыт отрица-ния. То есть, теперь я знаю путь, куда ходить не надо, но куда идут толпа-ми мои коллеги, глядя на которых, так и хочется прибить к столбу табличку: «Осторожно! Грабли!».

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

ризонте. Не знаю, как вы, а вот я с Васей в горы не по-

шел, но… при об-работке резюме секретарем, да-

леким от програм-мирования, Вася по-

лучает сто очков, а Пе-тя… идет в горы.

Другая проблема – честность. Точнее, ее отсутствие у некото-рых из нас. Доволь-но часто спрашивают –

можно ли врать в резю-ме? Не с моральной точ-

ки зрения, а вообще? Ну это как сказать… Перечень

84

IMHO

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

Опыт работы с языком – весьма провокационный вопрос. Я никогда не понимал, что он в действительнос-ти означает и от чего предполагается вести отсчет: с момента первой отком-пилированной программы типа «hello, world!», с момента овладения язы-ком без поминутного подглядывания в учебник/MSDN, с момента постиже-ния стандарта и преодоления барьера переносимости (т.е. умения писать про-граммы, которые компилируются и ра-ботают не только на машине их созда-теля), или же… с момента осознания того факта, что проверка корректнос-ти указателей зачастую (но не всегда!) несет больше вреда, чем пользы? В ре-зультате мы получаем «вилку» в деся-ток лет, а то и больше.

Любой кандидат может написать, что имеет гигантский опыт работы с Си++ и что он начинал программи-ровать на нем еще тогда, когда Си++ был всего лишь front-end к Си. Естес-твенно, подобная наглая ложь немед-ленно выявляется на собеседовании (а, может, это и не ложь вовсе! Просто человек так программирует, некоторые русские в Америке и по тридцать лет живут, а знают английский хуже само-учки, прошедшего двухмесячный курс по методу Ильи Франка). Так что поня-тие «опыта работы с языком» приме-нимо только к людям со средними спо-собностями, и если ваши способнос-ти отличаются от таковых, рекомен-дуется сделать перерасчет в ту или иную сторону.

Ч то же кас аетс я умышленного завы-

шения опыта, то я скажу так – врать не стоит, а вот приврать сам Билл

Гейтс велел, только главное – не заврать-

ся, а то может очень легко получиться,

что ваш опыт ра-боты с языком на несколько лет

превысит время существование са-

мого языка (прав-да, тут всегда можно

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

Самое неприятное, что, заполняя резюме, мы предоставляет массу све-дений о себе, при этом не имея никакой (или практически никакой) информа-ции о работодателе. Особенно если ре-зюме отправляется в кадровое агент-ство (или вывешивается на сайт), а не вручается конкретному работодателю персонально. Часто приходится стал-киваться с такой картиной. Составля-ешь резюме, сидишь, ждешь, и вдруг звонок: «Мы рассмотрели ваше ре-зюме, все хорошо, вы нам подходите, мы вас берем!». Кто это «мы»?! Смот-ришь… а там фирмочка размером чуть больше собачьей конуры и совершен-но непрофильная (например, я ука-зывал в резюме: x86-ассемблер, Си, а они клепают сайты на PHP). Такое впечатление, что они берут всех, ко-го только удастся загрести, а из ре-зюме читают только контактный ад-рес/телефон.

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

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

Короче, подытожив сказанное, ре-зюме мы отметаем как тупиковый ва-риант.

Стратегия поиска работыВ жизни каждого программиста рано или поздно наступает такой момент, когда не ты ищешь работу, а она те-бя, что порождает совершено неведо-мую дотоле проблему: как тактично от-казать клиенту, одновременно с этим не потеряв его. Не отказывать нельзя, иначе многолетние наслоения заказов прогнутся под собственной тяжестью, возбуждая бурную тектоническую ак-тивность заказчиков и окончательный съезд крыши исполнителя с глубоким нервным истощением, граничащим с высадкой на территорию психиатри-ческой лечебницы. Какое же это счас-тье – иметь непрекращающийся по-ток заказов, но какая же это пытка – осознавать, что он не закончится ни-когда и выкроить недельку-другую от-дыха удастся разве что в иной жизни. Правда, когда ты молод, полон энергии и сил, об этом не задумываешься и ни-чего кроме перспективы не замечаешь. А перспектива, как известно, – штука коварная. Параллельные рельсы схо-дятся в точке на горизонте, но по мере продвижения вперед эта точка все уда-ляется, удаляется и удаляется…

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

85№1, январь 2007

IMHO

ное положение. Удовольствие от рабо-ты исчезает, времени на «поковырять-ся» в новых языках/библиотеках/осях нет и не предвидится. Кругозор сокра-щается в точку, стремительно коллап-сирующую в черную дыру, откуда еще никому не удавалось выбраться.

Гораздо лучше работать по принци-пу: «получил ТЗ, въехал в тему, сдал проект, забыл». Конечно, в этом случае работать придется еще больше, но за-то работа будет разнообразной, и прак-тически всегда можно выбрать время для отдыха или своих собственных не-коммерческих проектов.

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

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

Во-первых, сложные заказы – это престижно, во-вторых, «повторение пройденного» (т. е. написание простых программ) отнимает время, но не дает никакого нового опыта взамен. А для успешного «старта» важно за мини-мальное время освоить максимум тех-нологий, причем, «освоить» не в смыс-ле «прочитать учебник», а в обязатель-ном порядке опробовать все это на практике. Книги, бесспорно, отличный

учитель, вот только доверять им сле-дует с большой осторожностью. Типич-ный случай: «Когда я узнал о конструк-ции Х, я стал применять ее везде, где только можно, в результате чего пои-мел столько проблем, что решил на-всегда отказаться от Х, но через не-сколько лет, я все-таки пришел к вы-воду, что X – хорошая штука, если при-менять ее с умом».

Лучший способ научиться програм-мировать – дополнить чтение учебни-ков разбором чужих исходных текстов, пытаясь ответить на вопрос: почему они написаны именно так, а не иначе? А как бы это написали вы? Естествен-но, это должны быть достойные исход-ные тексты, а не сочинения кота Мур-зика, который начал программировать, раньше, чем писать. Где брать достой-ные исходные тексты? Ну это, в общем-то, не вопрос. Существует куча Open Source-проектов, по одному виду кото-рых можно судить об их качестве..

Естественно, программисты не без-грешны, и, роясь в исходных текстах, мы наверняка найдем ошибки или просто неэффективные фрагменты кода, которые так и просятся, чтобы их переписали. Отправляя исправлен-ные версии разработчикам, мы скорее всего получим приглашение вступить в их ряды и подписаться на закрытую рассылку. Как правило, большинство остальных участников проекта уже ра-ботает в других компаниях (или даже возглавляет свои), поэтому знакомс-тво с ними будет весьма не лишним. Дело тут даже не в заказах (которых может и не быть). Это отличный канал для получения документации и раз-ных программ, распространя-емых либо за деньги (слиш-ком большие для начинаю-щих программистов), ли-бо же только через NDA, но… из чисто дружеских побуждений, зарубеж-ные коллеги охотно делят-ся этим добром с остальными, особенно если живут под ло-зунгом «информация должна принадлежать миру». То же са-мое (только в меньшей степени) относится и к закрытым проектам. Если у вас есть идеи по улучшению продукта, а еще лучше – написан-ный плагин (или модифицированная DLL/EXE), попробуйте списаться с раз-

работчиками. Быть может, они и при-мут вас в свой клан..

Другой способ заявить о себе – это форумы, блоги и прочие электрон-ные (а еще лучше – бумажные) пуб-ликации. Форумы, естественно, анг-лоязычные, причем достаточно серь-езные. Общие правила поведения – в полемику не встревать, не пытаться показаться слишком умным, не лезть в те дебри, в которых не разбираешь-ся, отвечать обстоятельно и по делу. Естественно, все это требует време-ни, не гарантируя никакого эффекта. Блоги в этом отношении намного бо-лее предпочтительнее. Выбираем блог продвинутого программиста и начина-ем постить, но только ни в коем слу-чае не отзывы на статьи, а уж тем бо-лее – сообщения об ошибках. Еще не-известно, что это за человек и как он отреагирует на критику (не важно – конструктивную или нет). Лучше все-го – делиться своими идеями, допол-няющими статью или пытаться вызы-вать автора на обсуждение некоторых технических проблем, которое перехо-дит либо в перепалку, либо в очеред-ной заказ.

Заводить свой собственный блог стоит только в случае избытка свобод-ного времени, поскольку моменталь-ной отдачи он все равно не принесет, а поддерживать его в «живом» состо-янии быстро надоест и из развлечения превратится в пытку. Огромную отда-чу приносит издание книг за рубежом. Заказы сыплются как из Рога Изоби-лия, даже если сама книга практичес-ки не продается (а она и не будет про-даваться, если рассчитана на специа-листов, коих единицы. Напротив, бой-

ко раскупаемая книга, ориентиро-ванная на массовую аудиторию,

не принесет ни-чего, кроме

гонорара, да и тот

н а -

вряд ли оку-

86

IMHO

пит время, потраченное на написа-ние).

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

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

Требования к кандидатуПрограммы, окружающие нас, написа-ны такими же людьми, как и мы (мно-гие из которых только учатся про-граммированию), и если вы не умее-те превращать байты в золото, ничего страшного в этом нет. В конечном сче-те главное – это умение преподнести себя, а программистские способнос-ти с уровнем зарплаты связаны очень слабо. В IT-индустрии сплошь и ря-дом можно встретить людей, получа-ющих свыше 100 000$, разъезжающих на «Феррари», одевающихся в пиджа-ки индивидуального покроя с бэджи-ком «эксперт», но при этом знающие только одно: на сервере должен сто-

ять RAID. Проблемы, создаваемые этим RAID, их совершенно

не волнуют (они ведь не знают, что ту же

самую на деж-ность можно обеспечить и другим пу-тем), а вос-

становление RAID (в случае

краха) все равно поручат не «экспер-

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

Все очень просто. Одни люди стре-мятся к знаниям, другие же тем вре-менем делают карьеру. Но не сто-ит думать, что сделать карьеру лег-ко. Тут определенный тип личности нужен, каким-то седьмым, восьмым, девятым чувством угадывающим, ко-му следует льстить, а кого – топить. Но все это лирика. Пора перейти к су-ровым реалиям.

Знание английского разговорного без словаря при сотрудничестве с за-рубежными компаниями в общем-то необязательно, но очень, очень же-лательно.

По фильмам (с оригинальной зву-ковой дорожкой и субтитрами) за два-три месяца язык осваивается до впол-не приемлемого уровня и легко рас-познается на слух. Богатый словарный запас для разговорной речи не пона-добится. Напротив, по моим наблюде-ниям, он только мешает. Важно не ко-личество слов, которые ты знаешь, а умение выразить свои мысли те-ми словами, которые сейчас крутят-ся в голове. За произношение волно-ваться не надо. Я неоднократно слы-шал, как американцы (причем весь-ма коренные и респектабельные) про-износят «Core» как «Корэ», а «Work» как «Ворк». Не знаю, то ли они умыш-ленно коверкают слова на манер на-шего «удава», то ли действительно американская почва позволяет се-бе подобные вольности с английским языком, но факт остается фактом – вас поймут!

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

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

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

ТрудоустройствоУдаленное сотрудничество часто не подкрепляется никакими бумага-ми, ограничиваясь устной договорен-ностью, поэтому вас могут элементар-но «кинуть», ничего не заплатив, но за-ранее настраиваться на это не надо. Прием на работу или раздача зака-зов происходит достаточно буднично и без юридической волокиты. Но это – в идеале.

Многие фирмы не успокоятся, по-ка не увидят того, кого они нанима-ют живьем, или не услышат его по те-лефону.

Для зарубежных компаний зво-нок обязателен (с российскими не пробовал) (звонок, естественно, оп-лачивается за их счет). Еще могут попросить переслать какую-то за-гадочную сигнатуру в pdf с догово-ром. Так вот, эта «сигнатура» по-на-

87№1, январь 2007

IMHO

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

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

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

Да! На счет гигиены. Если кто ду-мает, что договор перед подписью нужно показать юристу, то он здоро-во ошибается, поскольку договор в 9 из 10 случаев типовой и каким бы то ни было изменениям не подлежит. В тексте договора может быть все что угодно. Любая нелепица. Вплоть до передачи компании прав собствен-ности на вашего домашнего кота Мур-зика. Но попытки исключить подоб-ные пункты из договора ни к чему (хо-рошему) не приводят, поскольку че-ловек, отправляющий текст догово-ра вам на подпись, обычно не упол-номочен менять этот самый договор ни на бит.

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

В особо «ответственных» случаях потребуется вылет за рубеж или в рос-сийское представительство компании. Зарубежный перелет (и все связанные

с ним расходы) в 100% случаях опла-чивает компания, которая вас нани-мает. Поездку в российское предста-вительно, как правило, приходится оп-лачивать самостоятельно, но если упе-реться, то можно не ехать, а, позвонив по телефону, попробовать договорить-ся как человек с человеком. Во всяком случае у меня это получалось (с неко-торого времени я стал тяжел на подъ-ем и уже давно никуда не езжу, а рань-ше довольно много мотался по России, останавливаясь в номерах «люкс», оп-лачиваемых, естественно, фирмой. эх… молодость… но потом все это на-доело).

Финансовые вопросыНеразвитость отечественных платеж-ных систем создает значительные про-блемы при регулярном переводе денег из зарубежных стран в Россию. Лично меня механизм перевода волновал меньше всего. Поговорив со знающим человеком, я выяснил, что наибольшей популярностью пользуются два пути: открытие валютного счета в коммер-ческом или сбербанке и чеки, пере-сылаемые по почте. Чеки идут от не-скольких месяцев до полугода, причем банки их то принимают, то отвергают без объяснения причин (хорошо, если не обвиняют в попытке подделки или мошенничестве), а регулярные пере-воды на валютный счет вызывают по-дозрения у всех спецслужб, которые только есть в нашей стране. И не толь-ко налоговой (с налоговой как раз про-ще всего: заплатил налоги – и спи спо-койно). Экс-КГБ может запросто пожа-ловать с визитом и поинтересоваться: а вы случайно не Родину на секреты продаете? Может, вы шпион? А вы точ-но доступа к секретной информации не име-ете? Ну это вы го-ворите, что не име-ете, а если прове-рить? Вдруг какой-то секрет просочил-ся в Интернет (ведь у вас есть Интернет, правда?), а вы его того. В смысле взя-ли и продали.

Надежнее всего перевод на рублевый сбербанковский счет, упоминание о котором приводит

иностранцев в смятение и ужас, и они приводят тысячи доводов, почему руб-левый сбербанковский счет это бэд. Но если твердо стоять на своем, то… куда они денутся. Переведут. Правда, могут содрать до 10% в качестве мо-ральной компенсации, но это уже рас-плата за удобство. Жителям больших городов, возможно, удобнее всего по-лучать деньги на кредитную карто-чку. Ну тут я не знаю. У нас всего один «банкомат», да и тот находится в слег-ка разобранном состоянии.

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

Менее распространенный, но го-раздо более гадкий способ – най-ти в вашей программе пару мелких ошибок и поднять вселенский вопль, что из-за них компания понесла огром-ные убытки и теперь имеет все осно-вания для подачи на вас в суд (брех-ня, конечно, но что мы можем сказать в ответ?), поэтому ни о каких выпла-тах речь вообще не идет. Как вариант, компания может постоянно вносить значительные изменения в ТЗ, давая

минимум времени на их реали-зацию, а за всякую задержку – штра-

фовать.

88

IMHO

Так что к концу ра-боты будет непо-нятно, кто кому платить должен. А мо-гут просто взять программу, сказать «спасибо» и… ничего не заплатить.

На первых порах (пока ни имени, ни опыта сотрудничества еще нет), остается надеяться только на удачу и проявлять максимум осмотритель-ности в выборе партнеров. Как прави-ло, компании среднего звена в этом

плане наиболее честные, поскольку если они будут «кидать» программис-тов направо-налево, об этом быстро узнают все остальные и тут же разо-рвут партнерские отношения. Мел-ким компаниям это не грозит, пос-кольку им нечего терять. Они просто закроются и тут же откроются вновь под новым именем. Крупные компа-

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

числе и не оплачивать разработку продукта. Монополисты… К та-

ким и на бульдозере не подъ-едешь!

Вот почему сотруд-ничество с новой (для

вас) компанией следует начинать с небольших про-

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

Что же касается меня, то с непро-веренными заказчиками я работаю либо из спортивного интереса, ли-бо при 100% предоплате. Естествен-но, не все заказчики на это соглаша-

ются, но… лично меня это не сильно волнует, поскольку заказов и так вы-ше крыши… надо же как-то эту кры-шу расчищать…

ЗаключениеУдаленная работа – это реально! Это хороший способ совместить при-ятное с полезным и заработать деньги, не выходя из дома. Кстати, «дом» – это ключевой момент. Далеко не каж-дому понравится подобное (и к тому же добровольное) «затворничество». Ес-ли одиночество вас угнетает – ходите в офис, работая среди людей! Или…. совмещайте оба вида работы сразу, если, конечно, «корпоративный устав» это позволяет. Компании, в которых мне довелось работать, крайне рев-ностно относились к интеллектуаль-ной собственности и считали, что все написанное программистом в рабочее время принадлежит им, и если про-граммист продает свой труд на сторону, он должен платить «мзду». Что ж! Впол-не логично! Именно поэтому я там боль-ше не работаю, а… сотрудничаю с ни-ми через Интернет! На гораздо более выгодных (для меня) условиях.

89№1, январь 2007

bugtraq

Переполнение буфера в Clam AntiVirusПрограмма: Clam AntiVirus (clamav) версии до 0.88.7.Опасность: Средняя.Описание: Переполнение стека обнаружено при сканиро-вании сообщений с глубоко разветвленным multipart-кон-тентом. Удаленный пользователь может с помощью специ-ально сформированного e-mail-сообщения вызвать отказ в обслуживании приложения.URL производителя: www.clamav.net.Решение: Установите последнюю версию (0.88.7) с сайта производителя.

Уязвимость при обработке POST-запросов в Microsoft Project ServerПрограмма: Microsoft Project Server 2003, возможно, дру-гие версии.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки при об-работке POST-запросов в сценарии projectserver/logon/pdsrequest.asp. Удаленный пользователь может получить имя пользователя и пароль к учетной записи MSProjectUser. Пример:

URL производителя: www.microsoft.com.Решение: В настоящее время способов устранения уязви-мости не существует.

POST http://SERVER/projectserver/logon/pdsrequest.asp HTTP/1.0Accept: */*Accept-Language: en-nzPragma: no-cacheHost: SERVERContent-length: 87Proxy-Connection: Keep-AliveCookie: 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>

Переполнение буфера в ядре 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 Windows CSRSSПрограмма: Microsoft Windows 2000, Microsoft Windows XP, Microsoft Windows 2003.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки двойного освобождения памяти при обработке HardError-сообщений в библиотеке WINSRV.DLL. Локальный пользователь мо-жет выполнить произвольный код на системе в контексте процесса CSRSS с привилегиями учетной записи SYSTEM путем установки специально сформированных парамет-ров для функции MessageBox() (строка должна начинать-ся с последовательности символов «\??\»).URL производителя: www.microsoft.com.Решение: В настоящее время способов устранения уязви-мости не существует.

Множественные уязвимости в 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.Решение: Установите исправление с сайта производи-теля.

90

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

Университет БерклиКак известно, все работающие под уп-равлением UNIX компьютеры отсчиты-вают системное время с даты 1970.01.01. Конечно же, UNIX не была создана кон-кретно в этот день, однако именно эту дату принято считать днем её рождения. А значит, и днем рождения BSD, кото-рая является прямым потомком дети-ща Кена Томпсона (Kenneth Thompson) и Денниса Ритчи (Dennis Ritchie).

В начале 70-х годов о профессио-нальном применении UNIX речь ещё не шла, и компания AT&T, в которой была создана эта ОС, бесплатно рас-пространяла её по университетам, чтобы её изучали студенты. Дискета с UNIX не миновала и знаменитый Ка-лифорнийский университет в Беркли

(The University of California, Berkeley). Для новой операционной системы был даже куплен компьютер PDP-11/45 ком-пании DEC, что для 1973 года было не-позволительной роскошью.

Как правило, UNIX в университе-тах устанавливал лично Кен Томпсон, однако в Беркли студенты справились с этой задачей собственными силами. Правда, к помощи разработчиков всё-таки пришлось прибегнуть – во время своей работы система регулярно дава-ла сбои. Отладка ошибок велась Томп-соном удалённо посредством подклю-чения компьютера университета через модем к телефонной сети. Несмотря на сотрудничество университета с ком-панией AT&T, UNIX функционировала на компьютере лишь с 8 до 16 часов

дня. Все остальное время на нем рабо-тала более популярная в то время ОС RSTS (кто сейчас вспомнит названия некогда перспективных проектов?).

Из-за постоянно возрастающей потребности студентов в дополни-тельном машинном времени в 1975 го-ду в университете появился еще один компьютер от DEC. На нем была инс-таллирована System V6, являвшаяся в то время самой совершенной вер-сией UNIX. Новый компьютер обеспе-чивал студентов-программистов необ-ходимыми ресурсами для разработки собственных проектов.

Появление BSDВ 1976 году в университете уже был целый ряд компьютеров, работавших

Прошлое операционных систем семейства BSD

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

Кто-то назовет BSD старой операционной системой. Но те из нас, кто работает над ней,

видят ее скорее системой со зрелым кодом.

Мэтт Дилан, разработчик FreeBSD

Операционные системы семейства BSD признаны всем компьютерным сообществом и получили статус идеального программного обеспечения для серверов. Кто-то из вас использует эту ОС на домашнем компьютере. А знакомы ли вы с историей легендарной системы?

91№1, январь 2007

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

под управлением 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 была единственной системой, пол-ностью реализовавшей возможности

новых систем по работе с виртуаль-ной памятью.

Сетевая ОСВ начале 1980-х Министерство оборо-ны США столкнулось со сложной про-блемой. Парк компьютеров в их сети ARPAnet устарел, в результате чего на-зрела необходимость в их замене. Од-нако при этом необходимо было пере-носить программное обеспечение на новую архитектуру, что требовало пол-ного переписывания важнейших час-тей кода. Для поддержания работоспо-собности сети была необходима опе-рационная система, успешно работа-ющая на самых разных типах компью-теров. Альтернативу UNIX, которая, как известно, работает практически на лю-бых электротехнических приборах, придумать было сложно. Военные об-ратили внимание на только что вышед-шую 3BSD и подписали с Калифорний-ским университетом контракт.

Получившие финансирование про-граммисты наконец-то смогли сосре-доточиться на своей работе по-на-стоящему. Для поддержки новых ём-ких жестких дисков была создана но-вая файловая система. FFS (Fast File System) отличалась от других повы-шенной надежностью и скоростью ко-пирования файлов. Но, конечно, глав-ные нововведения касались работы с сетью. Уже в восьмидесятые было ясно, что будущего у операционной системы без нормальной поддержки сетевых протоколов нет. Роб Гурвиц

(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. Главная

Лицензия BSDКратко суть BSD-лицензии можно сфор-мулировать следующим образом: Операционная система и все входя-

щие в комплект дистрибутива про-граммы защищены авторским пра-вом. При распространении ПО, ис-пользующего код Калифорнийско-го университета, копирайт должен быть обязательно сохранен в исход-ных текстах.

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

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

а также использовать код для написания своих программ.

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

BSD-лицензия очень похожа на ли-цензию GPL, однако у неё есть одно важ-ное отличие. Все программы, лицензиро-ванные как GPL, обязаны сопровождать-ся исходным кодом. В случае же исполь-зования BSD возможно распространение ПО в бинарных файлах. Кроме того, все программы, разработанные при помо-щи GPL-лицензированных утилит, также автоматически попадают под действие этой лицензии.

92

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

их особенность – коммерческая ос-нова, а также принадлежность одной определённой компании. Вторая вет-ка – различные вариации BSD с от-крытым исходным кодом и свободным распространением: FreeBSD, NetBSD и OpenBSD. Существует, конечно же, ещё и Linux, однако о ней в этой ста-тье мы говорить не будем.

386 BSDРазработчики BSD были правы, когда сделали ставку на сетевые возмож-ности системы. В конце 80-х годов про-шлого столетия этот «пункт» оказал-ся особенно востребованным, и BSD начала быстро находить себе новых пользователей. Программисты, разра-батывавшие ПО с открытым исходным кодом, к тому времени уже объедини-лись в единое Open Source-сообщест-во, в результате чего другие компании и разработчики также захотели вос-пользоваться реализацией протокола TCP/IP для реализации собственных сетевых продуктов, базировавшихся на данном стеке. Однако BSD хоть и являлась самостоятельной системой, во многом опиралась на код, унасле-дованный еще от UNIX компании AT&T. Так что коммерческое использование BSD без покупки лицензии у этой ком-пании было невозможным.

Стоит отметить, что сетевые компо-ненты ОС были написаны программис-тами без использования коммерческо-го ПО, вследствие чего под лицензию AT&T не попадали. И тогда Калифор-нийский университет принял реше-ние создать миниатюрный дистрибу-

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

Этот программный пакет получил название Networking Release 1 (NR1). Для системы была разработана спе-циальная лицензия, разрешавшая ис-пользовать её исходный код в любых целях при условии сохранения в нём авторских прав Калифорнийского уни-верситета. Несмотря на то что учебное заведение просило за одну DAT-карт-ридж с NR1 1000 долларов, любой че-ловек мог бесплатно и полностью ле-гально скопировать дистрибутив у то-го, кто уже приобрёл кассету с ПО. Од-нако буквально сразу же некоторые приверженцы Open Source выложили дистрибутив для свободного скачива-ния на анонимных ftp-серверах, благо-даря чему сразу несколько сотен ком-паний получили в своё распоряже-ние бесплатные средства для работы с TCP/IP-протоколом.

Переносом BSD на стремительно набиравшую популярность платформу IBM-совместимых компьютеров занял-ся Билл Джолитц (Bill Jolitz). Переписав основные компоненты следующей вер-сии Networking Release под номером 2, он создал 386/BSD – первую открытую систему для архитектуры PC.

Эта ОС, по мнению общественнос-ти, отличалась нестабильностью и тре-бовала серьезной доработки. Но дело было не в недостатке знаний у Джо-литца, а в нехватке свободного време-ни. К счастью, благодаря тому, что 386/BSD находилась на ftp-серверах, она быстро попала в руки многих програм-мистов, которые взялись за улучшение системы. Созданный независимыми разработчиками пакет Patchkit устра-нял основные недостатки ОС, а также добавлял в неё новые возможности.

К 1993 году Билл Джолиц боль-ше не смог продолжать работать над 386/BSD и отошел от дел. Координа-торами по развитию проекта стали

разработчики Patchkit – Нейт Виль-ямс (Nate Williams), Род Граймс (Rod Grimes), Джордан Хаббард (Jordan Hubbard). Товарищи посовещались и решили взяться за полную перера-ботку ОС. В результате история BSD получила новый толчок своего разви-тия, имя которому – FreeBSD.

FreeBSDПостепенно доработка 386/BSD нача-ла превращаться в нечто большее, не-жели постоянное исправление оши-бок. К проекту присоединились еще два разработчика – Джулиан Элишер (Julian Elischer) и Дэвид Гринмен (David Greenman). Дэвид, кстати, придумал имя новой системе – FreeBSD.

Для более широкого распростране-ния новой системы Джордан Хаббард обратился в компанию Walnut Creek CD-ROM, известную своим содействи-ем свободно распространяемому ПО. В начале 90-х годов прошлого столе-тия Walnut Creek распространяла CD-дистрибутивы Linux, в частности, ле-гендарный Slackware. Сотрудники ком-пании не только занялись тиражирова-нием дисков с FreeBSD, но и предоста-вили разработчикам мощный компью-тер с доступом в Интернет.

Первая версия системы, FreeBSD 1.0, была доступна как на CD-ROM, так и для бесплатного скачивания с ftp-серверов. ОС базировалась на NR2, дополненной частями кода из 386/BSD и утилитами из Free Software Foundation. С момента своего появления новый проект начал пользоваться невероятным успехом, и уже через несколько месяцев была анонсирована FreeBSD 1.1.

Однако в этот момент произошёл весьма досадный инцидент, грозивший перерасти в катастофу. Как вы помни-те, исходный код операционный систе-мы UNIX принадлежал AT&T. В 1994 го-ду компания Novell, занявшаяся покуп-кой прав на различное ПО (например, DR-DOS с WordPerfect), выкупила пра-ва и на UNIX. Сразу после этого она по-дала в суд на Калифорнийский универ-ситет, обвинив его в незаконном рас-пространении дистрибутива NR2, ба-зировавшегося на коде, принадлежав-шем Novell. В результате долгого су-дебного разбирательства университет был вынужден изъять из ОС все чужие фрагменты кода. А эти фрагменты яв-лялись основой системы, самой важ-

Символ BSDСимволом операционной системы FreeBSD является демон (а не чертенок, как многие его ошибочно называют) по имени Beastie. Происхождение его объясняется очень просто: он не demon, а daemon – именно так в греческой мифологии называли добрых духов. «Демонами» также называют опре-

деленный вид программ под UNIX, выпол-няющих свою работу незаметно для глаз пользователя.

Придумал и нарисовал Beastie Кирк Маккусик, однако за прошедшее время различными энтузиастами было нарисо-вано огромное количество различных ва-риаций на тему этого символа.

Рисунок 1. Символ FreeBSD

93№1, январь 2007

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

ной её частью. В результате была выпу-щена новая версия операционной сис-темы, 4.4BSD-Lite, состоявшая исклю-чительно из свободного кода. Однако из-за отсутствия многих важных ком-понентов NR2 система 4.4BSD-Lite об-ладала массой ограничений, вследс-твие чего стала большим разочарова-нием для поклонников BSD.

На помощь пришла группа про-граммистов из лагеря FreeBSD. Они решили переписать недостающие ком-поненты, практически заново воссо-здав прежнюю операционную систе-му. Над вторым рождением NR2 в об-разе новой версии FreeBSD работал весь мир: сочувствующие BSD про-граммисты вносили свой посильный вклад в разработку нового кода. Впос-ледствии подобный способ разработ-ки блестяще реализовал Линус Тор-вальдс (Linus Torvalds), когда в рабо-те над его ядром Linux приняло учас-тие большое количество программис-тов со всего земного шара.

Реинкарнация системы заняла око-ло года. Еще пара месяцев ушла на ус-транение шероховатостей в версии ОС для платформы x86. В январе 1995 го-да пользователи заполучили в свои ру-ки дистрибутив FreeBSD 2.0. В июне вышел доработанный и дополненный релиз под номером 2.0.5.

В дальнейшем ОС изменялась «на глазах»: жесточайший монито-ринг ядра, постоянные (каждые 3-5 месяцев) обновления. Рассказывать о том, какие нововведения появились во FreeBSD с изменением ее версий, я не буду. Для этого существует об-ширный файл с описанием изменений (change-log), доступный в Интернете.

Упомяну лишь, что с 1996 года на-чал применяться новый принцип на-звания версий системы. Все только что вышедшие новые версии ОС называ-ются Release. В ветке STABLE, ориен-тированной на рядовых пользователей, исправляются ошибки и иногда добав-ляются некоторые изменения. Все же кардинально новые задумки реализу-ются в рамках ветки CURRENT, ориен-

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

NetBSDNetBSD – результат деятельности большой группы программистов, счи-тающих своей главной целью сделать систему максимально аппаратно не-зависимой. В 1993 году, когда они взя-лись за работу, эта идея как раз стано-вилась актуальной.

Операционная система была осно-вана на различных свободно-распро-страняемых программных компонен-тах, главным образом – на дистрибу-тиве 4.4BSD-Lite, являвшейся прароди-тельницей FreeBSD. Работа над систе-мой стартовала в январе 1993-го, и уже к апрелю была выпущена первая вер-сия. Функционировала NetBSD тог-да только под i386. Чуть позже ОС пе-ренесли на архитектуры Commodore Amiga, Sun Sparc и Apple Macintosh.

В сентябре 1995-го была создана организация NetBSD Foundation, коор-динировавшая дальнейшее развитие проекта. Сегодня NetBSD продолжа-ет развиваться согласно изначальной концепции – возможности работать на максимально широком круге аппа-ратных платформ. Новые релизы сис-темы включают в себя поддержку DEC VAX и Alpha, Motorola PowerPC и др. Список платформ, на которых NetBSD чувствует себя комфортно, исчисляет-ся сотнями. Установить ОС можно да-же на игровую консоль.

Однако, несмотря на то что разра-ботчики NetBSD пишут свой код в рам-ках POSIX, статус системы, соответс-твующей этим стандартам, она вряд ли получит. За стандартизацию нужно заплатить, а разработчики и так счита-ют, что их ОС является самой лучшей из свободно распространяемых. Впол-не объяснимая и понятная позиция про-граммиста по отношению к своему тру-ду. Вот только ставка на мультиплат-

форменность все же не оправдалась. Миром правит PC, да и на компьютерах Apple поклонников NetBSD не видно…

OpenBSDПроект OpenBSD своим существова-нием обязан Тео Де Раадту (Theo de Raadt). Этот человек был одним из тех, кто стоял у истоков NetBSD. Но, от-личаясь суровым нравом, Тео в 1995 году поссорился с товарищами и на-чал работать над собственным проек-том. Основывался Тео на все той же BSD4.4-Lite. Кроме самостоятельных компонентов, OpenBSD по мере свое-го развития включала в себя разра-ботки из лагерей FreeBSD и NetBSD. В первые годы своего существования OpenBSD была больше всего похожа именно на NetBSD, отличаясь от неё лишь некоторыми дополнительными функциями.

Главным козырем системы стала её высокая защищённость, о которой уже слагают легенды. OpenBSD из-вестна как самая «неприступная» ОС, и ошибки, связанные с безопаснос-тью, разработчики устраняют мгновен-но. «Бесплатная. Функциональная. Бе-зопасная» (Free. Functional. Security) – вот девиз OpenBSD, подчеркивающий ее главные достоинства. В рамках это-го проекта были созданы файервол Packet Filter, который считается самым безопасным среди программ такого рода, а также наиболее популярная ре-ализация протокола SSH – OpenSSH. Также разработчики OpenBSD с осо-бенной тщательностью следят за до-кументацией к системе и категори-чески возражают против не свобод-ных программ.

Что ж, у операционных систем се-мейства BSD долгая и славная ис-тория. Будем надеяться, что их ждет не менее достойное будущее!

Редактор Дмитрий Мороз

Сообщество OpenBSDРазработчики OpenBSD – не только хоро-шие программисты, но еще и очень инте-ресные люди; вдобавок ко всему – твор-чески настроенные.

Ежегодно они собираются в одном из городов в Канаде или в США на мероп-риятие, именуемое «hackathons». Програм-мисты общаются, делятся планами на бу-

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

О рисунках разговор отдельный – на об-ложке каждого нового релиза OpenBSD красуется картинка (рис. 2) с довольно за-мысловатым сюжетом. Нарисована она, ес-тественно, самими разработчиками.

Рисунок 2. Обложка последнего релиза OpenBSD

94

подписка на 2007 год

Редакционная подписка для физических лиц Вы можете оформить подписку

на любой российский адрес. При заполнении квитанции разборчи-

во укажите фамилию, имя, отчество полностью, почтовый индекс и адрес получателя, контактный телефон.

Как стать обладателем диска, если вы не оформили годовую подписку, читайте на сайте журнала www.samag.ru

Вы можно оформить подписку с лю-бого месяца на любой срок.

В графе «Сумма» проставьте сум-му за выбранное количество номе-ров. Стоимость одного номера жур-нала 150 руб. За год – 1800 руб.НДС и почтовые расходы включе-ны в стоимость.

Копию заполненного и оплаченно-го бланка отправьте в редакцию по факсу: (495) 628-8253 или на элек-тронный адрес: [email protected]

Журнал высылается почтой прос-той бандеролью только после поступления денег на расчетный счет.

95№1 январь 2007

подписка на 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

по каталогу агентства«ПрессаРоссии»

* годовой** полугодовой

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№1(50), Январь, 2007 год

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинРедакторАлексей КоршуновВнештатные редакторыАлексей БарабановСергей СупруновДмитрий МорозКрис Касперски

РЕКЛАМНАЯ СЛУЖБАтел./факс: (495) 628-8253Евгения Тарабринаreс[email protected]

Верстка и оформление[email protected]

Дизайн обложкиНиколай Петрочук

По вопросам распространенияобращайтесь по телефону:(495) 628-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (495) 628-8253Сайт журнала: www.samag.ru

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейГП «Московская Типография №13»Тираж 15000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание реклам-ных материалов ответственность не-сет рекламодатель. Все права на опуб-ликованные материалы защищены.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Обратите внимание, что теперь оформить подписку вы можете не только на полугодие, но и сразу на весь год.

Годовой индекс по каталогу «Роспечать» – 20780.Интер-почта – заказ журналов по тел.(495) 500-00-60.

Подписка on-line – SetBook.ru.

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.

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

Профессиональная компрессия видеоПотребность в сжатии видео растет с каждым днем. Источником может быть и камера наблюдения, и «граби-тель экрана», используемый для под-готовки презентаций, и обычная циф-ровая/аналоговая камера, и плата ви-део-захвата – всего не перечислишь!

популярные программы сжатия (та-кие, как DivX, XviD) имеют множес-тво настроек, предоставляя огром-ное количество рычагов управления, но не объясняют, как ими пользовать-ся. Как совместить минимальную по-терю качества с максимальной степе-нью сжатия, читайте в следующем вы-пуске журнала.

Мониторинг нагрузки операционной системы SolarisПосле установки нового сервера, как правило, проводятся измерения ис-ходной рабочей нагрузки. Впоследс-твии необходимо вести периодические измерения использования ресурсов системы: оперативной памяти, под-системы дискового ввода-выовда, се-ти и центрального процессора, чтобы выявлять «узкие места», препятству-ющие производительной работе сис-темы. Предлагаемая методика извес-тна давно и в целом применима к лю-бому компьютеру, под управлением любой операционной системы. В сле-дующем номере рассмотрим её упро-щённый вариант для грубой предва-рительной оценки загрузки серверов под управлением операционной сис-темы Solaris.