Так видит журнал читатель, который забыл оформить подписку:
КА
БЫ С
ТР О ТИ РАС РА КУ Ж ПИ
НИ НО К У ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ
ЛИ
СЬ
№5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии
№4(41) апрель 2006 подписной индекс 20780 www.samag.ru
танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM
Так видит журнал читатель, оформивший подписку: №5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины
№4(41) апрель 2006
КО НЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И ЗА
ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ
УЕ ХА Л
ВО
ТП УС К
Интервью с Ларри Уоллом – создателем языка Perl
Соберите собственный беспроводной роутер 802.11g на ОС Linux Как устроена файловая система reiser4 Три способа автоматизировать установку ПО в сети
Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети
Управляем инсталляторами
Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl
Используем OpenSSL для криптографической защиты данных Создаем VPN с помощью SSL-Explorer
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60
Техническая документация: серверы и сети Профессиональный прогноз: что ждет сисадминов?
оглавление 2 СОБЫТИЯ 3 ТЕНДЕНЦИИ 4 РЕПОРТАЖ АДМИНИСТРИРОВАНИЕ 6 Шесть дней одного года
Хроника знакомства с CMS «Битрикс: управление сайтом». Роман Коновалов info@bitrix.ru
8 Знакомимся с Gentoo Часть 2: базовые настройки и работа с Portage
В вопросах установки Gentoo не сильно-то старается сделать всё за пользователя, вынуждая его осознанно принимать каждое решение. А как дела обстоят с настройкой и сопровождением системы? Здесь у Gentoo тоже есть свои особенности. Сергей Супрунов amsand@rambler.ru
16 Как устроена файловая система reiser4
Многим в ОС Linux нравится не только её открытость, стабильность и прочие немаловажные характеристики, а, прежде всего, гибкость. В Linux, наверное, нет ни одного компонента, которому нельзя было бы подобрать альтернативу. Не являются исключением и файловые системы. Андрей Пешеходов fresco_pap@mail.ru
26 Создаем порт для FreeBSD своими руками Часть 2: расширенные возможности
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах? Рашид Ачилов shelton@granch.ru
34 Автоматизируем установку программного обеспечения в сети
Развертывание программного обеспечения – неотъемлемая часть работы системного администратора. Есть несколько способов автоматизировать этот процесс. Андрей Бирюков mex_inet@rambler.ru
38 Управляем инсталляторами
Сейчас используется несколько основных инсталляторов для установки программного обеспечения. Очень важным вопросом является автоматизация процесса установки приложений. Иван Коробко ikorobko@prosv.ru
ЧЕЛОВЕК НОМЕРА 44 Герой нашего времени, или Попытка развенчания мифов
Новое поколение российских предпринимателей уже родилось. Они уже занимают ключевые позиции. В том числе и на рынке электронных продуктов. Их не знают, о них сочиняют мифы. Мифы, которые оказываются несостоятельными под натиском фактов. Оксана Родионова rodion@dol.ru
БЕЗОПАСНОСТЬ 48 Используем средства библиотеки OpenSSL для криптографической защиты данных
Несколько практических примеров использования библиотеки OpenSSL для генерации псевдослучайных чисел, вычисления хэшей и шифрования данных с использованием симметричных и ассиметричных алгоритмов. Владимир Мешков ubob@mail.ru
56 Создаем VPN с помощью SSL-Explorer
Виртуальные частные сети в течение последних лет стали очень популярными и среди технологий, направленных на обеспечение безопасности, занимают третье место – после антивирусов и межсетевых экранов. Именно им бизнес часто полностью доверяет свои секреты. Сергей Яремчук grinder@ua.fm
СЕТИ 65 Собираем беспроводной роутер 802.11g на базе ОС Linux
С помощью обычной беспроводной PCI-карты и не очень мощного компьютера с ОС Linux вы сможете сделать собственную точку доступа 802.11g, по функциональности ни чем не уступающую, а кое-где даже и превосходящую оборудование известных производителей. Михаил Платов platov@cs.vsu.ru
ДОКУМЕНТАЦИЯ 72 Техническая документация: серверы и сети
Приходя на новое место работы, каждому системному администратору хочется получить пакет исчерпывающей технической документации. И первые по важности в этом пакете документы об устройстве сети и серверов. Алексей Коршунов akeeper@samag.ru
IMHO 76 Перспективы профессии. Автопортрет
Кто такие системные администраторы, почему они этим занимаются, что ждет их впереди? Попробуем разобраться в настоящем положении дел и сделать предположения на ближайшее будущее. Алексей Барабанов alekseybb@mail.ru
РЕТРОСПЕКТИВА 84 Надежда умирает последней: история компании SGI
Двадцать лет назад в компьютерной индустрии существовали лишь две компании с трёхбуквенными названиями, перед которыми благоговела общественность – Sun и SGI. Что вам известно о последней? Дмитрий Мороз akuji@list.ru
92 КНИЖНАЯ ПОЛКА 75, 83
BUGTRAQ
СПЕШИТЕ ОФОРМИТЬ ПОДПИСКУ НА II ПОЛУГОДИЕ 2006 ГОДА! №4, апрель 2006
1
события Центральной темой мероприятий Лидеры мирового движения ИНФОФОРУМА станет «Информационная Open Source примут участие в работе безопасность и национальная экономика» Второго форума по открытому коду Когда: 14-16 июня Где: г. Москва, Центр Международной Торговли (Краснопресненская наб., 12)
Подробности: www.infoforum.ru В рамках летнего «ИНФОФОРУМА» будут проведены: 2-я Московская международная выставка-форум «Информационная безопасность региона, организаций, граждан» (InfoforumCity-2006). 1-я Московская международная выставка-форум «Интеллектуальные решения для экономической безопасности» (Biforum-2006). Практические семинары, организуемые генеральными спонсорами – Microsoft, IBM, Nortel, Sun Microsystems. Центральная тема июньских мероприятий ИНФОФОРУМА – «Информационная безопасность и национальная экономика». Состоятся заседания: Концепции и системы обеспечения информационной безопасности современного города (региона). Центры обработки данных: безопасные решения для территориально распределенных структур. Комплексные решения в области обеспечения информационной безопасности на транспорте. Интеллектуальные технологии и аналитические решения для управления комплексной безопасностью на предприятиях ТЭК. Вопросы применение информационных технологий для обеспечения безопасности и содействия торговле. Вопросы стандартизации в сфере обеспечения информационной безопасности банковской деятельности. Вопросы экономической и информационной безопасности в деятельности бюро кредитных историй. Современные технологии интеллектуального анализа данных (Business Intelligence) для управления безопасностью предприятий и организаций. 15 июня состоится заседание в здании Государственной Думы РФ по проблемам законодательного регулирования в сфере информационной безопасности. Организаторы ИНФОФОРУМА: Комитет Государственной Думы РФ по безопасности; Росинформтехнологии; Правительство Москвы; Некоммерческое партнерство «ИНФОФОРУМ» при поддержке аппарата Совета безопасности РФ, ФСБ России, МВД России, ФСТЭК России, Банка России, АРБ, ТПП РФ и других федеральных организаций. Посещение выставки и конференции – по свободно распространяемым приглашениям. Получить информацию и заказать приглашения вы можете через Оргкомитет – www.infoforum.ru, тел.: 510-71-19, 510-71-99, тел./факс: 191-99-22, 195-16-78.
2
Когда: 21-23 июня Где: г. Москва, МВЦ «Крокус Экспо» (Павильон 2, зал 7)
Подробности: www.interop.ru Второй форум по открытому коду (II Open Sourсe Forum Russia) в этом году пройдет в рамках международной IT-выставки – INTEROP Moscow 2006. Лидеры мирового движения Open Source приедут в Москву, чтобы принять участие в работе форума и обсудить наиболее актуальные проблемы, связанные с разработкой платформ на основе открытого кода. Форум откроет г-н Йон «мэддог» Холл (Jon maddog Hall), один из основателей движения сторонников открытого кода. Г-н Холл является исполнительным директором Linux International, автором известнейшей книги «Linux for Dummies» и многочисленных статей, посвященных специфике открытого кода. Он принимал участие в Первом форуме по открытому коду в 2005 году, успех которого убедил его в том, что интерес к программному обеспечению на основе открытого кода в России достаточно высок. Одним из ключевых докладчиков в рамках INTEROP CONGRESS станет Брюс Перенс (Bruce Perens), член совета директоров Open Source Risk Management, соучредитель и директор организации разработчиков Open Source – Software in the Public Interest. Именно благодаря ему во всем мире используется термин «Open Source». На форуме выступят такие известные в Open Source сообществе люди, как Андрю Мортон (Andrew Morton), один из главных разработчиков ядра открытой операционной системы Linux, в настоящий момент координирующий разработки ядер ветви 2.6.х. в лаборатории открытого кода OSDL; Ян Мэрдок (Ian Murdock), исполнительный директор компании Progeny и один из создателей проекта Debian GNU/Linux; Аза Доцлер (Asa Dotzler), ведущий разработчик браузера Mozilla Firefox и координатор сообщества Mozilla Foundation; Зив Сураски (Zeev Suraski), один из разработчиков наиболее популярных языков программирования – PHP 3.0, PHP 4.0 и PHP 5.0, на основе созданной им Zend Engine и Zend Engine II, а также автор ряда книг по методам программирования в PHP; Робин Миллер (Robin Miller), один из основателей современной интерактивной журналистики, сейчас работающий главным редактором сети OSTG, которая составляет основу движения Open Source; Бьёрн Фримен-Бенсон (Bjorn Freeman-Benson), технический директор, работал с проектами OTI, Amazon.com, Rational, Gemstone. Также доклад на тему Open Source Security Lessons представит Вице Венема (Wietse Venema), всемирно известный создатель TCP Wrapper и почтовой системы POSTFIX, соавтор сетевого сканера SATAN, входящий в тройку самых компетентных экспертов в области IT-безопасности. Свой взгляд на перспективы и эффективность использования программного обеспечения на основе открытого кода в научных исследования и, в частности, – в области нанотехнологий представит Кристина Петерсон (Christine L. Peterson), основатель и вице-президент Foresight Nanotech Institute.
тенденции Kerio создает дистрибьюторскую сеть в России 22 марта в Москве прошла совместная пресс-конференция компаний Kerio Technologies Inc и Softkey с целью представить новую стратегию работы компании Kerio Technologies на российском рынке. Необходимость обратить более пристальное внимание на российский рынок была вызвана несколькими причинами. Во-первых, продукты компании активно используются в России, во-вторых, рынок Центральной и Восточной Европы активно развивается и является одним из самых быстрорастущих рынков ПО в мире. На данный момент в компании считают приоритетной задачей создание надежной дистрибьюторской сети. В рамках новой стратегии развития эксклюзивным дистрибьютором продукции Kerio Technologies в России стала компания Softkey. Также представителям прессы были представлены два основных программных продукта, рассчитанных на российский рынок – это широко известный прокси-сервер WinRoute и сервер почтовых сообщений Kerio mailServer. Оба продукта рассчитаны на использование в организациях сегмента среднего и малого бизнеса (SMB). Данное программное обеспечение создавалось в качестве альтернативы продуктам от Microsoft. И если Kerio WinRoute уже заслужил репутацию надежного, легко конфигурируемого продукта, то Kerio MailSerrver 6 – это относительно новый продукт, являющийся полноценной заменой MS Exchange для небольших организаций. Этот почтовый сервер поддерживает SSL-зашифрованные протоколы (IMAP, SMTP, HTTP, POP3), поддерживает проверку почты одновременно двумя разными антивирусными системами (список антивирусных программ не очень большой, и российские Dr.Web, и антивирус Касперского в него не попали). Также почтовый сервер имеет два веб-интерфейса – расширенный и mini (для PDA, мобильных телефонов и медленных интернет-соединений). Для обеспечения потребностей коллективной работы сервер включает возможности общего доступа к папкам, задачам и контактам посредством почтового клиента. Почтовый сервер разработан для операционных систем Windows, Linux и Mac OS X.
ми. Теперь в MySQL AB занялись работой над собственным движком. Кроме того, Мартен Микос, исполнительный директор MySQL AB, сообщил, что по контракту, заключенному между Innobase и Oracle, последняя обязуется обновлять движок для хранения InnoDB на тех же условиях, что были и до приобретения. «В Oracle не хотят затормозить наше развитие, и они будут исправлять ошибки, – заверил он. – Очень здорово, когда у тебя Oracle выступает в роли субподрядчика».
Sendmail Inc. может открыть код некоторых продуктов Компания Sendmail, продукты которой основаны на свободном программном обеспечении, может открыть код своих некоторых разработок. Проприетарное ПО, распространяемое компанией, работает с популярным открытым почтовым агентом (MTA) Sendmail. Как сообщил Эрик Оллман, главный научный сотрудник компании и автор Sendmail, исходный код этого ПО может быть открыт. По его словам, открытие кода стоит ожидать уже в нынешнем году, и этот процесс может затянуться. Одним из кандидатов на становление открытым является Mailcenter Store. Среди причин для открытия кода программного обеспечения Оллман обозначил перспективы увеличения популярности продуктов Sendmail и их более широкое распространение, помощь со стороны, т.е. от людей, которые, увидев исходный код, будут находить ошибки и рассказывать о новых идеях для улучшения продуктов.
Составил Дмитрий Шурупов по материалам www.nixp.ru
Николай Никульшин
Вышла DesktopBSD 1.0 Конец марта ознаменовался первым окончательным релизом от проекта, задавшегося целью создать простую в использовании ОС для десктопов на основе FreeBSD. DesktopBSD 1.0 базируется на релизе FreeBSD 5.5PRERELEASE с графической оболочкой KDE 3.5.1 и простым пакетным менеджером. Среди поддерживаемых системой языков представлен и русский. DesktopBSD 1.0 выходит в двух редакциях: на CD и DVD, – которые отличаются входящим в состав ОС программного обеспечения.
В MySQL готовят замену InnoDB Несмотря на прошлогоднее приобретение разработчиков InnoDB корпорацией Oracle, волноваться за MySQL не стоит, утверждают в компании. InnoDB, один из движков для хранения, используемый в СУБД MySQL, как и альтернативные ему решения, создавался сторонними разработчика-
№4, апрель 2006
3
репортаж
Впечатления от Oracle Apps Forum 2006 23-24 марта в Москве состоялся уже пятый по счету ежегодный многоотраслевой форум для руководителей ведущих предприятий России и СНГ. Следуя устоявшейся традиции, мероприятие прошло в Рэдиссон САС Славянская.
В
этом году форум проходил под системы для Федерального казначейс- нирование цепочек поставок в логислозунгом «Российский ERP-про- тва РФ. Проектов подобного масшта- тических компаниях. Точки эффективрыв», который и обусловил темы ба очень и очень немного. ности», Мария Акчурина – «Oracle JD основной массы докладов. Тема, неВо второй половине дня я отпра- Edwards EnterpriseOne для автоматисомненно, интересная, а самое глав- вился в конференц-зал, в котором про- зации оптово-торговых холдингов: реное – актуальная. Эту мысль очень шли два выступления – «Рост стоимос- альный опыт внедрения», Вадим Горбуудачно изложил Борис Щербаков (вице- ти компании за счет внедрения ERP- нов – «Бизнес аспекты проектов ERP». президент Oracle): «Сегодня мы явля- систем» и «Качественные изменения После каждого из выступлений доемся свидетелями коренного перелома в управлении компании при внедрении кладчики с энтузиазмом отвечали на в отношении к ERP-системам на рос- ERP». Опять же информации для пос- вопросы слушателей. После обеда и небольшого пересийском рынке. Информационные тех- ледующего обдумывания и осмысленологии управления перестали быть ния было получено предостаточно. рыва на очереди были завершающие экзотикой и превратились в необхоА в это время в кулуарах не утихали форум секции. Для меня наиболее индимое условие для успешной работы дискуссии, да и просто общение среди тересной оказалась «Решение Oracle гостей форума. в конкурентной среде». для растущего бизнеса». Секция быВ последнем «блоке» первого дня ла представлена тремя докладчиками: Торжественное открытие мероприятия проходило в конференц-зале. были представлены следующие до- Елена Благидзе – «Oracle JD Edwards Тут всех ждал сюрприз. По программе кладчики: Константин Попов с темой Fast Start – первый шаг к высоким рефорума первым выступлением долж- «Эволюция ERP-проектов – секреты зультатам», Сергей Ливицкий – «Пракна была быть приветственная речь Бо- успешных внедрений», Алексей Ма- тика эффективного управления произриса Шербакова, однако вместо этого рейко – «Разработка Мастер Системы водством» и Мария Акчурина – «Интег(вернее сказать, перед этим) свет в за- в программе «Внедрение ERP в группе рация приложений Oracle с целью после медленно погас, и на сцену под ди- компаний Связьинвест»», Андрей Бон- троения единого информационного намичную музыку вышла группа тан- дарь – «Организация проекта по опти- пространства для растущего бизнеса». цовщиц, и, что называется, действие мизации процесса подготовки финан- Небольшая численность аудитории началось. Налицо было явное несоот- совой отчетности» и Виктор Чумаков в этой секции способствовала более ветствие времени, места и действую- с докладом «Аудит процесса внедре- неформальной манере выступлений, щих лиц, так как весь зал на десять ми- ния ERP как средство эффективного что в конечном итоге пошло на пользу нут буквально перенесся не то на ка- управления проектом». На этом про- как докладчикам, так и слушателям. кую-то сумасшедшую рейв-дискотеку, граммы выступлений первого дня бы- На этом завершилась официальная не то на показ мод. Вот такое веселое ли исчерпаны. Гостей и делегатов фо- часть Oracle Apps Forum 2006. В фойе состоялся небольшой и неоднозначное начало. рума ожидал гала-ужин. После всех вступительных речей Программа второго дня была не ме- фуршет для всех желающих. Вот тут, и выступлений начинались непос- нее насыщена по сравнению с первым. в действительно раскрепощенной редственно доклады в профильных Так же, как и в предыдущий день, пер- обстановке, c бокалом шампанскосекциях. вые выступления прошли в конференц- го и проходили основные дискуссии. Программа первого дня была ус- зале и были «общими». Сложно выде- Было приятно пообщаться со многими ловно поделена на три части. Для ме- лить какие-либо доклады, разве что людьми, и в том числе завести новые ня наибольший интерес представляли выступление Ольги Усановой, в кото- знакомства. Сложно подвести какойвыступления, посвященные ERP-сис- ром она рассказала о процессе внед- то однозначный итог, но одно можнотеме Oracle JD Edwards EnterpriseOne, рения ERP-системы в телекомпании утверждать смело, мероприятие удав частности, доклады об успешном НТВ. Далее кофе-брейк, и снова раз- лось на все сто процентов. Высокий внедрении этой системы. Собственно, деление на профильные секции. уровень организации и профессионаэто и обусловило выбор отраслевых Я выбрал зал «Чехов», в котором лизм докладчиков, не позволил заскусекций, на которых я присутствовал. проходили выступления по теме «Дис- чать даже сугубо техническим специаВ первой половине дня среди про- трибуция и логистика». Всего было че- листам, относительно далеким от обчих очень запомнился доклад Дени- тыре доклада. Константин Невядомс- ластей управления, консалтинга и проса Смирнова, в котором он рассказал кий – «Создание эффективной логис- чих профильных тем. о проекте создания и внедрения ав- тической модели в дистрибьюторской Александр Байрак томатизированной информационной компании», Алексей Солнцев – «Пла-
4
администрирование
Шесть дней одного года Xроника знакомства с CMS «Битрикс: управление сайтом»
Роман Коновалов День первый Наконец-то одержал первую победу над начальством – убедил купить вменяемую CMS. Долго объяснял шефу текущую ситуацию, и таки втолковал, что админ на то и админ, чтобы заниматься поддержкой железа и другими «хитрыми» делами, но кропать ежедневные новости для корпоративного сайта и переводить западные прессрелизы (мы занимаемся продажей бытовой техники) – увольте, мне хватает «бюрократии» при общении с бухгалтерией, где в очередной раз «сломалась» вездесущая 1С. Отчасти подействовал довод об эффективности сокращения ставки моего помощника из числа вечных студентов, и если снять с моих плеч бессмысленную «бумажную» нагрузку, то с остальными заботами админ справится без чужой помощи. При таком разговоре было грех не указать на фактическую бездеятельность многочисленного племени менеджеров, которым можно и нужно поручить «бумаготворчество», ибо CMS «Битрикс: Управление сайтом» (www.bitrixsoft.ru) позволяет назначить права для публикации новостей и пресс-релизов, причем, техническая сторона вопроса не сложнее работы в MS Word. Окончательно «добиваю» шефа тем, что конкурирующая компания уже месяц назад перевела свой веб-ресурс под чуткое «руководство» Битрикса (системный администратор конкурентов – мой старый приятель), а мой «самопальный» движок, на котором ра-
6
ботает корпоративный сайт, для своей доработки потребует массу времени и денег. Ура, начальство сдалось. Первый раз в жизни с радостью набираю текст гарантийного письма разработчикам…
обязанности между сотрудниками, допущенными к управлению нашим сайтом. Кажется, понемногу успокоились – поняли, что к чему. А мне предстоит дизайном заняться…
День второй
Базовая поставка «Битрикс: Управление сайтом» включает несколько дизайнерских заготовок (раздел «Настройки системы → Шаблоны сайта», см. рис. 2), которые меня никоим образом меня не устраивали. Что же, нам не привыкать, посмотрим, что предлагают разработчики. Замечательно! – посредством ссылки «Изменить» HTML-код шаблона заменяется необходимым, и после доработки шаблона старый дизайн идеально вписывается в структуру обновленного сайта. Наше мудрое руководство, побродив по сайту разработчиков, решило проявить свои дизайнерские «таланты»: как оказалось, девелоперы предлагают готовые решения общим числом несколько тысяч, причем, все это собрано в тематические группы («Индустриальные», «Армейские», «Книги» и т. д.). В ответ на несколько предложений о замене существующего дизайна отправляю начальство к партнерам компании «Битрикс» – на заказ изготовят именно то, что душа пожелает, были бы деньги (www.bitrixtemplates.ru).
Собираю менеджеров и зачитываю приказ начальства о «возложении дополнительных обязанностей» на бездельников. Бунт пресекаю в зародыше, кратко объясняя механизм работы в «Битрикс: Управление сайтом» – не верят. Запускаю стартовую страницу CMS, перехожу в раздел «Информационные блоки» и предлагаю сомневающимся опробовать новый движок. Особо «продвинутый» менеджер, в свое время предлагавший свои услуги в качестве HTML-кодера (дескать, владею Front Page) начал демагогию о тонкостях владения HTML, но через пару минут успокоился: при создании новых страниц или новостных блоков можно использовать встроенный визуальный редактор, чрезвычайно похожий на MS Word. Слава Богу, с Windows-системным «Рабочим столом» менеджеры знакомы, стало быть, и при использовании «Битрикс: Управление сайтом» получите в свое распоряжение аналогичный инструмент (см. рис. 1). Но вольницы я не допущу – для исключения неразберихи при работе с сайтом в этой CMS предусмотрено выборочное назначение прав доступа к тем или иным модулям, посему придется распределить
День третий
День четвертый Дизайн – дело хорошее, но оптимизация сервера для меня важнее, тем бо-
на правах рекламы лее, что никто не отменял аксиому: будучи загруженным с PHP и другими модулями, веб-сервер занимает значительный объем памяти, как разделяемой, так и для отдельного процесса. Стало быть, придется заняться оптимизацией, и, если быть точным, уменьшением размера не только потребляемой памяти, но и числа процессов, одновременно необходимых для работы веб-сервера, а также числа перезапусков процессов (разумеется, потребуется снизить время жизни процессов). Итак, при работе с «Битрикс: Управление сайтом» мы имеем большое число всевозможных модулей, а значит, желательно исключить из компиляции и процесса загрузки веб-сервера все неиспользуемые модули. В итоге уменьшится размер памяти, не только потребляемой веб-сервером при запуске, но и применительно к отдельному процессу (безусловно, PHP должен работать с веб-сервером как модуль (mod_php4) и загружаться веб-сервером при запуске).
Рисунок 1. Практически все менеджеры знакомы с системным «Рабочим столом». При использовании «Битрикс: Управление сайтом» эти труженики получат в свое распоряжение аналогичный инструмент
День пятый Одной из важнейших задач, которую придется решить, является минимизация числа запросов, обрабатываемых веб-сервером. Наилучшим решением в моем случае стало создание двухуровневой системы Front-end+Back-end для обработки запросов. Все запросы к веб-серверу и ко всем его страницам принимаются специальным проксирующим процессом (Front-end), самостоятельно обрабатывающим все запросы, благо, с прокси-серверами дефицита нет. Что касается запросов к контентным страницам, то они будут не кэшироваться, а перенаправляться к Backend части системы, представляющей собой обычный веб-сервер Apache, работающий на нестандартном порту (например, 88), и отвечающий только на запросы с localhost или IP-адреса прокси-сервера. Небольшой совет: лучше использовать несколько внутренних IP адресов типа 127.0.0.2, 127.0.0.3 и т. д. с 80-м портом, иначе возможны нежелательные редиректы на неработающий порт у Front-end.
День шестой Все заработало. Казалось бы, теперь можно вздохнуть спокойно, ан нет: упо-
№4, апрель 2006
Рисунок 2. HTML-код шаблона без труда заменяется на необходимый, понадобится лишь небольшая доработка
минавшийся «продвинутый» любитель веб-проекта. Шеф, узнав о таком сервизуальных редакторов вычитал в ма- висе, тут же направил меня в помощь нуале, что, работая с «Битрикс: Управ- «манагерам» – дескать, доведи до ума ление сайтом», маркетологи компании техническую сторону вопроса. Доведу, смогут качественно планировать рек- куда я денусь. Зато потом – заслуженламные акции для привлечения целе- ный отдых… вых посетителей на страницы своего
7
администрирование
Знакомимся с Gentoo Часть II: базовые настройки и работа с Portage
Сергей Супрунов В вопросах установки Gentoo не сильно-то заботится о пользователе, вынуждая его осознанно принимать каждое решение. А как дела обстоят с настройкой и сопровождением системы? И здесь у Gentoo есть свои особенности.
8
администрирование
В
первой части статьи мы занимались вопросами установки Gentoo. Задача нетривиальная, но весьма интересная. Продолжим знакомство с этим дистрибутивом, сегодня на повестке дня вопросы настройки Gentoo и основы работы с системой Portage.
В какое время мы живём? Вопрос, скорее, философский, но если его сузить до вопроса выбора часового пояса, то делается это традиционно: # cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В некоторых руководствах можно встретить рекомендацию вместо копирования создавать символьную ссылку. Если у вас каталог /usr расположен на корневом разделе, то можно поступить и так. Если же /usr вынесен на отдельный раздел, то лучше явно скопировать информацию о зоне, чтобы система корректно работала и в случае, когда будет смонтирована только корневая файловая система.
А как всё это загружается?
Не забудьте подправить fstab В прошлый раз мы рассмотрели инсталляцию Gentoo. Обратите внимание на ещё один важный для успешной перезагрузки момент – необходимо привести в соответствие с вашими дисковыми разделами файл /etc/fstab, поскольку в базовой системе он представляет собой просто шаблон. Для того чтобы система нормально перезагрузилась, в нём нужно исправить включения «BOOT», «ROOT», «SWAP» на обозначение реальных разделов (строки для файловых систем, которые вы не создавали отдельно, нужно закомментировать или удалить). Впрочем, попытка перезагрузиться без нужных исправлений сразу же укажет вам на проблему.
Для именования ссылок принимается специальный формат: <действие><порядок><имя>
где: <действие> – буква, указывающая, должен ли данный сервис запускаться (S) или прекращать работу (K); <порядок> – две цифры (от 00 до 99), определяющие порядок, в котором будут отрабатываться соответствующие сценарии; <имя> – краткое наименование сервиса.
Теперь рассмотрим сценарии инициализации системы. В принципе всё достаточно традиционно для Linux (на то он и Linux), то есть управление запуском выполняется на уровне абстракции, именуемой runlevel. Наиболее часто это переводят как «уровни исполнения», будем и мы придержиНапример, ссылка S15cron в каталоге rc2.d означает, ваться этого термина. Если говорить упрощённо, то уровень исполнения оп- что при переходе на runlevel 2 должен запускаться (букределяет набор сервисов, которые должны быть запуще- ва «S») сервис cron. В Gentoo всё реализовано несколько иначе. Каталог ны или остановлены при переходе на тот или иной уровень. Управление сервисами выполняется с помощью сценари- /etc/init.d также присутствует и для тех же целей. Но вот запуск сценариев и их формат заметно отличаются. ев инициализации. Во-первых, каталоги уровней запуска размещаются В большинстве дистрибутивов Linux принята следующая схема: в каталоге /etc/init.d размещаются сценарии управ- в /etc/runlevels и имеют более «функциональные» имена: ления различными службами, а в каталогах rcN.d, где N – boot, default, single, nonetwork. Причём эти имена связаны номер уровня runlevel, создаются символьные ссылки на со- с конкретным уровнем исполнения лишь в файле /etc/inittab, так что вы, при желании, можете переопределить их имеответствующие сценарии. Конкретное местоположение каталогов rcN.d зависит от на, создать свои уровни и т. д. Единственный каталог, кодистрибутива. Мне встречались следующие размещения: торый не рекомендуется переименовывать – это boot, отвечающий за запуск программ на этапе первоначальной /etc/rcN.d (Ubuntu, Knoppix); загрузки системы. /etc/init.d/rcN.d (OpenSUSE); Во-вторых, отличается формат самих сценариев иници /etc/rc.d/rcN.d (уже не помню, где).
Freetoo или GeBSD? Время от времени на страницах различных сайтов проскакивают новости об одном интересном проекте – Gentoo/FreeBSD. Смысл его – построение системы на основе Gentoo (инструментарий GNU, система Portage и т. д.), но на ядре FreeBSD. В качестве основной причины, побудившей создать столь странный проект, называется желание распространить Portage на другие операционные системы и тем самым влить в неё «новую кровь» и ускорить её развитие. Безусловно, идея заслуживает внимания. Хотя бы в том плане, что единство –
№4, апрель 2006
это то, чего так не хватает миру Open Source. Возможно, Gentoo/FreeBSD будет хорошим выбором для администраторов, которым по тем или иным причинам необходимы обе системы, поскольку позволяет унифицировать работу с дополнительным программным обеспечением. С другой стороны, очень сомнительно, что найдётся много желающих серьёзно работать с подобной системой. Пользователи Gentoo и так довольны, а мнение большинства «обладателей» FreeBSD, думаю, хорошо отражает комментарий, который я прочёл на одном из форумов: «Я не знаю, что такое Portage, но оно нам
во FreeBSD не надо!». Как бы то ни было, сейчас проект находится, скорее, в зачаточном состоянии. Что из этого получится – время покажет. Дополнительную информацию можно получить на странице проекта: http:// www.gentoo.org/proj/en/gentoo-alt/bsd/fbsd, а также по адресу http://en.wikipedia.org/ wiki/Gentoo/FreeBSD. Справедливости ради замечу, что такая же участь постигла и другие BSD-системы. С другой стороны, подобный «нездоровый» интерес к FreeBSD проявляет и Debian (см. http://www.debian.org/ports/ kfreebsd-gnu).
9
администрирование ализации. Если вы уже заглянули в один из указанных выше каталогов, то заметили, что ссылки здесь называются просто по имени сервиса. А как же тогда управлять порядком их исполнения? Для этого существует механизм расчёта порядка запуска на основании зависимостей. Если вы просмотрите какой-нибудь из init-сценариев, то заметите, что в нём определён ряд подпрограмм. Обязательной является подпрограмма start(), отвечающая за запуск сервиса. Зачастую определены также stop(), checkconfig() и т. д. Названия говорят сами за себя. Упомянутые выше зависимости определяются в подпрограмме depend(). Так вот, в depend() перечисляются службы, от которых зависит данный сервис. Выделяют два типа зависимостей – need (обязательная) и use (дополнительная). Программа просто не запустится, если не будет запущена служба, указанная в строке need. В случае use-зависимости программа может работать и без соответствующих сервисов, но если они в системе присутствуют, то должны быть запущены первыми. Если между сервисами нет отношения зависимости, но требуется явно указать порядок их запуска, можно в depend() использовать строки before и after. А что делать, если программа нуждается не в конкретной программе, а просто в сервисе, который может предоставляться одной из нескольких программ? Например, некоторые приложения будут зависеть от службы журналирования системной информации (syslog), однако реализована она может быть несколькими программами на выбор администратора. В Gentoo данная проблема решается с помощью так называемых виртуальных сервисов, которые описываются в depend() в строке provide. Например, как syslog-ng, так и sysklogd при установке зарегистрируют себя как сервис logger, и тогда для других зависимых приложений достаточно будет указать «need logger». В качестве примера рассмотрим фрагмент файла /etc/init.d/vixie-cron: depend() { use clock logger need localmount provide cron }
Здесь вы видите, что этот сервис регистрирует себя в качестве виртуального сервиса «cron», обязательно требует, чтобы были смонтированы локальные файловые системы(?) и хотел бы, чтобы сервис clock и виртуальный сервис logger были запущены до него (если они вообще есть в системе). На основании сведений, содержащихся в depend(), и рассчитывается порядок запуска сервисов. Кстати, установив переменную RC_PARALLEL_STARTUP в файле /etc/conf.d/rc в значение «yes», можно позволить системе параллельно запускать сценарии инициализации, не зависящие друг от друга (на том же принципе основана работа initng). Для управления сервисами служит утилита rc-update. Мы уже сталкивались с ней в первой части статьи, когда регистрировали в системе нужные нам утилиты vixie-cron и syslog-ng.
10
Её синтаксис следующий: rc-update <действие> [<программа>] <уровень>
где: <действие> – что нужно сделать (добавить – add, удалить – del, просмотреть – show); <программа> – имя программы (например, vixie-cron); <уровень> – имя каталога соответствующего уровня исполнения (обычно default). Работа программы заключается в размещении (или удалении) символьной ссылки на сценарий инициализации в каталоге соответствующего уровня исполнения. Кроме того, при её запуске рассчитывается кэш зависимостей (по умолчанию соответствующие файлы расположены в /var/lib/init.d/, что определяется переменной svcdir в /etc/conf.d/rc), который и используется при загрузке системы.
Что бы тут ещё поменять? Некоторые глобальные настройки (например, редактор по умолчанию и DISPLAYMANAGER) можно установить в файле /etc/rc.conf. Он, конечно, играет в системе не такую решающую роль, как во FreeBSD, но забывать о нём не нужно. Каталог /etc/env.d служит для установки значений различных переменных окружения. Для этого используется несколько файлов, которые обрабатываются в лексикографическом порядке. Если одна и та же переменная задаётся в нескольких файлах, силу будет иметь то значение, которое будет присвоено последним. Также нужно упомянуть следующую команду: # env-update
Она обрабатывает файлы каталога env.d и создаёт результирующий файл /etc/profile.env, который затем используется сценарием /etc/profile (только не поддавайтесь соблазну изменять переменные окружения непосредственно в нём). Файл /etc/profile управляет настройками среды окружения. Помимо обработки упомянутого ранее файла profile.env, здесь устанавливаются: переменная PATH, значение umask, приглашение командной строки (PS1), редактор по умолчанию (переменная EDITOR), которая берётся из файла /etc/rc.conf, но в принципе ничто не мешает задать её непосредственно в profile. Основные же настройки сосредоточены в каталоге /etc/conf.d. Здесь вы найдёте конфигурационные файлы для задания системного времени (clock) – не забудьте указать здесь «local» вместо «UTC», имени хоста (hostname), настройки sshd, сети (файл net) и т. д. Ещё один достаточно важный для системы файл, размещающийся в этом каталоге – rc. Здесь описаны переменные, влияющие на инициализацию. Также нужно упомянуть про каталог /etc/modules.autoload.d. Здесь, в файле, соответствующем вашему ядру, вы можете явно указать загрузку нужных для работы системы модулей, например, драйверов сетевых карт.
администрирование Нет предела совершенству Безусловно, утилита emerge позволяет делать очень много. Но «чтобы было ещё веселее», поставьте пакет gentoolkit. Он содержит несколько полезных утилит, делающих работу с Portage ещё более приятной: euse: разработана для работы с USE-флагами. С её помощью можно просматривать описание флагов
(например, «euse -i sdl»), удалять и устанавливать флаги по умолчанию и т. д. equery: мощная утилита для получения информации по установленным пакетам. В частности, можно просматривать список установленных программ (equery list), определять принадлежность файла к пакету или список файлов, входящих в пакет, и т. д.
Также загляните в каталог /etc/modules.d, где размещается ещё несколько конфигурационных файлов, касающихся модулей ядра.
Чуть подробнее о сети Поскольку возможность работать в сети в наши дни вполне можно считать жизненно необходимой, то подробнее остановимся на сетевых настройках. Как уже упоминалось, настройки сети можно найти в файле /etc/conf.d/net. Это несколько отличается от общепринятого способа. Например, в SUSE сценарий init.d/network, запускаясь на соответствующем уровне, ищет параметры конфигурации в файлах каталога /etc/sysconfig/network. Здесь же все настройки сосредоточены в одном файле – net. Скорее всего, при первой установке он будет пуст, но зато рядом должен быть файл net. example, где приведены примеры наиболее типичных настроек. Внимательно ознакомьтесь с ним и наберите нужные строки в файле net. Например, настройка на статические адреса может выглядеть следующим образом: config_eth1=("10.0.0.103/24") routes_eth1=("default gw 10.0.0.254")
При необходимости присвоить одной сетевой карте несколько IP-адресов (используя механизм alias) или задать адреса IPv6, можно их перечислить таким образом: #config_eth0=( # "192.168.0.2/24" # "4321:0:1:2:3:4:567:89ac" #)
Но этого ещё недостаточно. Нужно обеспечить автоматический запуск сети при загрузке. Если у вас только один адаптер – eth0, то для его запуска уже должен быть сценарий инициализации net.eth0 в каталоге /etc/init.d (он является ссылкой на net.lo, размещённый в этом же каталоге). Для других устройств (например, eth1) нужно создать свои ссылки с именем, соответствующим шаблону «net.<устройство>». Ну и с помощью rc-update обеспечить автоматический запуск скрипта при инициализации соответствующего уровня исполнения.
А если мне нужно больше? Очевидно, что возможностей, заложенных в базовую систему, будет недостаточно для полноценной работы. Рано
№4, апрель 2006
revdep-rebuild: полезная программа для «ремонта» пакетов, например, после глобального обновления. Ищет двоичные файлы, «потерявшие» нужные для работы библиотеки и зависимые пакеты и доустанавливает недостающее. Подробности использования каждая из этих программ выведет вам сама, будучи запущенной без параметров.
или поздно (а если говорить о Gentoo, то буквально с первых минут работы) вам понадобится установить ту или иную программу. В Gentoo для этих целей реализована близкая по духу к коллекции портов FreeBSD система Portage. В первой части статьи уже приводились примеры её использования, когда устанавливались исходные коды ядра, утилита vixie-cron и т. д. Настало время обсудить возможности Portage более подробно. Основное отличие Portage от портов BSD заключается в том, что в Gentoo не стали ограничиваться управлением только сторонними программами – с помощью Portage вы можете собирать/обновлять и базовые компоненты. Кроме того, разработчики Portage решили управлять сборкой не с помощью традиционных файлов Makefile, а используя специальные ebuild-скрипты (если заглянуть в один из них, то будет видно, что он служит для тех же задач – описывает версии, зависимости, сетевые адреса, где следует искать необходимые файлы, параметры конфигурации и т. д.). И если в той же FreeBSD для комфортной работы с портами нужно устанавливать ряд дополнительных программ (portupgrade, pkg_cutleaves), то Gentoo предоставляет в ваше распоряжение одну мощную высокоуровневую утилиту – emerge, которая обеспечивает доступ практически ко всему функционалу системы Portage. Приведу несколько наиболее полезных примеров использования (подробности – в man emerge): # emerge --search apache # emerge --searchdesc http-server
Так выполняется поиск в дереве Portage – первая строка демонстрирует поиск по имени пакета, вторая – по описанию (можно использовать и регулярные выражения). В принципе, дефисы можно и опустить (используя как emerge search mc), но лучше чётко видеть, что является командой, а что – аргументом. # emerge -pv links
Ключ -p (--pretend) заставляет emerge вместо реальной работы просто сообщить, какие действия она собирается выполнить; использование -v (--verbose) увеличивает информативность вывода. Помимо всего прочего, в выводе этой команды будет дана информация об общем объёме трафика, который потребуется для закачки всех необходимых пакетов. Настоятельно рекомендую (по крайней мере, первое время) каждую команду emerge предварять
11
администрирование такой же, но с ключом -p: это позволит не только «прикинуть» объём закачки, но и убедиться в правильности используемых флагов. Например, если «emerge -pv links» сообщает вам о намерении скачать из Интернета свыше 60 Мб, то, просмотрев список зависимых пакетов (который выводится здесь же), вы быстро обнаружите ненужные вам пакеты X11, qt и т. п. Несколько экспериментов с флагами позволят избежать их установки, отключив флаг sdl: «USE=”-sdl” emerge links». # emerge -f iproute2
С помощью ключа -f (--fetchonly) можно только скачать все необходимые для установки файлы. Это может быть полезно, если у вас модемное соединение (в этом случае сначала всё скачивается, а затем можно отключиться от сети и потихоньку всё это собирать). Или, если вам нужно установить пакет на машине, не имеющей выхода в Интернет, но вы не собираетесь ставить его на свой сервер, опять же поможет этот ключ. # emerge --info
Данная команда выводит список текущих настроек системы Portage. Наибольший интерес, видимо, будет представлять переменная USE, отображающая установленные по умолчанию значения (о ней мы поговорим чуть позже). # emerge --newuse mc
Так, можно пересобрать (при необходимости) установленное приложение с учётом изменений, сделанных в списке флагов USE (без ключа --newuse пересборка выполнится со старыми флагами). # emerge -u gentoo-sources
Ключ -u (--update) приводит к переустановке указанного пакета, если в этом есть необходимость (например, появилась новая версия). # emerge --sync
Эта команда выполняет обновление дерева Portage до актуального состояния. Рекомендуется обновлять Portage хотя бы раз в неделю. Однако с целью экономии трафика лучше использовать скрипт emerge-delta-webrsync, который устанавливается в систему уже известным способом: # emerge emerge-delta-webrsync
Первый запуск emerge-delta-webrsync приведёт к скачиванию достаточно большого объёма информации (порядка 30 Мб), в дальнейшем расход трафика будет небольшим. В качестве параметра можно указывать «общее» имя пакета (например, mc), конкретную версию (app-misc/mc4.6.0-r14), ограничивать с помощью символов «<», «>» и т. д. верхние и нижние границы версий (по умолчанию будет ус-
12
тановлена последняя стабильная версия, хотя бывают и исключения – зависит от майнтейнера конкретного портежа). Полный список возможных для установки пакетов можно посмотреть в соответствующем каталоге дерева Portage, обращая внимание на ebuild-файлы: # cd /usr/portage/app-misc/mc # ls | grep ebuild mc-4-6-0-r12.ebuild mc-4-6-0-r13.ebuild mc-4-6-0-r14.ebuild mc-4-6-1.ebuild
Есть также пара так называемых классов – system и world, – позволяющих, например, одним махом обновить всю систему со всеми установленными программами. Первый отвечает за работу с базовой системой (без программ, установленных пользователем), второй – за все пакеты, включая те, которые подпадают под действие system: # emerge -u world
Информацию по всем установленным программам можно найти в каталоге /var/db/pkg. Здесь формируется аналогичное дерево подкаталогов по категориям, но помимо общего названия программы указывается и её версия. Например, всю информацию по установленному в системе пакету syslog-ng можно будет найти в /var/db/pkg/app-admin/ syslog-ng-1.6.9. Система Portage заслуживает отдельной большой статьи (а то и нескольких), поэтому здесь я просто укажу, на что ещё нужно обратить внимание. Во-первых, существует понятие защищённых каталогов (например, /etc), т.е. таких, где изменения не могут быть выполнены автоматически и требуют вмешательства администратора. Сделано это для того, чтобы не «затереть» при обновлении с такой любовью настроенные конфигурационные файлы. Во-вторых, Portage позволяет управлять одновременно несколькими версиями одной и той же программы. Достигается это за счёт использования так называемых «слотов» (SLOT). В-третьих, некоторые пакеты, в которых обнаружены ошибки или которые недостаточно протестированы, могут «маскироваться». Однако при необходимости такой пакет всё равно можно установить. Подробности можно найти в «Руководстве». Также следует упомянуть об установке бинарных пакетов. Для этого следует задать ключ -k (--usepkg) в команде emerge, чтобы она попыталась сначала найти двоичный пакет, и только в случае неудачи приступала к стандартной инсталляции из исходных кодов. Ключ -K (--usepkgonly) полностью запрещает использование исходников, требуя обязательного использования двоичного пакета. В частности, этим можно воспользоваться для массовой установки какого-то приложения на несколько однотипных систем (собрать двоичный пакет позволяет ключ -b команды emerge).
Флажковая азбука Прежде чем говорить о переменной USE, пару слов нужно сказать о зависимостях пакетов. Помимо деления на зави-
администрирование симости сборки (DEPEND) и исполнения (RDEPEND), которые в большинстве случаев совпадают, каждый зависимый пакет является либо обязательным (без которого данное приложение вообще не соберётся или не будет работать), либо вспомогательным (который не требуется собственно для работы приложения, но предоставляет ему дополнительную функциональность). Так вот, вспомогательными зависимостями (которые также называют зависимости использования, по аналогии со сценариями инициализации) можно достаточно гибко управлять. Например, если вы не собираетесь использовать графическую подсистему, то при установке Midnight Commander соответствующую поддержку лучше отключить. Делается это с помощью переменной USE, например, так:
Рисунок 1. Занимаемся русификацией системы
# USE=”-X” emerge mc
Знак «минус» перед флагом означает, что соответствующие зависимости использовать не нужно. Если требуется принудительно включить поддержку того или иного пакета, укажите его без дополнительных знаков:
Рисунок 2. Midnight Commander во всей красе
# USE=”slang” emerge mc
Несколько флагов разделяются пробелом: «USE=”-X slang”». Как можно увидеть в выводе команды emerge --info, по умолчанию переменная USE имеет достаточно много значений. Указанная в командной строке, она не переопределяет установленное значение, а вносит соответствующие коррективы. Итоговое значение складывается из следующих значений (в порядке возрастания приоритета): глобальные флаги (из /etc/make.globals); флаги профиля (из /etc/make.profile/make.defaults); флаги из /etc/make.conf; индивидуальные флаги, описанные в /etc/portage/package. use; флаги, установленные в командной строке.
Ещё немного про настройки Познакомившись с Portage подробнее, нужно вернуться ненадолго к настройкам системы и рассмотреть параметры, влияющие на работу системы управления программами. Работа Portage определяется так называемыми профилями (profiles), в которых определяются специфические для той или иной платформы настройки. Используется тот профиль, ссылкой на который является файл /etc/make.profile. Если вы выбрали Stage3 для правильной платформы, то нужная ссылка уже будет создана. Если вам необходимо переопределить какие-то параметры, то исправлять их непосредственно в файлах профиля не рекомендуется, поскольку при обновлении дерева Portage все изменения будут потеряны. Для тонкой настройки предназначен каталог /etc/portage. По умолчанию он пуст (либо вообще отсутствует). Здесь вы можете определить следующие файлы: package.mask: используется для маскировки пакетов, которые вы не хотите использовать или обновлять;
№4, апрель 2006
Рисунок 3. Не так уж и плох links…
package.unmask: наоборот, размаскирует пакеты, помеченные в дереве Portage как Masked, если вы непременно хотите их поставить; package.use: индивидуальные USE-флаги для отдельных пакетов. Есть и другие – читайте документацию.
Мы – русские люди Ещё один важный для российских пользователей (да и вообще для всех, чей родной язык – не английский) вопрос – это локализация. В качестве примера рассмотрим использование русской локали и настройку системы на работу с кодировкой UTF-8 как наиболее перспективной (не хочу сказать, что она идеальна, но это, похоже, единственный путь избавиться от разброда с различными «cp», «koi», «iso» и проч.). Но сначала, отдавая дань традициям, рассмотрим настройку koi8-r. Рабочая кодировка в Gentoo настраивается в двух файлах: /etc/conf.d/consolefont, где задаётся используемый в консоли шрифт и (при необходимости) таблица перекодировки, и /etc/conf.d/keymaps, где указываются нужные раскладки. Например, чтобы настроить систему на работу с koi8-r, рекомендуется использовать «CONSOLEFONT=”cp866-8x16”»
13
администрирование и «CONSOLETRANSLATION=”koi2alt”» в файле consolefont, а в keymaps добавить следующие строки: KEYMAP=”ru4” SET_WINDOWKEYS=”yes”
# date Пнд Мар 27 22:34:55 MSD 2006
# touch файл # ls -a
Первой строкой выбирается раскладка (есть и другие, итого 4 -rw-r--r-- 1 root root 0 Мар 24 16:18 unicode см. /usr/share/consolefonts/), затем указываем, что следу-rw-r--r-- 1 root root 246 Мар 24 16:17 файл ет использовать размещение клавиш (в частности, знаков # cat файл препинания), принятое в Windows – именно такие метки наносят сейчас практически на все клавиатуры. Привет! Последним аккордом будет указание переменной окЭто пример работы с Unicode-кодировкой. ружения «LANG=”ru_RU.KOI8-R”», что можно сделать лиМожно даже файлы именовать на русском языке. бо глобально (например, добавив эту строку в файл Можно даже немножко пошалить: /etc/env.d/02locale), либо в настройках конкретных пользователей. # alias см=”view” Однако мы решили использовать UTF-8. Здесь есть не# см файл сколько дополнительных моментов. Во-первых, в базовой системе нет консольных шрифтов, соответствующих этой Только не нужно этим злоупотреблять – всё же компьюкодировке (по крайней мере, мне их найти не удалось, хо- терный мир не настолько совершенен, чтобы подобная тя всё подряд и не перебирал). Так что нужно их поставить, «вольность» не обернулась где-нибудь сообщениями об ошибках. Некоторые приложения, которые были установблаго делается это достаточно просто: лены до перехода на Unicode, возможно, придётся пересоб# USE=”-X” emerge terminus-font рать (используя ключ --newuse). Например, это может потребоваться для правильной работы консольного браузера «Иксы» (X Window) я отключил здесь потому, что пока links. Чтобы нормально заработал Midnight Commander, его не планирую их использовать (на самом деле, «-X» у меня рекомендуется собирать со следующими флагами: прописан глобально, в /etc/make.conf, здесь переменная по# USE=”unicode slang -ncurses” emerge mc казана для наглядности). Вы, естественно, можете задать те флаги, которые нужны вам. Во-вторых, в файле /etc/rc.conf необходимо устаноВ итоге вы получите приятный на вид и в целом даже рувить переменную UNICODE в значение «yes», чтобы сис- сифицированный файловый менеджер (см. рис. 2). Кстати, чтобы в том же links наслаждаться результатом тема знала, с чем мы работаем. И, в-третьих, полезно будет задать глобальный флаг «USE=”unicode”», если он ещё наших трудов, проделайте следующее: не установлен. <Esc> (для перехода в меню) → Setup → Terminal Далее всё, как и в случае с koi8-r: записываем строку options: [X] UTF-8 I/O «CONSOLEFONT=”ter-k14n”» в файл /etc/conf.d/consolefont – Setup → Language → Russian это один из тех шрифтов, что был установлен выше. Вы- Setup → Character set → KOI8-R глядит несколько непривычно (рис. 1), но весьма аккуратТеперь странички будут отображаться кириллицей вмесно; единственное, к чему я в нём ещё не привык – это к русской «к», которая выглядит как латинская «k», с высоким то транслита (см. рис. 3), да и сам браузер будет общаться «хвостиком». с вами преимущественно по-русски. В /etc/conf.d/keymaps соответствующие строки привоПодробнее о проблемах кириллизации можно почидим к виду: тать в статье Алексея Барабанова «Кириллизация в Linux» («Системный администратор», март 2006 г.). KEYMAP=”-u ru4” SET_WINDOWKEYS=”yes” DUMPKEYS_CHARSET=”koi8-r”
Счастливого пути!
Итак, мы рассмотрели основы, необходимые для того, чтоКлючик «-u» в раскладке говорит об использова- бы начать работать с Gentoo. Конечно, многие вопросы остании Unicode. Таблица перекодировки здесь не требуется, лись за кадром (наиболее крупный из них – установка и нано нужно указать кодировку, на которую система будет опи- стройка X-Window, хотя эта тема относится уже не стольраться (третья строка). ко к Gentoo, сколько к самой графической подсистеме). Всё – после перезагрузки вы должны получить работа- Тем не менее главное – сделать первый шаг. Я не тешу себя ющую с русскими (точнее, с кириллическими) буквами кон- надеждой, что сотни и тысячи читателей сразу же бросятсоль. Переключение с американской на русскую расклад- ся устанавливать эту, в общем-то, довольно специфичную ку и наоборот выполняется клавишей <CapsLock>. Вы да- (где-то даже странную) ОС. Но если мои статьи позволят хотя бы ещё одному человеку найти систему своей мечты, же можете создавать файлы с русскими именами: то я буду считать свою миссию выполненной. В общем: # echo $LANG
ru_RU.UTF-8
14
# USE=”gentoo” emerge freedom ;)
администрирование
Как устроена файловая система reiser4
Андрей Пешеходов Многим пользователям в ОС Linux нравится не только её открытость, стабильность и прочие немаловажные характеристики, а, прежде всего, гибкость. В Linux, наверное, нет ни одного компонента, которому нельзя было бы подобрать альтернативу. Не являются исключением и файловые системы.
16
администрирование
И
х насчитывается более двух десятков. Между собой они отличаются не только по дисковой структуре и алгоритмам обработки данных, но и по предоставляемой функциональности. Большую часть составляют так называемые сторонние файловые системы, реализованные для совместимости, например, vfat, ntfs, UFS, и т. д. «Родных» же файловых систем для этой ОС, обеспечиваюРисунок 1. B+ дерево reiser4 щих все необходимые функции, до недавнего времени бычиная с нулевого. Максимальное количество блоков на разло пять: ext2, ext3, reiserfs, XFS, и JFS. Сегодня вы познакомитесь с новинкой в этой группе – деле – 264. Раздел начинается с 64 Кб неиспользуемого пространсфайловой системой reiser4, спроектированной Гансом Рейзером и его компанией NameSys. Несмотря на название, тва, оставленного под загрузчики, дисковые метки и проэта ФС написана с нуля, хотя и унаследовала некоторые чие служебные надобности. Далее следует 2 суперблока – главный и форматный, обособенноcти своего «идеологического» предшественнирабатываемый disk_format-плагином. За ними расположен ка – reiserfs. Помимо традиционных для Linux-ФС функций reiser4 первый bitmap-блок, содержащий битовую карту свободнопредоставляет пользователям ряд дополнительных воз- го места. Один бит такой карты соответствует одному блоку можностей: прозрачное сжатие и шифрование файлов, файловой системы, если бит установлен – блок занят, есполное журналирование данных (реализовано только ли сброшен – свободен. Один bitmap-блок содержит карту в ext3), а также практически неограниченную (за счет пла- для 8*(BLOCK_SIZE-4) блоков файловой системы. Адреса гинной архитектуры) расширяемость, т.е. способность при- остальных bitmap-блоков считаются по формуле: спосабливаться к сколь угодно сложным запросам потреbmap_block = 8 * (BLOCK_SIZE-4) * N бителей. Надеюсь, вы обладаете навыками программирования на языке C и знакомы с базовыми принципами организа- где N – порядковый номер карты. Сразу за битовой картой расположены journal header ции современных файловых систем – без этого понять маи journal footer блоки, используемые алгоритмом журналитериал будет трудно. Примечание: все пути отсчитываются от каталога рования reiser4, а завершает эту последовательность блок статуса файловой системы, содержащий различные параfs/reiser4/ в дереве исходников ядра Linux. метры ее состояния.
Плагины
Reiser4 основана на плагинах – внутренних программнообособленных модулях, предоставляющих пользователям возможность максимально адаптировать файловую систему к своим задачам. Жестко в драйвер reiser4 зашит только код, занимающийся работой с диском, поддержкой различных абстракций и балансировкой дерева, операции же почти над всеми объектами файловой системы – как внутренними, так и экспортируемыми, как дисковыми, так и in-memory – реализованы в виде плагинов и могут быть расширены дополнительными типами или вовсе заменены пользовательскими альтернативами. В настоящее время reiser4 не поддерживает динамическую регистрацию плагинов (т.е. для подключения нового модуля придется перекомпилировать весь драйвер), однако в будущих версиях файловой системы эта возможность будет реализована. Reiser4 не имеет жестко определенной ни дисковой, ни алгоритмической структуры, практически любая ее часть может быть легко изменена или дополнена. Я опишу сегодня то, что разработчики называют «format40» – семейство свойств файловой системы, определенных стандартным набором плагинов от NameSys. Детали реализации плагинной инфраструктуры будут рассмотрены ниже.
Блоки Раздел reiser4 представляет собой набор блоков фиксированного размера, пронумерованных последовательно, на-
№4, апрель 2006
64 kb unused space
master superblock
format superblock
1-st bitmap block
journal header block
journal footer block
FS status block
data blocks ...
В памяти любой блок представляется объектом jnode, описанным в jnode.[ch]. Каждый jnode имеет указатель на страницу памяти, содержащую данные соответствующего ему дискового блока (struct page* pg), указатель на сами данные (void *data), различные блокировки, счетчики ссылок и биты состояния. Более подробно со структурой каждого из описанных выше блоков можно ознакомиться на сайте журнала www.samag.ru в разделе «Исходный код».
Дерево файловой системы Все объекты файловой системы, за исключением суперблока и битовых карт, представлены листьями единственного на всю ФС сбалансированного дерева внешнего поиска – B+ дерева. Такая организация отличает файловые системы семейства reiserfs от аналогов (например, XFS и JFS), имеющих более традиционную структуру, предусматривающую отдельное дерево (а то и не одно – если требуется индексация по нескольким параметрам) для каждой совокупности объектов (например, дерево inodes, extents, и др.). Дерево состоит из внутренних и листовых узлов. Внутренние узлы, в соответствии с заветами классиков, содержат ключи и указатели на потомков (указателей всегда на один больше, чем ключей), листья же, расположенные на самом нижнем уровне дерева, – ключи и данные, организованные в итемы.
17
администрирование В связи с тем, что B+ дерево растет вверх, первым уровнем считается листовой. Над ним расположен twigуровень (twig – тоненькая веточка), характерный тем, что только на нем существуют extent-итемы (см. ниже), далее идут branch-уровни (branch – толстая ветвь) и самый верхний – корневой уровень. Минимально возможная высота дерева равна 2, то есть корневой узел всегда является внутренним. Такое решение сильно упростило код, а потери дискового пространства были сочтены незначительными (см. рис. 1). Узлы и листья дерева представлены в памяти объектами znode (см. znode.[ch]), организующимися в древовидную структуру. Znode содержит указатель на jnode, содержащий данные узла, указатели на родителя узла и его соседей в дереве, указатель на плагин, обрабатывающий данный тип узла, блокировки, биты состояния и счетчики ссылок. Абстракция znode необходима не только для поддержки эффективного кэша узлов – с ее помощью реализуется протокол блокирования объектов файловой системы, улучшающий производительность операций над деревом. Важность этого решения можно оценить на примере reiserfs, не имеющей механизма блокирования элементов дерева. Для синхронизации в ней используется счетчик fs_generetion, позволяющий только установить сам факт изменения дерева. Иногда это приводит к печальным последствиям: если поток, готовящий балансировку, не успевает зафиксировать изменения до того, как дерево было модифицировано другим потоком – вся подготовка выполняется заново. Во время выполнения балансировки дерево модифицируется по одному уровню за шаг. Во время модификации некоторого уровня файловая система накапливает изменения, которые должны быть распространены на следующий уровень. К примеру, вставка итема (элемента данных, имеющего уникальный ключ), как правило, вызывает перемещение итемов между узлами и требует обновления ключа по меньшей мере в общем родителе модифицированных узлов, а в отдельных случаях может потребовать размещения нового узла, указатель на который должен быть вставлен в узел родительского уровня. После того, как все операции на данном уровне дерева выполнены (т.е. итем вставлен, узлы переупакованы), процесс повторяется для накопленных операций на следующем уровне: обновляется существующий или вставляется новый ключ, что также может вызвать переупаковку или размещение нового узла. При этом могут блокироваться и вовлекать новые узлы, а также выставляться операции для переноса на следующий уровень. Одно из главных преимуществ поуровневой балансировки дерева состоит в возможности группировать изменения на родительском уровне и вносить их, в результате, более эффективно. С деталями реализации кода балансировки можно ознакомиться в файлах carry.[ch].
ного места, старается соблюдать порядок дерева, нельзя не заметить, что политика назначения ключей прямо влияет на производительность файловой системы. Структура ключа reiser4 определена в key.h union reiser4_key { __le64 el[KEY_LAST_INDEX]; int pad; };
Ключ представляет собой массив из KEY_LAST_INDEX 64-битных чисел, логически раскладываемый на поля. Доступ к конкретному полю осуществляется по двум параметрам: индексу элемента в ключе (reiser4 key_field_index) и смещению поля в элементе (reiser4_key_field_shift). См. key.h: /* Значение каждого элемента этого перечисления есть индекс в массиве reiser4_key->el */ typedef enum { /* dirid – ObjectID родитесльcкого каталога, расположен в первом элементе, т.н. major "locale" */ KEY_LOCALITY_INDEX = 0, /* Тип итема, расположен в первом элементе, т.н. minor "locale" */ KEY_TYPE_INDEX = 0, /* Существует только в длинных ключах */ ON_LARGE_KEY(KEY_ORDERING_INDEX,) /* «Объектная связь», второй элемент */ KEY_BAND_INDEX, /* objectid, второй элемент */ KEY_OBJECTID_INDEX = KEY_BAND_INDEX, /* Полный objectid, второй элемент */ KEY_FULLOID_INDEX = KEY_BAND_INDEX, /* Смещение, третий элемент */ KEY_OFFSET_INDEX, /* Хэш имени, в третьем элементе */ KEY_HASH_INDEX = KEY_OFFSET_INDEX, KEY_CACHELINE_END = KEY_OFFSET_INDEX, KEY_LAST_INDEX } reiser4_key_field_index; /* На сколько бит влево должен быть сдвинут элемент ключа для получения значения конкретного поля */ typedef enum { KEY_LOCALITY_SHIFT = 4, KEY_TYPE_SHIFT = 0, KEY_BAND_SHIFT = 60, KEY_OBJECTID_SHIFT = 0, KEY_FULLOID_SHIFT = 0, KEY_OFFSET_SHIFT = 0, KEY_ORDERING_SHIFT = 0, } reiser4_key_field_shift;
Из определения reiser4_key_field_index видно, что ключ в reiser4 может состоять из трех (короткие ключи) или четырех (длинные ключи) 64-битных чисел. Размер ключа определяет макрос REISER4_LARGE_KEY (см. reiser4.h). Если он равен единице, в перечисление, между типом и objectid, добавляется элемент ordering. Драйвер может монтировать только файловые системы с тем размером ключей, с которым он был скомпилирован. В настоящее время по умолКлючи Каждой обособленной части данных или метеданных чанию применяются длинные ключи. Очевидно, что ключ в reiser4 представляет собой нечто в reiser4 сопоставляется ключ, являющийся ее уникальным идентификатором. Ключи используются для упоря- большее, чем просто идентификатор – он содержит массу дочивания и поиска данных в дереве ФС. Исходя из того, дополнительной информации о типе и положении объекта, что плагин alloc40, отвечающий за распределение свобод- которая нигде не дублируется. Для разных типов итемов
18
администрирование ключи интерпретируются по-разному. Ключи во внутренних узлах дублируют ключи некоторых итемов twig- и листового уровней, они используются только при обходах дерева и не интерпретируются. Смысл наименований «major» (ID родительского каталога) и «minor» (тип объекта) localities заключается в том, что в дереве объекты физически группируются сначала по dirid (это получается чисто арифметически, т.к. dirid расположен в самых старших битах ключа), а в пределах этой группы – по типу. То есть элементы одного каталога и одного типа в дереве (а скорее всего и на диске) окажутся соседями. Текущий алгоритм назначения ключей, реализуемый двумя плагинами – «key_large» (длинные ключи) и «key_short”»(короткие ключи), – называется «Plan A» (см. kassign.[ch]).
Короткие ключи
ет несколько улучшить производительность поиска по дереву в сравнении в key_short. Directory items 60
4
7
1
56
64
64
dirid
0
F
H
prefix-1
prefix-2
prefix-3/hash
8 bytes
8 bytes
8 bytes
8 bytes
dirid: ObjectID каталога, в котором расположен описывае
мый объект, + 4 бита на тип (0 – KEY_FILE_NAME_MINOR, элемент каталога); F: «волокно» (см. plugin/fibration.c); H: 1 – если последние 8 байт содержат хэш; 0 – если последние 8 байт содержат третий префикс; prefix-1: первые 7 символов имени файла; prefix-2: следующие 8 символов имени файла; prefix-3: следующие 8 символов имени файла; hash: хэш оставшейся части имени, не попавшей в prefix-1 и prefix-2.
Изначально key_short был основным алгоритмом назначения ключей, однако позднее экономию дискового пространства, достигаемую с его помощью, разработчики сочли незначительной. Был сделан шаг в сторону увеличения производительности – с алгоритмом key_large.
Имена файлов короче 23-х символов (7+8+8) полностью помещаются в ключ и именуются короткими. Отличительным признаком таких файлов является бит H=0. Имена других файлов называются длинными, бит H=1, первые 15 символов имени составляют первый и второй префикDirectory items сы, а последние 8 байт занимает хэш оставшихся симво60 4 7 1 56 64 лов. Благодаря такой структуре ключа элементы каталога 0 F H prefix-1 prefix-2/hash dirid сортируются приблизительно в лексикографическом поряд8 bytes 8 bytes 8 bytes ке, а также существенно сокращается количество коллизий dirid: ObjectID каталога, в котором расположен описы- (совпадений хэшей у разных имен), однако, принципиальваемый файл, + 4 бита на тип; но неустранимых при постоянной длине ключа. F: «волокно» (см. plugin/fibration.c); Stat-data items H: 1 – если последние 8 байт содержат хэш; 0 – если 60 4 64 4 60 64 последние 8 байт содержат второй префикс; 1 ordering 0 objectid 0 locality id prefix-1: первые 7 символов имени файла; 8 bytes 8 bytes 8 bytes 8 bytes prefix-2: следующие 8 символов имени файла; hash: хэш оставшейся части имени, не попавшей locality id: ObjectID родительского каталога, + 4 бита тив prefix-1. па (1 – KEY_SD_MINOR, stat-data); ordering: копия вторых восьми байт ключа родительКороткими в данном случае считаются имена не длинского каталога: нее 15 символов. {
Stat-data 60
4
4
locality id
1
0
8 bytes
64 objectid 8 bytes
64
}
0 8 bytes
locality id: ObjectID родительского каталога, 4 бита
fibration :7 h prefix-1 :56
:1
(см. выше);
objectid: ObjectID данного объекта.
на тип;
objectid: ObjectID данного объекта. Extent и tail items 60
4
4
64
64
locality id
4
0
objectid
offset
8 bytes
8 bytes
8 bytes
locality id: ObjectID родительского каталога + тип; objectid: ObjectID данного объекта; offset: логическое смещение от начала файла.
Длинные ключи В настоящее время используется по умолчанию; позволя-
№4, апрель 2006
Такая структура ключа была введена для того, чтобы statdata итемы хранились в каталоге в том же порядке, что и соответствующие им directory entries. Таким образом улучшена производительность вызовов readdir() и stat(). Extent и tail items 60
4
64
4
60
64
locality id
4
ordering
0
objectid
offset
8 bytes
8 bytes
8 bytes
8 bytes
locality id: ObjectID родительского каталога, + 4 бита типа (4 – KEY_BODY_MINOR, тело файла);
ordering: см. выше;
19
администрирование object id: см. выше; ся как разность смещений данного и следующего итемов. offset: логическое смещение от начала файла в бай- Не трудно понять, что длина нулевого итема, расположентах.
ного в конце узла, равна:
Возможны следующие типы объектов (подробнее – в приложении на сайте журнала www.samag.ru в разделе «Исходный код»): Тип
minor
locality
0
Элемент каталога
1
stat-data Имя атрибута файла
2
Значание атрибута файла
3
Тело файла
4
len[0] = node_end – offset[0] +1 Листья с переменной длиной итемов и ключей (lvar) Node header
Item heads [0,n] key offset
key inherit
Item heads [0,n] key offset
Каждый дисковый блок, содержащий внутренний или листовой узел дерева, начинается с заголовка узла, состоящего из независимой и форматной частей. Независимый заголовок содержит только идентификатор плагина, который обрабатывает узел данного типа (стандартно – node40-плагин). Форматный заголовок включает служебную информацию, которая интерпретируется соответствующим плагином (количество итемов и свободных байт, различные флаги). Определение этих структур данных приведено в приложении.
Free space
Key bodies
Item bodies [n,0]
Free space
Item bodies [n,0]
Листья со сжатыми ключами (lcomp) Node header
Узловые блоки
item offset
key inherit
item offset
Key inherit, однобайтное число, показывает, какая часть префикса совпадает у данного и предыдущего ключей. Соответственно в данном ключе эта часть не повторяется для экономии места. Таким образом реализовано своеобразное сжатие ключей.
Итемы Итем – это обособленная часть данных или метаданных файловой системы, имеющая сопоставленный ей уникальный ключ. Reiser4 поддерживает множество типов итемов, их набор легко может быть расширен написанием дополнительных плагинов.
Внутренние узлы (idef1)
Stat data item
Блок внутреннего узла дерева reiser4 состоит из заголовка узла, массива внутренних итемов и массива заголовков итемов, каждый из которых содержит ключ, pluginid и смещение итема. Оба массива растут к середине.
Stat data item содержит метаданные для файлов и каталогов. В чем-то подобен структуре inode других фаловых систем, однако в отличие от классического inode stat-data не содержит никакой информации о размещении на диске данных описываемого объекта и экспортирует в VFS только атрибуты файла, возвращаемые вызововм stat(2). В reiser4 структура каждого stat-data набирается из нескольких равноправных компонентов, называемых расширениями. Специальная битовая карта, имеющаяся в каждом stat-data, показывает наличие или отсутствие конкретного расширения. В соответствии с имеющейся структурой кода обработчики расширений реализованы в виде плагинов типа REISER4_SD_EXT_PLUGIN_TYPE (о типах плагинов см. ниже. Перечисление возможных типов расширений приведено в приложении на сайте журнала www.samag.ru в разделе «Исходный код»). Структуры соответствующих расширений определены в /plugin/item/static_stat.h. Минимальный stat-data (та самая карта расширений) позволяет поддерживать легковесные файлы, имеется в любом stat-data:
Node header
Item heads [0,n] key
pluginid
Free space
Internal items [n,0]
item offset
Формат внутреннего итема описан в plugin/item/internal.h: /* Дисковый формат internal item */ typedef struct internal_item_layout { reiser4_dblock_nr pointer; } internal_item_layout;
Видно, что это просто указатель на узел-потомок.
Листья Листовые узлы расположены на самом нижнем (первом) уровне B+ дерева; поддерживается несколько различных форматов листьев, оптимальных для тех или иных ситуаций. Стандартный формат листовых узлов (leaf1) Node header
Item heads [0,n] key
pluginid
Free space
Item bodies [n,0]
item offset
В состав листа входят node header, обязательный для всех узлов дерева, массив заголовков итемов и массив самих итемов (оба растут к середине). Заголовок итема вмещает в себя ключ (формат которого определяется политикой назначения (длинные или короткие ключи) и типом итема, которому соответствует ключ), pluginid и 16-битное смещение начала тела итема. Длина итема вычисляет-
20
typedef struct reiser4_stat_data_base { __le16 extmask; } PACKED reiser4_stat_data_base;
Расширение для легковесных файлов: typedef struct reiser4_light_weight_stat { __le16 mode; __le32 nlink; __le64 size; } PACKED reiser4_light_weight_stat;
администрирование Стандартный UNIX-stat, поддерживающий полный набор атрибутов, возвращаемых вызовом stat(2): typedef struct reiser4_unix_stat { /* owner id */ __le32 uid; /* group id */ __le32 gid; /* время последнего доступа */ __le32 atime; /* время последней модификации */ __le32 mtime; /* время последнего изменения */ __le32 ctime; union {
/* пара (minor,major) для файлов устройств */ __le64 rdev; /* размер в байтах для регулярных файлов */ __le64 bytes;
} u; } PACKED reiser4_unix_stat;
Расширение для символических ссылок, содержащее имя, на которое указывает symlink:
typedef struct reiser4_cluster_stat { d8 cluster_shift; } PACKED reiser4_cluster_stat;
Расширение для атрибутов зашифрованных объектов: typedef struct reiser4_crypto_stat { d16 keysize; /* размер секретного ключа в битах */ d8 keyid[0]; /* ID секретного ключа */ } PACKED reiser4_crypto_stat;
Расширение точного времени: typedef struct reiser4_large_times_stat { d32 atime; d32 mtime; d32 ctime; } PACKED reiser4_large_times_stat;
Расширение для плагина single directory entry (больше не используется): typedef struct sd_stat { int dirs; int files; int others; } sd_stat;
typedef struct reiser4_symlink_stat { char body[0]; } PACKED reiser4_symlink_stat
Tail item
typedef struct reiser4_plugin_slot { __le16 pset_memb; __le16 id; } PACKED reiser4_plugin_slot;
Экстенты, в терминах reiser4, – непрерывные участки дискового пространства, дескрипторы которых, составляющие extent-итем, содержат номер стартового блока участка и его длину. Структура экстента определена в plugin/item/extent.h:
Tail-итемы содержат сырые данные файлов (это либо целые маленькие файлы, либо «хвосты» больших) и не имеВ этом расширении плагин хранит некоторые парамет- ют форматной структуры. ры своего состояния:
Расширение для файлов с нестандартными плагинами также служит для хранения параметров состояния требуемого количества плагинов : typedef struct reiser4_plugin_stat { /* Количество дополнительных плагинов, ассоциированных с объектом */ __le16 plugins_no; reiser4_plugin_slot slot[0]; } PACKED reiser4_plugin_stat;
Расширение для inode-флагов. В настоящее время это просто 32-битная маска, которая при необходимости может быть заменена на маску переменной длины: typedef struct reiser4_flags_stat { __le32 flags; } PACKED reiser4_flags_stat;
Расширение для capabilities: typedef struct reiser4_capabilities_stat { __le32 effective; __le32 permitted; } PACKED reiser4_capabilities_stat;
Расширение для хранения размера логического кластера (атрибут cryptcompress-объектов). На самом деле хранится не сам размер, а его двоичный логарифм, так что размер находится как: «cluster_size = 1 << cluster_shift».
№4, апрель 2006
Extent items
typedef struct { reiser4_dblock_nr start; reiser4_dblock_nr width; } reiser4_extent;
В reiser4 экстенты используются для отслеживания только выделенного дискового пространства (в отличие от других файловых систем, где массивы или деревья дескрипторов свободных участков заменяют битовые карты занятости блоков) и ссылаются на участки, содержащие данные файлов. В ключах экстентов, принадлежащих одному файлу, равны все поля, за исключением offset (смещение «куска», описываемого данным экстентом, от начала файла). Экстент может находиться в одном из следующих состояний (plugin/item/extent.h): typedef enum { HOLE_EXTENT, UNALLOCATED_EXTENT, ALLOCATED_EXTENT } extent_state;
где: HOLE_EXTENT: экстент представляет собой «дыру» в файле. «Дыра» может образоваться, например, после вызовов:
21
администрирование creat(); truncate(4096);
В результате чего файл длиной 4 Кб окажется заполнен неинициализированными данными, выделять под которые дисковое пространство бессмысленно (хотя XFS, к примеру, не только выделяет, но и перезаписывает его нулями). При попытке чтения данных hole-экстента файловая система динамически «сгенерирует» необходимое количество нулевых байт и передаст их пользователю. Дескриптор такого экстента содержит только его длину и никуда не указывает. UNALLOCATED_EXTENT: «виртуальный» экстент, являющийся плодом политики отложеного размещения. Появляется в результате добавления данных в файл или при заполнения «дыр». Существует только в памяти и при сбросе, получив от flush-алгоритма реальный дисковый адрес, превращается в нормальный экстент. ALLOCATED_EXTEN: обыкновенный экстент.
Ctail item
ный доступ к данным. Каждый логический кластер сжимается независимо от других. Разумеется, кластеры не должны быть слишком большими, чтобы не занимать слишком много памяти при попытке что-либо прочитать или записать по произвольному смещению: максимальный размер логического кластера, поддерживаемый reiser4, – 64K. Это обстоятельство несколько снижает степень сжатия данных из-за невозможности создать обширный словарь в процессе компрессии. Логический кластер индекса I – это множество байт данного файла, смещения которых лежат в отрезке [I*S, (I+1)*S-1], где S – размер логического кластера. В настоящее время Reser4 поддерживает кластеры с размерами 4K, 8K, 16K, 32K и 64K, но не меньше PAGE_SIZE). Логический кластер называется частичным, если в нем задействовано меньше S байт. Страничный кластер индекса I – это последовательность страниц, содержащих сырые (несжатые и незашифрованные) данные соответствующего логического кластера. Страничный кластер присутствует в памяти во время чтения или записи файла. Дисковый кластер индекса I – это последовательный набор итемов какого-либо типа, первый из которых имеет ключ со смещением, которое вычисляется как функция от I (этим заведует специальный метод итем-плагина). Размер дискового кластера определяется как S*N, где N – коэффициент растяжения крипто-алгоритма, которым зашифрован данный файл (N = 1 для всех симметричных алгоритмов). В настоящее время «кластеризованными» являются только ctail-итемы, структура которых определена в plugin/item/ctail.h:
Помимо классической реализации регулярных файлов (unixfile-плагин), reiser4 предлагает и такую, при которой данные файла хранятся на диске в сжатом и (или) зашифрованном виде (transparent compression/encryption). Ответственным за эту реализацию является cryptcompress-плагин. Основная его идея состоит в том, чтобы выполнять сжатие и шифровку непосредственно перед сбросом кэшированных данных на диск, экономя при этом процессорные ресурсы в том случае, когда одни и те же данные, находящиеся в памяти, многократно модифицируются одним или несколькими процессами. На современных машинах, оснащенных быстрыми процессорами и большими объемами оперативной typedef struct ctail_item_format { памяти, сжатие данных не ухудшает, а наоборот – увеличиd8 cluster_shift; /* Двоичный логарифм размера вает производительность файловой системы, т.к. преобрадискового кластера */ d8 body[0]; /* Тело итема */ зование данных выполняется сравнительно быстро, а объ} __attribute__ ((packed)) ctail_item_format; ем дискового трафика сокращается. Каждое преобразование данных (сжатие, шифроваКаждый дисковый кластер представляет собой разбиние и т. д.) осуществляется некоторым алгоритмом, кото- тые на ctail-итемы сжатые и зашифрованные данные лорый присутствует в reiser4 в виде соответствующего пла- гического кластера в определенном формате, который гина (т.н. transform-плагин). Нельзя не отметить пользу пла- не представлен какой-либо структурой данных и имеет гинной архитектуры, при которой поддержка любого же- следующий вид: лаемого алгоритма компрессии или шифрования сводитданные {дополнение контрольный_байт контрольная_сумма} ся всего лишь к написанию и стандартному добавлению плагина соответствующего типа. В настоящее время доступны transform-плагины для сжатия алгоритмами gzip1 Дополнение служит для выравнивания сжатых данных и lzo1, шифровать по идее можно любым блочным алго- перед шифрованием, чтобы итоговый размер был кратен ритмом, поддерживаемым crypto-API Linux-ядра, а также размеру блока крипто-алгоритма. В контрольном байте aes_ecb, однако поддержка крипто-плагинов до ума еще хранится размер дополнения, увеличеный на 1 (фактичесне доведена. ки это размер участка, который потребуется отсечь перед Cryptocompress-плагин разбивает каждый файл на логи- декомпрессией). Контрольная сумма – это adler32 от выческие кластеры определенного размера. Этот размер яв- ровненых и зашифрованых данных. Контрольная сумма страхует нас от попытки примеляется атрибутом данного файла и должен быть назначен перед его созданием. Каждый логический кластер отоб- нить декомпрессию к некорректным данным (последний ражается в память на соответствующий страничный клас- случай чреват фатальными последствиями, т.к. допускатер, который в свою очередь представлен в сбалансиро- ется использование небезопасных алгоритмов декомпреванном дереве, т.н. дисковым кластером. Сжатые данные сии (которые, как правило, являются наиболее быстрыми). такого файла хранятся на диске в виде «фрагментов», ре- Контрольная сумма добавляется только в том случае, когализованных в reiser4 как итемы специального типа (собс- да компрессия была принята (в этом случае итоговый разтвенно ctail-итемы), что существенно упрощает произволь- мер данных с учетом контрольной суммы должен быть стро-
22
администрирование го меньше, чем размер дискового кластера). Если же данные логического кластера плохо сжимаемы, то результат компрессии отвергается, и к выровненому и зашифрованому логическому кластеру контрольная сумма не добавляется. При таком подходе смежные дисковые кластеры не «накладываются» друг на друга по смещениям в их ключах. Другое важное преимущество состоит в том, что по каждому дисковому кластеру можно сразу определить, была ли произведена компрессия или нет. При чтении файла по какому-либо смещению в памяти размещаются страничные кластеры соответствующих индексов. При запросе на чтение какой-либо страницы файловая система размещает в памяти целиком весь страничный кластер (по смещению конструируется ключ, последовательно находятся и компонуются все ctail-итемы соответствующего дискового кластера, после чего происходят расшифровка, декомпрессия и заполнение страниц сырыми данными). При этом попытка прочитать немного больше положенного (менеджер виртуальной памяти ничего не знает о кластерах) не наносит ущерба и вписывается в общую концепцию упреждающего чтения. Подробнее об этом плагине можно почитать в [4].
Compound directory item Составной итем каталога состоит (в отличие от single directory item, который в настоящее время не используется и описан здесь не будет) из нескольких элементов каталога. Был введен с целью повышения эффективности использования дискового пространства. Дело в том, что все элементы одной директории имеют в своих ключах одинаковый фрагмент – ObjectID родительского каталога. Компоновка составного итема из нескольких элементов одной директории позволяет сохранять указанный фрагмент ключа только единожды и тем самым немного сэкономить дисковое пространство. Это решение является особой формой сжатия ключей, т.к. их полноценное сжатие в версии 4.0 не реализовано. Заметьте также, что на диске ключи хранятся невыровненными, что, по крайней мере на некоторых архитектурах, повышает нагрузку на CPU при их обработке, но опять же экономит место. Дисковая структура CDE-итема такова: Item header count of entries
Entry headers hash
offset
Entry bodies key
name
Заголовок CDE-итема содержит количество элементов в каталоге. Заголовок элемента каталога включает часть ключа объекта, описываемого данным элементом (хэш имени), и смещение тела самого элемента в итеме. Элемент каталога состоит из ключа stat-data итема описываемого объекта (в действительности нет нужды хранить ключ целиком – т.к. это всегда stat-data, то тип и смещение могут быть опущены. Однако из-за возможности применения других схем назначения ключей здесь зарезервировано место под целый ключ) и имени объекта.
ISSUES Обобщая изложенный выше материал, можно сказать, что регулярный файл/каталог в reiser4 состоит из объектов трех типов:
№4, апрель 2006
элемент каталога – содержит имя объекта и ключ его stat-data итема;
stat-data итем – атрибуты; один или несколько итемов, содержащих тело объекта – для регулярного файла это extent/tail/ctail итемы, для каталога – CDE-итемы; специальные файлы (устройства, FIFO, и т. д.) тела не имеют. Все итемы, принадлежащие одному файлу, имеют в своих ключах одинаковые dirid и objectid.
Журналирование Reiser4 поддерживает режим полного журналирования данных и метаданных, обеспечивая также некоторые расширенные возможности. Дело в том, что большинство файловых систем осуществляют кэширование записи – модифицированные данные не сбрасываются немедленно на диск, а накапливаются в кэше. Это позволяет ФС не только лучше контролировать дисковое планирование, но формировать длинные I/O-запросы, которые современными жесткими дисками обрабатываются существенно быстрее, нежели группа коротких. В случае сбоя системы из-за этого будут не просто потеряны недавние изменения – механизм кэширования может поменять местами запросы на запись, в результате чего более новые данные окажутся записанными, а старые – потеряны. Это может стать серьезной проблемой для приложений, делающих несколько зависимых модификаций, часть из которых будет утеряна, а часть – нет. Такие приложения требуют от ФС гарантировать, что либо все, либо ни одно изменение не переживет сбой. Зависимые модификации также могут возникать, когда приложение читает модифицированные данные и затем производит вывод, например: 1. Процесс 1 пишет в файл А. 2. Процесс 2 читает из файла А. 3. Процесс 2 пишет в файл В. Очевидно, что файл B может зависеть от файла A, и, если стратегия кэширования поменяет порядок фиксации изменений в этих файлах, после сбоя приложения могут оказаться в некорректном состоянии. Атом – набор блоков, модификации которых должны быть атомарно записаны на диск. Каждое незафиксированное на диске изменение объекта ФС есть атом. Например, если приложение добавляет данные в конец файла, в атом будет включен блок, содержащий сами новые данные, блок со stat-data итемом, содержащий длину файла и блок, хранящий tail/ctail/extent итем. Если размещен новый блок – в атом добавится также суперблок, хранящий счетчик свободного места, и блок битовой карты (в действительности алгоритм журналирования суперблока и битовых карт несколько более сложен, см. ниже). Транскрэш – набор операций, все или ни одна из которых не переживут сбой системы. Существует 2 типа транскрэшей: read-write и write-only. Если приложение пишет в модифицированный, но еще не зафиксированный на диске блок, то атомы, воплощающие две эти модификации, объединяются в write-only транскрэш.
23
администрирование Если приложение читает данные незафиксированного бло- Журналирование метаданных ка, а затем осуществляет запись – эти 2 атома сливаются Это ограниченный режим работы механизма журналировав read-write транскрэш. ния, при котором атомарной записью защищаются только Более подробно о реализации описанных выше меха- метаданные файловой системы. В этом режиме блоки даннизмов можно почитать в комментариях файлов txnmgr.[ch], ных файла (неформатированные узлы) не затрагиваются а также в [3]. механизмом журналирования и, следовательно, не нуждаНизкоуровневые механизмы журналирования реализо- ются в сбросе на диск как результате фиксации транзакваны в wander.[ch] и также достаточно необычны. Начать хо- ции. В этом случае блоки данных файла не рассматриваюття бы с того, что reiser4 не имеет журнала (выделенной об- ся членами relocate или overwrite наборов, т.к. они не участласти на диске) в обычном его понимании. «Странствую- вуют в протоколе атомарных обновлений, а единственныщие» журнальные блоки размещаются произвольно, в лю- ми причинами их сброса на диск являются переполнение бом месте файловой системы. А вместо того чтобы записы- памяти и возраст. вать журналируемый блок дважды (один раз – в «странствующее» местоположение, второй – в реальное), reiser4 мо- Обработка bitmap-блоков жет записать блок в новое место, а затем обновить указа- Reiser4 размещает временные блоки для «странствующетель в его родителе. Казалось бы, какая разница – ведь мо- го» журналирования. Это значит, что существуют различия дификацию родителя все равно придется включать в тран- между содержимым фиксированного bitmap-блока, которое закцию, однако при журналировании хотя бы трех блоков должно быть восстановлено после сбоя, и содержимым рас общим родителем выгода становится очевидной. Тради- бочего bitmap-блока, который используется для поиска/выционное решение называется перезаписью блоков, а опи- деления свободных блоков. Для каждого bitmap-блока в памяти хранятся 2 версии: санное – переразмещением. Решение о переразмещении или перезаписи принима- WORKING_BITMAP и COMMIT_BITMAP. Рабочий bitmap используется просто для поиска свободется из соображений улучшения производительности. Записывая журналируемые блоки в новые места, ФС избе- ных блоков, если некоторый бит сборшен в рабочей карте, гает необходимости вносить копию каждого блока в жур- то соответствующий блок может быть выделен. Рабочая нал. Однако в случае, когда начальная позиция перераз- карта обновляется при каждом выделении блока. Commitмещаемого блока является оптимальной, смена его коор- карта отражает изменения, выполненные в уже совершендинат может увеличить фрагментацию. ных атомах либо в атоме, который выполняется в данный Перезаписываемый набор атома содержит все гряз- момент (атомы фиксируются последовательно, и в каждый ные блоки, не принадлежащие переразмещаемой группе момент времени может работать только один). Commit-кар(т.е. блоки, не имеющие грязного родителя, для которых пе- та обновляется только при фиксации атома, т.е. состояние резапись будет лучшим выходом). «Странствующая» копия блоков, выделенных журналу на время обработки атома, каждого блока записывается как часть журнала до фикса- в ней никогда не отражается. Наличие двух битовых карт в памяти очень выгодно, ции атома и заменяет оригинальное содержимое блока после фиксации. Заметьте, что суперблок считается родителем т.к. это позволяет нескольким атомам модифицировать корневого узла, а bitmap-блоки не имеют родителей. Сле- один bitmap-блок. Другой дефицитный ресурс в reiser4 – суперблок, содовательно, они всегда будут обрабатываться как часть перезаписываемого набора (существует также альтернатив- держащий счетчик свободных блоков. К нему применяетное определение минимального перезаписываемого набо- ся аналогичная техника, позволяющая многим атомам мора, который аналогичен обычному за исключением следу- дифицировать этот счетчик. ющих условий: если по крайней мере 3 грязных блока имеют общего чистого родителя, тогда их родитель добавляет- Странствующее журналирование ся в этот минимальный набор, а сами блоки перемещают- Алгоритм журналирования reiser4 размещает и записыся в relocate-группу. Эта оптимизация будет сохранена для вает странствующие блоки и поддерживает дополнительпоследующих версий). ные дисковые структуры атома – wander-записи (по 1 блоВ зависимости от системы и рабочей нагрузки можно ку на запись), каждая из которых содержит общую инфорвыбрать одну из трех политик журналирования: мацию о транзакции и таблицу отображений странствую Always Relocate – эта политика включает блок в перераз- щих блоков на их реальные координаты. Дисковая структура транзакции такова: мещаемый набор в любом случае, сокращая количество блоков, сбрасываемых на диск (оптимизирует запись). Transaction header, Wander records [0,n] Never Relocate – эта политика отключает переразме1-st block Wander record header wander entries [0,n] щение. Блоки всегда пишутся в оригинальное местопоtx_header wander_record_header wander_entry ложение с журналированием через перезапись, дерево не изменяется (оптимизирует чтение). В приложении можно посмотреть, как именно опреде Левый сосед – эта политика перемещает блок в близ- лены в reiser4 соответствующие структуры данных. Для управления журналом в reiser4 существуют 2 бложайшее к его левому соседу возможное место (в порядке дерева). Если данная позиция занята некоторым ка, имеющие фиксированное положение на диске: заголоблоком выполняющегося атома, политика делает блок вок журнала (содержит указатель на последнюю зафиксичленом перезаписываемого набора. рованную транзакцию) и journal footer (указатель на пос-
24
администрирование леднюю сброшенную странзакцию). Атомарная запись заголовка журнала показывает, что транзакция зафиксирована (т.е. переживет сбой), а запись journal footer – что выполнены все постфиксационные записи (т.е. транзакция полностью завершена, все блоки записаны по своим местам). После удачной записи footer все странствующие блоки и wander-записи освобождаются. В заголовке каждой транзакции и в journal footer-блоке есть место для журналирования полей суперблока, содержащих счетчик свободных блоков, количество файлов в ФС и минимальный доступный ObjectID. Процесс фиксации атома включает в себя несколько стадий: Подсчитывается размер перезаписываемого набора атома. Вычисляется необходимое количество wander-записей, размещаются необходимые для них блоки. Размещаются странствующие блоки и заполняются wander-записи. Странствующие блоки и wander-записи направляются на запись. Ожидается завершение I/O. Обновляется заголовок журнала: указатель last_ commited_tx устанавливается на блок tx_header действующей транзакции, модифицированный блок заголовка журнала направляется на запись и ожидается завершение I/O. Сброс атома:
Перезаписываемый набор атома пишется по оригинальным координатам.
Ожидается завершение I/O. Обновляется footer журнала: указатель last_fulshed_tx устанавливается на блок tx_header текущего атома. Footer-блок направляется на запись. Ожидается завершение I/O. Освобождается дисковое пространство, выделенное странствующим блокам и wander-записям (вносятся изменения в рабочие битовые карты, на диск ничего не пишется). Нетрудно понять, что, когда процедура восстановления ищет незавершенные транзакции, она сравнивает значения полей last_commited_tx (заголовок журнала) и last_flushed_tx (journal footer), и если они не равны – начинает движение по кольцевому списку wander-записей, сбрасывая (flush) все транзакции, которые ФС успела зафиксировать до сбоя. Более подробно об описанных выше механизмах можно почитать в комметариях файлов wander.[ch] и в [3].
Плагинная инфраструктура Все плагины reiser4 классифицируются по нескольким типам. Плагины одного типа называются его инстанциями. Метка в виде пары (type_label, plugin_label) уникальна и является глобально устойчивым, видимым пользователю идентификаторм плагина. Внутри ядра поддерживаются массивы, индексами в которых и являются эти числа. Также поддерживаются статические словари, являющиеся отоб-
№4, апрель 2006
ражением меток плагинов на внутренние идентификаторы типа reiser4_plugin_type, хранящиеся в объектах ФС. Метки плагинов имеют значение для пользовательского интерфейса, назначающего плагины объектам, и в будущем станут использоваться для их динамической загрузки. Идентификатор типа reiser4_plugin_type является индексом в статическом массиве plugins[]. Объект ФС, в соответствие которому поставлен плагин некоторого типа, назван без лишних премудростей субъектом этого типа и его конкретной инстанции. С каждым субъектом плагин может хранить некоторое состояние (для этого в stat-data есть специальное расширение reiser4_plugin_slot). Например, состояние директорного плагина (является инстанцией объектного типа) есть указатель на хэш-плагин. В дополнение к числовому идентификатору каждый тип и каждая инстанция имеют текстовую метку (короткую строку) и определение (длинную строку), жестко кодированные в массиве plugins[]. По этой паре плагин также может быть надежно идентифицирован. С каждым inode (окрытым файлом) ассоциирован целый набор плагинов. Хранить указатели на них в каждом inode – непростительная потеря памяти. Вместо этого reiser4 поддерживает несколько глобальных структур данных типа struct plugin_set, каждая из которых хранит набор плагинов для объекта конкретного типа. Inode содержит только указатель на plugin_set своего типа. Структуры данных, используемые плагинной инфраструктурой, а также возможные типы и реализованные инстанции описаны в файлах: plugin/plugin.[ch] plugin/plugin_header.h plugin/plugin_set.[ch]
Заключение Хотелось бы отметить, что за год эксплуатации на моей рабочей станции reiser4 показала себя достаточно стабильной и быстрой файловой системой. Всем, у кого есть время, – рекомендую попробовать ее хотя бы на домашней машине, где ущерб от возможной потери данных не столь велик (хотя сам я уже давно не имею с reiser4 ни каких проблем, багрепорты в рассылку разработчиков поступают еще достаточно часто). В vanilla-ядра драйвер reiser4 пока не включается, постоянно доступен только в -mm ветке Эндрю Мортона (Andrew Morton): www.kernel.org/pub/linux/kernel/people/ akpm/patches/2.6. На ftp-сайте разработчиков (ftp://namesys.com/pub/ reiser4-for-2.6) также можно найти неофициальные reiser4патчи для некоторых vanilla-ядер, правда, выходят они с некоторым опозданием и практически не сопровождаются.
Источники: 1. Исходные тексты драйвера reiser4. 2. Hans Reiser «Reiser4 whitepaper» – www.namesys.com/v4.html. 3. Joshua MacDonald, Hans Reiser, Alex Zarochentcev, «Reiser4 transaction design document» – www.namesys.com/txn-doc.html. 4. Edward Shishkin, «Reiser4 cryptcompress regular files» – www.namesys.com/cryptcompress_design.html.
25
администрирование
Создаем порт для FreeBSD своими руками Часть II: расширенные возможности
Рашид Ачилов В первой части статьи мы рассмотрели основные вопросы создания порта для FreeBSD своими руками. Но система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
Расширенные возможности системы Скромный размер нашего первого порта и его достаточная простота не позволила нам рассмотреть все возможности системы портов. В этом опять же проявляется ее достоинство – не нужно знать много для построения сравнительно простого порта. Но зачастую бывает так, что необходимо реализовать некую собственную функцию по обработке исходного текста или проверить наличие некоторой программы до начала установки своей. Сразу же возникает вопрос – пытаться реализовать это своими силами или же это уже было кем-то когда-то реализовано? Расширенные возможности системы сборки портов, которые мы не использовали в первой части и которые можно использовать, это: Многофайловые дистрибутивы с возможностью отбора файлов в зависимости от заданного набора переменных. Внешние патчи, которые можно подключать в зависимости от заданного набора переменных. Задание параметров сборки порта с помощью полноэкранного текстового режима OPTIONS, с возможностью дальнейшего хранения и редактирования этих параметров. Дополнение или замена части процедур создания программы из порта. Возможность работы с многофайловыми дистрибутивами позволяет указать, с какого из перечисленных сайтов нужно загружать указанный файл. Допустим, программа состоит из файлов file1.tgz и file2.tgz. File1.tgz присутствует только на двадцатом из перечисленных MASTER_SITES, в то время как file2.tgz – всюду. Система будет попусту обшаривать девятнадцать сайтов. Это не страшно, когда делается автоматом, но ужасно нервирует, когда спешишь.
26
Кроме того, в зависимости от заданного набора параметров можно включать или исключать некоторые компоненты. Это особенно существенно, когда эти компоненты весят десятки мегабайт (например, порт editors/openoffice2). Работа с внешними патчами также крайне важна, особенно когда автор программы не желает контактировать и исправлять код. В таком случае патч либо размещается непосредственно в дереве портов, либо (как правило, если он довольно объемный) выкладывается на некоторый сайт и указывается с помощью PATCH_SITES. Задание параметров сборки порта значительно повышает удобство работы с ним. Многие порты имеют не один десяток переменных «WITH_FOO=yes WITHOUT_BAR=yes», которые не то, что набрать в командной строке – запомнить непросто! Например, порт graphics/ImageMagick имеет 26 переменных типа «WITHOUT_IMAGEMAGICK_SOME=yes». Если бы автор порта сделал экран опций, работать с таким портом было бы гораздо проще. Дополнение или замена части процедур создания порта – это крайне важные возможности системы. Перечень основных шагов системы, выполняемых при создании программы, был уже приведен в [1]. Но возможно ли, скажем, установить через систему портов бесплатную программу с закрытым исходным текстом? Думаете, нет? Можно. И именно для этого были реализованы механизмы дополнения и/или замены части процедур сборки порта. Мы рассмотрим их в соответствующем разделе. А теперь пора перейти от слов к делу.
Многофайловые дистрибутивы и внешние патчи Обычно программа состоит всего из одного файла архива. Но порт зачастую состоит не только из архива исходных текстов программы – в него могут входить дополни-
администрирование В данном фрагменте файл gsi-2005-01-20-sorted.txt.bz2 тельные архивы, файлы данных, файлы драйверов, дополнительные файлы, используемые в процессе построения. будет скачиваться сначала с http://ootrans.i-rs.ru/out, потом Хорошо, конечно, когда есть свой собственный ftp-сервер, с ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ru, а файл OOo_1.1.4_ infra_patches.tar.gz – сначала с ftp://ftp.i-rs.ru/pub/openoffice/ в надежности которого не сомневаешься. В этом случае файлы дистрибутива просто перечис- 1.1.4/ru, потом с ftp://ftp.granch.ru/pub/openoffice. Когда стоит пользоваться такой возможностью? Когда ляются: порт может состоять из большого количества файлов и хоDISTFILES= file1.tar.bz2 \ чется сделать возможность обойтись без загрузки файлов, file2.tar.bz2 \ которые не нужны. file3.tar.bz2 Например, это не было сделано в порту editors/openofficeпри этом все данные файлы будут последовательно за- 1.1, и в результате чего исходные тексты Mozilla Suite (обьпрошены со всех перечисленных сайтов в MASTER_SITES ема немалого – 35 Мб) загружались независимо от желаи с основного сайта FreeBSD, если они не будут обнаруже- ния пользователя ее использовать. Использование внешних патчей во многом похоже на заны. Но что же делать тем, кто не имеет собственных серверов и размещает файлы на публичных хостингах? Для это- грузку файлов исходного кода программы, только здесь исго в системе есть специальная возможность связывания пользуются переменные PATCH_SITES и PATCHFILES: определенных файлов и определенных сайтов так, чтобы PATCH_SITES= ftp://ftp.cis.upenn.edu/pub/xv/ при поиске файлов система просматривала только некоPATCHFILES= ${DISTNAME}.JPEG-patch ${DISTNAME}.TIFF-patch \ торые определенные сайты. Эта возможность называетcroppad.patch grabpatch vispatch \ deepcolor.patch gifpatch exceed_grab.patch \ ся «MASTER_SITES:n». tiff1200.patch gssafer.patch Возьмем приведенный выше пример. Допустим, у нас имеются веб-сайты www.foobar.com и www.nichego.net. Сайт Имейте в виду, что патчи, заданные в PATCHFILES, приwww.foobar.com находится за рубежом, имеет быстрый и на- меняются до применения патчей из подкаталога files! То есть дежный канал. www.nichego.net находится в г. Тьмутара- последовательность действий будет выглядеть так: кани и подключен к Интернету через модем на 28.8 кБит. ===> Patching for xv-3.10a_5 Как сделать так, чтобы система брала только file1.tar.gz ===> xv-3.10a_5 depends on file: /usr/local/bin/perl5.8.7 - found ===> Applying distribution patches for xv-3.10a_5 с www.nichego.net, а остальные – с www.foobar.com? Нужно ===> Applying FreeBSD patches for xv-3.10a_5 ассоциировать метки и с файлами, и с сайтами: Когда стоит использовать внешние патчи? РазработчиDISTFILES= file1.tar.bz2 \ ки обычно используют их, чтобы избежать выпуска новоfile2.tar.bz2:foobar \ го релиза программы (так обычно поступают разработчиfile3.tar.bz2:foobar MASTER_SITES= http://www.foobar.com/:foobar \ ки Squid – вместо выпуска нового релиза они выкладываhttp://www.nichego.net ют патчи значительного обьема), авторы портов, не являюЕсли метка отсутствует, считается, что файл (сайт) щиеся разработчиками программы, – чтобы внести в исходимеет метку по умолчанию DEFAULT. Явно задавать ее ный текст изменения, с которыми автор может быть не соне следует, разве что требуется перечислить несколько гласен, если они достаточно обьемные и их нельзя помесгрупп и DEFAULT в том числе. Система свяжет DISTFILES тить непосредственно в дерево портов, для расширения и MASTER_SITES, используя метки, и загрузит файлы функциональности и т. д. в следующей последовательности: сначала file1.tar.bz2 Следует учесть то, что если патч не создан с использос http://www.nichego.net, потом file2.tar.bz2 и file3.tar.bz2 ванием стандартной процедуры diff, то его нельзя примес http://www.foobar.com. нять описанным методом и необходимо предусмотреть для Можно было бы сделать, чтобы и файл file1.tar.bz2 тоже него специальную обработку (см. пример в описании порсначала проверялся на http://www.foobar.com, а уже потом – та для OpenOffice). на http://www.nichego.net. Для этого нужно www.foobar.com включить также и в группу DEFAULT: Опции Если программа сложная, то, как правило она предлагает MASTER_SITES= http://www.foobar.com/:foobar,DEFAULT множество различных вариантов построения – с использованием такой-то возможности, без использования таОдин и тот же файл может входить в несколько групп. кой-то возможности... Некоторые порты сначала проводят Равным образом в одну группу могут входить несколько «автоматическое обнаружение» некоторых задействуефайлов. Естественно, допускается использование подста- мых компонент, а уже потом устанавливают переменные, включающие или отключающие различные возможносновки переменных: ти, а некоторые оставляют это на усмотрение пользоватеGSI_VERSION= 2005-01-20 ля. Если пользователь об этом не подозревает, то он моDISTFILES+= gsi-$(GSI_VERSION)-sorted.txt.bz2: ↵ жет так никогда ими и не воспользоваться. Одним из приoorus,oorus2 INFRA_PATCHEXT= OOo_1.1.4_infra_patches меров того, как делать ни в коем случае не надо, я считаю DISTFILES+= ${INFRA_PATCHEXT}.tar.gz:DEFAULT,oorus порт graphics/ImageMagick. Мало того, что там 26 переменMASTER_SITES+= http://ootrans.i-rs.ru/out/:oorus MASTER_SITES+= ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ ↵ ных, так еще пользователь даже не оповещается, что они ru/:oorus2 вообще есть! MASTER_SITES+= ftp://ftp/granch.ru/pub/openoffice
№4, апрель 2006
27
администрирование иначе ни одна переменная WITH_SOMEWHERE распознана не будет. Обработка же переменных выполняется стандартным образом – с помощью условия if задаются дополнительные параметры для configure, зависимости, подстановки для pkg-plist и т. д. .if defined(WITH_SAM_XML) LIB_DEPENDS+= xml2.5:${PORTSDIR}/textproc/libxml2 CONFIGURE_ARGS+= --with-xml-prefix=${LOCALBASE} WANT_EXPSAM_MODULES+= xml PLIST_SUB+= SAMXML="" .else PLIST_SUB+= SAMXML="@comment " .endif
Рисунок 1. Появилась возможность задавать опции в полноэкранном текстовом режиме
В результате строка запуска сборки порта может выглядеть, например,таким образом: # make WITHOUT_IMAGEMAGICK_JPEG=yes ↵ WITH_WINDOWS_FONT_DIR=/tmp/blabla ↵ WITHOUT_IMAGEMAGICK_PNG=yes ↵ WITHOUT_IMAGEMAGICK_BZIP2=yes ...
Кроме того, что это просто очень долго набирать, попробуйте-ка вспомнить, какие там опции задавались при предыдущей сборке полгода назад? Разумеется, это крайне неудобно, и некоторое время назад в системе появилась возможность задавать опции в полноэкранном текстовом режиме (см. рис. 1). Все опции, перечисленные на экране, задаются и отменяются простым нажатием пробела, результат выбора будет сохранен и использован при последующих сборках порта. В любое время его можно изменить, выполнив команду: # make config
Формируется экран опций следующей командой в Makefile: OPTIONS= LDAP ADS CUPS WINBIND ACL_SUPPORT SAM_XML
"With LDAP support" on \ "With Active Directory support" off \ "With CUPS printing support" on \ "With WinBIND support" on \ "With ACL support" off \ "SAM with XML support" off
Первый параметр задает имя опции, которое потом будет использовано в переменной WITH_*. Например, для первого параметра имя переменной будет WITH_LDAP. Второй параметр задает текст комментария, который будет выведен справа от соответствующей опции, и третий – значение по умолчанию. При указании «on» опция по умолчанию включена, при указании «off» – выключена. Хорошо, опции заданы. Как их обработать? Прежде всего необходимо отметить, что при использовании OPTIONS включение файла bsd.port.mk следует заменить на: .include <bsd.port.pre.mk> # processing WITH_SOMEWHERE here .include <bsd.port.post.mk>
28
Комбинация проверяемых условий может быть довольно сложной. В качестве примера того, как могут использоваться значения опции, лучше всего рассматривать порт net/samba3 – в нем очень много опций, есть на что посмотреть. Ну и наконец самый интересный раздел – замена/дополнение стандартных обработчиков Makefile при сборке порта. Как уже было сказано в [1], сборка порта состоит из последовательности выполнения ряда мишеней, которые в свою очередь делятся на подмишени pre-something, do-something и post-something (есть еще специальные мишени, описание их см .в bsd.port.mk). Для чего это было сделано? Для того чтобы иметь возможность воздействия на процесс создания порта – что-нибудь изменить, вывести сообщение, создать файл или каталог и т. д. Как следует из названия, подмишени pre-somethnig и post-something выполняются соответственно до и после мишени something. Например, последовательность распаковки будет такова: pre-extract, do-extract, post-extract. При этом, если подмишень do-something не описана, будет выполняться стандартная системная обработка. Обратите внимание, что, если мишень do-something описана, она замещает стандартную мишень и вся ответственность за выполнение данного шага ложится на майнтайнера порта, то есть, например, даже если в Makefile, идущем с программой, есть мишень install, то при наличии в Makefile порта подмишени do-install мишень install из Makefile программы не будет выполнена никогда! Дополнение стандартных мишеней очень широко используется для вывода различных сообщений в процессе сборки порта, создания каких-либо файлов и т. д. Например: pre-extract: @${ECHO_MSG} "" @${ECHO_MSG} "For debugging information support ↵ you should specify" @${ECHO_MSG} "WITH_DEBUG=yes (press Ctrl-C here ↵ and start make WITH_DEBUG=yes)" @${ECHO_MSG} "" @sleep 2 post-deinstall: @${ECHO_MSG} "" @${ECHO_MSG} "Do not forget delete filter ↵ description from /etc/mail/freebsd.mc" @${ECHO_MSG} "and rebuild sendmail.cf file!" @${ECHO_MSG} "" pre-configure: .if defined(WITHOUT_RC_NG) @${SED} -e "s=%%PREFIX%%=${PREFIX}=" ↵ ${FILESDIR}/milter-sid.sh \ > ${WRKSRC}/milter-sid.sh .endif
Заменять обработчики мишеней (создавать секции do-something) [2] не рекомендует, но тем не менее это единс-
администрирование
№4, апрель 2006
29
администрирование твенный путь для установки программ с закрытым исход- ливает собственно скрипты идет команда создания каталоным кодом, а также скриптов и программ, упакованных га для документации – система сама не будет делать ничего, нестандартным образом. Например, мне встречалась про- все необходимые каталоги должны быть созданы портом. грамма, дистрибутив которой был упакован в архив фор- Такая странная форма записи команды означает что: мата ZIP, внутри котрого находился архив .tar.bz2 и файл если команда завершается неудачно, например, такой сигнатуры .sig. Для распаковки нужно было сначала распакаталог уже существует, то make не прекращает рабоковать архив ZIP, потом проверить сигнатуру, а только поту (минус перед командой); том – распаковывать .tar.bz2. команда не отображается на терминале (знак @ перед Но довольно теории. Рассмотрим в качестве примекомандой). ров два порта, которые были мной созданы в разное вреПотом идет второй цикл, который устанавливает файмя – порт для скрипта монтирования сетевых ресурсов Windows при входе в систему mountsmb2 и доработка к пор- лы примеров в каталог, который для этого предварительту OpenOffice 1.1.4. но создается, создается каталог документации и в него копируется файл README.FreeBSD. Команда sed подготавливает файл pkg-message к отобMountsmb2 Набор скриптов mountsmb2 (там их три) был написан мной ражению. В файле, который распространяется вместе с пордостаточно давно и преследовал тольк одну цель – ав- том присутствует макроподстановка %%EXAMPLESDIR%%, томатически монтировать SMB/CIFS-сетевые ресурсы которая, перед тем как это сообщение будет показаот других Samba-серверов и компьютеров под управлени- но пользователю, заменяется на значение переменной ем Windows. Поскольку это скрипт, написанный на языке ${EXAMPLESDIR}. Чтобы не изменять оригинальный файл командной оболочки sh, то никакой сборки порта не тре- pkg-message (возможно, в следующий раз установка бубуется и именно поэтому этот порт будет рассмотрен в ка- дет проходить с другим значением ${EXAMPLESDIR}), стачестве примера. рый файл сохраняется, измененный файл удаляется, старый файл переименовывается в оригинальное имя. Порт PORTNAME= mountsmb2 несложный, но он демонстрирует, как можно использовать PORTVERSION= 0.90.1 заменяющие подмишени. При создании таких портов слеCATEGORIES= sysutils net MASTER_SITES= ftp://ftp.granch.ru/pub/other/ дует быть предельно внимательными – помните, что любой каталог, не входящий в стандартное дерево каталогов, опиMAINTAINER= shelton@granch.ru COMMENT= SMB/CIFS shares mounting scripts ↵ санное в bsd.local.mk, имеет право не существовать и долto do it at login жен быть предварительно создан. RUN_DEPENDS= findsmb:${PORTSDIR}/net/samba3 \ sudo:${PORTSDIR}/security/sudo \ gawk:${PORTSDIR}/lang/gawk USE_BZIP2= yes NO_BUILD= yes .include <bsd.port.pre.mk> do-install: .for i in smb2awk smb2nsmbrc mountsmb2 ${INSTALL_SCRIPT} ${WRKSRC}/${i} ${PREFIX}/bin .endfor -@${MKDIR} ${EXAMPLESDIR} .for i in sudoers .login .nsmbrc .mssmbrc ${INSTALL_DATA} ${WRKSRC}/${i} ${EXAMPLESDIR} .endfor -@${MKDIR} ${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/README.FreeBSD ↵ ${DOCSDIR} @${SED} -e "s,%%EXAMPLESDIR%%,${EXAMPLESDIR},g" ↵ -i .old ${PKGMESSAGE} @${CAT} ${PKGMESSAGE} @${RM} -f ${PKGMESSAGE} @${MV} ${PKGMESSAGE}.old ${PKGMESSAGE} .include <bsd.port.post.mk>
В RUN_DEPENDS перечисляются все порты, от которых зависит данный скрипт, а именно GNU AWK, sudo и Samba, из которой на самом деле нужна только программа findsmb. «USE_BZIP2=yes» указывает на то, что дистрибутив упакован программой bzip2. «NO_BUILD=yes» указывает на то, что программа не требует сборки. Если этого не указать, то система будет пытаться выполнить команду make в каталоге порта, не найдет Makefile и аварийно завершится. Инсталляцией порт управляет самостоятельно – в Makefile присутствует заменяющая подмишень do-install. Здесь хорошо видно, как можно организовать цикл, который установит несколько файлов, перечисленных в списке, в указанное место. После первого цикла, который устанав-
30
Модификация порта OpenOffice 1.1.4 С моей точки зрения, порт для сборки OpenOffice editors/ openoffice имел множество недостатков, но эти изменения я никогда не пробовал отправить во FreeBSD Team для помещения их в дерево портов. Какие изменения были внесены мной: возможность отказаться от сборки Mozilla Suite, нужной только для работы с адресной книгой формата Mozilla; возможность загрузить и применить последний (на тот момент) файл локализации интерфейса; возможность загрузить и применить внешние патчи, созданные в «Инфра-Ресурс» для версии для Linux. Порт на самом деле состоит из двух файлов – editors/ openoffice-1.1 и russian/openoffice. Makefile порта russian/ openoffice-1.1 достаточно прост: CATEGORIES= russian .if !defined (LANG) && !defined(USE_LANG) USE_LANG= ru_RU.KOI8-R .endif LANG_LIST= ru_RU.KOI8-R uk_UA.KOI8-U LANG_PKGNAME= ru LANG_EXT= 07 LANG_CONFIGURE_ARG= RUSS MASTERDIR= ${.CURDIR}/../../editors/openoffice-1.1 USE_RUSSIAN_GSI= yes USE_INFRA_PATCHSET= yes .include "${MASTERDIR}/Makefile"
При запуске make в каталоге editors/openoffice-1.1 получаем OpenOffice c английским интерфейсом и справ-
администрирование
№4, апрель 2006
31
администрирование Для работы с файлом трансляции интерфейса поткой, при запуске в каталоге russian/openoffice – с русским интерфейсом. Достигается это таким же образом, как лю- ребуется начальная обработка его программой transex3, бой порт включает в себя bsd.port.mk, – командой .include. что и задается соответствующим параметром. Также устанавливается имя скрипта, который запустит Только здесь параметром команды является имя так называемого «мастер-порта», то есть порта, в котором делается эту программу. Это небольшой скрипт, который будет совся обработка. Это очень широко распространённый прием здан автоматически. Кроме того, задается имя распакодля крупных проектов – создается один мастер-порт и не- ванного файла трансляции элементов интерфейса и имя сколько портов, в которых только определяются некоторые программы, которая будет использована для наложения переменные. Так работают postgresql, openldap, php и мно- патчей. Переходим к реальным действиям: жество других портов. В приведенном выше примере мной были добавлены переменные «USE_RUSSIAN_GSI=yes» .if defined(USE_RUSSIAN_GSI) и «USE_INFRA_PATCHSET=yes», использование которых @${ECHO_MSG} "===> Extracting russian GSI file" будет видно в коде из основного порта. Основной порт че@${MKDIR} ${WRKDIR}/${GSI_DIR} @${CP} ${DISTDIR}/${DIST_SUBDIR}/ ↵ ресчур громоздок, чтобы приводить его весь, я приведу gsi-${GSI_VERSION}-sorted.txt.bz2 ${WRKDIR}/ ↵ только некоторые фрагменты. ${GSI_DIR} .if defined(USE_RUSSIAN_GSI) MASTER_SITES+= http://ootrans.i-rs.ru/out/:oorus .endif .if defined(USE_INFRA_PATCHSET) MASTER_SITES+= ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ru/:oorus .endif
Эти строки были внесены сразу же после списка MASTER_SITES. Они задают сервера, откуда будут загружаться необходимые файлы и устанавливают группу, которая будет впоследствии связана с файлами дистрибутива. .if !defined(WITHOUT_MOZILLA) DISTFILES+= ${MOZILLA_PROJECT}:moz \ ${MOZILLA_SOURCE}:mozsrc USE_GNOME+= orbit gtk12 .endif .if defined(USE_RUSSIAN_GSI) GSI_VERSION= 2005-01-20 GSI_DIR= rusgsi DISTFILES+= gsi-$(GSI_VERSION)-sorted.txt.bz2:oorus .endif .if defined(USE_INFRA_PATCHSET) INFRA_PATCHDIR= infrapatch INFRA_PATCHEXT= OOo_1.1.4_infra_patches DISTFILES+= ${INFRA_PATCHEXT}.tar.gz:oorus .endif
Вот именно эта доработка позволила мне уменьшить сборку порта часа на два. Задание «WITHOUT_MOZILLA=yes» исключит из списка DISTFILES файлы исходного кода Mozilla Suite, и, следовательно, загружаться они не будут. Другие условия дополняют список DISTFILES файлами, содержащими модификации интерфейса (gsi-2005-01-20sorted.txt.bz2), и набором патчей от «Инфра-Ресурс», задают имена каталогов, в которые они будут распаковываться и привязывают их к серверу в группу oorus. # When USE_RUSSIAN_GSI was defined, ensure, that # PREBUILD_TRANSEX3 and RUSSIAN_GSI were also defined .if defined(USE_RUSSIAN_GSI) .if !defined(PREBUILD_TRANSEX3) PREBUILD_TRANSEX3= yes GSI_PREBUILD= ${WRKDIR}/${GSI_DIR}/btransex .endif .if !defined(RUSSIAN_GSI) RUSSIAN_GSI= ${WRKDIR}/${GSI_DIR}/ ↵ gsi-${GSI_VERSION}-sorted.txt .endif .endif # When USE_INFRA_PATCHSET was defined, ensure, # that INFRA_PATCHER was also defined .if defined(USE_INFRA_PATCHSET) INFRA_PATCHER= ${WRKDIR}/${INFRA_PATCHDIR}/ ↵ ${INFRA_PATCHEXT}/do_infrapatch .endif
32
@cd ${WRKDIR}/${GSI_DIR} && \ ${BZIP2_CMD} -d gsi-${GSI_VERSION}-sorted.txt.bz2 .endif .if defined(USE_INFRA_PATCHSET) @${ECHO_MSG} "===> Extracting Infra patches set" @${MKDIR} ${WRKDIR}/${INFRA_PATCHDIR} @${CP} ${DISTDIR}/${DIST_SUBDIR}/ ↵ ${INFRA_PATCHEXT}.tar.gz ${WRKDIR}/ ↵ ${INFRA_PATCHDIR} @cd ${WRKDIR}/${INFRA_PATCHDIR} && \ ${TAR} -xzvf ${INFRA_PATCHEXT}.tar.gz .endif
Копируем упакованный файл трансляции интерфейса из /usr/ports/distfiles/openoffice (задана DIST_SUBDIR) в каталог, который был создан заранее, и распаковываем его архиватором bzip2. Копируем архив патчей «Инфра-Ресурс» в другой, предварительно созданный каталог и распаковываем его, но уже программой tar. Обратите внимание, что все команды параметризированы, – всюду используется ${PROGRAM}, а не /bin/program! post-patch: .if defined(USE_INFRA_PATCHSET) @${ECHO_MSG} "===> Patching OOo with Infra patches set" @cd ${WRKDIR}/${INFRA_PATCHDIR}/${INFRA_PATCHEXT} && \ ${SH} ${INFRA_PATCHER} .endif
Дополняем мишень patch подмишенью post-patch, в которой собственно и запускаем скрипт, вносящий изменения. Обратите внимание – записать это в две строки нельзя! Если записать команды cd и запуск скрипта на разных строках, то запуск скрипта произойдет не из каталога, в который перешли командой cd, а из текущего, потому что make, выполнив запрошенное действие, возвращается в каталог, из которого она была запущена. Точно так же выполняются все другие действия, связанные со сменой каталога, – например распаковка файлов. .if defined(PREBUILD_TRANSEX3) @${ECHO_MSG} "===> Pre-build TRANSEX3" @${ECHO} "source ${WRKSRC}/FreeBSDEnv.Set" > ${GSI_PREBUILD} @${ECHO} "cd transex3 && build --all && deliver" >> ${GSI_PREBUILD} @${CHMOD} +x ${GSI_PREBUILD} @cd ${WRKSRC} && PATH="${PATH}:${LOCALBASE}/ ↵ bin:${LOCALBASE}/sbin" && ${TCSH} ${GSI_PREBUILD} .endif .if defined(USE_RUSSIAN_GSI) @${ECHO_MSG} "===> Build russian GSI" @cd ${WRKSRC} && PATH="${PATH}:${LOCALBASE}/ ↵ bin:${LOCALBASE}/sbin" && ${TCSH} ↵ -c 'source FreeBSDEnv.Set && localize -m -i ru-RU ↵
администрирование .endif
-l ${LANG_EXT} -f ${RUSSIAN_GSI}'
Первая часть задает предварительную сборку программы transex3, для чего формируется скрипт, затем осуществляется переход в каталог с распакованными исходниками и запуск сборки. Обратите внимание, как передается значение переменной PATH. Вторая часть задает обработку исходных текстов OpenOffice согласно новому файлу локализации интерфейса. Полный текст Makefile из editors/openoffice-1.1 с внесенными мной изменениями можно скачать с [3]. Этот файл уже не используется как файл порта, но как образец написания Makefile, там есть чему поучиться.
Некоторые переменные USE_*
зависимость от программы без номера в имени. Например: «USE_AUTOTOOLS=libtool:15» задает зависимость от devel/libtool15, но «USE_AUTOTOOLS=libtool» задает зависимость от devel/libtool, что может быть совсем не одно и то же! USE_GNOME=<список компонентов через пробел> – задает зависимости от перечисленного списка компонентов GNOME. Например, приведенная выше строка: «USE_GNOME+= orbit gtk12» задает зависимости от компонентов devel/orbit и x11-toolkits/gtk12. При задании зависимостей следует придерживаться разумного минимума – указывать только те компоненты, которые действительно нужны для работы. Помните, что подключенные компоненты тоже имеют свои зависимости, которые могут иметь свои зависимости и т. д. – глубина вложенности неограничена. USE_QT_VER=3 – добавляет зависимость от библиотеки x11-toolkits/qt33 и неявно подключает файл bsd.kde.mk. USE_LINUX={yes|<число>} – добавляет зависимость от порта emulators/linux-base-8, если не указано <число>. Если <число> указано, то добавляется зависимость от порта emulators/linux-base-<число>. CONFLICTS=<список портов> – содержит список портов, с которыми может конфликтовать данный порт. Конфликт может выражаться в совпадающих именах каталогов для установки, совпадающих именах файлов, одинаковых TCP/UDP-портах, невозможность сборки одного порта при наличии другого и прочих причинах. Выражение для списка портов может содержать мета-символы «*?[]!». Например, «apache*-1.3.[012345]».
Здесь описаны некоторые наиболее часто используемые переменные USE_*, не упомянутые до сих пор. Полный список их значительно больше, смотреть его нужно в bsd.port.mk. IGNOREFILES= <список файлов> – задает список файлов, для которых не выполняется проверка контрольной суммы из distinfo. EXTRACT_ONLY=yes – только распаковать файлы дистрибутива, не выполнять никакой работы по сборке. Как правило, в таком порту применяется заменяющая подмишень do-install. RESTRICTED=yes – запрещает помещать собранный пакет на FTP или распространять на CD-ROM. Как правило вследствие лицензионных ограничений. Это не такая уже редкость, например такое ограничение имеет виртуальная машина Java. NO_CDROM=yes – почти то же самое, только разреша- Заключение ет помещение на FTP. Наша работа закончена, но жизнь продолжается... Мы рас FORBIDDEN=yes – запрещает сборку из-за уязвимос- смотрели основные возможности системы сборки портов. Однако далеко не для каждого порта требуется такое котей программы. IGNORE=yes – запрещает сборку из-за грубых оши- личество работы – для многих несложных программ порт бок при сборке программы. Фактически используется от начала до конца, включая отсылку во FreeBSD Team, пидля прекращения работы системы по каким-либо причи- шется за полдня. Система сборки портов обладает очень большими возможностями. Изучать их все нет необходинам (например, неподдерживаемая версия FreeBSD). BROKEN=yes – запрещает сборку из-за различных оши- мости – всегда можно заглянуть в bsd.port.mk, который и является главным справочником по ее возможностям. бок. В начале файла идет громадный блок комментария, в ко USE_ZIP=yes – для распаковки использовать zip. USE_DOS2UNIX=yes – все тексты перекодировать та- тором перечислены все переменные, которые можно иским образом, чтобы преобразовать переводы строк пользовать, и даны к ним краткие описания, для чего они из вида DOS в вид UNIX. предназначены. Число программ, которые работают под USE_GCC=<номер> – задает номер версии компиля- FreeBSD, постоянно увеличивается, порты для них пишуттора GCC. Я помню только один порт, использовавший ся, как мы теперь видим, обычными людьми, и, создавая эту USE_* – editors/openoffice на 4.х, имевший по умол- новый порт для программы, которая там в данный момент отсутствует, мы не только облегчаем себе жизнь, но и почанию GCC 2.95.4. USE_GETOPT_LONG=yes – для 4.х добавляет зависи- могаем сообществу. мость от libgnugetopt. Для 5.х и выше уже неактуально – libgnugeopt перенесена в базовую систему. Литература и ссылки: USE_PERL=yes, USE_JAVA=yes, USE_PYTHON=yes, 1. Ачилов Р. Порт для FreeBSD своими руками. Часть первая – USE_RUBY=yes – добавляют соответствующие завиосновные возможности. Журнал «Системный администрасимости от интерпретатора соответствующего языка. тор», №3, март 2006 г. – 32-38 с. USE_AUTOTOOLS=<tool>:<version> – добавляет зави- 2. Руководство FreeBSD по созданию портов – http://www.ru.freebsd. симость от некоторой программы из GNU Autotools. Есorg/doc/ru_RU.KOI8-R/books/porters-handbook/index.html. ли задана и программа и версия, задает зависимость 3. Доработанный Makefile из порта editors/openoffice-1.1 – ftp://ftp. от конкретной версии, если версия опущена, то задает granch.ru/pub/openoffice/Makefile.OOo.
№4, апрель 2006
33
администрирование
Автоматизируем установку программного обеспечения в сети
Андрей Бирюков Установка программного обеспечения – неотъемлемая часть работы системного администратора. Есть несколько способов автоматизировать этот процесс.
Н
аверное, каждому из вас приходилось оказываться чами. Поэтому об этих продуктах компании Microsoft речь в ситуации, когда необходимо быстро на всех ма- сегодня вести не будем. Но если у нас есть Active Directory, шинах в сети установить какое-либо программное то нам доступно такое мощное средство управления прообеспечение. Конечно, многие приложения позволяют осу- граммным обеспечением, как Group Policy. В Group Policy за установку приложений отвечает комществлять удаленную установку, автоматическую установку с помощью файлов ответов (Unattended setup) или же понента Software Installation and Maintenance, которая есть с помощью заранее подготовленных образов дистрибути- как в разделе «Computer Configuration → Software Settings», ва. Однако в случае, если дистрибутив не содержит каких- так и в «User Configuration → Software settings» (см. рис. 1). либо средств для автоматического развертывания на больРазличие между компонентами в этих двух разделах шом количестве машин, тогда системным администрато- следующее. В Computer Configuration вы можете только нарам приходится проводить бесчисленные вечера и выход- значать (Assign) приложение, то есть оно станет доступным ные дни за установкой данной программы. Предлагаем вам без каких-либо действий со стороны пользователя после несколько различных способов создания пакетов для авто- следующей загрузки системы. В User Configuration приломатизации установки программного обеспечения. жения можно как назначать, так и публиковать (Publish), при этом после публикации оно становится доступным из окна «Add/Remove» для пользователей, к которым приГрупповая политика как основа автоматизации меняется данный объект Group Policy. Назначенные приДля начала нам необходимо определиться со средством, ложения становятся доступны после входа пользователя с помощью которого будет осуществляться автоматичес- в систему. В Group Policy можно конфигурировать целый ряд пакое развертывание пакетов. В сети на основе Windows можно использовать несколько различных средств, например, раметров, которые определяют, каким образом происходит Microsoft Systems Management Server (SMS) или Microsoft развертывание и управление для пакетов ПО. Они опредеOperations Management (MOM). Однако это достаточно мощ- ляют, как происходит добавление пакетов к объекту Group ные и, следовательно, дорогостоящие программные про- Policy, уровень управления установкой, доступный для польдукты, требующие специальной подготовки, и использо- зователей, и приложение по умолчанию для заданного расвание которых оправдано лишь в сетях крупных компаний, ширения имен файлов, а также категории, которые можно где количество компьютеров исчисляется сотнями и тыся- использовать для группирования приложений.
34
администрирование Для установки приложения с помощью Group Policy необходимо выполнить следующие действия. Открыть раздел Computer Configuration или User Configuration (в зависимости от поставленной задачи). Затем выбрать «Software Installation → Action → New → Package…». Тут сразу следует оговориться, что при развертывании с помощью групповой политики используемый дистрибутив должен представлять из себя msi или msp файл. О том, что делать в случае, если наш дистрибутив не является msi/msp-файлом, мы поговорим далее. В появившемся окне необходимо указать файл пакета (msi или msp). Обратите внимание на то, что необходимо указать не локальный, а сетевой путь к данному файлу, так как в противном случае пакет будет недоступен другим пользователям. Далее выбираем в зависимости от вида установки Assigned или Published. И все, точка распространения программного обеспечения готова.
Рисунок 1. Групповая политика домена
Создаем установочный пакет вручную Итак, с подготовкой средства для развертывания ПО мы разобрались. Теперь вернемся к тому, с чего начали, а именно – с создания пакета для автоматической установки приложения. В случае, если дистрибутив устанавливаемой программы уже содержит msi-файл, то можно считать, что у нас уже есть установочный пакет и необходимо только прописать его в Group Policy, как это описано выше. Но рассмотрим ситуацию, когда есть только установочный файл, например, setup.exe, при запуске которого задается много разных вопросов, требуется указать ряд настроек. В документации по Windows в такой ситуации предлагают использоть ZAP-файлы. Это специальный текстовый файл, который указывает на программу установки для данного приложеРисунок 2. Настройки установочного пакета в WinInstalLE ния и может при необходимости запускать сценарии автоДля начала подготовим сборочную машину, которая матизированной установки. Однако такой вариант установки имеет целый ряд ограничений (например, назначать при- имеет типовую для вашей сети конфигурацию. Прежде чем начать установку приложения, необходимо ложения пользователям или компьютерам или устанавливать приложения автоматически при первом вызове) и поэ- сделать снимок (snapshot) системы. В WininstalLE это можно сделать с помощью средстому используется для устаревших приложений, установочтва Discover (раздел «File → Run Discover»). Данная утилиные файлы которых нельзя перепаковывать. та произведет сканирование системы (при этом для файлов можно выбрать какой диск сканировать, а также укаДелаем снимки системы Другой вариант – это создание установочных пакетов с по- зать исключения в каких каталогах и каких ветках реестмощью средств третьих производителей. Здесь сразу сле- ра не надо сканировать). Далее будет сделан снимок сисдует оговориться, что создание установочных пакетов са- темы в состоянии «Before», то есть до установки системы. мостоятельно – занятие достаточно рискованное, так как Авторы программы рекомендуют, чтобы перед запуском по собственному опыту могу сказать, что не бывает аб- Discover на сборочной машине не было установлено никасолютно идентичных пользовательских машин, и поэто- ких дополнительных приложений, то есть только операциму то, что на одной системе устанавливается без проблем, онная система, но по-моему, лучше, чтобы на сборочной на другой может вызвать ошибку, зависание и даже пов- машине была именно типовая конфигурация c типовыми реждение операционной системы. Поэтому прежде чем при- приложениями, используемыми в вашей сети. После того как снимок будет создан, надо запустить ступать к развертыванию свежесозданного пакета на всех машинах домена, надо сначала тщательно протестировать, процесс установки нашего приложения. После того как устанавливая приложение на нескольких машинах домена, приложение успешно установится и все необходимые изкак правило, этими «испытуемыми» становятся компьюте- менения и настройки будут внесены, необходимо вновь зары сотрудников ИТ-отдела, так как они наиболее подготов- пустить Discover, но в режиме «Perform the ‘After’ snapshot now». После этого снова запустится сканирование, по залены к различным «сюрпризам». Но если вас вышесказанное не испугало, то можно при- вершении которого будет произведено сравнение изместупать к созданию установочного пакета. В справочнике нений системы до и после установки, и в результате сопо Windows 2003 [1] для создания msi-пакетов рекоменду- здан msi-файл, фактически являющийся установочным пакетом. ется использовать WinInstalLE 2003 [2].
№4, апрель 2006
35
администрирование
Рисунок 3. Главное меню FLEXnet
сжать msi-файл. Также в этом разделе можно создать hash для файлов пакета. После того как все действия по настройке установочного пакета произведены, для того, чтобы создать msi-файл, достаточно просто сохранить изменения. В результате получаем каталог, в котором находится msi-файл и также группа служебных файлов, которые требуются для установки. Для развертывания необходимо в Group Policy указать путь к msi-файлу. Программа WinInstalLE позволяет создавать установочные пакеты с помощью сравнения различий в снимках операционной системы до и после установки приложения. Такой метод, конечно, удобнее, чем создание всего пакета вручную, но требует определенных затрат времени, которое требуется на осуществление создания и сканирования снимков. Кроме того, метод сравнения снимков не всегда удобен, так как он не позволяет отслеживать изменения в системе, которые производятся в процессе установки, а для некоторых бизнес приложений это может оказаться принципиальным. Для создания пакетов посредством мониторинга изменений воспользуемся другой программой.
Отслеживаем изменения на лету
Рисунок 4. Свойства готового пакета
При необходимости можно произвести редактирование установочного пакета. После запуска WinInstalLE для редактирования msi-пакета нужно, выбрав опцию «Windows Installer Package» и нажав правую кнопку мыши, указать Packages Directory, затем в появившемся списке выбрать уже созданный пакет (см. рис. 2). В разделе «Files» можно добавить какие-то дополнительные файлы, которые необходимо создать в процессе установки. Пути ко всем этим файлам необходимо указать в разделе «Files». Также можно прописать удаление либо перенос каких-либо файлов, для случаев если, например, требуется заменить устаревшие версии некоторых из них более новыми. Для приложений, использующих промышленные СУБД, есть возможность прописать в системе источник данных ODBC. Также можно добавить ярлыки установленной программы на «Рабочий стол». Если приложение требует внесения изменений, то в соответствующем разделе свойств пакета WinInstalLE можно указать нужную ветвь реестра. Аналогично, если необходимо запустить какие-либо сервисы, создать или внести изменения в ini-файлы. Естественно, при внесении каких-либо изменений в файл пакета вручную необходимо точно знать, к каким последствиям они могут привести. Когда все изменения сделаны, в разделе «Actions» можно воспользоваться опцией Compress, которая позволяет
36
Программа FLEXnet AdminStudio Professional Edition 7.0 позволяет автоматизировать данный процесс. Данный программный продукт является коммерческим, испытательную версию можно получить по адресу [3], предварительно зарегистрировавшись, правда, следует отметить, что дистрибутив довольно большой, около 370 Мб, так как программа включает в себя массу различных функций. Сборочную машину мы готовим аналогичным образом, то есть разворачиваем типовую конфигурацию. Итак, после запуска Admin Studio мы попадаем на Start Page (см. рис. 3). Из всего многообразия предлагаемых функциональных возможностей программы нас прежде всего интересует раздел «Package setup». В этом разделе нам предлагается сначала указать выполняемый файл дистрибутива приложения (как правило setup.exe), а затем – путь к файлу, содержащему новый установочный пакет. После этого необходимо нажать кнопку «Repackage», которая становится активной после указания требуемых путей. Следует также отметить, что мы можем использовать два метода мониторинга изменений в системе – это Installation Monitoring и Snapshot. По умолчанию предлагается использовать Installation Monitoring, нас это вполне устраивает. После нажатия «Repackage» нам предлагается указать номер версии, URL производителя и другие описания устанавливаемого приложения. Советую здесь вносить осмысленную информацию, так как потом эти описания будут выводиться в свойствах уже установленного приложения. Затем указываем путь, где будут храниться файлы, создаваемые в процессе установки приложения. После этого запускается установочный файл, и начинается процесс установки нашего приложения. При этом в процессе установки можно указывать необходимые настройки, путь для установки, править ярлыки для того, чтобы приложение было доступно пользователям на рабочем столе и т. д. После окончания установки появится окно с ак-
администрирование тивной кнопкой «Process». Окончательно проверив, что наше же подготовить развертывание с помощью уже упоминавприложение корректно установилось и запускается, можно шегося в начале статьи продукта Microsoft SMS. нажать эту кнопку. Admin Studio произведет анализ изменений и затем запустит Repackager (см. рис. 4). Автоматизация управления лицензиями Здесь мы можем увидеть все изменения, которые бы- На следующую дополнительную возможность программы ли сделаны в системе в процессе установки. Меню анало- FLEXnet AdminStudio хотелось бы обратить особое внимагично тому, что есть в WinInstalLE, но с той лишь разницей, ние, так как эта компонента представляет нам возможность что все эти изменения были сделаны автоматически в ре- контроля за лицензированием устанавливаемого програмзультате мониторинга процесса установки. Если что-ли- много обеспечения. «Выбрав Prepare Application for license бо из предложенных изменений нас не устраивает, напри- Management», мы попадаем в окно управления лицензиямер, не надо создавать какие-то файлы, то здесь это мож- ми. Для начала нам необходимо указать msi-пакет и в отно подправить. Когда все необходимые изменения внесе- крывшемся списке файлов выделить те файлы, которые ны, для окончательного создания установочного пакета на- отвечают за лицензирование приложения, как правило, до нажать «Build» и затем сохранить изменения. В результа- это exe-файлы. В разделе «Set Limits» устанавливаем огте выполнения всех вышеперечисленных действий мы по- раничения на количество лицензий, дату окончания дейслучаем готовый к развертыванию msi-пакет. Согласитесь, твия, а также реакцию на случай достижения лимита литакой способ создания установочных пакетов намного эф- цензий. Раздел «define Access» позволяет задать огранифективнее и быстрее предыдущего. чения на доступ к лицензиям для определенных узлов или пользователей. Наконец, в разделе «Configure Connection» нужно указать файл лицензий сервера FLEXnet. При перДополнительные возможности Следует особо упомянуть о дополнительных возможнос- вом запуске эту лицензию необходимо запросить по адретях, которые имеются в FLEXnet Admin Studio. На старто- су, который также указан в данном окне. Завершающим вой странице Start Page есть возможность для пересбор- этапом в настройке управления лицензированием являетки уже готового установочного пакета Customize Package ся раздел «Finalize Package», в котором необходимо про(например, для случаев, когда необходимо внести некото- писать папку, где будут создаваться новые пакеты. Когда рые изменения не пересобирая при этом все заново). Так- все эти действия выполнены, нажимаем «Build Package». же эта опция полезна, если требуется создать msi-файл Если все настройки были заданы верно, то мы получим усдля изменения исходного дистрибутива. тановочный пакет, лицензионные установки которого можСледующей дополнительной возможностью является на- но контролировать. Для получения отчета по использоваличие такого средства, как resolve Conflicts, которое позво- нию приложения нужно нажать «Creating application Usage ляет разрешать конфликты, которые могут возникнуть при reports with FLEXnet Manager». Таким образом, можно реустановке нового приложения. Для того чтобы воспользо- шить еще одну задачу системного администрирования – ваться данной возможностью, необходимо выбрать на стар- контроль за количеством установленных копий данного товой странице раздел «Resolve Conflicts», далее указать программного продукта. msi-файл и выбрать тип операции «ConflictSolver Operation». Стандартным средством является «Detect conflicts for this Вернемся к Group Policy package». После нажатия «Perform» в открывшемся окне Итак, мы рассмотрели несколько способов создания собснужно нажать «Validation» для запуска процесса провер- твенных установочных пакетов для нашего приложения. ки содержимого пакета на наличие ошибок. Скорее всего, По моему мнению, FLEXnet Admin Studio является наибосписок сообщений не будет пуст, хотя это не означает, что лее удобным и функциональным средством разработки все плохо. Сообщения могут информировать о дублирова- своих msi-пакетов. Пакеты, созданные с помощью обеих нии некоторых файлов (например, установочные файлы мо- программ, без проблем развертываются в группе, к котогут дублироваться в каталоге LastKnowGood в системных рой применена данная политика. В случае, если приложепапках Windows), аналогично могут дублироваться некото- ние по каким-то причинам не установилось на компьютере, рые записи в реестре. Разрешить обнаруженные конфлик- то причину сбоя следует искать прежде всего в журнале соты можно попробовать с помощью опции «Best Practices». бытий Event Viewer, в Application Log. Не забудьте, что разТакже в программе есть возможность определять возмож- мещать установочный пакет нужно в каталоге, к которому ные конфликты с уже установленными приложениями (раз- есть общий доступ пользователей из сети и, как уже упомидел «Detect Conflicts»), правда, количество известных Admin налось в начале статьи, в настройках Software Installation неStudio приложений, к сожалению, оставляет желать лучше- обходимо указать именно сетевой путь, а не локальный. Хотелось бы надеяться, что описанные выше способы го. Подробный отчет об обнаруженных в пакете конфликтах можно просмотреть, сохранить и распечатать в разде- автоматического развертывания программного обеспечеле Reports, причем отчет можно составить как для всего па- ния будут полезны в работе и помогут вам сэкономить врекета, так и отдельно для файлов или реестра. мя при установке большого числа приложений. Еще есть возможность тестирования пакета с помощью опции Ensure Package Conflicts. Также можно подгото- Использованные источники: вить пакет к распространению в разделе Prepare package 1. Windows Server 2003. Справочник администратора. for distribution. В этом разделе можно, к примеру, разместить 2. www.wininstall.com – сайт программы WinInstalLE. готовый msi-пакет на FTP-сервере, в сетевой папке, а так- 3. www.macrovision.com – сайт программы FLEXnet Admin Studio.
№4, апрель 2006
37
администрирование
Управляем инсталляторами
Иван Коробко В настоящее время используется несколько основных инсталляторов для установки программного обеспечения. Очень важным вопросом является автоматизация процесса установки приложений.
Н
а сегодняшний день существует множество инстал- ся с пакетами обновлений операционной системы или в каляторов. Для реализации автоматической установ- честве отдельного дистрибутива. Некоторые версии Windows Installer и Windows несовмески программ их запускают с различными параметрами, иногда параметры установки описывают в файле от- тимы. Это касается Windows 9x и Windows 2k. Ниже привеветов. Рассмотрим наиболее часто используемые из них, дена таблица, с помощью которой можно определить, касначала описав возможности, касающиеся автоматичес- кую версию Windows Installer и где можно устанавливать кого управления инсталляторами, а затем примеры их ис- (см. таблицу 1). В настоящее время используется Windows Installer 3.1, который можно загрузить с сайта разработчика пользования: как hotfix: http://support.microsoft.com/?id=893803. Windows Installer Для инициализации процесса установки используют InnoSetup команду: Nullsoft Scriptable Install System (NSIS) Wise Installer
Windows Installer Windows Installer – это сервис установки и конфигурирования программных продуктов, который входит в состав ОС (внешний вид см. на рис. 1). Также он может устанавливать-
38
WindowsInstaller-
-x86.exe [<options>]
Параметры запуска приведены в таблице 2. На каждом компьютере, использующем Windows Installer, хранится единая база данных с информацией о каждом
администрирование установленном с помощью этой технологии приложении. Она включает файлы, записи в реестре и компоненты. При удалении приложения с машины Installer проверяет базу данных, чтобы удостовериться в том, что не будут удалены файлы, ключи реестра и компоненты, от которых зависят другие приложения. Таким образом, удаление приложения становится практически безопасным для других программ, имеющихся на компьютере. Использование технологии Windows Installer дает пользователям следующие преимущества: Более простая и быстрая установка программного обеспечения. Возможность установки по требованию. Информация о неустановленных компонентах приложения хранится в одном месте, и при обновлении конфигурации программы нет необходимости переустанавливать все компоненты. Самовосстановление программ. Хранение инсталляционной информации в одном месте позволяет приложению самовосстанавливаться. Неправильно работающее приложение может проверить инсталляционные данные, определить, какие файлы повреждены или отсутствуют, а затем восстановить их. Возможности отката. Windows Installer позволяет отменять любые изменения в конфигурации как устанавливаемого продукта, так и операционной системы. Это делает установку программ, поддерживающих технологию Windows Installer, намного более безопасным и предсказуемым занятием, чем каких-либо других. Благодаря перечисленным преимуществам пользователи теряют меньше времени на удаление и переустановку приложений, а также избавляются от необходимости исправлять непонятные и трудно диагностируемые ошибки в конфигурации приложения.
Таблица 1. Версии Windows Installer Название продукта
Версия продукта
Описание
Windows Installer 1.0
1.00.5104.0
Интегрирован в Office2000, дистрибутив
1.10.1029.0
Интегрирован в Windows 2000
Windows Installer 1.1
Windows Installer 1.11
Windows Installer 1.2
Windows Installer 2.0
Windows Installer 3.0
Windows Installer 3.1
1.10.1029.1
Дистрибутив
1.11.1314.0
Интегрирован в Windows 2000 SP1
1.11.2405.0
Интегрирован в Windows 2000 SP2
1.20.1410.0
Интегрирован в Windows Me
1.20.1827.1
Дистрибутив
2.0.2600.0
Интегрирован в Windows XP
2.0.2600.1
Интегрирован в Windows 2000 SP3
2.0.2600.1183
Интегрирован в Windows 2000 SP4
2.0.2600.2
Дистрибутив
2.0.2600.1106
Интегрирован в Windows XP SP1
2.0.3754.0, 2.0.3790.0
Интегрирован в с семейством Windows Server 2003
3.0.3790.2180
Интегрирован в Windows XP SP2, дистрибутив
3.1.4000.1823
Дистрибутив
3.1.4000.1830
Интегрирован в с семейством Windows Server 2003 SP1
3.1.4000.2435
Дистрибутив
Таблица 2. Параметры запуска hotfix Параметр
Описание
/norestart
Не перезагружать компьютер после установки обновления
/quiet
Включение «тихого» режима. Во время установки программа не задает никаких вопросов
/help
Вызов справки, содержащей ключи запуска и их описание
Взгляд изнутри: файл Msiexec.exe Windows Installer включает в себя множество файлов, среди которых присутствует msiexec.exe. Этот файл – не самый важный компонент в Windows Installer. Всю основную работу выполняет динамически подключаемая библиотека – msi.dll. А msiexec.exe служит оболочкой msi.dll, позволяющей: Работать Windows Installer как службе ОС. Разбирать параметры командной строки и выполнять соответствующие задачи. Устанавливать при выходе уровень ошибки, соответствующий системным кодам ошибок (http://msdn.microsoft. com/library/default.asp?url=/library/en-us/msi/setup/error_ codes.asp), то есть ошибкам типа ERROR_SUCCESS и т. д. Связать файлы с расширениями .msi с Windows Installer командой: "%SystemRoot%\System32\msiexec.exe" /i "your_filename.msi"
Параметры командной строки для Msiexec Параметры командной строки, которые понимает msiexec.exe, приведены в таблице 3.
№4, апрель 2006
Рисунок 1. Внешний вид программы, использующий Windows Installer
Полный список параметров смотрите на сайте Microsoft.
Использование Windows Installer на примере Microsoft Office В настоящее время существует как минимум два способа автоматической установки Microsoft Office. Автоматическая установка с настройками по умолчанию. Процесс установки инициализируется следующей командой:
39
администрирование Pro11.msi /qb или Setup.exe /qb
Автоматическая установка с использованием файла ответов с расширением MST, который создается с помощью соответствующего мастера из набора Resource Kit For Microsoft Office 2003. Установка осуществляется с помощью следующей команды: Pro11.msi Transforms=FileName.mst /qb
зарегистрирован продукт. Впоследствии при установке Office с этого дистрибутива серийный номер не будет запрашиваться.
Интеграция пакета исправлений и обновлений в Office Перед интеграцией в Office, дистрибутив пакета исправлений, скопированный с сайта Microsoft, необходимо распаковать, выполнив команду: Office2003SP1-KB842532-fullfile-enu.exe /q /c ↵ /t:С:\Office2003\SP1
или Setup.exe Transforms=FileName.mst /qb
Рассмотрим второй способ установки более подробно.
где С:\Office2003\SP1 – путь, куда будет распаковано содержимое архива. Интеграция в дистрибутив осуществляется с помощью двух команд:
Подготовка дистрибутива Office Чтобы во время автоматической установки не запрашивался серийный номер, необходимо создать административную установку (Setup /a), которая хранит в себе такие важные параметры, как серийный номер Office; название организации, на которую зарегистрирован продукт.
Создание административной установки Создание административной установки необходимо для реализации автоматической установки Microsoft Office и возможности интегрировать пакеты исправлений (SP) и обновления (updates) в дистрибутив. По своей сути создание административной установки является установкой Microsoft Office в специальном режиме, который инициализируется командой: Setup /a
MsiExec /p C:\Office2003\SP1\MainSp1f.msp /a ↵ C:\Office2003\Office\Pro11.msi ShortFileNames=True /qb MsiExec /p C:\Office2003\SP1\Owc11Sp1ff.msp /a ↵ C:\Office2003\Office\OWC11.msi ShortFileNames=True /qb
где: C:\Office2003\SP1\ – путь к распакованной версии SP; C:\Office2003\Office\ – путь к дистрибутиву Microsoft Office 2003. Интеграция обновлений осуществляется по такому же сценарию: сначала необходимо скопировать обновления с сайта Microsoft на жесткий диск, затем распаковать их и интегрировать в дистрибутив Office 2003. Стоит отметить, что имена файлов обновлений строятся по следующему принципу: XXX_KB######_YYY_ZZZ.exe
В процессе установки Office будет запрошен серийный номер и название организации, на которую должен быть
где:
Таблица 3. Параметры командной строки msiexec.exe Опция
Параметры
Значение
/I
Код пакета / продукта
Установить или конфигурировать приложение
/f
[p|o|e|d|c|a|u|m|s|v]Код пакета / продукта
Восстановить приложение. Если задана эта опция, msiexec игнорирует значения свойств, заданные в командной строке. Список по умолчанию для данной опции «pecms». p – переустановить, только если файл отсутствует; o – переустановить, если файл отсутствует или установлена более старая версия; e – переустановить, если файл отсутствует или установлена такая же либо более старая версия; d – переустановить, если файл отсутствует или установлена другая версия; c – переустановить, если файл отсутствует или его сохраненная контрольная сумма не соответствует вычисленному значению; a – переустановить все файлы; u – перезаписать все необходимые специфичные для пользователя ключи реестра; m – перезаписать все необходимые специфичные для машины ключи реестра; s – перезаписать все существующие ярлыки; v – запустить с исходного носителя и заново кэшировать локальный пакет
/a
Пакет
Опция Административной установки. Установить продукт в сети
/x
Код пакета / продукта
Деинсталлировать продукт
[u|m]Пакетили[u|m]Пакет /g Идентификатор языка
Опубликовать продукт. Если задана эта опция, msiexec игнорирует значения свойств, заданные в командной строке. u – опубликовать для текущего пользователя; m – опубликовать для всех пользователей компьютера; g – идентификатор языка
n|b|r|f
Задать уровень пользовательского интерфейса /q. qn – отсутствие интерфейса, в этом случае не показывается никаких окон и не задается никаких вопросов; данный режим очень удобен для автоматической инсталляции ПО; qb – уровень базового пользовательского интерфейса; qr – уровень сокращенного пользовательского интерфейса; qf – уровень полного пользовательского интерфейса
/j
/q
40
администрирование XXX – версия офиса, для которой предназначено обновление; KB###### – номер статьи Microsoft Knowledge Base, в которой приведен список исправлений; YYY – тип версии; ZZZ – языковая принадлежность. Итак, для Office 2003 файлы обновлений строятся по следующему шаблону: Office2003_KB######_FullFile_Enu.exe
Создание файла ответов MST Файл ответа для Microsoft Office можно создать с помощью мастера Custom Installation Wizard, входящего в набор Resource Kit соответствующей версии. Запустив мастер Custom Installation Wizard, необходимо создать новый MST-файл. Команда для установки Office в автоматическом режиме будет следующей:
Таблица 4. Список параметров запуска инсталляторов Inno Setup Параметр
Описание
/SILENT, /VERYSILENT
Подавление вывода диалоговых окон
/NOCANCEL
Скрыть кнопку отмены процесса установки
/NORESTART
Управление перезагрузкой после завершения процесса установки
/LOADINF="filename"
Передача управления установкой конфигурационному файлу
/SAVEINF="filename"
Записать в конфигурационный файл сценарий установки
/LANG=language
Управление языковыми настройками. Если параметр указан, сообщение о выборе языка не появляется
/DIR="x:\dirname"
Путь установки ПО
/GROUP="folder name"
Название группы, в которой будут размещены ярлыки в папке «Пуск | Программы»
/NOICONS
Не создавать папку с ярлыками в «Пуск | Программы»
/COMPONENTS
Использовать при установке набор по умолчанию
/SN
Указать серийный номер продукта
C:\Install\Office\setup.exe transforms= ↵ C:\Install\Office\answer.mst /qb- /noreboot
Использование Windows Installer на примере Microsoft IE 20 марта 2006 года вышла очередная версия Microsoft Internet Explorer (IE Beta 2 7.0.5335.5), которая работает нестабильно. Достаточно часто возникает ситуация, когда не удается загрузить из сети какой-либо файл, хотя с помощью IE 6.x это можно сделать без проблем. При попытке удалить программу в соответствии с рекомендациями разработчика, после перезагрузки программа самовосстанавливается. При попытке установить предыдущую версию IE мастер установки, естественно, сообщает о невозможности, т.к. уже установлена более новая версия программы. Одним из решений проблемы является установка IE6 без проверки версии c помощью команды: ie6setup.exe /Q:A /C:"ie6wzd /S:""#e"" /Q:C /R:N /V:I"
Inno Setup
Рисунок 2. Внешний вид Inno Installer
Инсталлятор поддерживает файлы ответов, которые имеют расширение ISS. После установки инсталлятора их можно найти в каталоге C:\Program Files\Inno Setup 5\ Examples. Файл ответа можно сгенерировать к уже готовому продукту с помощью ключей, описанных в таблице. Синтаксис файла ответов подробно описан в файле-справке C:\Program Files\Inno Setup 5\ISetup.hlp. В комплекте установки инсталлятора в каталоге C:\Program Files\Inno Setup 5\Languages находятся файлы с расширением ISL, позволяющие инсталлятору поддерживать несколько языков интерфейса.
Inno Setup – бесплатно распространяемый инсталлятор Использование Inno Setup на практике для Windows-приложений, разрабатываемый с 1997 года. Рассмотрим использование инсталлятора Inno Setup на приПоследнюю версию 5.1.6 (18 ноября 2005 г.) можно скачать мере программ Nero Burning Room и WinRar. по адресу: http://www.jrsoftware.org/download.php/is.exe. Определить инсталлятор InnoSetup можно очень просто. Автоматическая установка Nero Burning Room Во-первых, слева приведена одна из двух картинок, а во- Установим и сразу же зарегистрируем программу, указав вторых, на самом первом экране в меню присутствует ко- серийный номер во время инсталляции с помощью ключа SN: манда «File | About» (см. рис. 2). Для автоматизации процесса установки ПО рекомендуc:\Install\Nero\Nero551054.exe /silent /noreboot ↵ ется использовать команду: /sn=xxxx-xxxx-xxxx-xxxx-xxxx-xxxx /write_sn
setup.exe /SILENT
Полный список ключей приведен в таблице 4.
№4, апрель 2006
где: /silent – обеспечивает автоматический режим установки программы;
41
администрирование Таблица 5. Параметры запуска инсталлятора NSIS Параметр
Описание
/NCRC
Отключение функции проверки контрольной суммы архива. Работает, если в сценарии установки не используется функция CRCCheck
/S
Подавляет все диалоговые окна в процессе установки
/D
Задается каталог инсталляции продукта
/noreboot – не перезагружает рабочую станцию после установки программы;
/sn=xxxx-xxxx-xxxx-xxxx-xxxx-xxxx – вместо xxxx-… указывается серийный номер продукта.
Автоматическая установка WinRar Для реализации автоматической установки WinRar в качестве параметра необходимо указать ключ /s. В этом случае WinRar будет ассоциирован со всеми типами архивов, а также будет создана соответствующая группа в меню «Пуск»: C:\Install\Wrar\Wrar340ru.exe /s
Если же использовать ключ /silent, то пользователю будет предложено, выбрать, какие из вышеперечисленных функций он хочет использовать.
Nullsoft Scriptable Install System (NSIS)
Рисунок 3. Внешний вид NSIS
Рисунок 4. WIZE Installer
Как и предыдущий инсталлятор, NSIS (внешний вид см. на рис. 3) является бесплатным. С его помощью используются такие приложения как DIVX. Скачать NSIS 2.15 (4 марта 2006г) можно по адресу: http://prdownloads.sourceforge.net/nsis/nsis-2.15setup.exe?download. Инс та ллятор NSIS ис поль зуют такие приложе ния, как WinAmp, SoundForge, Emule, DivX. Скриншоты см. на http://nsis.sourceforge.net/Screenshots. Инсталлятор поддерживает файлы ответов, которые имеют расширение NSI. После установки инсталлятора их можно найти в каталоге C:\Program Files\NSIS\Examples. Подробное описание скриптового языка можно найти в файле C:\Program Files\NSIS\NSIS.chm. Инсталлятор поддерживает параметры запуска, указанные в таблице 5. Приведем несколько примеров использование инсталлятора: installer.exe installer.exe installer.exe installer.exe
/NCRC /S /D=C:\Program Files\NSIS /NCRC /S /D=C:\Program Files\NSIS
Таблица 6. Сравнение возможностей инсталляторов Свойство
Инсталлятор
Название
Windows Installer
Inno Setup
NSIS
Поддержка файла ответов
+/– (Некоторые программы, например, Microsoft Office, используют индивидуальный мастер создания файлов ответов, с помощью которого настраивается каталог установки, отмена перезагрузки после завершения процесса инсталляции и т. д.)
*.ISS
*.NSI
Импорт/экспорт параметров установки в файл
–
+
–
Управление перезагрузкой после окончания процесса установки
+/–
/NORESTART
–
Управление «тихим» режимом установки
/Q
/SILENT
/S
Языковой интерфейс
/X
/LANG
–
Директория инсталляции
+/–
/DIR
/D
Серийный номер продукта
/I
/SN
–
ПО, использующее инсталлятор
Ghost, MS Office, AcdSee и т. д.
Ahead Nero, WinRar
WinAmp, SoundForge, Emule, DivX
42
администрирование Wise Installer Этот инсталлятор является платным. Его бесплатную 30-дневную версию можно скачать по адресу http://www. wise.com/dev_evaluations.asp, зарегистрировавшись на сайте. Внешний вид программы см. на рис. 4. Автоматическая установка осуществляется с помощью ключа /S. Wize Installer используют такие программы как AdWare, AGraber. Приведем пример автоматической установки программы AdWare: C:\Install\Wrar\Adware.exe /s
Сравнение возможностей инсталляторов Для быстрой автоматизации установки программ приведем таблицу сравнения инсталляторов (см. таблицу 6).
Пакетная установка ПО Рассмотрев инсталляторы, необходимо несколько слов сказать о том, как реализовать установку нескольких программ в автоматическом режиме. Для этого рекомендуется использовать пакетную установку, реализованную, например, с помощью BAT-файла. Пользоваться же параллельной установкой не рекомендуется, поскольку некоторые инсталляторы, например Windows Installer, не могут работать параллельно. Для того чтобы процесс установки программ шел последовательно, необходимо строку установки предварять командой start /wait:
№4, апрель 2006
start /wait %systemdrive%\install\setup.exe /s
Некоторые инсталляторы, например, Inno Setup, пытаются запустить программу по окончании процесса установки. Если вы устанавливаете несколько программ подряд в «тихом» режиме, то это неудобно. Решить проблему можно с помощью утилиты Taskkill, поставляющейся с операционной системой, следующим образом: [Setup.bat] start /wait %systemdrive%\install\filename.exe /SILENT /SPtaskkill.exe /F /IM filename.exe
Заключение Надеюсь, что полученные знания позволят читателю автоматизировать установку львиной доли программ и ускорить процесс восстановления рабочих станций в сети.
Ссылки: 1. http://support.microsoft.com/?id=893803 2. h t t p : / / w w w . m i c r o s o f t . c o m / t e c h n e t / p r o d t e c h n o l / windowsserver2003/ru/library/ServerHelp/9361d377-9011-4e218011-db371fa220ba.mspx?mfr=true 3. http://www.microsoft.com/windows/IE/ie7/ie7betaredirect.mspx 4. http://www.jrsoftware.org/isinfo.php 5. http://nsis.sourceforge.net/Main_Page 6. http://www.wise.com/index.asp
43
человек номера
Герой нашего времени, или Попытка развенчания мифов
Новое поколение российских предпринимателей уже родилось. Они уже занимают ключевые позиции. В том числе на рынке электронных продуктов. Свободные и образованные, патриоты своей Родины, знатоки европейских языков. Их не знают, о них сочиняют мифы. Мифы, которые оказываются несостоятельными под натиском фактов.
Миф первый: «Молодой еще…»
чении «неопытный», «начинающий». набирает обороты прогресс и есть возОднако опыта человеку, возглавля- можность на это влиять. Наша компаОн обижается, когда его называют ющему группу компаний «Мезон.Ру», ния, коллеги в других фирмах опреде«молодым» и говорит, что современ- развивающему рынок лицензионного ляют, как будет выглядеть мир в будуная молодежь ему не нравится. Вслух ПО в России, не занимать. И возраст щем. Это наш вклад, и мой лично. Сейя возражаю, что 26 лет – это возраст, здесь не при чем. час каждый день случается что-то ноИли все-таки возраст – определяю- вое, интересное. официально признанный молодежным. Но вообще-то я с Павлом Фроловым щий фактор? Павел признает: Новый мир очень юн, и его творцы – согласна. Ведь у нас понятие «моло– Мне очень повезло, что я родил- ему ровесники. Но они уже построили дой» чаще всего употребляется в зна- ся именно в это время. Именно сейчас «среду обитания»! И совершенно ре-
44
человек номера зонно чувствуют себя зрелыми, состо- можно работать! Как лично я переехал но сделанный. «Однако понимает ли явшимися людьми. на Linux? У меня на ноутбуке стояли Павел, что не скоро читатели журнаМожет быть, это определяющая обе операционные системы. Я так на- ла из сельской глубинки смогут восчерта людей поколения Павла Фро- строил свои программы, что они хра- пользоваться услугами интернет-магалова – они не пассивные наблюдате- нили свои данные в одном месте, мне зина?» – размышляю я про себя, лисли, а активные строители. Они вов- было все равно, в какой операцион- тая глянцевые страницы. Вот, наприсе не понимают тех, кто сидит до- ной системе находиться. В один пре- мер, одна моя знакомая учительница ма и смотрит MTV. Любители клипов красный день я вернулся из коман- из Республики Коми ездит за 250 км младше лет на пять, и эта та моло- дировки, подсоединил ноутбук к ло- от дома, чтобы проверить свой элекдежь, которая Павлу не нравится. Пу- кальной сети и… Ко мне пришел сис- тронный ящик… Кажется, последнюю гает. А может быть, руководитель кон- темный администратор и сказал, что фразу я произношу вслух. Павел улыкурентоспособной компании просто я сейчас рассылаю спам из своего но- бается и говорит, что пора рассказать чувствует ответственность за судьбу утбука во всю мощь оптоволокна. На- про дирижабли: своего мира. Ведь бездельники могут чали ловить этот вирус, поставили са– Однажды в институте я сдавал его легко разрушить. мые свежие антивирусные троянские экзамен по компьютерным технологипрограммы. Ничего не нашли. А когда ям. Предмет был сложный, множество через некоторое время зараженный формул.... Первый вопрос был класМиф второй: файл отправили Касперским, они от- сический, а второй – про перспекти«Они прагматики…» Конечно, прагматики. На заре «туман- ветили: «Ой, это новый вирус…». Ме- вы развития технологий. И я сказал, ной юности» Фролов целенаправлен- ня такое состояние безопасности мое- что сейчас надо развивать связь, чтоно создавал бизнес, на котором можно го компьютера абсолютно не устроило, бы в каждый дом в тайге мог придзаработать деньги. Он был уверен: не- с тех пор я в Windows не работаю». ти Интернет. А как это сделать? НужДействительно все выглядит впол- ны спутники. Однако вывезти 1 кг пообходимые знания у него есть, все получится отлично. Ведь кто как не он, не прагматично: человек занимается лезного груза на орбиту стоит порядобозреватель компьютерных разделов бизнесом, который знает доскональ- ка 5 тысяч долларов. Спутники тяжеи интернет-колонок многих СМИ, знает, но, да еще постоянно примеряет на се- лые, весят несколько тонн. Более дечто нужно потребителям на рынке ин- бя продукцию, выставленную в Интер- шевое решение – дирижабль. Если над формационных технологий и что надо нет-магазине. Это напоминает ситуа- каждым городом повесить дирижабль предложить клиентам, чтобы они по- цию: приходите вы в частную стома- и на него поставить ретранслятор, Инняли: именно это им нужно. Увы, пер- тологию, а там доктор сверкает креп- тернет будет во всем городе. Пара дивый год новоявленная компания потер- кими здоровыми зубами. Такому вра- рижаблей накроет всю Москву, на мапела фиаско. Было от чего уйти в де- чу хочется доверять. ленький город хватит одного. ДириРеалист Фролов смотрит в буду- жабль можно спустить, отремонтиропрессию и забыть навсегда о первоначальной идее. Но прагматизм сра- щее: чтобы о Linux узнало как мож- вать, поднять назад. Между прочим, ботал как спасательный круг. Павел но больше потенциальных покупате- Билл Гейтс в свое время уже инвестиФролов со товарищи нашли деньги, за- лей, начал выпускать по лицензии бу- ровал пару сотен миллионов долларов платили самые срочные долги и… на- мажный журнал Linux Format – очень в компании, которые делают такие дичали все сначала. В этот раз в качест- солидный, яркий, профессиональ- рижабли. На этом экзамен кончился, ве точки отсчета была взята операциВ тот же период вел интернет-колононная система Linux. Линуксцентр ро- Краткая биография дился в 2000 году и сейчас процвета- Фролов Павел, руководитель проекта ку в журнале «Предприниматель Петерет как один из главных проектов груп- www.linuxcenter.ru. Родился 5 марта 1980 бурга» и разделы новостей в журналах года в Ленинграде, закончил Санкт-Пе- «BYTE-Россия», «Мир Интернет», «Жёлтые пы компаний «Мезон.Ру». Преимущества Linux известны. тербургский Государственный Технический страницы Интернет», непродолжительное Главный рекламный ход Линуксцен- Университет. Факультет технической ки- время был редактором новостной ленты тра – они продают то, чем пользуют- бернетики (защита информации), факуль- MSNBC News и внештатным редактором ся сами. Правда, этот «хитрый» ход тет экономики и менеджмента (информа- журнала «Мир Интернет». С 2000 года возглавляет группу комне был заранее подготовлен. Просто ционые системы в экономике), аспирантуПавла Фролова и его системных адми- ра – Международная высшая школа управ- паний «Мезон.Ру», которая занимается нистраторов действительно устраива- ления, тема диссертации – «Конкурентос- электронной коммерцией и активно участвует в развитии рынка лицензионного ПО ет модель безопасности операционной пособность виртуальных компаний». В 1997-1998 годах работал обозрева- в России (www.mezon.ru). Один из главсистемы Linux. А постоянные проблетелем компьютерных разделов в газетах ных проектов компании – Линуксцентр – мы с Windows надоели. – Создать вирусы под Linux слож- «Утро Петербурга», «Сорока» (Издатель- www.linuxcenter.ru. Другие проекты: журно, и вряд ли они когда-либо приведут ство «Из рук в руки»). С 1998 по 2004 год нал LinuxFormat, выставка LinuxLand, инк таким печальным результатам, к ко- менеджер по интернет-маркетингу «Изда- тернет-радио SunRadio.Ru и интернет-проторым приводят вирусы под Windows. тельства Атлант», редактор сетевого обоз- екты Mediacenter.ru, Videocenter.ru, Zwuk.ru, С каждым следующим годом пробле- рения «Бинокль», главный редактор сайта Kitecenter.Ru. ма все актуальнее. Скоро будет невоз- www.atlant.ru.
№4, апрель 2006
45
человек номера мне поставили «пятерку». А мой при- с пачками в руках. А сейчас ты выхоятель исписал формулами несколько дишь в Интернет и читаешь все новодвойных листов, но ему в итоге поста- сти, которые есть на бумажных носитевили «тройку». Он, между прочим, луч- лях. Кто-то из-за этого разорился, моше меня знал предмет… Что касается жет быть даже чьи-то судьбы поломадирижаблей, то такие проекты есть, лись. Следующее поколение уже надаже деньги вложены. Вашей сель- учится жить в новом мире. Павел всегда помнит о том времеской учительнице Интернет обойдется гораздо дешевле, если прилетит «вол- ни, когда «пошел не туда», обанкрошебник в голубом вертолете. тился, и червячок сомнения точит и тоВот вам и прагматика. Да ему фэн- чит изредка: «А вдруг опять?..» – Мы постоянно адаптируемся к метэзи писать – стал бы вторым Лукьяненко. Хотя… ведь и мечты эти не на няющимся условиям. Поэтому я не могу пустом месте выросли. Что вы скажи- сказать, чем наша компания будет зате, когда моя приятельница из провин- ниматься через год. И даже не могу утции в один прекрасный день увидит верждать, что через год мы будем занинад своим домом дирижабль? маться Linux. То, что это будет програмПочему-то мне кажется, что судьба мное обеспечение, точно. Несомненно, благоволит Павлу Фролову в том чис- будем поддерживать продукты с открыле и за такие «наполеоновские» пла- тым кодом, просто потому, что это дает ны на пользу общества. Словно ставит необходимую свободу. Сегодня флагвсе время «отлично» за знание свое- ман такого ПО – Linux, но это не единсго предмета. твенный продукт. Если будет другой флагман, будем двигать другой. Итак, новое поколение российских Миф третий: предпринимателей вызревает, и са«Только о деньгах и думают…» мый бурный цвет на «полях» электКажется, уже не надо никому в на- ронной коммерции. Наверное, это даше время доказывать, что о деньгах же закономерно. Важно, что такие людумать совсем неплохо. Все зависит ди уже есть, и они дают надежду на пеот способа зарабатывать на жизнь. ремены в других сферах. Если… иные Это неправда, что молодые люди, ус- страны не призовут эти руки и мозпешно сделавшие карьеру, ориентиру- ги под свои флаги. Я поинтересоваются на образец, данные в блокбасте- лась у Павла: – Почему с такой специальностью ре «Бригада». Они зарабатывают деньги в поте лица, и историю их успеш- вы работаете в России? – Я работаю не только в России. ного бизнеса можно, не боясь, рассказывать сынишкам на ночь. Как сказ- Мы недавно открыли офис в Нью-Йорку со счастливым концом. Или как на- ке, например. – А почему вы не живете где-нибудь зидательную притчу, актуальную для в Нью-Йорке? подрастающего поколения. – Мне нравится жить в России. Бо– Мне кажется, самое главное – получать деньги за то, что ты создал до- лее того, я смотрю в будущее и вижу, бавленную стоимость. Можно сесть что в скором времени Россия будет сав узком месте и билеты продавать. На- мым комфортным местом для жизни. пример, на рынок. И никого туда не пус- В других местах или демонстрации, пекать больше. А можно написать книгу, реходящие в массовые поджоги и пеи если читателям понравится, что ты реворачивание автомобилей, или торнаписал, они сразу же тебя сделают надо с наводнениями. И кроме того, миллионером. Такие люди сейчас есть. есть предсказания Нострадамуса. И есть другие товарищи, которые со– А вы верите? – Мне нравится то, что он предсказдают «узкие» места на пути книги к читателю. Интернет и новые техно- зывал. Хочется верить. У Нострадалогии позволяют эти барьеры убрать. муса к 2030 году Россия станет саЕсть возможность работать напрямую мой сильной страной в мире и тут бус клиентом. Но надо научиться это де- дет очень хорошо жить. Но вообщелать. Пока не все умеют. Хорошо бы- то основная наша жизнь в Интернело, когда монополист продавал газе- те проистекает. Тут уже непонятно, ты в киосках. Или бегали мальчики где ты живешь и работаешь. Где есть
46
компьютер с Интернетом, там я могу жить. В Интернете потрясающее чувство свободы. Типичный ответ полуреалиста, полуромантика… Однако главное слово здесь – «свобода». Деньги, комфорт важны, но они «побочные продукты», не цель. Это поколение свободных людей. Во всех смыслах этого слова. Они гордятся свободой мысли и совести, свободой заниматься тем чем хочется, передвигаться по всему миру и возвращаться домой. Небольшой нюанс: Павел ленинградец, питерец, а жители Северной столицы редко покидают родной город надолго. Они домоседы. Вместе с тем, чувство свободы в них крепче «засело», чем в москвичах. Можете со мной не соглашаться, но суета и перенаселенность первопрестольной, по-моему, освобождению ума и сердца не способствуют. Да и правительственных учреждений в Москве многовато…
Миф четвертый: «Они живут по принципу: «После нас – хоть потоп…» Я уже говорила, что Павел умеет мечтать. Именно не любит, а умеет, делает это с полным знанием дела. Он профессионал, владеющий полной информацией об IT-сфере, и потому его мечты смахивают на предсказания. Ключевые понятия в этих предсказаниях на ближайшее будущее – Интернет и Linux: – Скорее всего, Linux останется. Вряд ли его перегонит кто-то из других открытых проектов. Но все может случится. Вдруг Linux разгонится и ухнет в пропасть? Это произойдет если он не успеет быстро адаптироваться к изменяющимся условиям. Пока это очень стабильное напрвление, тесно связанная с Интернетом. Изначально Linux не был ориентирован на простых пользователей на рабочих станциях. Его сделали для работы на серверах, потом передумали. Многие матерые линуксоиды восприняли в штыки и говорили: «Зачем? Что вы делаете?». На будущее Павел смотрит масштабно, поднимаясь под облака: – Мне кажется, что все придет к небольшим устройствам, которые можно носить с собой. Типа часов или мобильных телефонов. Небольшого размера мобильный телефон, в котором есть
человек номера
Павел Фролов с Франсуа Бансийоном, генеральным директором компании Mandriva
операционная система. И уже понят- лонками. Вы придете в офис, где стоно, что это Linux, потому что есть такие ят монитор, клавиатура, колонки, есть телефоны уже, компания Nokia сдела- «мышка», сядете на стул и у вас автола. В этом телефоне есть компьютер, матически это все заработает. Придев компьютере есть все, что нужно про- те домой, и у вас точно также зарабостому человеку: Интернет, офисный тает ваш телевизор. Вы сможете чепакет, электронная почта. Плюс воз- рез ваше маленькое устройство выйможность обмениваться мгновенными ти в Интернет, а телевизор использосообщениями, что-то вроде ICQ, воз- вать в качестве монитора». – Похоже на сказку. можность совершать звонки по IP-те– Это будет через год. Мир меняетлефонии. Этот продукт уже продается в магазинах. Но не в России. И сто- ся сейчас. Мы это видим. Вот так глобальные процессы преит на Западе такой компьютер не дороже 400 долларов. вращаются в проекты конкретных устУ этих маленьких устройств будет ройств, удобных людям. Это не случайтолько проблема ввода и вывода ин- но. Ведь хороший предприниматель, формации. Экран маленький, мно- который стремится продать своим пого текста не разместишь. Мне кажет- купателям именно то, что они требуют, ся, по каким-то беспроводным кана- а не то, что залежалось на складе, залам эти устройства будут соединять- ботиться об усовершенствовании тося с полноценной клавиатурой и ко- вара. «Мезон.Ру» запустил в свое вре-
№4, апрель 2006
мя интернет-радио SunRadio.ru, где играет любимая многими солнечная музыка. Кстати, популярность Солнечного радио привела к неизбежному появлению «клонов», и не только в Питере, но и в Москве. А дальше придет черед интернет-телевидения, также ориентированного на запросы зрителей. Представьте себе: фоновый звук и приятное изображение – солнечные клипы, виндсерфинг, девушки, увлеченные пляжным волейболом. Красота… А что еще? Планов громадье. Идеи созревают и выходят на свободу. И вы тоже мечтайте. Вслух. Кто знает, может быть рядом окажется молодой предприниматель, «обросший» мифами, и превратит вашу мечту в осязаемую реальность.
Оксана Родионова
47
безопасность
Используем средства библиотеки OpenSSL для криптографической защиты данных
Владимир Мешков Самым надежным способом скрыть информацию от посторонних глаз является ее шифрование. В настоящее время существует большое количество стойких криптографических алгоритмов, позволяющих надежно защитить конфиденциальные данные и множество их программных реализаций, доступных для свободного использования.
С
егодня мы поговорим о библиотеке OpenSSL. Эта сво- раметрах указатель на буфер для хранения сгенерированбодно распространяемая библиотека предоставляет ной последовательности и размер этого буфера. Следуюв распоряжение пользователя набор утилит, реали- щий код демонстрирует это: зующих различные криптографические алгоритмы, такие Листинг 1. Генерация ПСП как Triple-DES, Blowfish, AES, RSA и другие. Порядок использования утилит был подробно опи#include <openssl/rand.h> сан Всеволодом Стаховым в статье «Теория и практика void main() OpenSSL» [1]. { int outf; Кроме готовых к применению утилит, библиотека соunsigned char buf[1024]; держит набор функций, с помощью которых пользователь if(RAND_bytes(buf, sizeof(buf))) { /* 1 succes, ↵ может разрабатывать собственные программы для крип0 otherwise */ тографической защиты данных или создавать расширеoutf = open("./rnd_bytes", O_CREAT|O_TRUNC|O_RDWR, ↵ 0600); ния, не входящие в стандартный набор. Большинство этих write(outf, buf, sizeof(buf)); функций достаточно хорошо документированы, и наличие } else printf("-ERR: RAND_bytes\n"); } примеров программ значительно облегчает задачу изучения порядка их использования. Сохраним этот код в файле rand_test.c и получим исполНе углубляясь в детали реализации алгоритмов, рассмотрим несколько практических примеров использова- няемый файл формата ELF при помощи команды: ния библиотеки OpenSSL для генерации псевдослучайgcc –o rand_test rand_test.c -lssl ных чисел, вычисления хэшей и шифрования данных с использованием симметричных и асимметричных алгоритмов. Основное внимание акцентируем на вопросах, котоПосле запуска на выполнение файла rand_test в терые, на мой взгляд, недостаточно полно освещены в офи- кущем каталоге будет создан файл rnd_bytes размером циальной документации и требуют более детальной про- 1024 байта, содержащий сгенерированную ПСП. работки. Далее по тексту библиотека OpenSSL будет имено- Вычисление хэшей ваться просто библиотека, кроме специально оговорен- Хэш – это механизм контроля целостности данных, обланых случаев. дающих специальными свойствами: зная сообщение, легко вычислить хэш. Обратная задача нахождения сообщения по известному хэшу являетГенерация псевдослучайной последовательности ся вычислительно-трудоемкой; Сгенерировать псевдослучайную последовательность для заданного сообщения хэш является уникальным, (ПСП) при помощи библиотеки очень просто. Для этого дот.е. не должно существовать двух разных сообщений с одинаковыми хэшами. статочно вызвать функцию RAND_bytes, передав ей в па-
48
безопасность Листинг 2 демонстрирует порядок использования переИз всех существующих алгоритмов хэширования наибольшее распространение получил алгоритм MD5. Аббре- численных выше функций для вычисления хэша файла: виатура «MD» означает Message Digest (краткое изложение Листинг 2. Вычисление MD5-хэша для файла большого размера сообщения, или дайджест). В соответствии с этим алгоритмом, входной текст обрабатывается 512-битовыми блоками, #include <openssl/md5.h> разбитыми на шестнадцать 32-битовых подблоков. Выхо#define BUFSIZE (1025*16) дом алгоритма является набор из четырех 32-битовых блоvoid main(int argc, char **argv) ков, которые объединяются в единое 128-битное значение. { Рассмотрим, как вычисляется хэш сообщения по алгоритMD5_CTX c; /* контекст хэша */ unsigned char buf[BUFSIZE]; му MD5 с использованием средств библиотеки. unsigned char md_buf[MD5_DIGEST_LENGTH]; Для вычисления хэша библиотека предоставляет в на/* В командной строке передается имя файла, ше распоряжение функцию MD5: unsigned char * MD5(const unsigned char *d, ↵ unsigned long n, unsigned char *md)
Эта функция принимает три параметра – указатель на буфер с исходными данными d, размер этого буфера n и указатель на буфер для хранения вычисленного хэша md. Это очень простая в использовании функция, но у нее есть недостаток – она пригодна для вычисления хэша данных, которые можно полностью разместить в оперативной памяти. Для файлов большого размера вычисление хэша производится поэтапно. Для этого библиотека предоставляет следующий набор функций (см. openssl/md5.h): void MD5_Init(MD5_CTX * ctx); void MD5_Update(MD5_CTX * ctx, const void * data, ↵ unsigned long len); void MD5_Final(unsigned char * md, MD5_CTX * ctx);
для которого вычисляется хэш */ int inf = open(argv[1], O_RDWR);
/* Инициализируем контекст */ MD5_Init(&c); /* Вычисляем хэш */ for(;;) { int i = read(inf, buf, BUFSIZE); if(i <= 0) break; MD5_Update(&c, buf, (unsigned long)i); } /* Помещаем вычисленный хэш в буфер md_buf */ MD5_Final(md_buf, &c); /* Отображаем результат */ for(i = 0; i < MD5_DIGEST_LENGTH; i++) ↵ printf("%02x", md_buf[i]); }
Проверить правильность вычисления хэша можно при помощи утилиты md5sum. В рассмотренном листинге мы обращаемся к функциФункция MD5_Init() инициализирует контекст дайджес- ям библиотеки напрямую. В документации рекомендуется использовать высокоуровневые функции с префиксом EVP та – структуру, определенную в файле openssl/md5.h: вместо прямого вызова функций алгоритма хэширования. typedef struct MD5state_st { Разберемся подробнее, что это за EVP-функции. MD5_LONG A,B,C,D; Библиотека поддерживает внутреннюю таблицу, в которой MD5_LONG Nl,Nh; MD5_LONG data[MD5_LBLOCK]; /* MD5_LBLOCK = 16 */ каждый элемент представляет собой структуру, содержащую int num; адреса функций алгоритмов шифрования и хэширования, } MD5_CTX; реализованных в библиотеке. Для работы с высокоуровнеИнициализация контекста подразумевает его заполне- выми функциями необходимо извлечь структуру требуемого ние определенными значениями (см. файл md5_dgst.c ис- алгоритма из этой таблицы, получив, таким образом, адреса его функций. Но прежде эту таблицу необходимо заполнить. ходных текстов библиотеки): Адреса функций алгоритмов хэширования записываются #define INIT_DATA_A (unsigned long)0x67452301L в таблицу при помощи функции OpenSSL_add_all_digests(), #define INIT_DATA_B (unsigned long)0xefcdab89L адреса функций алгоритмов шифрования – при помощи #define INIT_DATA_C (unsigned long)0x98badcfeL #define INIT_DATA_D (unsigned long)0x10325476L функции OpenSSL_add_all_ciphers(). Извлечь структуру требуемого алгоритма хэшироint MD5_Init(MD5_CTX *c) { вания из таблицы можно при помощи функции EVP_get_ c->A=INIT_DATA_A; digestbyname(const char * name), где name является символьc->B=INIT_DATA_B; c->C=INIT_DATA_C; ным обозначением алгоритма. Для алгоритма MD5 это будет c->D=INIT_DATA_D; «md5». Список всех имен приведен в файле openssl/object.h. c->Nl=0; c->Nh=0; Результат работы функции EVP_get_digestbyname() сохраc->num=0; няется в структуре типа EVP_MD: return 1; }
Функция MD5_Update() вычисляет хэш. Входными параметрами этой функции являются указатель на контекст хэша ctx, указатель на блок входных данных data и размер этого блока len. Функция MD5_Final() помещает вычисленный хэш из контекста ctx в выходной буфер md, размер которого должен быть равен 16 байт.
№4, апрель 2006
struct env_md_st { int type; int pkey_type; int md_size; unsigned long flags; int (*init)(EVP_MD_CTX *ctx); int (*update)(EVP_MD_CTX *ctx,const void *data, ↵ unsigned long count); int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
49
безопасность int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from); int (*cleanup)(EVP_MD_CTX *ctx);
Листинг 3. Вычисление MD5-хэша файла с использованием высокоуровневых функций библиотеки
/* FIXME: prototype these some day */ int (*sign)(); int (*verify)(); int required_pkey_type[5]; /*EVP_PKEY_xxx */ int block_size; int ctx_size; /* how big does the ctx->md_data need to be */ } /* EVP_MD */;
#include <openssl/md5.h> #include <openssl/evp.h>
Эта структура определена в файле openssl/evp.h. В ее состав входят указатели на функции алгоритма хэширования. При вызове функции EVP_get_digestbyname() в эти указатели будут записаны реальные адреса функций библиотеки для работы с выбранным типом алгоритма хэширования, и в дальнейшем все вызовы функций будут выполняться косвенно через эти указатели. Получив адреса библиотечных функций, необходимо заполнить контекст для вычисления хэша – структуру типа EVP_MD_CTX (см. openssl/evp.h): struct env_md_ctx_st { const EVP_MD *digest; ENGINE *engine; unsigned long flags; void *md_data; } /* EVP_MD_CTX */;
Заполнение контекста выполняется при помощи функции EVP_DigestInit(). В параметрах этой функции передаются указатели на контекст для вычисления хэша и на структуру, содержащую адреса функций алгоритма хэширования: EVP_DigestInit(EVP_MD_CTX * ctx, EVP_MD * md)
Функция копирует структуру «EVP_MD * md» в контекст дайджеста путем приравнивания соответствующих указателей (см. файл crypto/evp/digest.c исходных текстов библиотеки): ctx->digest = md;
Заполнив контекст, мы получаем возможность вызывать библиотечные функции для вычисления хэша, используя адреса, которые сохранены в структуре digest-контекста. Вычисление хэша выполняет функция EVP_DigestUpdate(), функция EVP_DigestFinal() копирует вычисленный хэш из контекста дайджеста в выходной буфер: int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, ↵ unsigned int cnt); int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, ↵ unsigned int *s);
Параметры функции EVP_DigestUpdate – указатель на контекст для вычисления хэша ctx, буфер d для хранения промежуточного результата вычисления и размер этого буфера cnt. Функция EVP_DigestFinal сохраняет размер вычисленного хэша в последнем параметре *s. По завершении работы контекст для вычисления хэша очищается при помощи функции EVP_MD_CTX_cleanup(). Листинг 3 демонстрирует порядок использования высокоуровневых функций библиотеки для вычисления хэша файла по алгоритму MD5.
50
#define BUFSIZE (1025*16) void main(int argc, char **argv) { EVP_MD_CTX mdctx; /* контекст для вычисления хэша */ const EVP_MD * md; /* структура с адресами функций алгоритма */ unsigned char md_value[EVP_MAX_MD_SIZE]; int md_len; /* размер вычисленного хэша */ /* В командной строке передаем имя файла, для которого вычисляется хэш */ int inf = open(argv[1], O_RDWR); /* Добавляем алгоритмы хэширования во внутреннюю таблицу библиотеки */ OpenSSL_add_all_digests(); /* Получаем адреса функций алгоритма MD5 и инициализируем контекст для вычисления хэша */ md = EVP_get_digestbyname("md5"); EVP_DigestInit(&mdctx, md); /* Вычисляем хэш */ for(;;) { i = read(inf, buf, BUFSIZE); if(i <= 0) break; EVP_DigestUpdate(&mdctx, buf, (unsigned long)i); } /* Копируем вычисленный хэш в выходной буфер. Размер хэша сохраняем в переменной md_len */ EVP_DigestFinal(&mdctx, md_value, &md_len); /* Очищаем контекст */ EVP_MD_CTX_cleanup(&mdctx); /* Отобразим результат */ for(i = 0; i < md_len; i++) printf("%02x", ↵ md_value[i]); }
Универсальность метода использования функций высокого уровня очевидна – для расчета хэша по новому алгоритму достаточно изменить только его название в функции EVP_get_digestbyname. Поэтому именно этот метод рекомендуется к использованию разработчиками библиотеки.
Симметричные алгоритмы шифрования Целью шифрования информации является предотвращение угрозы нарушения ее конфиденциальности, т.е. несанкционированное ознакомление с ней. Алгоритмы шифрования можно разделить на две основные категории: симметричное шифрование; ассиметричное шифрование. В алгоритмах симметричного шифрования используется один и тот же ключ для шифрования и расшифровки сообщения. Это означает, что любой, кто имеет доступ к ключу шифрования, может расшифровать сообщение. Алгоритмы симметричного шифрования именно поэтому и называют алгоритмами с секретным ключом – ключ шифрования должен быть доступен только тем, кому предназначено сообщение. Симметричное шифрование идеально подходит для шифрования информации «для себя», например, с целью отсечь несанкционированный доступ к ней в отсутствии владельца. Библиотека поддерживает большое количество симметричных алгоритмов. Некоторые из них мы сейчас рассмотрим, и начнем с самого знаменитого – с DES.
безопасность Алгоритм DES Алгоритм DES (Data Encryption Standart, стандарт шифрования данных) был разработан в 1973 году компанией IBM и долгое время являлся основным стандартом шифрования в мире. Этот алгоритм использует 56-битный ключ и шифрует данные блоками по 64 бита. Имеет несколько режимов работы, которые применимы и для других блочных шифров симметричной схемы: Режим электронной шифровальной книги Electronic Codebook Mode (ECB). Простейший режим. Открытый текст обрабатывается блоками по 64 бита (8 байт) и каждый блок шифруется с одним и тем же ключом (см. рис. 1). Самой важной особенностью режима ECB является то, что одинаковые блоки открытого текста в шифрованном тексте будут также представляться одинаковыми блоками. Поэтому при передаче достаточно длинных сообщений режим ECB не может обеспечить необходимый уровень защиты. Если сообщение имеет явно выраженную структуру, у криптоаналитика появляется возможность использовать регулярности текста. Например, если известно, что в начале сообщения всегда размещается определенный заголовок, криптоаналитик может получить в свое распоряжение целый набор соответствующих пар блоков открытого и шифрованного текста. Режим сцепления шифрованных блоков Cipher Block Chaining Mode (CBC). Эта технология свободна от недостатков режима ECB. В режиме CBC входной блок данных для алгоритма шифрования вычисляется как результат операции XOR текущего блока открытого текста и блока шифрованного текста, полученного на предыдущем шаге (см. рис. 2). Режим шифрованной обратной связи Cipher Feedback Mode (CFB). Полученный на предыдущем шаге шифрованный текст используется как входные данные для алгоритма шифрования с целью получения псевдослучайной последовательности (ПСП), XOR-разница которой и блока открытого текста определяет очередной блок шифрованного текста (см. рис. 3)
№4, апрель 2006
Режим обратной связи по выходу Output Feedback Mode (OFB). Работает подобно CFB, но в качестве входных данных для алгоритма шифрования используются ранее полученные выходные данные DES (см. рис. 4). Если проводить аналогии с алгоритмом ГОСТ 28147-89, то режим ECB соответствует режиму простой замены, OFB – режиму гаммирования, CFB – режиму гаммирования с обратной связью. Малая длина ключа и постоянно растущая мощность современных вычислительных комплексов сделали алгоритм DES потенциально уязвимым перед атакой, основанной на полном переборе ключей. Это обстоятельство наложило существенные ограничения на использование DES в чистом виде и потребовало поиска альтернативы данному шифру. Один из вариантов решения проблемы предполагал создание совершенно нового алгоритма, другой подход сделал ставку на многократное шифрование с помощью DES с применением нескольких ключей. Широкое распространение получил «тройной» DES (Triple-DES), представляющий собой последовательность операций шифрования-дешифрования-шифрования (EDE – encryptdecrypt-encrypt) с использованием трех разных ключей. Схема «тройного» DES представлена на рис. 5. «Тройной» DES может также использовать два ключа. В этом случае операции шифрования выполняются на одном ключе, а операция дешифрования – на другом. Использование функций библиотеки, реализующих алгоритм DES, предполагает два этапа: генерация ключей и собственно шифрование информации. Генерацию DES-ключа выполняет функция DES_random_key(DES_ cblock *ret). Входным параметром функции является указатель на блок данных типа DES_cblock, в котором будет сохранен ключ. Тип DES_cblock определен в файле openssl/des.h, и представляет собой 8-байтовую последовательность с контролем четности. Младший значащий бит каждого байта является битом четности:
Рисунок 1. Режим электронной шифровальной книги ECB
Рисунок 2. Режим сцепления шифрованных блоков CBC
Рисунок 3. Режим 64-битовой шифрованной обратной связи CFB
Рисунок 4. Режим 64-битовой обратной связи по выходу OFB
Рисунок 5. Схема «тройного» DES
51
безопасность typedef unsigned char DES_cblock[8];
вертого блока используются только 2 байта. Так вот значение num показывает, сколько байт последнего 8-байтоПосле генерации ключ необходимо сконвертиро- вого блока мы используем, или, как сказано в документавать в платформенно-зависимый формат при помощи ции, «how much of the 64bit block we have used is contained функции DES_set_key_checked(const_DES_cblock *key, in *num» (см. комментарии к функции DES_ede3_ofb64_ DES_key_schedule *schedule). Функция принимает два па- encrypt, файл crypto/des/ofb64ede.c исходных текстов бибраметра – указатель на сгенерированный ключ и указа- лиотеки). тель на структуру типа DES_key_schedule. Этот струкЛистинг 5. Фрагмент программы для криптопреобразования турный тип определен в файле openssl/des.h. Функция файла по алгоритму Triple-DES с использованием трех ключей DES_set_key_checked выполняет контроль четности всех и 64-битной обратной связи по выходу байт ключа и проверяет, можно ли использовать его для /* Буферы для входных и выходных (зашифрованных) данных */ шифрования, т.е. является ключ криптографически сильunsigned char inbuf[1024], outbuf[1024]; ным или нет. Если четность байт не соблюдается, функция /* Структура для хранения ключевых данных */ возвращает -1. Если сгенерированный ключ оказался крипDES_key_schedule ks1, ks2, ks3; тографически слабым (weak), функция возвращает -2. Ес/* Считываем три ранее созданных ключа ли ключ удовлетворяет всем требованиям, то он конверти(key – дескриптор ключевого файла) */ read(key,(unsigned char *)&ks1, DES_SCHEDULE_SZ); руется в платформенно-зависимый формат и помещается read(key,(unsigned char *)&ks2, DES_SCHEDULE_SZ); в структуру schedule. read(key,(unsigned char *)&ks3, DES_SCHEDULE_SZ); Исходя из вышеизложенного, код генератора ключевой /* Открываем входной и создаем выходной файлы */ последовательности для алгоритма Triple-DES будет выгля. . . . деть следующим образом: Листинг 4. Генератор ключей для алгоритма Triple-DES #include <openssl/des.h> int main() { int key, i = 0, j = 0; DES_cblock cb; DES_key_schedule ks; /* Создаем ключевой файл */ key = open(KEYS, O_CREAT|O_TRUNC|O_RDWR, 0600); /* Генерируем три ключа */ for(; i < 3; i++) { DES_random_key(&cb); if((j = DES_set_key_checked(&cb, &ks)) != 0) return j; if(write(key, (unsigned char *)&ks, ↵ DES_SCHEDULE_SZ) < 0) return -1; } }
Операцию криптопреобразования по алгоритму Triple-DES с тремя к лючами и 64-битной обратной связью по выходу (режим OFB) выполняет функция DES_ede3_ofb64_encrypt: void DES_ede3_ofb64_encrypt(const unsigned char *in, ↵ unsigned char *out, long length, ↵ DES_key_schedule *ks1, DES_key_schedule *ks2, ↵ DES_key_schedule *ks3, DES_cblock *ivec, int *num);
В параметрах функции передаются:
указатели на блоки незашифрованных и зашифрованных данных in и out;
размер данных для шифрования length; ключи шифрования ks1, ks2, ks3; указатель на вектор инициализации ivec (начальное заполнение блока ivec, см. рис. 2-4); Разъясним назначение последнего параметра int *num. Шифрование выполняется блоками по 64 бита, но длина входного сообщения (файла) не обязательно должна быть кратна этому значению. Например, файл размером 26 байт состоит из трех целых 8-байтовых блоков, а из чет-
52
/* Шифруем файл */ for(;;) { inlen = fread(inbuf, 1, 1024, in); if(inlen <= 0) break; DES_ede3_ofb64_encrypt(inbuf, outbuf, (long)inlen, ↵ &ks1, &ks2, &ks3, (DES_cblock *)ivec, &num); }
fwrite(outbuf, 1, inlen, out);
С перечнем всех функций, реализующих различные режимы алгоритма DES, можно ознакомиться на страницах руководства man des, описание режимов приведено в man des_modes.
Алгоритм Blowfish Blowfish – симметричный блочный шифр, разработанный Брюсом Шнайером (Bruce Schneier). Этот шифр использует ключи разной длины, обычно 128 бит, и шифрует данные блоками по 64 бита. Алгоритм поддерживает такие же режимы, как и DES (см. раздел «Алгоритм DES»), и считается одним из самых быстрых в своем классе. Как и в случае алгоритма DES, использование Blowfish включает две стадии: генерацию ключевых данных и собственно криптопреобразование информации. Генерация ключевых данных предполагает получение N-битной случайной последовательности и последующее ее преобразование при помощи функции BF_set_key(), прототип которой определен в файле openssl/blowfish.h: void BF_set_key(BF_KEY *key, int len, ↵ const unsigned char *data);
Задача этой функции – поместить ключ длиной len из буфера data в структуру key. Криптопреобразование данных в режиме CFB c 64-битной обратной связью выполняет функция BF_cfb64_encrypt: void BF_cfb64_encrypt(const unsigned char *in, ↵ unsigned char *out, long length, ↵ const BF_KEY *schedule, unsigned char *ivec, ↵ int *num, int enc);
безопасность fwrite(outbuf, 1, inlen, out); Думаю, что после того как мы рассмотрели DES, ни} кому не составит труда разобраться в назначении пара} метров этой функции. Остановимся только на последнем параметре – int enc. Он задает режим работы алгоритма и может принимать два значения: BF_ENCRYPT для ре- Использование высокоуровневых функций жима шифрования и BF_DECRYPT для режима дешиф- библиотеки для шифрования рования. Оба эти значение определены в файле openssl/ Как и в случае алгоритмов хэширования (см. раздел «Выblowfish.h: числение хэшей»), разработчики библиотеки рекомендуют использовать функции высокого уровня вместо прямо#define BF_ENCRYPT 1 го обращения к функциям алгоритма шифрования. Поря#define BF_DECRYPT 0 док использования высокоуровневых функций шифроваА теперь оформим все теоретические выкладки в виде ния и хэширования идентичен – в обоих случаях необходифункции криптографического преобразования информа- мо создать и инициализировать контекст, записав в него ции по алгоритму Blowfish, работающему в режиме 64-бит- адреса функций необходимых алгоритмов. Адреса выбиной обратной связи (CFB-64). раются из внутренней таблицы, куда они попадают при помощи функции OpenSSL_add_all_ciphers(). Листинг 6. Функция криптографического преобразования Контекст алгоритма шифрования представляет собой информации по алгоритму Blowfish, режим 64-битной обратной структуру типа EVP_CIPHER_CTX, определенную в файсвязи (CFB-64) ле openssl/evp.h. Первым элементом этой структуры яв#include <openssl/blowfish.h> ляется указатель на структурный тип EVP_CIPHER следу#define BUFSIZE 1024 ющего вида: /* Функция криптопреобразования информации. Параметры функции: дескрипторы входного и выходного файлов и режим работы – BF_ENCRYPT для шифрования и BF_DECRYPT для дешифрования */ int do_crypt(FILE *in, FILE *out, int mode) { int num = 0; unsigned char inbuf[BUFSIZE], outbuf[BUFSIZE]; /* Ключ шифрования длиной 128 бит и вектор инициализации */ const unsigned char key[16]; unsigned char iv[8]; BF_KEY bfkey; /* Помещаем ключ в структуру bfkey */ BF_set_key(&bfkey, sizeof(key), key); /* Шифруем блоки входного файла */ for(;;) { int inlen = fread(inbuf, 1, BUFSIZE, in); if(inlen <= 0) break; BF_cfb64_encrypt(inbuf, outbuf, (long)inlen, ↵ &bfkey, iv, &num, mode);
}
fwrite(outbuf, 1, inlen, out); } return 1;
Следующий фрагмент функции иллюстрирует порядок криптопреобразования по алгоритму Blowfish, режим 64-битной обратной связи по выходу (OFB-64). Листинг 7. фрагмент функции криптографического преобразования информации по алгоритму Blowfish, режим 64-битной обратной связи по выходу (OFB-64) void do_crypt(FILE *in, FILE *out) { unsigned char inbuf[BUFSIZE]; unsigned char outbuf[BUFSIZE]; /* Ключ и вектор инициализации */ . . . BF_set_key(&bfkey, KEY_SIZE, key); for(;;) { int inlen = fread(inbuf, 1, BUFSIZE, in); if(inlen <= 0) break; BF_ofb64_encrypt(inbuf, outbuf, (long)inlen, ↵ &bfkey, iv, &num);
№4, апрель 2006
struct evp_cipher_st { int nid; int block_size; int key_len; /* Default value for variable length ciphers */ int iv_len; unsigned long flags; /* Various flags */ int (*init)(EVP_CIPHER_CTX *ctx, ↵ const unsigned char *key, const unsigned char *iv, ↵ int enc); /* init key */ int (*do_cipher)(EVP_CIPHER_CTX *ctx, ↵ unsigned char *out, const unsigned char *in, ↵ unsigned int inl);/* encrypt/decrypt data */ int (*cleanup)(EVP_CIPHER_CTX *); /* cleanup ctx */ int ctx_size; /* how big ctx->cipher_data needs to be */ int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); void *app_data; /* Application data */ } /* EVP_CIPHER */;
Этот структурный тип содержит в своем составе указатели на функции, которые заполняются необходимыми нам значениями – адресами функций соответствующих алгоритмов. Получить адреса этих функций можно двумя способами. Первый способ подразумевает поиск по символьному имени алгоритма: OpenSSL_add_all_ciphers(); const EVP_CIPHER * cipher = EVP_get_cipherbyname("des_cbc");
Функция EVP_get_cipherbyname(const char * name) извлекает адреса функций алгоритма шифрования из внутренней таблицы библиотеки и заполняет структуру cipher. Входные параметры функции – символьное имя алгоритма, в данном случае это DES, режим CBC. Перечень всех имен содержится в файле openssl/object.h. Второй способ – прямое обращение к нужной EVPфункции: const EVP_CIPHER *cipher = EVP_des_cbc();
Получив адреса функций, инициализируем контекст алгоритма:
53
безопасность EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx); EVP_EncryptInit(EVP_CIPHER_CTX *ctx, ↵ const EVP_CIPHER *cipher, const unsigned char *key, ↵ const unsigned char *iv);
Функция EVP_CIPHER_CTX_init обнуляет структуру, выделенную под контекст. Инициализацию контекста выполняет функция EVP_EncryptInit(). Параметры функции – указатель на контекст алгоритма ctx, структура с адресами библиотечных функций алгоритма cipher, блок с ключевыми данными key и вектор инициализации iv. После инициализации контекста можно прист упать к операции шифрования. Делает это функция EVP_EncryptUpdate():
Если мы захотим использовать другой алгоритм, нам достаточно будет заменить одну строку в исходном тексте. Например, для использования алгоритма Blowfish в режиме шифрованной обратной связи по выходу (OFB) необходимо заменить строку: cipher = EVP_aes_256_cfb();
строкой: cipher = EVP_bf_ofb();
а также задать правильную длину ключевых данных. Список всех EVP-функций находится в файле openssl/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, ↵ evp.h. unsigned char *out, int *outl, ↵ Обратный процесс дешифрования информации отличаconst unsigned char *in, int inl); ется только названиями функций: вместо «EVP_EnryptInit» Функция шифрует inl байтов из буфера in и записывает пишем «EVP_DecryptInit», вместо «EVP_EncryptUpdate» – зашифрованные данные в буфер out. В переменной outl со- «EVP_DecryptUpdate» и т. д. Фрагмент функции дешифровахраняется количество зашифрованных байтов. ния файла, зашифрованного по алгоритму AES с 256-битЕсли размер сообщения не кратен размеру блока шиф- ным ключом в режиме 64-битовой обратной связи, предрования, то выполняется вызов функции EVP_EncryptFinal, ставлен в листинге 9. которая «дошифровывает» оставшиеся данные: int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, ↵ unsigned char *out, int *outl);
Следующий код демонстрирует использование функций высокого уровня для шифрования файла по алгоритму AES с ключом длиной 256 бит, режим 64-битовой шифрованной обратной связи CFB.
Листинг 9. Дешифрование файла, зашифрованного по алгоритму AES, длина ключа 256 бит, режим 64-битовой шифрованной ОС int do_decrypt(char *infile) { /* Объявляем переменные */ . . . . /* Обнуляем контекст и выбираем алгоритм дешифрования */ EVP_CIPHER_CTX_init(&ctx); EVP_DecryptInit(&ctx, EVP_aes_256_cfb(), key, iv);
Листинг 8. Шифрование файла по алгоритму AES, длина ключа 256 бит, режим 64-битовой шифрованной обратной связи
/* Открываем входной и создаем выходной файлы */ . . . .
#include <openssl/evp.h>
/* Дешифруем данные */ for(;;) { inlen = fread(inbuf, 1, BUFSIZE, in); if(inlen <= 0) break;
#define BUFSIZE 1024 int do_crypt(char *infile) { int outlen, inlen; FILE *in, *out; unsigned char key[32]; /* 256-битный ключ */ unsigned char iv[8]; /* вектор инициализации */ unsigned char inbuf[BUFSIZE], outbuf[BUFSIZE]; EVP_CIPHER_CTX ctx; const EVP_CIPHER * cipher; /* Обнуляем структуру контекста */ EVP_CIPHER_CTX_init(&ctx); /* Выбираем алгоритм шифрования */ cipher = EVP_aes_256_cfb(); /* Инициализируем контекст алгоритма */ EVP_EncryptInit(&ctx, cipher, key, iv); /* Шифруем данные */ for(;;) { inlen = fread(inbuf, 1, BUFSIZE, in); if(inlen <= 0) break; if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, ↵ inbuf, inlen)) return 0; fwrite(outbuf, 1, outlen, out); }
}
54
if(!EVP_EncryptFinal(&ctx, outbuf, &outlen)) return 0; fwrite(outbuf, 1, outlen, out); EVP_CIPHER_CTX_cleanup(&ctx); return 1;
}
if(!EVP_DecryptUpdate(&ctx, outbuf, &outlen, ↵ inbuf, inlen)) return 0; fwrite(outbuf, 1, outlen, out);
/* Завершаем процесс дешифрования */ if(!EVP_DecryptFinal(&ctx, outbuf, &outlen)) return 0; }
. . . .
Работоспособность всех программ была проверена для ОС Linux Slackware 10.2, компилятор gcc-3.3.6, библиотека OpenSSL 0.9.7c. Исходные тексты всех программ, рассмотренных в данной статье, вы можете скачать с сайта http:// bob.netport.com.ua/ssl.tar.gz. Во второй части статьи мы рассмотрим примеры использования функций библиотеки для криптографической защиты данных с помощью ассиметричных алгоритмов.
Литература: 1. Стахов В. Теория и практика OpenSSL. – Журнал «Системный администратор», №1(2), январь 2003 г. – 17-26 с. 2. Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. – М.: Издательство ТРИУМФ, 2003 – 816 с.; ил.
безопасность
Создаем VPN с помощью SSL-Explorer
Сергей Яремчук Виртуальные частные сети в течение последних лет стали очень популярными и среди технологий, направленных на обеспечение безопасности, занимают третье место после антивирусов и межсетевых экранов. Именно им бизнес часто полностью доверяет свои секреты.
56
безопасность
И
с поль зо в ани е VPN ( Vir tual Private Network) позволяет организовать доступ к корпоративным ресурсам при работе через небезопасные сети. Во время построения виртуальной частной сети обычно возникает ряд проблем, и для окончательного принятия решения необходимо ответить на ряд вопросов. Какую реализацию использовать: специализированное устройство или программу на универсальном оборудовании? Первые обладают хорошей производительностью, но их цена высока. К тоРисунок 1. Схема работы SSL-Explorer му же очень часто компания уже имеет налаженную сеть, которую не силь- некоторых операций Java), что сразу 2003, что позволяет убрать такие серно хочется перестраивать при появ- же снимает вопросы по операционной висы, традиционно обитающие в DMZ, лении филиалов, в которых подчас системе, используемой на клиентском внутрь сети. Работают Citrix ICA-клиенстоит один-единственный компьютер. компьютере. И, естественно, такой ва- ты, MS RDP/Terminal, SSH1/SSH2/VNC/ Начальство на такую серьезную тра- риант идеально подходит в случае ра- SFTP/Telnet/TN5250-терминалы. Все соединения заворачиваются ту может попросту не пойти. Програм- боты пользователя на чужом компьютемные решения, не смотря на сущест- ре, так как на клиентском компьютере на один-единственный порт (по умолвенно меньшую цену, а подчас и бес- не требуется установка дополнитель- чанию 443), и специфика самого SSL, платность, также не лишены недостат- ного ПО, как, например, в системах, работающего на прикладном уровне, ков. Самыми главными являются за- базирующихся на Ipsec или OpenVPN. упрощает настройку межсетевых экрависимость от операционной системы То есть если, например, OpenVPN хо- нов и позволяет работать из-под NAT. и сложность в настройке. Впрочем, рошо подходит для организации фик- Для аутентификации пользователей если первую проблему можно решить, сированных, или point-to-point соедине- может использоваться внутренняя банапример, при помощи OpenVPN [3], ний, то SSL-Explorer более удобен для за, Active Directory, RADIUS или сискоторая успешно работает под управ- организации дистанционного доступа темные пользователи UNIX. При этом лением Linux, Windows, Mac OS X, раз- к сетям и сервисам одиночными ком- если, например Active Directory не буличных вариантов BSD и Solaris. То вот пьютерами или перемещающимися дет запущен на момент загрузки SSLс настройкой в филиалах, как правило, пользователями, не имеющими свое- Explorer, то последний прекратит свою работу. Кроме обычной аутентификане имеющих штатного системного ад- го постоянного IP-адреса. Основные настройки защищенного ции может использоваться и расшиминистратора, могут возникнуть проблемы. И самое главное – оба вариан- соединения в этом случае могут произ- ренная, когда пользователю в случайта не всегда могут помочь с «блуждаю- водиться как администратором на сер- ном порядке задается один из пяти дощими» менеджерами, которые для до- верной, так и пользователем с клиент- полнительных вопросов (любимая книступа к ресурсам корпоративной сети ской стороны. Причем для настройки га или телепередача, девичья фамивынуждены использовать чужие либо не требуется ручное редактирование лия матери, имя отца, место рождезаведомо слабозащищенные компью- конфигурационного файла, весь про- ния). Для удобства настройки парацесс проходит с использованием веб- метров доступа в случае использоватеры. Но выход есть. браузера путем занесения необходи- ния внутренней базы использован ромых параметров в подготовленные по- левой RBAC-принцип, когда админисПроект SSL-Explorer Созданная в 2001 году английская ком- ля. И что не менее важно, при переме- тратор создает роли с заранее подгопания 3SP Ltd ведет разработки в сфе- щении клиента перенастройка пара- товленными профилями, а затем наре безопасности сетевой связи, в част- метров в большинстве случаев не пот- значает соответствующие роли польности создание различных SSH-реше- ребуется. Любые приложения, исполь- зователям. На основании ролей можно ний с открытым исходным кодом, рабо- зующие незащищенные протоколы, разрешить или запретить доступ к оптающих на Java-платформе и ориенти- могут использовать образованный SSL- ределенному сетевому ресурсу или рованных для применения в сетях уров- туннель, т.е. при помощи SSL-Explorer сервису, а также настройкам. В целях ня предприятия. Основным продук- довольно просто организовать доступ безопасности можно разрешить ретом является SSL-Explorer, представ- извне к почтовому и веб-серверу, фай- гистрацию некоторых клиентов тольляющий собой решение для организа- ловым и другим ресурсам корпоратив- ко с определенных IP-адресов, устации SSL VPN, работающее по клиент- ной сети. Поддерживаются дистан- новить требования к клиенту (операсерверной схеме с использованием ционный доступ к ресурсам Microsoft ционная система, версия Java, наливеб-технологий (рис. 1). Для настрой- Windows посредством веб-браузера чие сервис паков), что позволяет иски и работы используется любой веб- или через Microsoft WebFolders, а также ключить использование потенциально браузер, поддерживающий SSL (и для доступ к Microsoft Outlook Web Access уязвимых машин, имитируя таким об-
№4, апрель 2006
57
безопасность PIN, OTP, отсылаемый в виде текстового SMS-сообщения на мобильный телефон клиента. Xtra также совместим с такими USB-криптоустройствами, как SafeNet 2032 и Aladdin eToken USB. Незаменимым дополнением является наличие экранной клавиатуры, что позволяет хоть как-то защититься от клавиатурных перехватчиков. Дистанционное управление посредством SSH1/2, telnet и VNC. Демонстрационную версию Xtra можно загрузить на сайте. Сервер SSL-Explorer поддерживает Sun Java Runtime Environments (JRE) и Sun Java Development Kits (JDK), а также Microsoft JVM. Официально поддерживается установка сервера на Microsoft Windows XP/2000/2003 и Red Hat Linux 8.0 и старше. Остальные дистрибутивы Linux имеют неофициальную поддержку. Я устанавливал SSL-Explorer на три дистрибутива Slaskware 10.1 и производные от Slaskware – Vector Linux 5.1.1 SOHO и DeepStyle, проблем не было. Рисунок 2. Последним этапом установки является настройка при помощи веб-браузера
разом технологию Network Admission Control у Cisco. Возможна установка времени, по истечении которого произойдет автоматическое отключение клиента в случае его неактивности, количество неудачных попыток регистрации перед блокировкой или отключением. Используя SSL-Explorer, становится возможным при помощи веб-браузера послать Wakeup-on-LAN-сигнал любому компьютеру удаленной сети. Поддерживается три вида http-прокси: Single Site, Secure и Reverse, а также SOCKS. Для варианта Secure возможно выставить фильтры, позволяющие заменять контент. Кроме того, к SSL-Explorer относительно просто самому добавить свое расширение, на сайте даны примеры. Первая тестовая версия была представлена общественности в конце августа 2004 года. Актуальной на момент написания статьи является версия 0.1.16_01, но это не значит, что в продукте много недоработок. В данном случае это показывает стремление разработчиков к реализации тех или иных функций, поэтому основные характеристики в будущем могут измениться. Так, в ближайшее время планируется: включить модули аудита и генерации отчетов, которые будут позволять, в том числе обнаруживать попытки неправильного использования; добавить дополнительные методы аутентификации: аппаратные, такие как SecurID-токены и одноразовые пароли (one-time passwords – OTP); реализовать возможность дистанционной помощи, которая позволит администраторам помочь в настройке сервиса, посредством удаленного управления ПК; управление кэшем клиента – позволит автоматически очищать систему от следов работы SSL-Explorer; модуль SSL для клиентов – для реализации сквозного шифрования в пределах корпоративной сети. Распространяется SSL-Explorer под лицензией GNU GPL без каких либо ограничений на количество соединений или пользователей. Кроме этого предлагается коммерческая версия SSL-Explorer Xtra, распространяемая в виде плагина, имеющая более широкие возможности и коммерческую поддержку. Например, в ней добавлены следующие методы аутентификации: LDAP, SSL-сертификат, публичный ключ,
58
Установка и первичная настройка Разработчики рекомендуют использовать сервер с 1 ГГц процессором, 512 Мб ОЗУ и 150 Мб свободного места на жестком диске. Эксперименты показывают, что при обслуживании 5-10 клиентов вполне подойдет система с меньшими требованиями – 633 МГц и 256 Мб ОЗУ. На сервере должна быть установлена Java не ниже пятой версии, но опыт показывает, что на клиентах достаточно использовать версию ниже. В частности, на компьютере клиента, работающем под управлением операционной системы Windows XP, был установлен JRE SE 1.4.2. Архив с SSL-Explorer можно получить с [2]. В зависимости от используемой операционной системы или дистрибутива понадобится различный файл: sslexplorer_windows_0_1_16_01.zip – если планируется использовать сервер под управлением Windоws; sslexplorer_linux_rpm_0_1_16_01.zip – для дистрибутивов Linux, использующих rpm-пакеты (собран под Red Hat Linux, поэтому в других может не пойти); sslexplorer_linux_gui_0_1_16_01.zip – для установки в графическом режиме в других дистрибутивов Linux; sslexplorer_unix_0_1_16_01.zip – установка в FreeBSD, Mac OS X, Solaris и Linux (в случае если не подойдут первые два варианта). Для примера установим SSL-Explorer на сервер, работающий под управлением Slaskware, хотя установка в Windows практически идентична за исключением моментов, связанных с отличием этих систем. Сам процесс сложным назвать трудно. В данном варианте установки подходит третий пакет, который необходимо распаковать, зайти внутрь каталога и ввести (необходимы права root). Если на компьютере не установлена Java или инсталлятор не сможет ее найти, то будет выдан запрос на закачку и установку JVM. # sh sslexplorer_linux_0_1_16.sh Starting Installer ... Detect OS slackware Mar 27, 2006 10:14:38 AM java.util.prefs.FileSystemPreferences$3 run INFO: Created system preferences directory in java.home. Starting SSL Explorer in setup mode .................... Def security.administrator Category 10 resources = permissions Def general.userConfiguration Category 20 resources = permissions Def networking.showPersonalTunnels Category 30 resources = permissions Def services.showPersonalWebForwards Category 40 resources = permissions Def vpnClient.logon Category 50 resources = permissions
безопасность После этого запускается графический инсталлятор, в большинстве случаев отвечая на вопросы которого достаточно методично нажимать на «Next». В Linux опционально можно создать символические ссылки на исполняемые файлы в другой каталог, видный из переменной PATH. После копирования файлов будет предложено подключиться к серверу и произвести первоначальную настройку при помощи веб-браузера (рис. 2). Для этого нажимаем «Launch» либо запускаем любой веб-браузер (например, Firefox) и заходим на страницу http://localhost:28080. В Windows, скорее всего, последует запрос межсетевого экрана на разрешение запуска Рисунок 3. Для дальнейшей работы необходимо сгенерировать сертификат программы setup-sslexplorer. В первом окне «Web Security» (рис. 3) вам необходимо будет сгенерировать сертификат сервера. Здесь все просто, во вкладке «Step 1» указываем пароль, а затем в «Step 2» нажимаем на «Create New key store» и последовательно заполняем все поля: IP-адрес или имя сервера, компания, город, страна и другие, после чего нажимаем «Generate». Как вариант можно импортировать готовые сертификаты, подписанные доверенными организациями. Следующее окно «Security Options» позволяет указать некоторые параметры безопасности. Здесь в первую очередь, используя список «User database», следует указать используемый для аутентификации пользователей плагин. Если не используется Рисунок 4. Перед окончанием процесса установки смените пароль администратора Active Directory, а рабочие группы, более удобным является выбор «Buil-in», чае может быть полезна активация пен всем, то желательно сменить его позволяющий использовать внутрен- опции «Lock session on browser close», в «Admin-Access Control → Accounts». нюю базу пользователей. Здесь же позволяющая при открытой сессии Здесь ставим галочку в поле «Mark» можно задать параметры безопас- заходить без повторной регистра- и нажимаем «Password» либо через ности: количество неудачных попы- ции с другой вкладки веб-браузера. «Edit», где заполняем поле «Fullname», ток перед блокировкой/отключени- Как вариант можно установить огра- и сбрасываем пароль, установив гаем, количество символов в пароле ничение на одну сессию для пользо- лочку в «Reset password». После наи регулярное выражение, которому вателя, либо одна сессия для пользо- жатия на «Save» будет предложено ввести новый пароль. Обратите внион должен соответствовать, подсказ- вателя/IP-адреса. После внесения всех изменений мание на пункт «Force user to change ка пользователю, помогающая установить правильный пароль. На этой на любой странице не забывайте со- password at next logon». Если его активировать во время следующей регисстранице можно определить возмож- хранять их, нажимая кнопку «Save». По умолчанию у пользователя трации пользователя, он вынужден буность параллельной работы пользователя в нескольких окнах веб-браузера. admin пустой пароль (в более ранних дет обязательно сменить пароль, при Если ограничения не предусмотрены, версиях использовался пароль admin), этом использовать повторно старый то параметр «Multiple sessions» выби- так как после окончания процесса ус- система не даст. Перед выходом прораем как «No restriction». В этом слу- тановки SSL-Explorer будет досту- контролируйте значение поля «Status».
№4, апрель 2006
59
безопасность
Рисунок 5. Создание ролей в SSL-Explorer
строке браузера набирать каждый раз (а некоторым бывает довольно трудно объяснить) https и номер порта при подключении. Для удобства при помощи «Enable HTTP redirect» и «HTTP redirect port» можно настроить перенаправление с 80 (по умолчанию порта) на https-порт, используемый сервером SSL-Explorer. Если узел имеет несколько имен, то их можно перечислить в «Valid external hostnames». В «Proxies», если необходимо, настраиваем параметры прокси или SOCKSсервера. Последний раздел «Automatic Updates» позволяет настроить параметры автоматического обновления SSL-Explorer. Сохраняем результат и останавливаем сервер «Admin → Shutdown».
Начинаем работу После окончания процесса настройки следует разрешить запуск SSL-Explorer вместе с системой. Соответствующие скрипты имеются только в rpm-пакетном варианте, в остальных случаях об этом необходимо позаботиться самому. В Windows SSL-Explorer устанавливается в качестве сервера, просто проконтролируйте возможность его автоматического старта. Для ручного запуска в случае использования rpm-варианта вводим: # service sslexplorer start; ↵ chkconfig sslexplorer on
В остальных дистрибутивах: Рисунок 6. Настройка доступа к ресурсам
# sslexplorer-console
Для того чтобы пользователь мог войВ разделе «Profile» одно значети в систему, там должно стоять значе- ние, активация которого позволяДальнейшую работу и настройку ние «Granted» («Mark → Enable»). Воз- ет при наличии нескольких профи- можно проводить с удаленного комможны другие варианты: «Active» – лей выбирать пользователю текущий пьютера. Открываем браузер, вводим пользователь сейчас зарегистрирован (рабочий). имя сервера, регистрируемся в сисв системе и «Disabled» – пользователь Следующие два раздела пред- теме. неактивен (рис. 4). ставляют сейчас наибольший интерес. Теперь доступны пять вкладок: И еще один пункт, который реко- Это «Web server» и «Proxies». По умол- Home – статус и запуск VPN-туннемендую посетить перед первым за- чанию сервер SSL-Explorer будет исля, смена пароля и персональные пуском – «General Options». В нем ус- пользовать 443 порт, если он занят, настройки для конкретного клиента танавливаются глобальные перемен- то необходимо изменить это значе(прокси, некоторые параметры беные. Здесь пять разделов. В разделе ние. Хотя теперь можно спрятать вебзопасности, настройка интерфей«Network Places» можно выставить воз- сервер компании за SSL-Explorer и наса, вход в домен). можность увидеть домашний каталог строить перенаправление. При нали- Networking – доступ к Windows-репользователя (если имеется) в списке чии нескольких интерфейсов «слусурсам и опять же запуск VPN-тунресурсов, использование текущего ло- шаться» будут все. Использовав панеля. гина и пароля при подключении к сете- раметр «Bind address», можно ука- Services – настройка доступа к инвым ресурсам или как вариант исполь- зать список прослушиваемых адресов. транет-ресурсам, приложениям Пользователям неудобно в адресной зование гостевого входа. и Wakeup-On-LAN.
60
безопасность Admin – эта вкладка доступна только администратору и содержит все глобальные настройки, частично о которых говорилось при описании процесса установки. Help – помощь (доступно два pdf-документа «Quick Start Guide», «Reference_Guide» и ссылки на Knowledge Base сайта проекта).
Настройка ролей В принципе сервер уже готов к приему клиентов, поэтому для примера я покажу вам настройку доступа к ресурсам, организуем работу по SSL-туннелю и разберемся с созданием роли для работы обычных пользователей. Разобраться с остальными настройками помогут вышеупомянутые документы. Единственное, что смущает – информация в этих документах дана для более раннего варианта интерфейса, что несколько сбивает с толку. При помощи SSL-Explorer в целях повышения безопасности можно выставить соответствующие разрешения для пользователей. На основании этих разрешений может быть получен либо отвергнут доступ к некоторым настройкам. Вместо индивидуальных разрешений применяется концепция RBAC (Role Based Access Control), когда задаются роли и все пользователи в пределах этих ролей унаследует эти разрешения. При этом роли действуют не только при применении встроенной базы, но и группам Active Directory могут быть сопоставлены соответствующие роли. При применении встроенной базы данных придется создавать роли и назначать пользователей в эти группы вручную. Рассмотрим, как создать новую роль. Открываем «Admin → Access Control → Roles» (рис. 5). По умолчанию там присутствует только одна роль, соответствующая администратору. При использовании Active Direcory будут выведены найденные группы, но с неактивным «revoked»-статусом. Для того чтобы их включить, необходимо отметить и нажать «Grant». Создать новую роль также просто. В разделе «Create role» вводим название новой роли и нажимаем «Create». Вновь созданная роль всегда помечается как revoked, перед ее активацией следует отредактировать разрешения, выбрав ее и нажав «Permissions». В появившемся окне будет 6 разделов, при помощи которых можно разрешить запуск VPN-клиента, редактирование параметров туннеля, доступа к сетевым ресурсам, приложениям. Нажатие на «Allow All» разрешит использование всех неадминистраторских разрешений. После редактирования разрешений включаем роль «Grant» и переходим к вкладке «Accounts», где распределяем пользователей по ролям.
Настройка доступа к ресурсам
Для доступа к ресурсам выбираем «Networking → Networking Places» и попадаем в окно «My Network Places». Здесь по умолчанию уже присутствует ресурс «Windows Network Neighborhood», щелчок по которому должен вывести все домены или рабочие группы сети (для Windows в Linux как минимум придется настроить Samba). Чтобы организовать доступ к отдельному ресурсу, нажимаем «Create» и вводим путь к ресурсу. Только вместо привычного «\\имя_узла\ресурс» вводим ссылку относительно /fs/cifs. Например, /fs/cifs/computer/documentations или IP-адрес/
№4, апрель 2006
Рисунок 7. Окно файлового менеджера SSL-Explorer
fs/cifs/192.168.0.20/documentations (рис. 6). В поле «Short name» прописываем короткое понятное имя ресурса. После нажатия на «Save» новый ресурс появится в списке. По щелчку на нем откроется окно (рис. 7), в котором вы можете перемещать, удалять, скачивать и загружать файлы, создавать каталоги. Чтобы ресурс выводился в списке «My Favorites», который появляется в первом окне, встречающем пользователя сразу после регистрации, отмечаем «Mark» и жмем кнопку «Favorite».
Создание туннелей для приложений До настоящего времени мы использовали туннель для доступа к ресурсам исключительно при помощи веб-браузера. Можно, конечно, читать почту и при помощи браузера, но любой почтовый клиент все-таки на порядок удобней, чем веб-интерфейс. Для обеспечения возможности работы другим приложениям через проложенный туннель в составе SSL-Explorer имеется встроенный VPN-клиент, который также написан на Java. Клиент по требованию загружается с сервера, выполняется в рабочем пространстве клиентской машины и выполняет роль прокси, обеспечивая перенаправление TCP и UDP-соединений в туннель. Для того чтобы запустить его, достаточно зарегистрироваться в системе и на первой странице в разделе «VPN Client Status» нажать «Launch», после чего повторно нужно будет принять сертификат. Если клиент запустится удачно, пользователю будет выведено сообщение и откроется дополнительно окно (рис. 8), показывающее статус (в Windows появится в трее значок). Возможен вариант автоматического запуска клиента сразу после регистрации пользователя. Чтобы разрешить такой запуск, заходим в «Home → My Account → Configuration» и устанавливаем опцию «Start Automatically on Login». После того как туннель будет запущен, браузер можно закрыть, сессия будет заблокирована, при последующем соединении у вас запросят только пароль. Выключить Рисунок 8. Окно клиента можно при помощи этого статуса VPN-клиента
61
безопасность Destination Host – IP-адрес или доменное имя корпоративного почтового сервера; Destination Port – 110.
Рисунок 9. Окно настройки персональных туннелей
дополнительного окна, выбрав «Exit», либо из главного окна, нажав на ссылку «VPN client status», расположенную в верхнем правом углу. Но сам по себе клиент ничего делать не будет. Для работы ему необходимо указать, откуда брать и куда пересылать информацию. Туннели могут быть глобальными, т.е. настроены администратором для всех, так и индивидуальные пользовательские. Настройка пользовательских туннелей производится во вкладке Networking – SSL-Tunneling (рис. 9), глобальных в «Admin → Global Resources → SSL-Tunneling». Зрительно глобальные и пользовательские туннели можно отличить по значку Scope.
При этом клиент обеспечивает два вида пересылки: local и remote, то есть исходящие и входящие. Первый вид все исходящие сообщения с указанного локального порта пересылает на удаленный адрес и порт. Второй поступает аналогично, но только пересылаются все сообщения, поступившие на указанный порт. Для local поддерживаются протоколы UDP и TCP, для remote только TCP. Для примера настроим туннель, позволяющий получать корпоративную почту по протоколу POP3. Открываем окно настройки и вводим в окно: Source Port – 110; Tunnel Type – Local; Transport – TCP;
Клиент SSHTerm Professional
щищенные VNC сеансы, где самостоятельно, а где используя возможности SSLExplorer. Клиент имеет интуитивный многооконный интерфейс, что делает его удобным при одновременной работе с несколькими ресурсами. Распространяется под свободной (до 25 пользователей) и коммерческими лицензиями.
Тема SSL-Explorer была бы не полна без рассказа об еще одном продукте 3SP клиенте SSHTerm Professional. Также написанный на языке Java SSHTerm доступен для Windows, Linux и Mac OS X. Он позволяет сетевому администратору подключаться к ресурсам SSH1, SSH2, VNC, Telnet, SFTP, а также организовывать за-
62
Активация «Auto start» позволит запускать указанный туннель вместе с VPN-клиентом, а «Allow External Hosts» даст возможность выходить в туннель, зарегистрировавшись в других компьютерах. Нажатием на «Add» создаем новый туннель. Для того чтобы почтовый клиент мог к нему подключиться, необходимо в свойствах вместо имени почтового сервера поставить localhost (или 127.0.0.1). Теперь при попытке получить почту почтовый клиент будет соединяться с 110 портом локальной системы, где запрос будет перехватываться и по защищенному туннелю (порт 443) передаваться на сервер SSL-Explorer и далее на почтовый сервер.
Выводы Рассказать обо всех настройках SSLExplorer в пределах одной статьи не возможно. В процессе тестирования он показал себя как продукт, способный конкурировать с некоторыми коммерческими решениями. Тем, кто присматривается к вариантам SSL VPN, советую прочитать статью [4], особенное внимание, обратив на раздел «Рекомендации покупателю оборудования SSL VPN».
Ссылки: 1. Сайт проекта SSL-Explorer – http://3sp. com/showSslExplorer.do. 2. Страница на SourceForge.net – http:// sourceforge.net/projects/sslexplorer. 3. Бешков А. Кроссплатформенная частная сеть: OpenVPN – Журнал «Системный администратор», № 8, август 2004 г. – 4-12 с. 4. Джоул Снайдер. Оборудование SSL VPN – OSP.RU, №1, 2006 г.
анкета
Уважаемые читатели! Мы предлагаем Вам заполнить анкету. Для нас это будет возможностью услышать Ваше мнение, а также предложения и пожелания, которые помогут сделать журнал еще более интересным и полезным для Вас.
Тенденции Документация Интервью Человек номера Ретроспектива BUGTRAQ Хобби Книжная полка
6. Каких материалов Вам хотелось бы видеть больше? Обзоры (новых технологий, программных продуктов, другое)
1.
Как давно Вы читаете журнал? Все номера, начиная с пилотного Более 3-х лет 1-2 года Меньше года Это первый номер, который я читаю
2. Как Вы узнали о журнале? Увидел на выставке (укажите, какой) От друзей/коллег Из листовки в коробке дистрибутива Alt Linux/ASP Linux
Сравнения (новых технологий, программных продуктов, другое)
Оригинальный опыт решения задач администрирования Тонкие настройки сервисов и серверов Готовые решения в настройке программных продуктов Аналитические статьи Статьи по безопасности Материалы по базам данных Различные how-to, FAQ, tips Другое (напишите)
(нужное подчеркните)
Из прессы (укажите издание) Из анонсов Linuxcenter.ru, Nixp.ru, Opennet.ru, Securitylab.ru, Sysadmins.ru (нужное подчеркните) Увидел ссылку на сайте (указать, каком)
Другое (укажите, как) 3. Используете ли Вы какие-либо советы и рекомендации из журнала? Да, часто Да, иногда Нет
7. Какие новые рубрики Вы бы хотели увидеть в журнале?
8. Какие новые темы Вам хотелось бы увидеть в журнале?
9. Какие рубрики Вы считаете ненужными? (если такие есть)
4. Оцените журнал по пятибалльной шкале 1.
Информационность
2.
Актуальность
3.
Полезность
4.
Интересность
5.
Оформление
5.
Укажите, какие рубрики в журнале Вы читаете
10. Какие темы, на Ваш взгляд, освещаются, но недостаточно?
11. Какие темы, на Ваш взгляд освещаются излишне?
12. Статьи каких авторов Вам нравятся? Администрирование Безопасность Сети Программирование WEB
№4, апрель 2006
13. Сколько коллег (в среднем) читают Ваш экземпляр «Системного администратора»? Только я 1-3
63
анкета 4-5 6 и более 14. Собираетесь ли Вы оформить подписку на следующее полугодие? Да Нет Уже оформил 15. Укажите Вашу профессию/должность
23. Какие сайты, связанные с Вашей рабочей деятельностью, Вы посещаете?
24. Повышаете ли Вы свою квалификацию на различных семинарах, курсах? Да, часто Да, иногда Нет 25. Какие профессиональные выставки посещаете?
16. Сколько лет работаете(работали) системным администратором? 17.
Образование Среднее Среднее специальное Не законченное высшее Высшее 2 и более высших
18. Сколько системных администраторов в Вашем ИТ-отделе? 19. Численность компьютерного парка Вашей организации: 10 и менее 11-50 51-100 101-500 501-1000 1001-2000 Более 2000 20. Численность серверного парка Вашей организации: 1-2 3-10 11-20 21-50 Более 50 21. С какими операционными системами Вы работаете? Windows Linux FreeBSD OpenBSD Solaris Netware Другие
26. Как Вы приобретаете журнал? Оформляю подписку через компанию Подписываюсь самостоятельно Покупаю в интернет-магазинах Покупаю в розницу 27. Довольны ли Вы работой службы доставки? (если Вы получаете журнал по подписке) Да Нет 28. Укажите Ваш пол Мужской Женский 29. Укажите Ваш возраст 30. В каком городе Вы живёте? 31. Читаете ли Вы электронное приложение журнала? Да, я на него подписан Да, я периодически его скачиваю Нет 32. Оцените электронное приложение по пятибалльной шкале 33. Оставьте Ваши Общие пожелания, рекомендации
Заполненные анкеты отправляйте: 1) на e-mail: imp@samag.ru 2) по факсу: (495) 928-82-53 3) по адресу: 107045, г. Москва, Ананьевский переулок, 4/2, строение 1, ЗАО «Издательский дом «Учительская Газета» журнал «Системный администратор».
22. Какие компьютерные издания Вы читаете? Для Вашего удобства заполнить анкету Вы можете на сайте журнала www.samag.ru.
64
сети
Собираем беспроводной роутер 802.11g на базе ОС Linux
Михаил Платов С помощью обычной беспроводной PCI-карты и не очень мощного компьютера с ОС Linux вы сможете сделать собственную точку доступа 802.11g, по функциональности ничем не уступающую, а кое-где даже и превосходящую оборудование известных производителей.
Б
еспроводные сети на просторах нашей Родины набирают все большую популярность. Число хотспотов стремительно растет [1], строятся корпоративные беспроводные сети, да и «домашние» точки доступа уже не являются чем-то запредельно дорогим. Однако в некоторых случаях отдельную точку доступа можно и не покупать! Сегодня мы остановимся именно на таком случае и рассмотрим, как с помощью подручных средств сделать собственную беспроводную точку доступа 802.11g, поддерживающую режимы аутентификации Open, WEP, WPA-PSK, WPA-EAP, со встроенными серверами DHCP, DNS и NAT. Итак, приступим!
№4, апрель 2006
Собственно, а зачем? А действительно, зачем все это нужно, если в продаже уже есть достаточно дешевые точки доступа (ценой порядка 50$), с простой настройкой через веб-интерфейс, которые к тому же обладают меньшим энергопотреблением и не шумят? Однозначного ответа на этот вопрос нет. Во-первых, для некоторых задач, действительно, проще купить отдельное устройство. Так, например, если вам нужно развернуть большую беспроводную сеть из сотни точек доступа, разбросанных по зданию, то делать это на базе стандартных компьютеров будет по меньшей мере странным. С другой стороны, если у небольшой организации уже име-
ется роутер, прокси и почтовый сервер, работающий под управлением Linux, то почему бы практически бесплатно не добавить к нему функциональность беспроводной точки доступа?
Не все чипсеты одинаково полезны Для работы в режиме точки доступа нам понадобится собственно сам беспроводной адаптер, а также драйвер, обеспечивающий его работу в режиме «master mode». В теории, почти все беспроводные адептеры способны выполнять функции точки доступа, однако далеко не для всех поддержка этого режима есть в драйверах и сопутствующем ПО. К слову говоря, для Windows-
65
сети платформы такие драйверы сейчас и вовсе отсутствуют (и вряд ли появятся в будущем, ведь большинство производителей, помимо PCI-карт, также продает и точки доступа), а вот для Linux и BSD-платформ энтузиасты такие драйверы уже разработали. Итак, выбираем карту! Для того чтобы из всего многообразия присутствующего на рынке выбрать «правильную» карту, достаточно следовать трем простым советам: Отбросьте USB-карты. На данный момент даже поддержка работы в режимах Ad-Hoc и Infrastructure в Linux оставляет желать лучшего. Не смотрите на производителя и модели адаптера, ориентируйтесь на марку конкретного чипсета. Показательной является история с моделями карт D-link. Несмотря на то, что названия DWL-520, DWL-G520 и DWL520+ очень похожи, все эти карты сделаны на совершенно разных наборах микросхем, и если первые две (чипсеты Intersil Prism 2.5 и Atheros AR5002G) еще могут работать в качестве точек доступа, то для драйверов последней (чипсет TI ACX100) даже работа в режиме Infrastructure на данный момент еще не отлажена достаточно хорошо. Выбирайте ту карту, для чипсета которой имеются драйверы, поддерживающие работу в режиме точки доступа. Подробную информацию о степени поддержки того илииного типа микросхем в Linux можно найти на странице Яна Туррили [2]. Мы же подведем краткое резюме – на данный момент работа в режиме точки доступа возможна лишь для карт с чипсетами Intersil Prism (Prism2, 2.5, 3, 54 FullMAC, но не Prism54 SoftMAC) и практически для всех PCI-плат с чипсетами Atheros. Учитывая, что первые уже достаточно устарели (в большинстве своем это были карты 802.11b, 11Mbit) и практически не встречаются в продаже, выбор карты сводится к любой карте с чипсетом Atheros. Итак, вопрос с выбором чипсета можно считать решенным, но как же узнать, что именно стоит в карте, лежащей на витрине в магазине, чипсет-то в прайс-листах никто не указывает? Есть, как минимум, три способа: Способ самый простой и очевидный – посмотреть, что написано на микросхеме. К сожалению, зачастую это не всегда возможно на практике, к тому же на многих картах чипсет закрыт металлическим экраном, снять который обычно не представляется возможным. Более доступный способ – запрос к поисковой системе совместно с ключевыми словами «linux», «chipset» и моделью проверяемого адептера. Возможно, вы не первый, кто хочет сделать точку доступа на этой карте, так почему бы не посмотреть, что на этот счет думали другие? Кроме того, к этому вопросу можно подойти и с другой стороны – изначально искать карту на «правильном» чипсете, благо соответствующие интернет-ресурсы есть – [3, 4]. В некоторых случаях нужную информацию можно почерпнуть из руководства пользователя. В процессе изучения прайс-листов были замечены некие закономерности между стоимостью карты и установ-
66
ленном на ней чипсете. Так, родословная 20-долларовых карт, как правило, уходила в сторону тайваньской компании Ralink. Далее (20-30$) шла плеяда карт с сердРисунок 1. Беспроводной цем от Texas Instruments, адептер LevelOne WNC-0300 Broadcom, Marwell и других менее известных компаний. Примерно начиная от 30$ и выше в прайс-листах появляются искомые карты на чипсетах Atheros. Одна из них – LevelOne WNC-0300 802.11 b/g стоимостью 30$ – и была успешно приобретена для выполнения поставленной задачи(см. рис. 1). Как и предполагалось, внутри нее оказался чипсет Atheros: # lspci 01:00.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)
Подготовка ОС Как уже было сказано выше, для создания точки доступа нам понадобится ОС Linux. В качестве дистрибутива будем использовать Gentoo Linux. Впрочем, большинство приводимых настроек с некоторыми изменений будут работать и в других дистрибутивах. Первым делом убедимся, что в нашем ядре (ветка 2.6) присутствует поддержка беспроводных устройств: Networking ---> * Generic IEEE 802.11 Networking Stack <M> IEEE 802.11 WEP encryption (802.1x) <M> IEEE 802.11i CCMP support <M> IEEE 802.11i TKIP encryption Device Drivers ---> Networking support ---> Wireless LAN (non-hamradio) ---> * Wireless LAN drivers (non-hamradio) & wireless extension
Присутствуют поддержка iptables, а также поддержка 802.1d Ethernet Bridging: Networking --> * Networking Options <*> Network Packet Filtering IP: Netfilter Configuration
Отметьте модули поддержки NAT, а также всех необходимых протоколов: <*>
802.1d Ethernet Bridging
А также модуль алгоритма шифрования AES: Cryptogaphic options --> <M> AES cipher algorithms (i586)
Затем установим следующие пакеты: sys-apps/baselayout (версии не ниже 1.11.10) dev-libs/openssl (версия 0.9.7i) net-dialup/freeradius (версия 1.1.0-r1) net-wireless/wirelss-tools (использовалась версия 28_pre14) net-wireless/madwifi-driver (версия 0.1473.20060312) net-wireless/hostapd (версия 0.4.8, с USE-флагами для madwifi и ssl) net-firewall/iptables
сети net-misc/bridge-utils net-dns/dnsmasq Для установки достаточно выполнить команду emerge, перечислив через пробел названия всех пакетов. Кроме того, перед установкой также будет полезно посмотреть зависимости пакетов (ключ -pv к команде emerge) и при необходимости подправить USE-флаги в файле /etc/portage/ package.use для удаления ненужных зависимостей.
Структура сети При настройке будем считать, что в нашем распоряжении имеется сеть со следующей структурой (см. рис. 2). Для клиентов беспроводной сети будем использовать подсеть 192.168.2.0/24. Для подключения к сети будем использовать беспроводной адаптер Intel PRO/Wireless 2200BG ноутбука Centrino, работающего под управлением Windows XP SP2 (версия драйвера беспроводной карты – 9.0.4.8 от 2.17.2006).
Простейшая точка доступа, или Как не надо делать Теперь, когда все необходимое у нас уже есть, можно переходить к настройке. В качестве разминки настроим работу в самом простом (и небезопасном) режиме – WEP. Итак, начнем с сервера! Первым делом загрузим драйвер беспроводной карты и создадим виртуальное устройство wifi0, работающее в режиме точки доступа: # # # # #
modpobe ath_pci wlanconfig ath0 create wlandev wifi0 wlanmode ap iwconfig ath0 essid superspot iwconfig ath0 key 1111-1111-11 iwconfig ath0 channel 13
Параметр essid определяет имя нашей сети, key – ключ шифрования WEP. Если в качестве последнего ввести либо 10 шестнадцатеричных цифр (40-битный ключ), либо 26 шестнадцатеричных цифр со знаком «-» после каждых четырех (104-битных ключ). При этом в любом случае необходимо помнить, что даже 104-битный ключ с точки зрения безопасности в настоящее время не считает безопасным, и в «рабочих» системах его использование крайне не рекомендуется. Остановимся более подробно на параметре channel. Как известно, устройства стандарта 802.11b и 802.11g работают в диапазоне частот 2.4 ГГц. На самом деле это совсем не означает, что абсолютно все устройства (в том числе и точка доступа в квартире вашего соседа, которая для вашей точки уже является помехой) работают на одной частоте. Для Европы стандарт определяет 13 каналов (от 2.412 до 2.472 ГГц с шагом 5 МГц), в каждом из которых могут работать беспроводные устройства. В физике, правда, чудес не бывает, устройства, работающие в соседних каналах, все же являются друг для друга взаимной помехой (на самом деле беспроводные устройства 802.11, работающие в одном канале, не являются помехой в прямом смысле это слова, скорее, они «делят» общую на всех пропускную способность канала). Очевидно, что чем дальше устройства разнесены друг от друга в частотном спектре, тем меньше они будут друг другу мешать. Достаточно разум-
№4, апрель 2006
Рисунок 2. Структура рассматриваемой системы
ным в этом случае является такой компроммисс – использовать для беспроводных сетей только каналы 1, 7 и 13. Таким образом возможно относительно безмятежное существование в одном месте трех беспроводных сетей. Ввиду того, что некоторые точки доступа по умолчанию используют канал 1, мы слепо выберем наиболее отдаленный от него канал – 13, хотя, конечно, более правильно обосновывать выбор в зависимости от конкретной радиобстановки «на месте» (не нужно забывать, что в тот же частотный спектр также может использоваться микроволновками и радиотелефонами). Назначим IP-адрес и активируем беспроводной интерфейс: # ifconfig ath0 192.168.2.1 netmask 255.255.255.0 ↵ broadcast 192.168.2.255 up
Перейдем к настройке беспроводного к лиента. В Windows XP SP2 для конфигурирования беспроводной сети используется служба Windows Zero Configuration и соответствующий мастер конфигурации «Wireless Network Configuration». Первым делом установим для беспроводного адептера статический IP-адрес 192.168.2.2/24 (см. рис. 3). Затем произведем поиск сетей и подключимся к сети superspot. В появившемся окне введем WEP-ключ, указанный при создании точки доступа (см. рис. 4). Если ключ был введен верно, операционная система успешно обрадует нас подключением к беспроводной сети (см. рис. 5).
Автоматизируем запуск После того, как мы благополучно убедились, что все работает, можно настроить автоматическое применение настроек беспроводной карты. Настроим автоматическую загрузку модуля карты при старте системы: # echo "ath_pci" >>/etc/modules.autoload.d/kernel-2.6
Настроим автоматическое создание виртуального интерфейса при загрузке модуля: # echo “options ath_pci autocreate=ap” ↵ >>/etc/modules.d/ath_pci
Параметры для утилиты iwconfig укажем в файле /etc/conf.d/wireless со следующим содержимым: modules_ath0=( "iwconfig" ) ifconfig_ath0=( "192.168.2.1 netmask 255.255.255.0 ↵ broadcast 192.168.2.255" ) essid_ath0="superspot"
67
сети channel_ath0="13" key_super_spot="1111-1111-1111-11"
Создадим скрипт для запуска сетевого подключения: # ln -s /etc/init.d/net.lo /etc/init.d/net.ath0
И добавим его в список скриптов, запускаемых при старте системы: # rc-update add net.ath0 default
Теперь при перезагрузке системы наша точка доступа будет запускаться автоматически.
Рисунок 3. Статический IP-адрес беспроводного адаптера
Настраиваем дополнительные программы На данный момент клиенты нашего беспроводного сегмента могут работать друг с другом и с сервисами, имеющимися непосредственно на точке доступа. Данная схема обладает рядом недостатков, исправлением которых мы сейчас и займемся. Итак, первым делом предоставим беспроводным клиентам доступ в Интернет посредством NAT. В самом простом случае это можно сделать так: # iptables -F # iptables -t nat -F # iptables -A FORWARD -i ath0 ↵ -s 192.168.2.0/255.255.255.0 -j ACCEPT # iptables -A FORWARD -i eth1 ↵ -d 192.168.1.0/255.255.255.0 -j ACCEPT # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
С помощью скриптов Gentoo сохраним созданные правила и настроим автоматический запуск iptables: # /etc/init.d/iptables save # /etc/init.d/iptables start # rc-update add iptables default
Для распределения IP-адресов в локальной сети, и разрешения DNS-имен интернет-узлов будем использовать пакет dnsmasq. Для его настройки в конфигурационном файле /etc/dnsmasq.conf напишем: domain-needed bigus-priv Interface = eth0, ath0 Dhcp-range=192.168.2.0,192.168.2.255,1h Dhcp-host= 11:22:33:44:55:66, 192.168.2.1
Запустим службу и настроим ее автоматический запуск: # /etc/init.d/dnsmasq start # rc-update add default dnsmasq
Мы указали, с каких сетевых интерфейсов служба должна принимать запросы, и разрешили dhcp-серверу выдавать IP-адреса клиентам беспроводной сети. При разрешении DNS-имен dnsmasq будет перенаправлять запросы DNSсерверам, перечисленным в файле /etc/resolv.conf.
Улучшаем безопасность Ввиду использования WEP приведенный выше пример скорее относится к разряду «как не нужно делать» и имеет право на существование лишь с целью доказательства того, что
68
Рисунок 4. Ввод WEP-ключа
Рисунок 5. Успешное подключение к сети
плата работает. В реальных же системах настоятельно рекомендуется использование WPA в режиме WPA-PSK или WPAEAP. (В качестве альтернативного варианта можно использовать VPN-туннель для шифрации трафика между беспроводными клиентами и сервером.) За реализацию WPA в нашей системе будет отвечать hostapd. Указанный демон был разработан в рамках проекта HostAP, целью которого является создание беспроводных точек доступа на базе карт с чипсетами Intersil Prism. Позднее разработчиками была добавлена поддержка работы с платами на чипсетах Atheros посредством драйверов madwifi. Hostapd поддерживает работу в режимах WPA-PSK, WPA-EAP с возможностью аутентификации как с помощью встроенного сервера, так и с помощью внешнего сервера RADIUS. В нашем примере рассмотрим более сложный в настройке вариант WPA-EAP с аутентификацией по протоколу MSCHAPv2 на внешнем RADIUS-сервере. При реализации будем использовать инфраструктуру открытых ключей (PKI), развернутую согласно инструкциям в [5].
Предварительная подготовка Особенностью работы hostapd с драйверами madwifi является то, что беспроводное устройство должно входить в состав «виртуального моста» (linux bridging). Учитывая конфигурацию нашего сервера, мы вполне можем сделать «пол-
сети ноценный мост», с помощью которого клиенты проводной и беспроводной сетей будут находиться в одной логической подсети. Однако с точки зрения безопасности такой подход является неправильным – беспроводные клиенты должны иметь минимально необходимый доступ к ресурсам корпоративной локальной сети. Поэтому в нашем примере ограничимся «виртуальным мостом», состоящим только из беспроводного адаптера. Определение правил для iptables, ограничивающих доступ к проводной сети правил, оставим в качестве самостоятельного задания. Итак, для создания моста добавим в файл /etc/conf.d/net следующие строки: bridge_br0=( "ath0" ) config_ath0=( "null" ) config_br0=( "192.168.2.1 netmask 255.255.255.0 ↵ brd 192.168.2.255" )
А также настроим автоматическое создание интерфейса при старте системы: # ln –s /etc/init.d/net.lo /etc/init.d/net.br0 # rc-update add net.br0 default
После старта системы в системе появится новый bridge-интерфейс с именем br0: # ifconfig br0 br0
Link encap:Ethernet HWaddr 00:11:6B:60:28:D6 inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:2290 Metric:1 RX packets:508204 errors:0 dropped:0 overruns:0 frame:0 TX packets:665093 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:96361488 (91.8 Mb) TX bytes:713154486 (680.1 Mb)
Как и мы хотели, в состав моста входит лишь устройство ath0: # brctl show bridge name br0
bridge id 8000.00116b6028d6
STP enabled no
interfaces ath0
Перейдем к параметрам беспроводного адеаптера. Вместо старых настроек в /etc/conf.d/wireless определим следующее: modules_ath0=( "iwconfig" ) essid_ath0="superspot" channel_ath0="13"
Займемся настройками hostapd. Конфигурационный файл находится в /etc/hostapd/hostaspd.conf. Параметры демона сгруппированы в несколько секций: Параметры конфигурации беспроводной платы – в этой секции определяется тип используемого беспроводного адаптера, а также параметры беспроводного соединения (ESSID, MAC security). WPA1 (802.1X-2004) – здесь мы можем разрешить использование аутентификации 802.1Х, а также определить параметры EAP. Опции для встроенных серверов EAP и RADIUS – по словам разработчиков, эти серверы присутствуют исключительно для тестовых целей, и их использование в реальных системах не рекомендуется. Поэтому
№4, апрель 2006
в нашем примере эти секции использоваться не будут.
Параметры WPA2 (WAP/IEEE 802.11i) – здесь можно выбрать режим управления ключами шифрования (PSK или EAP), а также определить алгоритм шифрации трафика (TKIP-RC4, CCMP-AES). Итак, определим следующие настройки: interface=ath0 # интерфейс беспроводного адаптера bridge=br0 # имя устройства-моста, содержащего # беспроводной адаптер driver=madwifi # тип используемого драйвера ssid=superspot # идентификатор беспроводной сети auth_algs=1 # используемый алгоритм аутентификации, # 1- open ieee8021x=1 # аутентификация согласно 802.1X #RADIUS own_ip_addr=127.0.0.1 # IP-адрес сервера RADIUS nas_identifier=superspot auth_server_addr=127.0.0.1 auth_server_port=1812 auth_server_shared_secret=supersecretpassword radius_retry_primary_interval=600 #WPA/IEEE 802.11i wpa=3 # в двоичном представлении – 11, # что означает использовать WPA и WPA2 wpa_key_mgmt=WPA-EAP # будем использовать EAP-вариант # аутентификации wpa_pairwise=CCMP # будем использовать AES # для шифрования трафика wpa_group_rekey=600 wpa_strict_rekey=1 wpa_gmk_rekey=86400 rsn_preauth=1
Теперь перейдем к параметрам конфигурации Freeradius. Файл /etc/raddb/radius.conf. В секции modules{}, раздел mschap{} включим следующие параметры: use_mppe = yes require_encryption = yes require_strong = yes with_ntdomain_hack = yes
Убедимся, что ниже в этой же секции присутствует макрос для обработки имен в формате домен/логин: realm ntdomain { format = prefix delimiter = "\\" ignore_default = no ignore_null = no }
А также определен файл, в котором будут указываться пароли пользователей: files {
usersfile = ${confdir}/users acctusersfile = ${confdir}/acct_users preproxy_usersfile = ${confdir}/preproxy_users }
Секция authorize{} включает в себя следующие модули: authorize { preprocess mschap ntdomain eap files } files { usersfile = ${confdir}/users compat = no }
69
сети Файл /etc/raddb/clients.conf:
В параметрах конфигурации модуля EAP /etc/raddb/ eap.conf определим следующее:
client 127.0.0.1 { secret = supersecretpassword shortname = superspot nastype = other }
eap {
В файле /etc/raddb/proxy.conf допишем следующие строки: realm DEFAULT { type authhost accthost }
tls {
= radius = LOCAL = LOCAL
WPA2, или Почему нужно делать именно так На данный момент общепринятым является мнение, что WEP (даже совместно с фильтрацией MAC-адресов) не является надежной защитой для беспроводных сетей. Уже достаточно давно появились разнообразные инструменты (в том числе и для sctript-kiddies), позволяющие практически в автоматическом режиме «ломать» защиту WEP даже в Windows [6, 7]. Для решения проблем безопасности, присущих WEP IEEE, и разработан стандарт 802.11i. Согласно последнему, выделяются 3 основные категории защиты в беспроводных сетях: TKIP (Temporal Key Integrity Protocol) – основным назначением данной схемы было решение остро стоящих проблем WEP. Учитывая, что в основе лежал все тот же симметричный алгоритм шифрования RC4, было возможным смягчить проблемы WEP в новых прошивках для старого оборудования. Использование TKIP для шифрования трафика и 802.1X обычно называют WPA1. CCMP (Counter Mode with CBC-MAC Protocol) – новый протокол на основе алгоритма симметричного шифрования AES (Advanced Encryption Standard). Учитывая несколько большие требования к необходимой вычислительной мощности, предполагалось, что данный протокол будет использоваться в оборудовании, выпущенном после принятия стандарта 802.11i. Использование CCMP совместно с аутентификацией 802.1Х обычно называют WPA2. 8 0 2 .1X – м е тод ау те н т и ф и к а ц и и для беспроводных сетей. Может использоваться как совместно с CCMP, так и TKIP. В рамках 802.1Х выделяется громадное количество методов аутентификации
70
default_eap_type = peap timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no
(около 40). Наиболее часто используются следующие: EAP-MD5 – аутентификация по принципу «запрос-ответ» с помощью пары логин/пароль. Отметим, что даже несмотря на то, что последние не передаются по сети в открытом виде, метод обладает некоторыми недостатками – уязвим для атак по словарю, не производится аутентификация сервера. Преимущество также достаточно очевидно – простота внедрения (не требуются использование каких-либо сертификатов). LEAP (Lightweight EAP) – алгоритм, предложенный Cisco Sytems, аутентификация производится сервером RADIUS по паре логин/пароль. Метод также уязвим к атакам по словарю. В виду некоторой закрытости данных стандарт не получил широкого распространения. EAP-TLS (RFC2716) – аутентификация участников (взаимная) производится с помощью цифровых сертификатов. Способ требует наличия инфраструктуры открытых ключей (PKI Public Key Infrastructure). Метод удобен к использованию в гетерогенных сетях, в которых отсутствует центральный узел аутентификации (такой как сервер RADIUS, Active Directory, и др), но присутствует PKI. EAP-TTLS – метод аутентификации, при котором с помощью цифровых
Рисунок 6. Категории защиты в 802.11i
private_key_password = пароль для доступа ↵ к секретному ключю сервера private_key_file = ${raddbdir}/certs/ ↵ cert-srv.pem certificate_file = ${raddbdir}/certs/ ↵ cert-srv.pem
сертификатов устанавливается TLSсессия, в рамках передаются данные для аутентификации (в любой форме). Производится взаимная аутентификация клиента и сервера. Для использования также требуется PKI. Протокол часто используется совместно с другими методами аутентификации. PEAP (Protected EAP) – вариант аутентификации с использованием публичного сертификата сервера для создания защищенного SSL-канала. Использование сертификатов со стороны клиентов не требуется. Данный метод в некотором смысле можно считать аналогом SSL для http (https://) применительно к беспроводным сетям. EAP-MSHAPv2 – метод аутентификации согласно алгоритму MSCHAPv2, по паре логин/пароль внутри защищенного канала, созданного с использованием PEAP. Данный метод удобно использовать в Windows-сетях, в которых для аутентификации беспроводных клиентов используются учетные записи пользователей в Active Directory. Таким образом, для малых организаций можно рекомендовать использование EAP-MD5. EAP-TLS удобно использовать в сетях беспроводных провайдеров, а EAP-MSCHAPv2 – в крупных корпоративных сетях.
сети
} peap {
}
CA_file = ${raddbdir}/certs/cacert.pem dh_file = ${raddbdir}/certs/dh random_file = ${raddbdir}/certs/random
default_eap_type = mschapv2 } mschapv2 { }
В файле /etc/raddb/users определим имена и пароли для доступа к беспроводной сети: user1 User-Password == "password1" user2 User-Password == "password2" user3 User-Password == "password3"
Настроим автоматический запуск Freeradius при старте системы:
Рисунок 7. WPA-сеть
# rc-update add radiusd default
ния вторжений. В простейшем случае можно воспользоваться пакетом arpwatch. С его помощью точка доступа буЕсли все было сделано правильно, то после перезаг- дет отслеживать arp-запросы в сети и при появлении норузки компьютера (или просто запуска соответствую- вых MAC-адресов отсылать уведомления на e-mail адмищих служб) беспроводные клиенты увидят следующее нистратора. Для более «тонкой» защиты можно использовать связ(см. рис. 7). Беспроводная сеть с поддержкой WPA, при подку Kismet+Snort. С помощью первого можно отслеживать ключении к которой необходимо указать пароль. Если же по каким-либо причинам увидеть сеть не уда- атаки на уровне пакетов 802.11, а средствами второго организовать защиту на сетевом уровне и уровне прилолось, можно воспользоваться режимами отладки: жений. # hostapd –Kdddd # radiusd –X
Enterprise-режим Немного изменив настройки модуля EAP Freeradius, можно настроить работу в режиме EAP-TLS. Так, чтобы настроить работу анологично описанному в [5], необходимо всего лишь поменять тип пакетов eap в файле eap.conf: default_eap_type = tls
и скопировать клиентский сертификат на компьютер пользователя.
Обнаружение вторжений С использованием программной точки доступа можно просто и быстро организовать простейшую систему обнаруже-
Возможные проблемы и методы их решения Не запускается hostapd (или не загружаются модули ядра madwifi). Компоненты, входящие в состав системы, сильно связаны друг с другом. Так, драйверы madwifi являются модулями ядра и при обновлении последнего, возможно, их придется пересобрать. Точно так же после обновления madwifi необходимо пересобрать hostapd Не работает аутентификация клиентов с помощью radius-сервера. В режиме отладки hostapd выдается следующее сообщение: «No WPA/RSN information element for station!?» Убедитесь, что точка доступа работает в режиме WPA c поддержкой WPA2: «wpa=3».
№4, апрель 2006
Заключение На этом базовую настройку нашей точки доступа можно считать законченной, однако это совсем не значит, что ничего больше сделать нельзя. Дальнейшая функциональность точки может быть расширена в 2 основных направлениях: Настройки беспроводной части – обслуживание нескольких беспроводных сетей с одним а дапте ром (VAP Virtual Access Point), использование WMM (QoS в Wi-Fi), реализация быстрого роуминга с ипользованием IAPP. Установка дополнительных программ – ddnsclient, Squid, bind, samba, openVPN, Postfix, Apache, LVS – вот лишь короткий список программ, которые могли бы быть нам полезны. Другими словами, список возможных улучшений ограничен лишь имеющимся в распоряжении временем, а также полетом вашей фантазии.
Ссылки, литература: 1. http://wifi.yandex.ru/where.xml?city=213&dcity=1. 2. http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux. 3. http://linux-wless.passys.nl/query_chipset.php?chipset=Atheros& zoek=chipset. 4. http://customerproducts.atheros.com/customerproducts. 5. Платов А. С троим защищённую беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS – Журнал «Системный администратор», №5, май 2005 г. – 64-71 с. 6. http://airsnort.shmoo.com. 7. http://freshmeat.net/projects/aircrack.
71
документация
Техническая документация: серверы и сети
Алексей Коршунов Приходя на новое место работы, каждому системному администратору хочется получить пакет исчерпывающей технической документации. И первые по важности в этом пакете документы об устройстве сети и серверов.
О сетях и серверах
ры и firewall. Структура локальной сеЕсли говорить о технической доку- ти может стать совсем запутанной, есментации для использования внут- ли вовремя не внести систему и поряри компании, то первое, что приходит док в неё. на ум, это описание сетей и серверов. Как правило, принцип «одна ком- Архитектура сети пания – один сервер» уже мало где Первое, что интересует каждого сиспрактикуется. Парки пользователь- темного администратора, приходящеских машин увеличиваются, а вместе го на новое место работы, это архитекс ними растёт и количество использу- тура сети, которой ему предстоит заниемых серверов. Уже никого не удивля- маться. И далеко не всегда он может ет необходимость разделять почтовый получить исчерпывающую информаи веб-серверы, находящиеся во вне- цию. Очень часто приходится слышать шней сети, и файл-сервер, не имею- что-то вроде «тут у нас хабы/свитчи, тут розетки, а вон там провода». Это, кощий доступ наружу. Точно так же, как увеличиваются нечно, крайне далеко от действительи усложняются серверные парки ор- но полезной информации. Поэтому, создавая документацию ганизаций, увеличиваются и размеры сетей. Появляется большое количес- на сеть, стоит подходить к этому так, тво активного и пассивного сетевого как будто вы хотите заново узнать то, оборудования, нуждающегося в неко- чем владеете. Ниже я перечислю те пункты, кототором уходе и внимании системного администратора. На пограничных со- рые, на мой взгляд, наиболее интересединениях появляются специализи- ны были бы мне, как новому сотруднированные устройства, маршрутизато- ку компании:
72
соответствие розеток к портам патч-панелей;
соответствие подключения портов
патч-панелей к портам сетевого оборудования; описание подключения на свитчах пользователей; описание подключения на свитчах серверов и соединений между свитчами; описание маршрутизации между сетевым оборудованием; таблица используемых IP-адресов рабочими станциями; графическая схема сети.
Разумеется, описать соответствие розеток с патч-панелями можно только в тех случаях, когда последние есть. Хочется верить, что в вашей компании они уже давно и успешно используются. Описание подключения портов патч-панелей и свитчей необходимо вести в виде рабочего журнала, кото-
документация рый дополняется и обновляется по мере переключений. Это нужно для полной ясности – что к чему подключено и как взаимодействует. Под описанием подключения пользователей на свитчах подразумевается ваша схема разнесения рабочих станций по сетевому оборудованию. Предположим, что у вас в компании есть отдел дизайнеров, использующих в работе отдельный файл-сервер. (Отдельный, потому что размеры графических файлов весьма велики, и желательно их отделить от файлов обычных пользователей, чтобы последние не жаловались на чрезмерно долгое ожидание ответа сервера.) Помимо использования файл-сервера для хранения своих наработок, дизайнеры зачастую обмениваются файлами большого размера между собой. Логично было бы подключить их на отдельный свитч. Помимо самих предполагаемых дизайнеров, стоит на тот же свитч подключить и их файл-сервер, чтобы количество промежуточных соединений было минимальным. Это может оказаться весьма критичным для работы сети. (К слову, если фантазия на дизайнерах закончилась, то можно предположить разработчиков, использующих выделенный сервер баз данных.) Знать, к какому свитчу подключены серверы, полезно для анализа нестабильной и (или) медленной работы сети. Если у вас используется «интелектуальное» сетевое оборудование и особенным образом настроена маршрутизация, это также стоит описать. В будущем это может пригодиться для анализа работы сети. Или, например, при переезде компании в новый офис. К слову сказать, зачастую быстро и правильно (эффективно) переподключить всё оборудование на новом месте без чёткой документации практически невозможно. А следовательно, возникают дополнительные простои в работе компании и общий дискомфорт от «неправильно» работающей сети. Табличка в виде «Пользователь – IP-адрес» (как вариант, можно добавить ещё и название рабочей станции) также не покажется лишней, когда количество сотрудников компании превысит 10-20 человек. Выдача IP-адреса новой рабочей станции не должна
№4, апрель 2006
Рисунок 1. «Рабочая» структура документации одной из компаний
становиться для вас головной болью, дения основного, – расскажите и об а требуется для этого всего-навсего этом тоже. вести таблицу соответствий. Разумеется, задача может быть решена через Информация о серверах DHCP-сервер, выдающий по MAC-ад- Что происходит на серверах и как они ресам IP-адрес клиентам. Но если за работают – это второй вопрос, интерепользователем закреплено несколь- сующий любого системного администко адресов или же по каким-то сооб- ратора. Список информации, которую ражениям динамическая выдача адре- стоит указать: сов не используется, табличка окажет- аппаратная часть; ся очень кстати. (Да и остальным она установленное программное обесбудет не лишней для более нагляднопечение; го представления.) предоставляемые сервисы; Наглядно понять структуру всегда сетевые подключения. проще. Поэтому последнее, что хотеАппаратную часть полезно знать лось бы упомянуть, – это графическая схема сети. Разумнее всего это делать для планирования увеличения ресурна плане офиса. Здесь можно указать, сов существующих серверов. Да и при как проложены кабели, где находит- обосновании предложений по закупся кроссировочный шкаф, где в ком- кам нового оборудования лучше всего натах установлены розетки и сколь- опираться на то, что имеется и почему ко их (причем не будет лишним ука- имеющегося не хватает для удовлетвозать не только розетки локальной сети, рения потребностей компании. но и электрические). На этот же план Необходимость знать установленможно нанести массу другой не менее ное программное обеспечение, дуполезной информации. маю, ни у кого не вызовет вопросов. Разумеется, можно не ограничи- Вы должны чётко знать, что работает ваться перечисленными пунктами на ваших серверах и как оно испольи дополнить свои. Но и перечисленно- зуется. Это нужно по многим причинам, го вполне достаточно для детального одна из которых – слежение за анонсазнакомства с вашей сетью. ми обнаружения уязвимостей, выпусков патчей и так далее. Чем больше вы Схема доступа в Интернет знаете о своём «хозяйстве», тем эфЗакончив описание локальной сети, фективнее можете им управлять и исдополните документ описанием схе- пользовать в работе. Наверное, кажмы доступа в глобальную сеть. Опиши- дый системный администратор «нахоте настройки вашего шлюза и firewall дил» на одном (а то и нескольких) сер(например, если сделан проброс пор- вере «забытые» сервисы. Логичным продолжением описатов на внутренние адреса). Если у вас используется система переключе- ния ПО станет описание предоставния на резервный канал в случае па- ляемых сервисов. Другими словами,
73
документация то работы, и возникла необходимость построения почтовой системы. Зачем заново изобретать велосипед, когда можно открыть некогда сделанное описание и буквально чуть ли не «по шагам» повторить. Удобно? Я считаю, что да.
Антивирусы и центры обновлений
Рисунок 2. Оглавление описания серверной группы
чёткое изложение, какую роль в работе сети играет тот или иной сервер, кого он обслуживает и за что отвечает. Может быть, в момент составления такой структуры вы поймёте, что тот или иной сервис было бы неплохо перенести на другой сервер. Под сетевым подключением подразумевается IP-адрес сервера, а если он находится во внешней сети, то и открытые во внешний мир сервисы. Если вам потребуется срочно ограничить сетевую активность на определённых портах, то по составленному документу вы чётко будете знать, что делать. Конечно, каждый системный администратор скажет, что уж он-то точно знает, где находятся какие сервисы. Поверьте на слово, временами все знания имеют свойство вытесняться более новой и свежей информацией. Поэтому лучше всё же это занести в документацию, тем более что много времени это не займёт.
Описание сервисов и их конфигурационных файлов После того как вы описали сервера «в целом», пришло время описать более подробно используемые сервисы. Я не призываю вас рассказывать на десятках страниц работу вашего доменного леса. Однако каждый, кто хоть раз настраивал (например) почтовую систему на операционной системе Linux, знает, какое количество возможных вариантов может быть. Начиная от выбора MTA, заканчивая скриптовыми обвязками, настройками авторизации, схем используемых баз данных и так далее.
74
Поэтому было бы не лишним описать для начала настройки ключевых сервисов в отдельном документе. Я бы рекомендовал использовать для этого систему вроде NPJ (читайте о ней в журнале «Системный администратор» №11 за 2005 год). Причин для этого несколько, и все они сводятся к одному – удобству. Если вы начинаете вести документацию по сети, то рано или поздно у вас может появиться желание дополнить её описаниями того, что вы настраивали. Например, это может быть описание настройки вашей почтовой системы. Давайте перечислим, что в это описание может войти: настройки MTA; настройки IMAP и POP3; система авторизации; описание антиспам системы; описание антивируса; описание системы авто-ответов (отсутствующих пользователей); описание листов рассылок. Это те пункты, которые мне пришли сразу на ум, стоило подумать о нашей почтовой системе. Почему это полезно? Давайте предположим, что у вас не осталось копий ваших конфигурационных файлов, а сервер ввиду (например) выхода из строя жёсткого диска больше не функционирует. Конечно, рано или поздно вы вспомните все настройки, которые некогда на нём делали или же настроите альтернативную конфигурацию. Но сколько уйдёт на это времени? Или другой вариант возможного развития событий. Вы сменили мес-
Описывая серверы не забудьте упомянуть об используемых антивирусах. Это могут быть отдельные клиентские программы на каждом компьютере или корпоративные версии программ. Где серверное приложение занимается скачиванием обновлений и распространений их среди клиентских машин. Удобно, быстро и экономно. А может быть, вы используете центры обновлений не только антивирусов. Их тоже стоит описать. Хотя бы чтобы помнить об их существовании и не забывать за ними следить. (Я говорю «помнить», потому что сам не раз забывал о них сразу после установки и настройки.)
Система резервного копирования Когда вы закончили описывать сервера вашей компании, самое время описать используемую систему резервного копирования. Указать, какой из компьютеров за это отвечает, какое программное и аппаратное обеспечение для этого использует. Стоит также задокументировать и выстроенную вами схему хранения резервных копий.
Итог Разумеется, не все рассмотренные пункты являются минимально необходимыми при создании первых технических документов в вашей компании. Однако ведение документации на сеть и серверы только выглядит громоздкой и сложно реализуемой задачей. На самом деле по мере заполнения существующих пробелов вы поймёте, насколько это полезно и удобно вам же самим. Нет ничего более приятного, чем работать с сетью, о которой вы всё знаете и в любой момент можете дать ответ на любой вопрос. Главное – не останавливаться на достигнутом, а также не забывать следить за актуальностью составленных документов.
bugtraq Повышение привилегий в различных продуктах ISS
Раскрытие памяти ядра в NetBSD Программа: BlackICE PC Protection (Consumer), BlackICE Программа: NetBSD 1.6, NetBSD 2.0, NetBSD 2.1, NetBSD 3.0. Server Protection (Consumer), BlackICE Agent for Server (Corporate), RealSecure Desktop 3.6 и 7.0 (Corporate). Опасность: Низкая. Описание: Уязвимость существует в коде if_bridge(4). Вы- Опасность: Низкая. зовы bridge(4) ioctl(2) не обнуляют данные стека памяти, ис- Описание: Ошибка дизайна обнаружена в различных пропользуемого для временного хранения результатов ioctl(2) дуктах ISS. Для эксплуатации уязвимости необходимо вызапросов перед копированием информации запрашивае- звать действие, которое заставит Application Protection мому процессу. Локальный пользователь может получить Module отобразить предупреждение. Для BlackICE это модоступ к случайным участкам памяти ядра. жет быть любое приложение, установленное после него. URL производителя: www.netbsd.org. В диалоговом окне следует нажать на кнопку «More Info», Решение: Установите исправление с сайта производите- что приведет к открытию второй формы. В этой форме слеля. дует нажать клавишу <F1>, что приведет к отображению стандартного диалогового окна открытия файла. Уязвимость заключается в том, что процесс BlackIce не сбрасывает привилегии перед открытием диалоговоПовышение привилегий в PC-cillin Программа: Trend Micro PC-cillin Internet Security 2006/14.x. го окна помощи. Локальный пользователь может запусОпасность: Низкая. тить произвольное приложение на сервере с привилегиОписание: Уязвимость существует из-за того, что полный ями SYSTEM. доступ к директории «Internet Security 2006» предоставля- URL производителя: www.iss.net. ется по умолчанию группе «Everyone». Локальный пользо- Решение: В настоящее время способов устранения уязвиватель может удалить или изменить файлы приложения. мости не существует. URL производителя: www.trendmicro.com. Решение: В настоящее время способов устранения уязвимости не существует. Раскрытие данных в функции html_entity_decode() в PHP
Раскрытие данных в mail в NetBSD Программа: NetBSD 1.6, NetBSD 2.0, NetBSD 2.1, NetBSD 3.0. Опасность: Низкая. Описание: Уязвимость существует из-за того, что программа mail создает файлы с небезопасными разрешениями, если в пользовательском файле .mailrc присутствует запись «set record» и установлена маска по умолчанию. Локальный пользователь может просмотреть письма других пользователей на системе. По умолчанию «set record» не присутствует в файле .mailrc. URL производителя: www.netbsd.org. Решение: Установите исправление с сайта производителя.
Раскрытие данных в AN HTTPD Программа: AN HTTPD 1.42n, возможно более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за недостаточной обработки расширения файла в URL. Удаленный пользователь может с помощью специально сформированного URL, содержащего точку и пробел, просмотреть исходный код PL, CGI и BAT-сценариев на системе. URL производителя: www.st.rim.or.jp/~nakata. Решение: Установите последнюю версию (1.42p) с сайта производителя.
Программа: PHP 4.4.2 и более ранние версии, PHP 5.1.2 и более ранние версии. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки в функции html_entity_decode(). Удаленный пользователь может получить доступ к определенным участкам памяти на системе с помощью сценария, вызывающего функцию html_entity_decode(). Удачная эксплуатация уязвимости возможна, если злоумышленник может контролировать входные данные и получить результат выполнения функции. URL производителя: www.php.net. Решение: Уязвимость исправлена в версии 5.1.3-RC1, доступной по CVS.
Повышение привилегий в avast! Antivirus Программа: avast! Antivirus 4.6.763 Опасность: Низкая. Описание: Уязвимость существует из-за того, что приложение устанавливает по умолчанию слабые привилегии на доступ к файлам и папкам. Локальный пользователь может удалить или перезаписать файлы приложения. Для удачной эксплуатации уязвимости требуется, чтобы папка TEMP находилась в том же разделе, что и установочная директория приложения. URL производителя: http://www.avast.com. Решение: В настоящее время способов устранения уязвимости не существует.
Составил Александр Антипов
№4, апрель 2006
75
IMHO
Перспективы профессии. Автопортрет
Алексей Барабанов Кто такие системные администраторы, почему они этим занимаются, что ждет их впереди? Попробуем разобраться в настоящем положении дел и сделать предположения на ближайшее будущее.
76
IMHO Здесь же вы не встретите ни одного и сходство замечаете? ПрофессиоПролог Профессия системного администрато- действия сложнее арифметического! нал может опуститься от закройщира как лица, отвечающего за эксплу- Так что будьте готовы к тенденциоз- ка в ателье до фабричного закройщиатацию вычислительных систем, воз- ному и предвзятому освещению дан- ка, а может подняться до уровня кроя модельной одежды. Но станет ли он никла совсем недавно, когда упомяну- ного вопроса. Иллюстрациями некоторых по- в последнем случае равным кутютые вычислительные системы выросли настолько, что потребовали специаль- ложений будут служить факты лишь рье? Нет, конечно! Полотна Леонардо ного персонала для обслуживания. Ве- из окололинуксовой истории и индус- да Винчи вместе с ним создавала цероятно, с того времени, когда систем- трии. Выбор не случаен. Трудно опи- лая бригада художников, но в истории ными администраторами становились раться на историю таких организаций, признается лишь авторство Леонардо! просто увлеченные программисты или, как Microsoft, если даже представите- Так и здесь. Системный администранапротив, инженеры-электронщики, ли этой корпорации трактуют события тор всегда не более чем обслуживаюто есть профессионалы смежных об- по-разному от одного судебного засе- щий персонал. Это следует из определастей, произошло много эволюцион- дания к другому. История же участни- ления данной профессии. Можно, коных изменений. Говорят даже, что си- ков индустрии Open Source открыта нечно, спорить. Можно не соглашатьсадминов стали готовить в некоторых для публичного контроля. Хотя и не все ся. Но это факт. учебных заведениях. Не могу сказать, события оставляют след, доступный Что же получается, люди жертвуют сколько дипломированных системных для проверки, так как в отличие от ру- своей основной специализацией, иногадминистраторов работают по своей кописей контент веб-сайтов «сгора- да даже очень престижного свойства, основной специальности, но и сейчас ет» без следа. потому что их привлекает труд, сходя встречаю очень много коллег молоный с работой официанта или продавдого возраста, которые пожертвовали Немного определений ца в магазине? Быть может, они проссвоим высшим образованием и вмес- Как уже было сказано выше, пред- то неудачники или готовые пациенто работы юристом, экономистом, ис- метом или объектом профессиональ- ты психоаналитиков? Чем привлекаториком или врачом занимаются об- ной деятельности сисадминов явля- ет профессия системного администслуживанием вычислительной техни- ются информационные системы: ком- ратора? Дело в том, что в подчинение сики. Надо ли понимать так, что любой поненты сетей передачи информации, может добиться успеха в этом деле? базы данных, сервера, рабочие стан- садмину попадают очень высокоинтелПочему каждый студент, обладающий ции и даже прикладные программы. лектуальные устройства! «Они» безотнавыком работы с компьютером и ма- Субъекты здесь очевидны. Для нас же ветны, умны и непонятны остальным. ломальской харизмой (если не сказать важно будет отметить, что професси- И тем не менее «они» не могут обойнаглостью), легко верит сам и пытается ональные системные администрато- тись без взаимодействия с человекомубедить окружающих в том, что спра- ры образуют специфичную среду, ко- администратором. Это уже власть! вится с работой системного админист- торую и будем здесь обсуждать. Меж- Именно это и привлекает. Интеллекратора? Одно из двух: или сисадминам ду этими двумя категориями, объектом туальный абстрактный Мир, которым очень хорошо платят, или они слишком и совокупностью субъектов, сущест- другим доводится наслаждаться тольлегко зарабатывают! Возможный тре- вует взаимосвязь. Как было замечено ко в ходе компьютерных игр, системтий вариант, что системный админист- выше, развитие объекта, или инфор- ным администраторам доступен всегратор является романтическим героем, мационных систем, привело к фор- да. В нем, возможно, не такой увлекасвоего рода «робином-гудом-хакером», мированию совокупности субъектов, тельный сюжет, как в многодисковом не будем здесь рассматривать, хотя бы или категории служащих, которые те- компьютерном «квесте», но это не мепотому, что и Робин Локсли, и все хаке- перь называются системными адми- шает построить собственную систему условных обозначений, шкалу ценносры – это любители, мы же ведем речь нистраторами. строго о профессионалах. Далее попытаемся уточнить эту тей, набор атрибутов и сформировать взаимосвязь, так как ее характер от- замкнутую профессиональную среду. Эка невидаль, заявит искушенражает суть обсуждаемых категорий, Disclaimer, или Отказ а возможное развитие их отношений ный читатель! Обычное дело – дуаот ответственности Все рассматриваемые далее явления позволяет предположить и пути раз- лизм профессии: полное владение цетрактуются с самой крайней и праг- вития как информационных систем, левым предметом, но подчиненное поматической точки зрения. Полутона так и самой профессии системных ад- ложение в системе ценностей общеи компромиссы оставлены на усмотре- министраторов. ства. Но сравните сисадмина с башние либеральных читателей. Лишь абмачником, например. Ну разве сопоссолютизировав некоторый тезис, мож- Слуга или господин? тавимо по привлекательности владено построить логическую цепочку про- В каждой профессии есть много уров- ние башмачной парой и обладание гноза. Безусловно, возможен и опти- ней мастерства. Например, есть за- компьютером или целой корпоративмистический взгляд на обсуждаемую кройщик в ателье, есть закройщик ной сетью! тему. Ничего страшного, даже пред- на фабрике готовой одежды и есть заИтак, все, кто не добился успесказания погоды иногда не сбывают- кройщик в команде поддержки кутю- ха в мире реальном, могут испытать ся, хотя и подкрепляются расчетами. рье. Чувствуете разницу? Надеюсь, второй шанс в виртуальном, где лю-
№4, апрель 2006
77
IMHO бую проблему можно «перегрузить». Но увы! Такое положение вещей стремительно уходит в прошлое. И все чаще системный администратор из мастера (master – повелитель) компьютерных технологий превращается в слугу компьютерного железа. Это закономерность. Именно так развивается данная профессия.
Спорт или искусство? Многие виды такой человеческой деятельности, как искусство или спорт, возникли на основе повседневных занятий, бытовых профессий и военных специальностей, развивая их и абстрагируя от начального назначения. Но это свойственно лишь древнейшим занятиям. В современной истории подобных примеров мало. Ну разве что команда механиков «Формулы Один», на скорость меняющая колесные пары, да местечковые промысловые соревнования канадских лесорубов по распилу бревен двуручными пилами. Трудно представить соревнование по сборке автомобилей «Фольксваген Поло», хотя гонки этих малышек на «Кубок Поло» очень увлекательны. В отношении близких к рассматриваемой специальностям предпринималось нечто подобное. Одно время серьезно считалось, что программирование сродни искусству. «Искусство программирования» даже стало печатным штампом и пролезло в книжные заголовки. Периодически предпринимаются попытки сочетать «искусство» с настройкой прикладных сервисов, вебсерверов например. Но, вероятно, это не приживется даже как литературная гипербола. Можно согласиться со следующим рациональным объяснением. Искусством или спортом системное администрирование не станет из-за того, что оно очень сильно зависит от технологической основы. И эта основа чрезвычайно динамично развивается. По закону Мура в геометрической прогрессии. А есть ли смысл в соревнованиях, где правила меняются с каждым полугодием существенно, а с каждым пятилетием кардинально? И как будет смотреться «замороженная картина» настроенного сервера LRP [1] на ядре 2.2 в году так в 2020-м? Это ведь даже не Рубенс с его специфическим пониманием прекрасного! Хотя картинка
78
с мертвым пингвинчиком [1] тоже свое- ятельствам что нужно – для автомого рода живопись. биля гаечные ключи и оснастки, а для Таким образом, системное адми- информационной системы скрипты нистрирование не проявляет склон- и программы. Хотите поспорить? Наности превратиться в культовый вид чните спор с тем сисадмином, котодеятельности. И все закономернос- рый, выполняя работу хелпдеска или ти развития данной профессии имеют службы поддержки, как Фигаро носитсугубо физическое объяснение. Мож- ся между рабочими станциями. Далее, труд системного админисно даже сказать утилитарное! тратора имеет характер кустарного. Помните, были такие точильщики, хоНичего личного, лишь одна работа... дили со двора на двор и кричали: «ТоПришло время расставить точки над чу ножи и ножницы, правлю бритвы!». «i». Признаемся, что в профессии И теперь студенту, чтобы превратитьсистемного администратора столько ся в системного администратора, наже возвышенного и культурного, как до лишь набить «торбу» контрафакти в профессии автомеханика. С той ными CD и можно ходить из конторы разницей, что к «этим чумазым пар- в контору и зазывать: «Починяю почням» мы испытываем благодарность ту, сервера ставлю!». А вот весь инсв редкие минуты, когда лишь вовре- трументарий таких пилигримов номя «схватившиеся» тормоза спасают сит совершенно самодельный хараки здоровье, и содержимое кошелька, тер. Сомневаетесь? Добро пожаловать а вот к работе системного администра- на OpenNET [2]! Там сисадмины-кустатора клиенты не испытывают никаких ри делятся своими маленькими секречувств, потому что просто не понима- тами. Методика создания собственноют ее смысла и не могут оценить ее до- го инструментария подобна самой разстижения. Но и в том и в другом случае витой технологии времен среднего пакак работу автомеханика, так и рабо- леолита: найти наиболее подходящий ту сисадмина приходится оплачивать «камень» на [2] (или в MSDN [3], кому регулярно и авансом, несмотря на то, угодно) и «заточить» его применительчто по мнению всех окружающих и ав- но к собственному случаю, подобно тотомобиль, и локальная сеть работают му, как это 30 тысяч лет назад делали сами по себе! волосатые гоминиды. Итак, придется согласиться, что Видите, как все плохо? Именно системный администратор занимается поэтому в данной профессии (кстати, обслуживанием техники и является за- как и в профессии механиков автотратной статьей в любом предприятии, сервиса) так много пришлых энтузикроме ISP. С точки зрения экономиста астов. Поскольку что опытный специсисадмин принадлежит к категории алист, что начинающий всегда выполвспомогательных рабочих или к аппа- няет примерно одинаковый объем операту управления. Его работа никогда раций, обусловленный ручным харак(я подчеркиваю – никогда) не прино- тером такой работы. Конечно, подобсит прибыли. Все, что он делает или ное положение дел не может длиться чего касается, всегда затратно, начи- бесконечно. ная с закупок техники и завершая расходами на электроэнергию. Даже его Сервисная революция заработная плата является чистым Есть такое мнение, что в индустриальубытком, так как сисадмины не основ- ных революциях главными были техноные рабочие, зарплата которых входит логические новации, они и служили осв себестоимость продукции. нованием, и вели к новым этапам. Но Унизимся еще больше: работа сис- это не совсем верно. Человечество не темного администратора является руч- творит технический прогресс лишь раным трудом. Снова вернемся к анало- ди самого прогресса. Скорость не цель, гии сисадмин – автомеханик. И в том а только средство быстрее добраться и в другом случае один служащий ра- до конечной точки. Поэтому определяботает не более чем с одним объектом ющими в индустриальных революциях труда. И в том и в другом случае один были те изменения, которые происхослужащий использует разные инстру- дили в социальной сфере. Итак, главменты, каждый раз выбирая по обсто- ным надо считать освобождение че-
IMHO ловечества от бремени ручного труда и появление нового класса пролетариев, то есть тех, кто лишен средств производства. Говоря другими словами, произошли две вещи: Появилась возможность с помощью машинной технологии значительно увеличить производительность труда, исключив многие ручные операции. Владение машинными средствами производства создали условия для найма неимущих рабочих. Развивая данные тезисы, подумаем, какая очередная революция общественных отношений предстоит в самом ближайшем будущем, от какого рода труда может освободиться человечество? Какой труд до сих пор является ручным и во многом из-за того, что производится фактически по способу «один производитель – один потребитель», не позволяет развивать отрасли, где он применяется, промышленным способом? Это сфера обслуживания! Именно кризис сферы обслуживания в развитых странах заставляет мириться с притоком экономических мигрантов. Поскольку профессия системного администратора относится к сфере обслуживания, то на нее всецело распространяется вышесказанное. Сисадминов охотно приглашают в Европу по трудовым контрактам (например, [4]). Задумайтесь, почему? Логично предположить, что объем используемых информационных ресурсов возрастает, а вот развитие средств автоматизации труда системных администраторов явно происходит не в темпе закона Мура [5]. Таким образом, возникает предпосылка для того, чтобы «количественное» отставание перешло в качественный результат, заставив измениться как объект профессиональной деятельности, так и саму совокупность субъектов, в данном случае системных администраторов.
«Два источника, и две составные части...»
Рисунок 1. Структура эволюции профессии системного администратора
ратора является превращение его в пролетария, то предположение о том, что профессия сисадмина и вся отрасль переживает период революционных изменений, верна. Итак, обсудим содержание диаграммы в позиционном порядке.
Сейчас уже можно сформулировать два главных основа- Включение в ПО и ОС компонентов ния предполагаемого прогресса в профессии системного автоматизации администрирования Безусловно, это существует. Более того, является неотъемадминистратора. Во-первых, отсутствие средств автоматизации, кото- лемым требованием качественно сделанной программной рое ведет к столь высокому потреблению человеческих ре- продукции. Концепция, при которой пользователю, а равно сурсов в сфере управления информационными системами, и администратору, предоставлялся лишь командный интерфейс, даже такой развитый, который был положен в оснодолжно быть преодолено в самом ближайшем будущем. Во-вторых, развитие средств автоматизации, невоз- ву UNIX, уже давно не считается верной. Информационные можное без формирования стандартов на способы и ме- системы насыщаются GUI (Graphical User Interface). В некотоды управления, приведет не только к утверждению пос- торых из них, например в MS Windows, это положено в оследних, но и к созданию профессиональных стандартов нование и присутствует изначально, в других, например в GNU/Linux, возникло «на наших глазах» и приняло харакна их основе. Изобразим этот процесс в виде диаграммы (рис. 1). тер стандарта для систем уровня предприятия (enterprise). Но GUI лишь инструментарий. Главное в том, что GUI В левой половинке будем группировать объективные составляющие, а в правой – субъективные. Вектор развития позволяет скрыть механизм управления и мультиплициро(эволюции) направим вниз. Два прямоугольника со сплош- вать его. Например, система централизованного управленым контуром по центру будут соответствовать настояще- ния обновлениями в RHEL [6] и аналогичные механизмы му уровню. Пара прямоугольников с пунктирным контуром в MS Windows. И та и другая система имеют сходство в том, что у них есть общая проприетарная компонента, которая составят прогноз. Если получится обосновать (или допустить как версию), передается системному администратору в пользование. Вот он! Тот самый «станок», превращающий сисадмичто действительное положение дел соответствует среднему уровню диаграммы, то можно предположить, что и прогноз, на в бесправного пролетария. Не верите? Добавьте к этому способ распространескорее всего, реален и неизбежен. Если допустить, что конечной целью развития профессии системного админист- ния программных продуктов в ознакомительных верси-
№4, апрель 2006
79
IMHO ях без функциональных ограничений, но с невозможностью поддержки работы в производственном цикле. Например, системы CAD и другие. Их недостаточно «украсть». Их надо сопровождать. А «станок сопровождения» контролирует производитель. Да, будь сисадмин хоть 77 пядей во лбу – ничего он не сможет сделать самостоятельно! Можно даже сказать, что в области прикладного ПО данный метод общепринят, и системный администратор лишь устанавливает программный продукт и выполняет другие операции, которые не с руки делать продавцу. И такой подход до сих пор не применялся в отношении программных платформ лишь по той причине, что низвести сисадмина до уровня технологического биоманипулятора не позволяла слабая автоматизация данного процесса. Безусловно, здесь жадность явно сдерживается лишь рационализмом, который основан все на той же жадности производителя. Поскольку программный продукт не должен быть совсем закрытым, а учитывая сильное развитие Open Source в последнее время (там он может быть и вовсе открытым, как, например, RHEL), то производитель должен очень точно подобрать «перекрываемую» и одновременно автоматизируемую функцию. Какой можно сделать вывод? Платформы и программные продукты, не обзаведшиеся системами, облегчающими централизованное управление, и не допускающие такой же централизованный контроль за их использованием, скорее всего не имеют рыночных перспектив. И, значит, не смогут принять участие в формировании отраслевых стандартов. И, следовательно, обречены на забвение. Из мира GNU/Linux это относится в первую очередь к Slackware. Как обратный пример укажу Gentoo [7]: с 2006 года в этом совершенно анархическом дистрибутиве появился инсталлятор. Задумайтесь, почему, точнее, для чего!
Включение в профессиональную сертификацию проверки навыков Как уже утверждалось выше, развитие профессии и ее институтов отстает от
80
Это очень прогрессивно. Приятно развития предметной области. Но тем не менее профессиональная прина- отметить, что несмотря на то, что в раздлежность определяется не знания- витии предметной области (а именно, ми, а умениями во всех случаях, ког- в развитии средств автоматизации адда профессия полностью сформирова- министрирования) лидирует компания на как вид человеческих занятий. Ведь Microsoft, в области сертификации боникому в голову не придет поинтере- лее эволюционно-зрелое решение бысоваться: «знаешь, как рубить дрова»? ло создано в стане Open Source! Спрашивают: «умеешь рубить дроТаким образом, и второе условие ва?»! Лишь в том случае, пока проис- подтверждается фактами. ходит формирование самой предметной области, знания играют сколько- Туманное будущее нибудь существенную роль. Так и для По всему выходит, что оба условия, отпрофессии системного администрато- раженные в средней части диаграмра точное определение совокупности мы (рис. 1), наблюдаются в настоянавыков будет указывать на завершен- щее время. Кроме того, условия созданость развития. лись или создаются в динамике, то есть Мерилом профессиональной при- можно указать время, когда их не бынадлежности для системных адми- ло. Это значит, что процесс отчужденистраторов является сертификация. ния средств производства от системЭто не статичное явление. Оно тоже ных администраторов идет полным хоподвержено метаморфозам и разви- дом. Как следствие, точнее, как оснотию. Как и информационные техноло- вание этому, можно сказать, что в отгии, сертификация тоже может разви- расли наблюдается процесс индустваться в ошибочном направлении и да- риального развития, происходит рост уровня автоматизации работ и форже заходить в тупик. Например, сертификация SuSE мирование устойчивых технологичесв свое время была закрыта в поль- ких стандартов. Конечно, это не значит, что когдазу сертификации LPI, носящей общий характер. А вот канувшая в Ле- то все придет к конечной точке и далее ту сертификация ALT Linux была во- остановится. Даже прогресс в области обще ориентирована на разработчи- технологии рубки леса не прекращаетков. И та, и другая не имеют ни ма- ся до сих пор. Скорее всего, развитие лейшего смысла в рамках рассмат- будет происходить в алгоритме сблириваемой модели развития профес- жения рельсового полотна: схождение сии. И, как следствие, о сертифика- в точку лишь в виртуальном горизонте. ции ALT Linux более не упоминается Поскольку каждый новый шаг в плана их сайте, а SuSE снова возвраща- не развития базовой технологии отется к продуктоориентированной сер- расли будет создавать условия, сходтификации, но уже в рамках Novell. Та- ные с изначально рассматриваемыми, ким образом, ориентацию сертифика- когда технологическая необходимость ционных программ на используемые есть, а профессиональные институты технологические средства нужно при- отсутствуют. Здесь возникает вопрос: возможна знать как факт. Но самое важное – это способ про- ли альтернатива? Может ли развитие верки соответствия кандидата требо- пойти вообще по иному пути. Рассмотваниям сертификации. Общепринятой рим ситуацию, сложившуюся в смежметодикой до сих пор являлось обыч- ной к обсуждаемой отрасли, – в проное тестирование путем опроса. Так граммировании. поступают и в Microsoft, и даже в упомянутом LPI [8]. Но вот в RedHat ис- Бывает и так пользуется совершенно иная методи- Столлман со товарищи решили облака: проверка навыков практического годетельствовать всех программисадминистрирования [9]! Это на самом тов [10]. Так как в профессиональной деле ключевое изменение. Здесь уже среде программистов протекали приуровень знаний кандидата подразуме- мерно подобные процессы, и назревавается, но не является достаточным. ло полное отчуждение средств произГлавным считается владение практи- водства (операционных систем и ПО разработки) от самих программисческой стороной.
IMHO тов. Этот «Данко» под предлогом противодействия праву собственности на ПО, которое де-факто снижает его доступность (отбирает в пользу владельцев), решил проблему совершенно кардинально. Предложенная им лицензия GPL [11] передала программы в общественное использование и тем самым исключила возможность превращения программистов в пролетариев. Попутно, правда, уничтожила программистов как сообщество профессионалов, поскольку лишила возможности продавать результаты своего труда (суть GPL в вульгарной трансляции: все, что твое, то общее, а что общее, то уже не твое!). С тех пор никого не удивляет, что даже зубные врачи занимаются разработкой ядра GNU/Linux. И лишь только FSF [10] не понятно, что создавшаяся ситуация на руку крупным корпорациям, так как, исключив прямую продажу интеллектуальной собственности на ПО, лицензия GPL перенесла профицит в область сопутствующих услуг и тем самым почти 100%-но исключила возможность программисту-единоличнику воспользоваться результатами своего труда. Например, вся ALT Linux Team разрабатывает компоненты дистРисунок 2. Диаграмма изменения соотношения в уровне рибутива ALT Linux, а доход от реализации может получать оплаты труда только компания ALT Linux [12]. То есть GPL является выпоказатель, изменение которого согласно предположению сшей формой эксплуатации программистов! Вы возмущены такой оценкой GPL? Тогда ответьте, ес- экономиста Саймона Кузнеца [15], должно в период индусли каждая разработка согласно GPL оказывается в свобод- триального развития иметь характер перевернутой латинном общественном доступе, то есть одновременно и у про- ской буквы «U» [16]. Иначе говоря, для некоторой професграммиста-единоличника, и у корпорации с развитой инф- сии оплата изначально определяется лишь уровнем жизни, раструктурой, то у кого из них шансы выше выпустить на ры- затем из-за технологического развития происходит резкое нок новую продукцию и уже чисто экономическими метода- расслоение, которое постепенно должно стабилизироватьми (эффективная дистрибьюторская сеть, доступные цен- ся около некоторого нового уровня, определяемого особентры поддержки, агрессивный промоутинг) задавить конку- ностями профессионального рынка труда. Сделанные далее, предположения не точны и не прерента? Вам еще не ясно, зачем и RedHat, и Novell выложили специальные версии своих ОС Linux в свободный и откры- тендуют на абсолютную истину. Но из того, что для ситый доступ? Подсказка: «в качестве подарка на день Свя- садминов соотношение в уровне оплаты труда составляет 1,875 , а для программистов 2,5 , можно сделать заклютого Валентина» не является правильным ответом. Возвращаясь к «нашим баранам», спросим сами себя, чение, что процесс формирования профессии системных а надо ли что-то альтернативное для сисадминов? Что при- администраторов должен находиться в одной из двух вознесет с собой альтернатива типа FSF в профессию систем- можных точек на диаграмме изменения соотношения в опного администратора? Анархию и ценовой демпинг! Кста- лате труда (рис. 2). На диаграмме две кривые показывают изменение соти, время обсудить денежный вопрос. отношения в оплате труда для двух профессий, сплошная для системных администраторов, а пунктирная для проО приятном, о деньгах Проанализируем спектр возможных вакансий сисадминов граммистов. Заметим, кривая Кузнеца для программистов на Headhunter.ru [13]. Если исключить крайние и зачастую имеет иллюстративный характер, так как эта профессия композитные предложения (сисадмин «на все руки мастер» скорее всего не регламентируется законами, действующив карликовую компанию или начальник IT-отдела), то ок- ми в отношении индустриальных рабочих специальностей. лады перебирают номиналы из диапазона 800 – 1500 ус- Изображение одновременно двух кривых соотношения опловных единиц. То есть различаются в среднем примерно латы для программиста и сисадмина показывает, на скольв два раза. В то же время, если сделать такую же выбор- ко формирование профессии системного администратора ку в отношении вакансий программистов, то разброс будет продвинулось далее от профессии возможного прародинесколько больше 800 – 2000 (опять же исключая фантас- теля. Укажем попутно, высокий уровень оплаты труда протические и унизительные вакансии). Конечно, по материа- граммистов соответствует вакансиям, специализируемся лам кадровых агентств, представленным в Интернете, не- в проприетарных средах (Oracle, SAP R/3, 1C). Предложевозможно рассчитать взвешенные показатели уровней за- ния для UNIX (читай Linux) программистов не превышают работной платы, аналогичные коэффициенту Джинни [14] 1200 условных единиц (спасибо FSF). Первая возможная точка «А» на рис. 2 расположена на (так как судя по открытым данным нельзя исключить повторы), можно лишь получить очень приблизительно соотно- линии подъема уровня неравенства, в то время как вторая шение ожидаемой заработной платы квалифицированного «В» на том же рисунке, напротив, предсказывает скорую и неквалифицированного сотрудника. То есть именно тот стабилизацию. Из того, что предпосылками для поворо-
№4, апрель 2006
81
IMHO та (перегиба) U-образной кривой Куз- На эту тему снимали даже полномет- но хватить. Всем же остальным следунеца в профессиональном развитии ражные картины: «9 дней одного го- ет задуматься. следует считать принятие сертифика- да» – кинодрама о физиках с элеменции как общего подхода для установ- тами пренебрежения безопасностью Ссылки: ления профессиональной пригоднос- труда. Можно сказать, что на глазах 1. Домашняя страница закрывшегося ти, можно сделать вывод, что именно читателей возник культ программисв 2002 году проекта Linux Router – http:// точка «В» соответствует настоящему тов, хакеров и системных администwww.linuxrouter.org. положению дел. раторов. Возник и почти прошел. Сов- 2. Ресурс, коллекционирующий материаТаким образом, можно предска- сем недавно каждый компьютероозалы по информационным технологиям – зать скорую стабилизацию рынка тру- боченный школяр, студент-двоечник http://www.opennet.ru. да системных администраторов. Ди- или менеджер-неудачник могли поп- 3. Microsoft Developer Network: инструменкие предложения, вроде «сисадмин робовать себя в качестве сисадмина ты и ресурсы для разработки приложесо знанием фотошопа», должны ис- и добиться успеха. В самом ближайний – http://www.microsoft.com/rus/msdn/ чезнуть со страниц кадровых веб-ре- шем будущем это станет невозможdefault.mspx. сурсов. Возрастет ли оплата в абсо- ным. В каждой профессии доля про- 4. Веб-ресурс для поиска работы за рубелютном исчислении? Конечно, но пря- фессии прямо пропорциональна доле жом – http://www.telerabota.ru. мо пропорционально затратам на сер- навыков и обратно пропорциональна 5. Ремарка о законе Мура – http://www. тификацию. Более того, в сертифика- объему знаний. Системное админисmicrosoft.com/rus/msdn/default.mspx. ции должны быть заинтересованы са- трирование становится профессио- 6. RedHat Network. Система управления ми кандидаты, а не нанимающие орга- нальным, требует все более навыков жизненным циклом серверов RHEL – низации. Только тогда, когда соиска- и исключает успех теоретиков-всезhttp://www.redhat.com/rhn. тель вакансии будет уже иметь свиде- наек, какой бы начальной мотиваци- 7. Gentoo Linux Installer. Страница проектельство о профессиональном уровне, ей они не обладали. Хорошее здесь та – http://www.gentoo.org/proj/en/releng/ он сможет рассчитывать на увеличение то, что более экспансия «пионеров» installer. заработной платы при найме. не грозит ветеранам труда в этой об- 8. Сертификация LPI: экзамены – http:// Изменение характера оплаты сер- ласти, зарплаты из-за этого станут www.unixedu.ru/lpi.shtm. тификации в пользу частного способа стягиваться к «верхней планке». От- 9. Описание экзаменационной сессии (от физического лица так, как сейчас рицательным явлением можно посчиRH302 – http://www.rhd.ru/rh302.html. принято оплачивать образование в вы- тать убыль романтики и прочих эле- 10. С.Д. Кузнецов. «Идеология свободного сших учебных заведениях) против кор- ментов наивной стадии развития сиспрограммного обеспечения...» – http:// поративного должно обозначить новый темного администрирования. Стоит ли www.linux.org.ru/books/GNU/misc/gnu. качественный шаг в развитии профес- одно другого, судить вам. html. сии. В этом должны быть заинтересо11. Русский перевод GPL – http://www.emt. ваны и сами будущие системные ад- Послесловие com.ua/library/licenses/gpl-ru. министраторы (повышение стоимос- Читатель, вероятно, задается вопро- 12. ALT Linux – информация для сообщести вакансий), и нанимающие органи- сом, чем же зарабатывает на жизнь тва – http://www.altlinux.ru/content/view/ зации (снижение затрат на обучение автор, если он одновременно «руга41/39. и ликвидацию последствий ошибок), ет» и Microsoft, и FSF. Безусловно, как 13. HEADHUNTER.RU. Интернет-ресурс и в конечном счете учебные центры, системный администратор, не вовледля поиска работы – http://hh.ru. которые упомянутую сертификацию ченный в корпоративную иерархию 14. Определение коэффициента Джинни и предлагают. распределения прибыли Microsoft, – http://www.fastat.ru/Stbook/Main/344. я все свои доходы имею благодаря htm. Open Source и конкретно SuSE Linux. 15. Саймон Кузнец. Биография – http://www. Заключение Наша страна уже переживала не од- Но с точки зрения беспристрастного peoples.ru/science/economy/kuznets. ну волну профессиональной популяр- анализа являюсь всего лишь более 16. Л.И. Бородкин. «Неравенство доходов в ности. Одно время, например, сущес- удачливым кустарем. Предполагаю, период индустриальной революции...» – твовал культ «секретных физиков». что на мой активный век этого должhttp://www.altlinux.ru/content/view/41/39.
82
bugtraq Переполнение буфера в Microsoft .NET Программа: Microsoft .NET Framework 1.1 SP1, возможно более ранние версии. Множественные уязвимости в Cisco Опасность: Средняя. Optical Networking System 15000 Series Описание: 1. Уязвимость существует из-за ошибки про- Программа: Cisco ONS 15000 Series, Cisco Transport верки границ данных в ildasm при дизассемблировании Controller 4.x. .dll-файла. Злоумышленник может с помощью специально Опасность: Высокая. сформированного .dll-файла вызвать переполнение дина- Описание: 1. Различные сервисы уязвимы к ACK DoS-атамической памяти и выполнить произвольный код на целе- кам, когда вместо ожидаемого final ACK-пакета отправлявой системе. ется некорректный ответ во время «троекратного рукопо2. Уязвимость существует при ассемблировании .il-фай- жатия» (3-way handshake). Удаленный пользователь может ла, содержащего вызов функции с слишком длинным на- заставить контрольные карты (control cards) потребить все званием метода, использующего ilasm. Удаленный пользо- доступные ресурсы на системе и вызвать отказ в обслуживатель может вызвать переполнение буфера. вании. Удачная эксплуатация уязвимости возможна, если URL производителя: www.microsoft.com. IP-протокол сконфигурирован на LAN-интерфейсе (вклюРешение: В настоящее время способов устранения уязви- чено по умолчанию). 2. Уязвимость существует при обработке IP-пакетов. мости не существует. Удаленный пользователь может с помощью специально сформированного IP-пакета обнулить настройки control Множественные уязвимости в ClamAV Программа: Clam AntiVirus (clamav) 0.88 и более ранние cards. Удачная эксплуатация уязвимости возможна, если IP-протокол сконфигурирован на LAN-интерфейсе и вклюверсии. Опасность: Высокая. чен secure mode для element management system (EMS)-toОписание: 1. Целочисленное переполнение обнаружено в об- network-element access (по умолчанию отключен). 3. Уязвимость существует при обработке IP-пакетов. работчике PE-заголовков в файле libclamav/pe.c. Для удачной эксплуатации уязвимости опция ArchiveMaxFileSize Удаленный пользователь может сбросить настройки control cards. Для удачной эксплуатации уязвимости IP должен должна быть отключена. 2. Обнаружено несколько уязвимостей форматной стро- быть сконфигурирован на LAN-интерфейсе (по умолчаки при обработке логирования в файле shared/output.c. Уда- нию включен). 4. Уязвимость существует при обработке OSPF-пакеленный пользователь может выполнить произвольный код на целевой системе. тов. Удаленный пользователь может послать специально 3. Уязвимость существует из-за некорректного обра- сформированный OSPF-пакет и сбросить настройки control щения к памяти в функции cli_bitset_test() файла ibclamav/ cards. Удачная эксплуатация уязвимости возможна, если others.c. Удаленный пользователь может аварийно завер- OSPF-протокол сконфигурирован на LAN-интерфейсе (отшить работу приложения. ключен по умолчанию). URL производителя: www.clamav.net. Успешная эксплуатация вышеописанных уязвимостей Решение: Установите исправление с сайта производите- (1-4) возможна, если Common Control Card оптического ноля. да подключена к DCN (Data Communication Network) и включено использование протокола IPv4. Уязвимости существуют на следующих платформах: Переполнение буфера в Veritas Cisco ONS 15310-CL Series, Cisco ONS 15327 Series, Cisco NetBackup Программа: NetBackup Enterprise Server/NetBackup Server; ONS 15454 MSPP, Cisco ONS 15454 MSTP, Cisco ONS 15600 Server and Clients, NetBackup Enterprise Server/NetBackup Series. 5. Уязвимость обнаружена в загрузчике апплетов Cisco Server; Server and Clients 5.1 (все платформы), NetBackup Enterprise Server/NetBackup Server; Server and Clients 5.0 Transport Controller (CTC), который загружается каждый (все платформы), NetBackup DataCenter and BusinesServer; раз, когда инициализируются соединения для управлеServer and Clients 4.5FP (все платформы), NetBackup ния оптическим нодом. Уязвимость существует из-за тоDataCenter and BusinesServer; Server and Clients 4.5MP го, что java.policy разрешает доступ любому программно(все платформы). му обеспечению из codeBase или «http://*/fs/LAUNCHER.jar». Опасность: Средняя. Удаленный пользователь может с помощью специально Описание: Обнаружены ошибки проверки границ данных сформированной веб-страницы выполнить произвольный в службах Volume Manager (vmd), NetBackup Catalog (bpdbm) код из «/fs/LAUNCHER.jar» на рабочей станции CTC. и NetBackup Sharepoint Services server (bpspsserver). Удален- URL производителя: www.cisco.com. ный пользователь может с помощью специально сформи- Решение: Установите исправление с сайта производитерованных пакетов вызвать переполнение буфера и скомп- ля. рометировать уязвимую систему. Составил Александр Антипов URL производителя: www.veritas.com. Решение: Установите исправление с сайта производителя.
№4, апрель 2006
83
ретроспектива
Надежда умирает последней: история компании SGI
Дмитрий Мороз Двадцать лет назад в компьютерной индустрии существовали лишь две компании с трёхбуквенными названиями, перед которыми благоговела общественность, – Sun и SGI. Что вам известно о последней?
Е
сли бы вы в начале 90-х годов прошлого столетия спросили у художника, какой компьютер своей мечты он хотел бы иметь, ответ в 99% случаев был одним – рабочую станцию от Silicon Graphics. То же самое вам ответили бы технологи, учёные, инженеры, медики, военные. Начиная с 1989 года на системах этой компании производилось абсолютное большинство компьютерной гра-
84
фики и анимации, а также визуализации научных исследований. Кроме того, Silicon Graphics также стала известна как производитель высокомасштабируемых серверов, систем хранения данных и суперкомпьютеров. Однако если в начале 90-х годов о рабочей станции от Silicon Graphics мечтал практически каждый, знакомый с рынком компьютерной техники, человек, а уже имевшим завидо-
вали «чёрной завистью», то сегодня им, сочувствуя, лишь снисходительно улыбаются. К сожалению, современная реальность такова, что неугомонный технический прогресс, а также «рациональное» желание человека экономить на всём и вся подготовили для Silicon Graphics «глубокую пропасть», в которую компания «падает» на протяжении последних восьми лет. Одна-
ретроспектива Справка по IRIX IRIX (название происходит от словосочетания IRIS и UNIX) – операционная система для компьютеров Silicon Graphics, основанная на базе UNIX System V с некоторыми расширениями, взятыми из BSD-систем. Благодаря тщательной оптимизации IRIX обладает большим временем работы без необходимости перезагрузки, изначально оптимизирована под многопроцессорные системы, и имеет одну из наиболее совершенных журналируемых фай-
ко существуют и другие факторы, подкосившие её бизнес: Превосходство аппаратного обеспечения над программным. Инженеры, занимавшиеся проектированием рабочих станций и серверов, всегда имели превосходство над своими коллегами, разрабатывавшими операционную систему и программы под неё. По словам одного из бывших сотрудников Silicon Graphics, диктование «техниками» условий «программистам» было вполне обыденным явлением. Либо в одной лодке со всеми, либо – за бортом. Инженеры, работавшие в компании, должны были без возражений выполнять поставленные перед ними задачи. Тех же сотрудников, которым вздумалось не согласиться и выразить свою точку зрения, быстро увольняли. Кстати, именно благодаря бывшим инженерам Silicon Graphics, предлагавшим своей компании начать создавать графические ускорители для бурно развивавшегося рынка персональных компьютеров, на свет появились такие компании как: 3Dfx, nVidia и ArtX (купленная ATI). Да-да, именно «выброшенные за борт» бывшие сотрудники Silicon Graphics явили нам с вами эру 3D. Жёсткая зависимость от типа выполняющегося приложения. Если программа нуждалась в особенностях, заложенных в архитектуру систем от Silicon Graphics (многопроцессорность, общая оперативная память и т. д.), тогда их покупка была оправданной. К сожалению, позволить себе оптимизировать программное обеспечение под аппаратные возможности мог-
№4, апрель 2006
ловых систем в индустрии под названием XFS. Благодаря наличию библиотеки IrisGL (IRIS Graphics Language), общающейся непосредственно с графическими микросхемами компьютеров Silicon Graphics, операционная система обладает широкими возможностями по обработке трёхмерной графики. IRIX была первой UNIX-ОС с графическим интерфейсом под названием IRIX Interactive Desktop, представляющим собой оконный менеджер 4dwm с уникальным для IRIX внешним видом.
ли очень немногие, в основном исследовательские центры, военные, крупные голливудские студии и большие компании. Для всех остальных рабочие станции или сервера от Silicon Graphics представляли собой «Запорожец с двигателем от BMW». Отсутствие нормальной технической поддержки. Инстанциям, собравшимся прикупить систему от Silicon Graphics, стоимость которой исчислялась шестизначными цифрами, необходимо было сперва позаботиться о дополнительном штате квалифицированного обслуживающего персонала, поскольку техническая поддержка Silicon Graphics была никудышной. Чего стоит отсутствие полноценного руководства пользователя операционной системой. Опять-таки инженеры заставляли программистов концентрировать внимание в первую очередь на выполнении их запросов, тем самым ставя написание документации к программным продуктам на последние позиции списка «Что предстоит сделать». И, конечно же, Голливуд. Воспевание киностудиями возможностей компьютеров Silicon Graphics взвинчивало самолюбие компании до самых небес. Уверенная в своих непоколебимых высоких позициях в этом секторе рынка, она слишком поздно осознала о полученном «ударе в спину», преподнесённом бурным развитием персональных компьютеров. Однако цель этой статьи – не «разбор полётов» относительно неудач Silicon Graphics, а рассказ об истории компании, в одно время имевшей
«золотую рыбку» и в итоге оставшейся «у разбитого корыта». Так давайте же начнём!
Волей случая История возникновения Silicon Graphics Inc., в общем-то, стандартна и напоминает становление прочих великих компаний того времени в Силиконовой Долине: один «маленький» человек – одна большая идея. И зовут этого человека – Джеймс Кларк. Ещё в середине 70-х годов прошлого столетия он, пребывая на посту профессора Стэнфордского университета, вместе с Марком Ханной начал разрабатывать схему, которая бы взяла на себя обработку трёхмерной графики. «Без Марка я бы вряд ли закончил свою работу», – вспоминает Кларк. Уже в 1979 году была разработана и запатентована первая версия Geometry Engine – набора микросхем, производившего различные операции над данными, из которых состояли трёхмерные сцены: трансформация матриц, обрезание, склеивание и операции масштабирования. В поисках инвесторов для продолжения финансирования проекта и последующего коммерческого запуска Кларк обращался к таким компаниям, как IBM, Apollo, Digital Equipment Corporation (DEC) и Hewlett-Packard, но не получил поддержки и в 1980 году принял решение создать собственную компанию. Благодаря публичной демонстрации возможностей Geometry Engine в конце 1981 года на выставке-
Справка по MIPS Архитектура MIPS была разработана в 1981 году в Стенфордском университете под руководством Джона Хеннеси.Основная идея MIPS – создание небольшого по численности (около 50) набора команд, инструкции которого благодаря эффективному дизайну конвейера, а также наличию 64 регистров выполнялись бы всего за один такт процессора. Этот факт как нельзя лучше демонстрировал философию RISC-архитектуры. Первый коммерческий вариант процессора, MIPS R2000, содержал всего 110 тысяч транзисторов (для сравнения: этот показатель в процессоре Intel 386 был почти в три раза больше) и при частоте 12 МГц работал на скорости 9 MIPS (Millions Instructions Per Second – миллионов инструкций за секунду), опережая i386 в шесть раз.
85
ретроспектива
Рисунок 1. Графический терминал IRIS 3000
Рисунок 2. Рабочая станция IRIS 4D
конференции SIGGRAPH Джим Кларк сумел раздобыть 20 миллионов долларов инвестиций и вместе с семью бывшими студентами Стэнфорда, среди которых был и Ханна, основал компанию Silicon Graphics, которая после регистрации в 1982 году получила приставку Incorporated. Исполнительным директором новоиспечённой компании стал Эд МакКракен. В том же году в Силиконовой Долине была основана другая компания, Sun Microsystems. В дальнейшем оба соперника шли практически нога в ногу. Разница между ними была лишь в подходе к рынку: в то время как Silicon Graphics тратила почти всю
86
свою прибыль на исследования, считая технический аспект наиболее важным в своём дальнейшем развитии, Sun была более прагматичной, вследствие чего акцентировала большее внимание на бизнес-стратегии, постепенной подготовке почвы для захвата рынка. Благодаря этому Sun на сегодняшний день чувствует себя в той же «форме», что и 10-15 лет назад, и не собирается сдаваться на милость конкурентам. Первым продуктом новоиспечённой Silicon Graphics стал выпущенный в 1983 году графический терминал IRIS 1000, работавший на базе операционной системы IRIX и стоивший в зависимости от конфигурации от 70 до 80 тысяч долларов. Своё название – система с интегрированным растровым изображением (Integrated Raster Imaging System), IRIS 1000 получила благодаря наличию в ней буфера кадра (представляющего собой своеобразную «видеопамять», хранящую «слепок» экрана или, говоря на техническом языке, – информацию о каждой точке выводимого на экран изображения) с разрешением 1024х1024 пикселя, а также Geometry Engine, позволявшего обрабатывать данные, выводимые на экран, с невероятной для того времени скоростью. Правда, несмотря на наличие собственного процессора Motorola 68000 и 2 Мб оперативной памяти, IRIS 1000 не была рассчитана на автономную работу, а подключалась к миниЭВМ серии VAX компании DEC. Графическими терминалами машины IRIS продолжали оставаться вплоть до появления модели 3000, ставшей последним представителем этого семейства и первым компьютером с процессором архитектуры MIPS (R2000). В марте 1987 года общественности была представлена модель IRIS 4D, ставшая первой полноценной графической станцией от Silicon Graphics. Наиболее быстрая модель семейства, IRIS 4D/300 с 33 МГц процессором R3000 и 256 МБ ОЗУ обладала производительностью 29 MIPS и способностью обрабатывать до 100 тысяч текстурированных треугольников в секунду, чего уже было достаточно для систем автоматизированного проектирования и трёхмерного моделирования. Существовали также IRIS 4D серии Power (анонсированные в 1988 го-
ду), представлявшие собой серверные версии графических станций с 2, 4 и 8 процессорами. В начале 1990-х эта линейка была переименована в серию Challenge. Для того чтобы завершить рассказ о непревзойдённости IRIS 4D, отметим, что не только «начинка», но и корпус, её содержащий, был произведением искусства. А пластик, из которого он изготовлялся, был произведён собственной фабрикой Silicon Graphics, занимавшейся исключительно изготовлением пластмассы. Стоит ли говорить, что IRIS 4D стала воплощением мечты любого компьютерного специалиста того времени? Программисты быстро брали IRIS 4D «на вооружение». На выставкахконференциях SIGGRAPH демонстрировались первые программные продукты для новой платформы от Silicon Graphics. Со временем на свет появились такие программы как: Preview, Personal Visualizer, Data Visualiser и Advanced Visualizer, Composer, Kinemation, Dynamation компании Wavefront Technologies; Alias/х, Studio, Power Animator и AutoStudio компании Alias Research; Creative Environment, EDDIE, Painterly Effects и Creative Toonz компании Softimage. Этот список можно продолжать долго, однако смысл остаётся одним и тем же – системы Silicon Graphics стремительно завоёвывали рынок. Многие аналитики утверждали, что успех компании в то время был продиктован теми же факторами, которые в своё время сделали знаменитой компанию Apple: молодой, но талантливый и, самое главное, напористый персонал, стремящийся во что бы то ни стало заполучить работу в компании, свежие идеи, нетрадиционный взгляд на мир и желание идти с ней врозь и в то же время рядом. Все эти факторы способствовали тому, что уже в 1988 году Silicon Graphics объявила о 167-миллионной прибыли, которая с каждым финансовым кварталом всё увеличивалась. В 1989 году состоялось событие, сделавшее словосочетания Silicon Graphics и «компьютерные спецэффекты» синонимичными: на свет вышел фильм «Бездна», в котором существо, состоявшее из струи воды, было создано при помощи программно-
ретроспектива
Рисунок 3. Операционная система IRIX 5.3, работающая на компьютере IRIS 4D
го пакета Alias 2.4.2 на базе станций IRIS 4D/70G и 4D/80GT. Этот фильм ознаменовал собой приход Silicon Graphics в Голливуд. «Терминатор 2: Судный День» (1991 г.) и «Парк Юрского периода» (1993 г.), – названия фильмов, спецэффекты которых в рекламе не нуждаются.
«Золотые» годы В 1990 году Silicon Graphics представила миру свою, пожалуй, наиболее популярную рабочую станцию – IRIS Indigo. Компьютер был столь удачным, что даже сегодня, спустя 15 лет, на аукционе eBay люди отдают за неё немалые деньги. IRIS Indigo стала первой рабочей станцией, в которой был применён первый 64-разрядный процессор MIPS – R4000. В максимальной конфигурации, со 100 МГц-процессором, 384 Мб оперативной памяти и графической системой Elan (состоявшей из четырёх Geometry Engine), IRIS Indigo обрабатывала до 370 тысяч текстурированных треугольников в секунду. Не останавливаясь на этом показателе, в 1992 году Silicon Graphics объявила о выпуске Reality Engine, представлявшего собой, по заявлениям самой Silicon Graphics, первый в мире «графический суперкомпьютер». Основная его задача – максимально быстро и точно визуализировать данные, будь то результаты научных исследований, сложные САПР-модели, компьютерные сцены и т. д. На то время
№4, апрель 2006
Reality Engine, обрабатывавшему более 1,1 миллиона текстурированных полигонов за секунду, просто не было равных. С технической точки зрения Reality Engine представлял собой компьютер, содержащий до восьми процессоров MIPS R3000 и до 256 Мб ОЗУ. Графическая подсистема состояла из восьми процессоров i860 XP, представлявших собой единственного представителя семейства «чистых» RISC-процессоров компании Intel. Вплоть до появления на свет систем второго поколения под названием Onyx Reality Engine (производительность которых достигла отметки 2 миллиона полигонов за секунду) доступ к их графическим подсистемам осуществлялся при помощи закрытой библиотеки IrisGL. С увеличением графических возможностей систем Silicon Graphics становилось всё труднее поддержи-
Справка по OpenGL OpenGL был создан в 1992 году корпорацией Silicon Graphics на базе собственной библиотеки IrisGL, существующей с 1982 года. Для развития нового API был сформирован комитет ARB (The OpenGL Architecture Review Board), в который на сегодняшний день входят: 3D Labs, SGI, Apple, Evans & Sutherland, nVidia, ATI, Intel, id Software, Microsoft и др. В общих чертах OpenGL – это набор команд, которые описывают геометрические объекты и способ их отображения на эк-
вать её дальнейшее развитие. В 1992 году компания, предварительно отчистив IrisGL от старого кода, решила лицензировать её всем желающим. При этом под руководством компании был сформирован консорциум, следивший за разработкой новых версий OpenGL (так стала называться IrisGL). В 1992 году, отрапортовав о продаже 100-тысячной рабочей станции, компания совершила первую значительную (400 млн. долл.) покупку. Ею стала MIPS Computer Systems Inc., являвшаяся производителем процессоров для всех систем Silicon Graphics. Во время своей самостоятельности компания MIPS разрабатывала и выпускала процессоры одноимённой архитектуры, а также производила на их основе собственные рабочие станции. Однако жестокие реалии рынка не позволили MIPS завоевать «место под солнцем», и, оставшись без средств к существованию, она была приобретена Silicon Graphics и перепрофилирована исключительно на проектирование процессоров. Такой шаг позволил Silicon Graphics, несмотря на 118-миллионные убытки в 1992 году, лучше планировать собственную продуктовую линейку, а также развивать архитектуру MIPS в нужном ей русле. «Если смотреть с точки зрения стратегии, этот шаг дал им в руки полный контроль над архитектурой MIPS», – заявлял аналитик компании Hambrecht & Quist Роберт Хервик. «В результате она развивается так, как того хочется Silicon Graphics». Стоит также отметить, что отныне компании, использовавшие в своих устройствах процессоры MIPS, – а это федеральное компьютерное подразделение AT&T, Control Data Systems, NEC, Olivetti, Siemens, Nixdorf, и Sony ране. В качестве примитивов, обрабатываемых API OpenGL, выступают точки, отрезки прямых, стандартные (трёхвершинные), а также многовершинные полигоны. OpenGL включает в себя около 150 различных команд для работы с графикой, одни из которых предназначены для определения объектов, другие задают их свойства, а также параметры прорисовки и отображения. Для расширения функциональных возможностей OpenGL существуют вспомогательные библиотеки. Последняя на данный момент версия OpenGL – 2.0.
87
ретроспектива
Рисунок 4. Графические способности IRIS 4D
Рисунок 5. Рабочая станция IRIS Indigo
Рисунок 6. Плата Reality Engine
Рисунок 7. Графические суперкомпьютеры семейства Onyx
Рисунок 8. Рабочая станция Indigo 2
Рисунок 9. Рабочая станция Indy
88
Microsystems – теперь зависели от прихотей Silicon Graphics. Благодаря отличному масштабированию серверов Silicon Graphics, а также поддержке ОС IRIX многопроцессорности, компания смогла без особых проблем объединить свои аппаратно-программные возможности для создания собственных суперкомпьютеров, которые она представила в январе 1993 года. Различные исследовательские учреждения, университеты, крупные корпорации и другие инстанции, уже убедившись в возможностях графических станций и серверов, производимых Silicon Graphics, немедленно изъявили желание прикупить «числодробилку» стоимостью пару миллионов долларов. К началу 1995 года в списке Top 500 самых производительных суперкомпьютеров в мире присутствовало 128 систем производства Silicon Graphics (сравните со 125 – у компании Cray Research и 72 – у корпорации IBM). Вместе с анонсом первых суперкомпьютеров компания объявила об очередном обновлении своей линейки рабочих станций и появлении в январе 1993 года модели Indigo 2. Основные нововведения коснулись поддержки новых процессоров (вплоть до MIPS R10000 в начале 1996 года), а также новых графических плат (общее количество которых, разделённых на три серии, достигло восьми штук), самая производительная из которых, Maximum Impact, аппаратно текстурировала полигоны, содержала 4 Мб текстурной памяти (TRAM), и по два набора микросхем Geometry Engine (для работы с трёхмерной графикой) 11-го поколения и Raster Engine (для работы с растровой графикой) 4-го поколения. Также на основе Indigo 2 был выпущен сервер Challenge M, отличавшийся от рабочей станции лишь отсутствием аппаратных средств для работы с графикой и звуком, а также видоизменённым дизайном корпуса. Ещё одна «вариация на тему» – IRIS Crimson, выпущенная одновременно с Indigo 2, но являвшаяся представительницей рабочих станций класса high-end. Основное её отличие – возможность установки платы Reality Engine первого поколения, наделявшей компьютер графическими возможностями систем Onyx.
Да, Indigo 2 являлась непревзойдённым «графическим монстром», однако была по карману далеко не каждому. В том же году Silicon Graphics приняла решение создать мультимедийную рабочую станцию, обладающую не только передовыми графическими возможностями, но и прекрасно справляющуюся с обработкой видео и звука. При этом её цена должна была привлечь как крупные компании, так и профессионалов-одиночек. В результате в сентябре 1993 года на свет появилась рабочая станция Indy, в базовой конфигурации стоившая 5 тысяч долларов, что позволяло ей конкурировать с компьютерами SPARCstation компании Sun Microsystems и Quadra компании Apple. Indy была первой рабочей станцией Silicon Graphics, работавшей на базе процессора MIPS R5000, дополнительные инструкции по обработке трёхмерной графики которого позволяли отказаться от использования дорогой графической карты. Indy впервые обладала встроенными видеовходами: композитным, S-Video и специальным цифровым под названием Vino. Список всех «вкусностей» венчала миниатюрная цифровая видеокамера IndyCam, поставлявшаяся в комплекте со станцией, а также встроенный адаптер для подключения к выделенным линиям стандарта ISDN. К 1993 году из всех студий, создававших спецэффекты для кинофильмов, наибольшим клиентом Silicon Graphics являлась Industrial Light & Magic (сокращённо – ILM) Джорджа Лукаса, на счету которой вышеупоминавшиеся «Терминатор 2» и «Парк Юрского периода». В процессе совершенствования и дальнейшего усложнения визуальных эффектов ILM постоянно нуждалась во всё более производительных компьютерах. Решение было принято незамедлительно: в апреле студия подписала с Silicon Graphics соглашение на реализацию проекта JEDI, согласно которому ILM получала от компании самые передовые, ещё не доступные рынку новинки, а Silicon Graphics, в свою очередь, использовала студию Лукаса как испытательный полигон, тестируя работу своего аппаратного и программного обеспечения.
ретроспектива
№4, апрель 2006
89
ретроспектива Ещё одно крупное событие, случившееся в апреле, – подписание договора между Silicon Graphics и корпорацией Time Warner, согласно которому первая будет поставлять аппаратное и программное обеспечение для создания «интерактивного телевидения». Всё это позитивным образом сказалось на финансовом состоянии компании, и 30 июня 1993 года при подведении итогов общественности стало известно, что доход Silicon Graphics впервые перевалил за миллиардную отметку в долларовом эквиваленте. Продукция компании была столь успешной и популярной, что стала стандартом «де-факто» на рынке. Благодаря этому Silicon Graphics в начале 90-х годов являлась чуть ли не символом технического прогресса США. Доказательством этого может служить тот факт, что 22 февраля 1993 года, сразу после победы на президентских выборах, Билл Клинтон и вицепрезидент Альберт Гор совершили поездку в Маунтин Вью для того, чтобы познакомиться с наиболее известной компанией – Silicon Graphics. Тогда Эд МакКракен, стоя рядом с ними, сказал присутствовавшим журналистам: «США заботится об исследовательских разработках, проводимых на её территории, и наша компания – тому пример».
Расхождение во мнениях Дела у Silicon Graphics шли лучше некуда. Признанный лидер в своих секторах рынка, компания почивала на лаврах, продолжая строить радужные планы на будущее. Однако 27 января 1994 года мир «перевернулся с ног на голову». Сотрудники компании получили принеприятнейшее известие о том, что основатель Silicon Graphics Джеймс Кларк решил уйти из компании. В пресс-релизе говорилось о том, что: «Доктор Кларк… принял решение заниматься разработкой приложений для бурно развивающихся рынков ин-
Для справки Несмотря на нежелание руководства компании выходить на новые сегменты рынка, одна «маленькая победа» Джиму Кларку всё же удалась. 23 августа 1993 года Silcon Graphics вместе с Nintendo заключили контракт с целью разработки новой 64-битной иг-
90
терактивных широкополосных сетей и телевидения». В действительности всё было именно так, да не совсем. «Он, наверное, был единственным, верившим десять лет назад, что технология, стоившая в начале 90-х десятки тысяч долларов, со временем придёт в дома обычных пользователей в виде интерактивных мультимедийных устройств стоимостью несколько сотен долларов», – говорил Роберт Хервик. По словам самого Кларка, его желание сделать продукцию компании более доступной путём выхода на новый рынок начавших набирать популярность мультимедийных систем, игРисунок 10. Рабочая станция IRIS ровых консолей, а также графических Crimson ускорителей для персональных компьютеров, не встретило никакой подде- шего развития компании, ей с ним быржки со стороны председателей прав- ло не по пути. Это жёсткое правило не ления Silicon Graphics. Иными слова- спасовало даже перед самим основами, он хотел, чтобы главные техноло- телем компании. Понимая, что отныне его «руки свягии, разработанные компанией, стали стандартом на рынке потребительской заны», Кларк принял единственное возможное решение – уволиться и наэлектроники. Джим Кларк считал, что компания, чать всё «с нуля». К тому же на свок тому времени разросшаяся до не- их бывших коллег он не мог обижатьвероятных размеров (штат её сотруд- ся. Денег, заработанных им во время ников по всему миру насчитывал 12 работы в Silicon Graphics, хватило не тысяч человек), была слишком непо- только на финансирование новых перворотлива, чтобы быстро прогресси- спективных идей, но и совершенстворовать и реагировать на изменения вание своей напичканной под завязку рынка. К тому же Silicon Graphics бы- электроникой яхты «Гиперион» (стоила не из тех компаний, которые «пилят мость электроники, а это: 65 километсук, на котором сидят». Иначе говоря, ров оптоволоконных линий, 24 сервера её позиция в 1994 году более чем уст- Silicon Graphics и 22 сенсорных диспраивала совет директоров и к тому же лея, составила миллионы долларов). Первоначально Кларк собирался приносила большие прибыли. А менять устоявшиеся правила на диковин- заняться разработкой графических ки никто не хотел. «Я пришёл к выво- интерфейсов, но, узнав о разработке ду, что чем больше компании разрас- Марком Андрессеном графического таются в размерах, тем меньше они браузера для сети Интернет под нахотят смотреть на новые возможнос- званием Mosaic, предложил ему осноти, которые могут ожидать их в буду- вать компанию, которая будет заниматься его дальнейшей разработкой щем», – говорит Кларк. Вспомним одну из причин падения и продажей. Так была основана Mosaic Silicon Graphics, написанных в начале Communications, позже превратившаястатьи: если у инженера было собс- ся в Netscape Communications. Что же касается Silicon Graphics, твенное мнение по поводу дальнейкомпания продолжала следовать наровой консоли под кодовым названием меченным целям. Однако уже в 1994 Project Reality, обладающей «производи- году её ждёт первый «удар», за кототельностью сотен персональных компью- рым «розовые очки» компании спадут, теров за скромные 250 долларов». Весной «обнажив» суровую действительность 1996 года результат трёхгодичной рабо- этого мира. ты в виде консоли Nintendo 64 увидел мир. О её технических особенностях мы поговорим в следующем номере журнала».
Редактор рубрики Кирилл Тихонов
конкурс
Редакция журнала «Системный администратор» объявляет об учреждении 3 премий авторам по итогам 2006 года: 1 место – 30 000 рублей 2 место – 20 000 рублей 3 место – 10 000 рублей
Номинации
1. За лучшую серию материалов 2. За лучшую новую авторскую тему 3. За лучшую аналитическую статью
Кто участвует Участие принимают все авторы, опубликовавшие свои статьи в журнале «Системный администратор» в течение 2006 года. Напоминаем, что автором может стать любой человек.
Условия публикации Принимаются материалы, нигде ранее не опубликованные (в том числе в Интернете, прочих глобальных сетях, печатных изданиях и т. д.). Статьи не рецензируются. За содержание статьи ответственность несет автор. В течение двух недель редакция принимает решение о публикации статьи и сообщает об этом автору. Редакция оставляет за собой право редактировать предоставленные материалы. Редакция имеет эксклюзивное право на распространение принятого материала в журнале, включая возможность его публикации в любой электронной форме. По истечении двух месяцев с момента выхода журнала, содержащего публикации, автор имеет право опубликовать свой материал в другом месте только с предварительного письменного согласия редакции и с обязательной ссылкой на журнал «Системный администратор». По истечении одного года с момента первой публикации автор имеет право опубликовать свой материал в другом месте без предварительного письменного согласия редакции.
Общие требования к статьям Статьи не должны иметь рекламный характер какого-либо продукта, компании или технологии. В статье указываются ссылки на источники информации. Не допускается несанкционированный перевод на русский язык статей, обзоров и сравнительных тестирований продуктов, опубликованных в иностранных изданиях.
Рекомендации авторам Объем статьи – от 4 до 20 тыс. знаков. Если тема статьи предполагает объем, превышающий 20 тыс. знаков –
№4, апрель 2006
О номинациях 1. Серией материалов считается блок из не менее чем двух статей. Тема серии – по собственному выбору автора или же по выбору редакции. 2. Статья, написанная на тему, придуманную автором и одобренную редакцией. 3. Аналитическая статья может быть написана на тему, предложенную автором или же на тему, заказанную редакцией.
Кто судьи В состав жюри войдут сотрудники редакции и представители дружественных журналу информационных ресурсов.
разбивайте материал на несколько частей. Если вы пишете о продукте, технологии или компании, описывайте не только «плюсы», но и «минусы», а также приводите информацию о конкурентах. Рекомендуем ознакомиться со статьями на интересующую вас тему, которые уже есть на нашем сайте.
Требования к виду присылаемых материалов Статьи следует присылать в текстовом виде, предпочтительно в формате RTF или DOC. Имена пересылаемых файлов только на английском языке. Выравнивание столбцов производится табуляцией, а не пробелом. В тексте статьи рекомендуется указывать местоположение иллюстраций и подписи к ним, а сами иллюстрации не нужно вставлять в тело документа, их нужно запаковать в отдельный архив. Иллюстрации должны быть строго в формате PNG. Листинги должны содержать не более 60 символов (вместе с пробелами) в одной строчке. Переносы строк листингов должны быть указаны в явном виде (---перенос строки---). Если в статье приводятся ссылки на ресурсы в сети, URL должен быть указан в явном виде.
Контакты Адрес:
107045, г. Москва, Ананьевский переулок д. 4/2, стр. 1, Редакция «Учительской газеты», журнал «Системный администратор»
Телефон:
(495) 928-82-53
Факс:
(495) 928-82-53
Сайт:
www.samag.ru
e-mail:
imp@samag.ru, secretar@samag.ru
91
книжная полка
Самоучитель Linux Валентин Соломенчук
С увеличением популярности дистрибутивов на основе Linux в среде пользователей возросло и количество литературы, по задумке авторов направленной на обучение пользователей работе с этой ОС. Среди прочих эту книгу выделяет лаконичность и хорошая систематизация излагаемого материала. Данное издание прежде всего ад-
ресовано тем пользователям, которые уже имеют опыт работы с ОС Windows. В первой главе автор знакомит читателей с общими концепциями, философией и идеологией открытых систем. Для большей наглядности проводятся аналогии с Windows. После вводной части идет плавный переход непосредственно к описанию работы с GNU/Linux. Из главы «Основы Linux» вы узнаете о типах файловых систем, структуре каталогов, назначении различных файлов конфигурации, будут рассмотрены темы прав доступа, типов файлов, виртуальных консолей и системы X-window. В завершении приводятся две сводные таблицы, в первой – команды DOS и их аналоги в Linux, а во второй – таблица соответствия программ для Linux и Windows. Следующая глава посвящена теме запуска дистрибутива SuSE Linux Live на компьютере пользователя (DVD-диск с системой прилагается к книге). Следующая глава посвящена знакомству читателя с популяр-
ным desctop-менеджером KDE. Прочтя главу, вы узнаете о рабочем столе, меню KDE, панели и настройках рабочего окружения и диспетчере файлов, браузере Konqueror. Не осталась без внимания и вторая по популярности среди пользователей – оболочка Gnome. Большое внимание уделено методике работы в командной строке. Описаны команды для работы с файлами, начало и завершение работы, пользователи и пароли. Завершают книгу две главы, посвященные самым популярным прикладным программам, таким как OpenOffice, GIMP. Хорошая книга, которую смело можно рекомендовать всем людям решившим начать работать с GNU/Linux.
Издательство: «Питер» Год издания: 2006 Количество страниц: 207 ISBN: 5-469-01347-2 Цена: ≈ 203 руб. Книга предоставлена издательством «Питер».
PHP 5.1. Руководство программиста Игорь Григин
Прогресс не стоит на месте, и языки программирования, которые мы используем в повседневной жизни, развиваются вместе с ним. Эта книга в своем роде уникальна, так как является единственным печатным изданием на русском языке, в котором описано большинство новых возможностей, которые появились в версии 5.1. Как и большинство книг подобного рода, по-
92
вествование начинается с вступительной части, из которой вы узнаете общие сведения о языке PHP, его истории. Инструкция по установке и первоначальной настройке для UNIX и Windows также присутствует. Первая глава посвящена синтаксису языка и операторам. В рамках данной части подробно освещены такие темы, как типы данных, переменные, константы, выражения, операторы, а также управляющие конструкции. Из главы «Функции работы с данными» вы узнаете о переменных, массивах, объектах и классах, математических функциях (в том числе и функции повышенной точности BCMath и целочисленные GMP), узнаете о символьных типах (ctype), строковых функциях и синтаксисе регулярных выражений (PCRE, RegEx). Достаточно обстоятельно и подробно изложено описание управляющих функций (файл конфигурации php.ini, загружаемые модули (extensions), параметры и информация PHP, управления сценариями,
отслеживание и обработка ошибок, управление вводом, сессии, запуск внешних приложений). Следующая глава – «Файлы и сети», из нее вы узнаете о файловой системе (работа с директориями, получение свойств и атрибутов файлов, манипулирование файлами, системные функции, ввод и вывод, работа с архивами), сетевые функции (сетевая отладка php, общий низкоуровневый сетевой интерфейс, библиотека CURL, отправка почты, протоколы IMAP, POP3 и NNTP). В книге приводится огромное количество примеров реализации тех или иных функций. На прилагаемом к книге CD вы найдете три дополнительные главы, которые не вошли в печатную версию.
Издательство: «Питер» Год издания: 2006 Количество страниц: 490 ISBN: 5-469-01308-1 Цена: ≈ 398 руб. Книга предоставлена издательством «Питер».
книжная полка
Восстановление данных Алексей Гультяев
Тема сохранности информации будет актуальна всегда и везде. Но бывают моменты, когда, несмотря на все предосторожности, информация все же оказывается утерянной или поврежденной. Сразу хочется отметить, что весь изложенный материал в книге абстрагируется от ОС Windows. Это несомненно сужает круг потенциальной аудитории. Первая глава носит сугубо теоретичес-
кий характер, и из нее вы узнаете о видах угроз безопасности информации, а также в ней рассмотрены различные вредоносные программы, действие которых может привести к потери данных. В главе «Стратегия защиты информации и восстановления данных» рассказано об обеспечении бесперебойного электропитания (виды защитных устройств, ИБП), виды защитного ПО (программы для контроля целостности данных, антивирусы, средства для разграничения и контроля доступа, а также криптографической защиты). Следующая глава – «Настройка системных параметров», из нее вы узнаете об установке параметров BIOS, параметры загрузки системы, установка параметров файловой системы (FAT32 и NTFS), рассмотрены штатные инструменты для работы с жесткими дисками (проверка, дефрагментация). Резервное копирование (методы резервного копирования, технологии RAID), рассказано о программах Paragon Drive Backup и
Acronis true image. Из главы «Восстановление системной информации» вы узнаете о методах восстановления BIOS, устранения проблем с загрузкой ОС, средствах восстановления Windows 98/ XP, а также системного реестра. «Восстановление данных пользователей» – общие правила восстановления данных, выбор программных средств восстановления данных на жестких дисках (Drive Rescue, EasyRecovery Pro) и сменных носителях (IsoBuster, PC inspector smart recovery). Тема восстановления информации с жестких дисков более подробно рассмотрена в отдельной главе. (Восстановление логической структуры диска, данных в файловой системе FAT32 и NTFS.)
Издательство: «Питер» Год издания: 2006 Количество страниц: 379 ISBN: 5-469-01360-X Цена: ≈ 278 руб. Книга предоставлена издательством «Питер».
Практическая криптография Нильс Фергюсон, Брюс Шнайдер для новичков, прежде всего она адре- цикл ключа), хранение секретов (просована специалистам в данной облас- тативные хранилища, биометрика, совти. Весь материал поделен на четыре месное владение секретом, уничтожечасти. Из первой части, которая назы- ние). Из последней части книги вы узнавается «Безопасность сообщений», вы ете о стандартах (в частности, процессе узнаете о различных блочных шифрах и стандартизации, SSL, AES), а также паих режимах работы (DES, AES, Serpent, тентах. Отличная книга, я думаю, одна Twofish), функциях хэширования (MD5, из лучших (если не лучшая) из тех, что SHA-1, SHA-256, SHA-384 и SHA-512), переведены на русский язык по теме, кодах аутентичности сообщений (MAC, связанной с криптографией. Несмотря CBC-MAC,HMAC), безопасных каналах на достаточно высокую сложность тем, общения. Вторая часть – «Согласова- весь материал написан простым и доние ключей». В ней рассказано о гене- ступным языком и вполне легко усваирации случайных чисел, простых чис- вается. Так же очень важно, что все прилах, описан алгоритм Диффи-Хеллма- меры реализации того или иного алгона и RSA, приводится вводная в крип- ритма не привязаны к какому-то конкПеревод книги от общепризнанных гуру тографические протоколы, а также про- ретно языку программирования. области. По сути это продолжение кни- токолы согласования ключей. Часть ги «Applied Cryptography» (Прикладная «Управление ключами» представлена Издательство: «Диалектика» криптография). Это издание по задумке следующими главами: серверы клю- Год издания: 2005 авторов было призвано закрыть пробел чей, PKI: красивая мечта, PKI: жесто- Количество страниц: 424 между теоретическими знаниями и го- кая реальность, практические аспекты ISBN: 5-8459-0733-0 товыми решениями. Как ясно из назва- PKI (формат серитфиката, жизненный Цена: ≈ 283 руб. ния, весь материал носит сугубо пракОбзор книжных новинок подготовил Александр Байрак тический характер. Эта книга отнюдь не
№4, апрель 2006
93
подписка на 2006 год Российская Федерация
Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать»
Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (095) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (095) 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 по каталогу агентства «Пресса России» * **
94
годовой полугодовой
подписка на 2006 год Редакционная подписка Открыта подписка через редакцию. Вы можете оформить подписку на любое количество номеров 2006 года. Редакция не высылает журналы за пределы Российской Федерации.
Для юридических лиц:
Отправьте заявку по факсу (095) 928-82-53 или по e-mail: info1@samag.ru.
Укажите наименование и банковские реквизиты своей организации, почтовый индекс и адрес доставки журнала, телефон и e-mail контактного лица, период подписки и количество номеров. Редакция выставит вам счет, после оплаты которого вы начнете получать журналы по почте. Необходимые бухгалтерские документы высылаются почтой.
№5
(30 по )м д ww писн w.s ой ай 2 am ин 0
05 По ag дек Ищ чем .ru с 8165 5 ем у M пр S S Ст WP роим ичин QL м A-E з ы ед ле nte ащи На нн стр rpr ще ор is н аи Ка аб e, ную ва ота 80 уд к во ем 2.1 бес ет? ал сс UP е x т н а S Чт EA пров ны но по ов P-T од е ф вит дL аж LS ную inu ай ь но лы се x в к тана зн ть: по ать ор вл д п и ор ва Эф BS об ати ем D IPпо фек вн Sy тел ля ти ой ma ми вн еф Ко се nte по о у он ти c ль пр с п нтро и и A зо ав ntiv ом ли ва ля ощ ру iru Ин тел ем ью ем s9 ей со терв .0 OS без зд ью вA SIM оп ате с D ас ле Ла но м я рр сть зы и У се ка ол ти Pe лом rl –
Для физических лиц:
Заполните нижеприведенную квитанцию, оплатите в любом банке и пришлите в редакцию копию с отметками банка. После поступления платежа редакция начнет отправлять вам номера.
Стоимость подписки через редакцию: 900* руб. за 6 номеров 1800* руб. за 12 номеров
* Включая НДС и почтовую доставку
№4, апрель 2006
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №4(41), Апрель, 2006 год РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Редактор Алексей Коршунов Внештатные редакторы Алексей Барабанов Кирилл Тихонов Сергей Супрунов РЕКЛАМНАЯ СЛУЖБА тел./факс: (095) 928-8253 Евгения Тарабрина reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Николай Петрочук По вопросам распространения обращайтесь по телефону: (095) 928-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (095) 928-8253 Сайт журнала: www.samag.ru РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 11000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламного объявления ответственность несет рекламодатель. Все права на опубликованные материалы защищены.
ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Генетический распаковщик своими руками Первое, что делает исследователь, когда берет в руки программу: смотрит упакована она или нет, и тут же бежит искать подходящий распаковщик, поскольку, большинство программ все-таки упакованы, а готовые распаковщики есть не для всех. Обобщив свой опыт, автор предлагает вам алгоритм универсального распаковщика, «снимающего» даже сложные полиморфные протекторы.
Узнай секреты WMI: события и провайдеры. Часть 2
провайдер для работы со счетчиками производительности и довольно простой вопрос, который, однако, вызывает частенько сложности – работа с датами и временем через WMI.
Arch Linux: руководство к быстрому старту Выбор пакетов для Slackware, на ваш взгляд, скудноват, а Gentoo собирается целую вечность? В этой статье речь пойдет об Arch Linux – сравнительно молодом, первопринципном (то есть не базирующемся ни на какой из ныне существующих) дистрибутиве Linux. Вам пригодятся советы и рекомендации по практической работе с системой. Поскольку Arch Linux, как и большая часть современных ОС неявно подразумевает, что пользователю не составляет труда выкачать из Интернета 100-200 Мб обновлений, мы специально остановимся на специфике его использования в условиях нашей страны.
Из всех основных возможностей WMI нам осталось рассмотреть только специфику работы с различными провайдерами. Среди этих провайдеров особо стоит отметить следующие: Win32_Ping – осуществляющий формирование ICMP Echo-запросов к указанным хостам сети, Win32_NTEventLog – с которым мы Ни секунды простоя: частично знакомы, и который обес- строим кластер печивает доступ к журналам событий Как с минимальным бюджетом эфсистемы OC Windows. Также мы рас- фективно построить отказоустойсмотрим провайдер работы с реест- чивый кластер и использовать его ром – StdRegProv и провайдер взаи- как платформу для критически важмодействия с Microsoft Active Directory. ных приложений на примере СУБД Кроме них будет полезно обсудить Oracle 9i.
Уважаемые читатели! Спешите оформить подписку на второе полугодие 2006 года! Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
Доставка почтой в любую точку России.
96